| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Selectionset ohne gefrorene Layer ? (2212 mal gelesen)
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 11. Dez. 2006 20:34 <-- editieren / zitieren --> Unities abgeben:
hallo zusammen, habe gerade alle möglichen Einträge durchsucht aber mein Problem nicht gefunden, vielleicht kann mir jemand bei folgendem Problem helfen: Ich möchte einen Filter setzen beim mode acSelectionSetAll, der mir nur die sichtbaren Layer auswählt. Alle Versuche mit Gruppencode 70 waren bisher vergebens. Ich kapier das Bitsetzen einfach nicht. Gibt's da 'ne Hilfe??? Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9803 Registriert: 01.12.2003 AutoCAD 2.5 - 2022, LDD, MDT, RD, ADT, Civil Inventor AIP 4-11, 2008 -2022 Win 10
|
erstellt am: 11. Dez. 2006 22:46 <-- editieren / zitieren --> Unities abgeben: Nur für KlaK
a) Soll eine Liste der eingeschalteten (und getrauten) Layer erzeugt werden, oder b) sollen alle Objekte auf eingeschalteten (und getauten) Layern gewählt werden? wenn b) Was soll mit den Blockreferenzen passieren, deren Einfügepunkte auf ausgeschalteten Layern liegen, deren Blockelemente aber auf eingeschalteten Layern definiert sind und somit in der Zeichnung sichtbar sind? GC 70 der Layer kann man bei der direkten Objektwahl nicht verwenden, da die Objekte nur ihren Layer, nicht aber die erweiterten Einstellungen des Layers kennen. Hier mal auf die Schnelle mit meinen (rudimentären) VBA Kenntnissen zusammengeklappert:
Code: Function visibleLayers() As String ' Erzeugung einer Layerliste der eingeschalteten Layer ' in der Form ",Layer 1,Layer 2,Layer 3"For i = 0 To (ThisDrawing.Layers.Count - 1) If ThisDrawing.Layers.Item(i).LayerOn And _ Not ThisDrawing.Layers.Item(i).Freeze Then visibleLayers = visibleLayers + "," + ThisDrawing.Layers.Item(i).Name End If Next i ' MsgBox visibleLayers End Function Sub Filtertest()
Dim sset As AcadSelectionSet Dim FilterType(1) As Integer Dim FilterData(1) As Variant On Error Resume Next ThisDrawing.SelectionSets.Item("SS3").Delete Set sset = ThisDrawing.SelectionSets.Add("SS3") FilterType(0) = 8 'Filter nach Layer FilterData(0) = visibleLayers() 'Layername FilterType(1) = 67 'Filter ob Modell oder Layout FilterData(1) = 0 'Modell (0) / Layout (1) sset.Select acSelectionSetAll, , , FilterType, FilterData End Sub
------------------ Mit freundlichem Gruß Udo Hübner Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 12. Dez. 2006 08:51 <-- editieren / zitieren --> Unities abgeben:
Whow, das ging ja schnell! Meine VBAutoCAD -Kenntnisse sind noch rudimentärer. Hatte schon die Vermutung dass es wohl nur über eine Suchroutine bei den Layern geht. Werde den Code gleich mal ausprobieren. Danke für den Hinweis auf die Blockreferenzen, sind zwar für die jetzige Aktion ( Umwandeln von Polylinien auf 3D Polylinien mit Ausgleich der Bögen und übernahme von Höhen aus Texten an manchen Endpunkten) nicht relevant, aber vielleicht bei späteren Projekten. Grüße, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 12. Dez. 2006 10:34 <-- editieren / zitieren --> Unities abgeben: Nur für KlaK
Zitat: Original erstellt von KlaK: Umwandeln von Polylinien auf 3D Polylinien mit Ausgleich der Bögen..
In dem Zusammenhang hilft dir vielleicht das Teil im Anhang .. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 12. Dez. 2006 14:02 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, was kann ich mit dem Teil im Anhang anfangen? Bzw. was ist das?? Scheint verschlüsselt zu sein (Aufruf mit Editor), wird im VLisp Editor ebenfalls nicht angezeigt. Aufrufen von pl-convert geht, wenn vlx geladen ist. Ich verstehe dich ja, man muß das Rad nicht zweimal erfinden, aber wir brauchen eine Routine die in einem Zug ca. 500000 Bruchkanten mit Höhen versieht, deshalb die Neuprogrammierung in VBA. Das Tool ist nett - wenn auch langsamer als VB - und enthält leifer keine Abfrage ob Original behalten / gelöscht werden soll. Trotzdem Danke - gut wenn man solche Tools zur Verfügung hat. Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 12. Dez. 2006 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für KlaK
na dann viel Spaß.. "Original behalten" wär kein Problem .. und mit dem Tempo .. ich greif genau wie VB auf die ActivX-Schnittstelle zu.. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Plateia, Canalis Visual Basic
|
erstellt am: 12. Dez. 2006 22:33 <-- editieren / zitieren --> Unities abgeben:
Komisch, kann ich mir auch nicht erklären. Da der Programmcode nicht sichtbar zu machen ist kann ich nicht nachvollziehen wo die Unterschiede in der Programmierung sind. Beim Testen der Routine habe ich nur festgestellt, dass nach der Anwahl eines Objektes und der Eingabe von 0.15 als Sekantenhöhe eine ziemliche Zeit vergeht bevor das Element neu gezeichnet wird. Die gleiche Routine in VB - zu Testzwecken mit tippen eines Objektes erzeugt (getentity) - hat bei dem gleichem Element keine Zeitverzögerung. Die jetzige endgültige mit Erzeugen eines SelectionSets braucht schon eine ganze Weile. Bei der Menge an Elementen aber kein Wunder. NAja, Hauptsache Programm läuft und irgendwann werde ich auch mal wissen wie das mit den Filtern setzen funktioniert. Nochmals Danke für die prompte Hilfe, Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |