| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: SelectionSet mit GC 410 (1438 mal gelesen)
|
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 05. Okt. 2006 10:25 <-- editieren / zitieren --> Unities abgeben:
Hallo, mit oSelectionSet.Select acSelectionSetAll , , varFilterType , varFilterValue kann ich die Auswahl der Objekte mit Hilfe von Filtern einschränken. Das funktioniert gut bei Layern: varFilterType[0] = 8 varFilterValue[0] = "MeinLayer" Nun will ich alle Objekte eines Layers des Modellbereiches haben. Dazu müsste man die Auswahl auf den Modellbereich einschränken. Leider füllt er den Auwahlsatz mit den Angaben varFilterType[0] = 410 varFilterValue[0] = "Model" nicht. In LISP würde das gehen mit (ssget "X" (list (cons 410 "Model"))). Ich will nicht iterativ den ModelSpace durchlaufen. Hat jemand eine Idee? VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 05. Okt. 2006 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
Hallo Fred, Du musst als Filter die 67 anstatt der 410 nehmen, damit kannst du unterscheiden, ob es ein Layout oder das Modell sein soll. Hier als Beispiel: Sub Ch4_Filtertest() Dim sset As AcadSelectionSet Dim FilterType(1) As Integer Dim FilterData(1) As Variant On Error Resume Next ThisDrawing.SelectionSets.Item("SS2").Delete Set sset = ThisDrawing.SelectionSets.Add("SS2") FilterType(0) = 8 'Filter nach Layer FilterData(0) = "0" 'Layername FilterType(1) = 67 'Filter ob Modell oder Layout FilterData(1) = 0 'Modell (0) / Layout (1) sset.Select acSelectionSetAll, , , FilterType, FilterData End Sub Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 05. Okt. 2006 13:31 <-- editieren / zitieren --> Unities abgeben:
Hallo Carsten, vielen Dank für den Tipp. Funktioniert super. Vorsichtige Frage: Kann man beim Suchen innerhalb von Layouts auch die Objekte eines bestimmten Layouts filtern? (ssget "X" (list (cons 410 (getvar "CTAB")))) Vielen Dank nochmals. VG, Fred Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 05. Okt. 2006 18:33 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
Hallo Fred, Du kannst leider keinen Filter für den Namen in den Auswahlsatz einbauen, da es ein seit Versionen bekannter Bug in der VBA-Schnittstelle ist. Du kannst aber von einem Element erfahren, auf welchem Layout es liegt: Public Sub test123() Dim Object As Object Dim promt As String Dim Pickedpoint As Variant On Local Error Resume Next promt = "Objekt wählen:" Utility.GetEntity Object, Pickedpoint, promt If TypeName(Object) <> "Nothing" Then MsgBox ThisDrawing.ObjectIdToObject(Object.OwnerID).Layout.Name End If End Sub Ich würde daher im entsprechenden Layout die Elemente nach deinen Anforderungen durchsuchen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004
|
erstellt am: 05. Okt. 2006 18:57 <-- editieren / zitieren --> Unities abgeben:
|
pistolpete1 Mitglied Student
Beiträge: 102 Registriert: 06.01.2007
|
erstellt am: 10. Aug. 2007 20:58 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
Hallo schlaues Forum, ich habe auch ein Problem mit meinen Filtern. Wenn ich mittels SelectionSet alle Blöcke die "60_40" heißen filtere - kein Problem. Wenn ich aber alle will, die entweder "60_40" oder "60_60" heißen funktioniert es nicht. Hier ist das CodeFragment, bitte um Hilfe: Dim blockset As AcadSelectionSet Dim FType(1) As Integer, FData(1) FType(0) = 2: FData(0) = "60_40" FType(1) = 2: FData(1) = "60_60" Set blockset = ThisDrawing.SelectionSets.Add("BLOCKSET13") blockset.Select mode:=acSelectionSetAll, Filtertype:=FType, filterdata:=FData PS: jedes mal wenn das macro zwischen blockset.Select und blockset.delete abstürzt muss ich es umbenennen, gibts da irgendweilche tricks (... außer die "On error"- sache? Gruß Peter
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1357 Registriert: 24.07.2002 AutoCAD ACA 2018 Solidworks 2016 Sp5 Enterprise PDM 2016 Sp5 Pascam Woodworks Visual Studio 2017 Pro Windows 10 64Bit Dell T3620 Intel Core i7-7700K 16 GB Arbeitsspeicher 2x Samsung S24C650 Dell M4800
|
erstellt am: 10. Aug. 2007 21:25 <-- editieren / zitieren --> Unities abgeben: Nur für fred_tomke
Hi Peter, Überprüfe vor erstellung des Selectionsets, ob der vorhanden ist und leere ihn dann bzw. erstelle diesen, wenn nicht vorhanden. Zu deinem Filter: Schau dir mal in der VBA-Hilfe unter filter lists for selection sets, logical grouping of filter tests die Beispiele an. Ist zwar Lisp, aber das kannst du auch in der Art in VBA nutzen. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |