| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Layer polygonaler AF setzen mit vla (1229 / mal gelesen)
|
archi.archi Mitglied
Beiträge: 77 Registriert: 08.10.2010 Windows 10 AutoCAD 2023 Revit 2023
|
erstellt am: 23. Mrz. 2018 13:34 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, zum Setzen der Layer aller Ansichtsfenster (werden oft falsch auf irgendeinem aktuellen Layer erzeugt) mit vla wird verwendet: Code:
(defun c:t( / BLOCK ) ;(defun c:AF-auf-Layer( / BLOCK ) ;alle AF auf AFLayer setzen (setq AFLayer "0") (vl-load-com) (vlax-for LAYOUT (vla-get-layouts(vla-get-activedocument(vlax-get-acad-object))) (vlax-for ITEM (setq BLOCK (vla-get-Block LAYOUT)) (if(=(strcase(vla-get-objectname ITEM))"ACDBVIEWPORT") (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Layer (list ITEM AFLayer) ) ) ) ) ) (vla-regen(vla-get-activedocument (vlax-get-acad-object)) acAllViewports) )
Der Layer aller AF wird wie gewünscht auf "0" gesetzt. Orthogonale AF ändern den Layer und das Aussehen (Farbe). Polygonale AF ändern den Layer aber nicht ihr Aussehen. Nicht nachvollziehbar: Im Eigenschaftsfenster wird für beide Typen der geänderte Layer angezeigt. Im Layereigenschaften-Manager wird für polygonale AF kein Layer angezeigt (s. Anlagen). Ist das normal? Habe ich irgend etwas übersehen bzw. erforderliche Einstellungen nicht gesetzt? Gruß Archi
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 23. Mrz. 2018 13:53 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Das liegt daran: Eigentlich hast du ZWEI Objekte, ein rechteckiges Ansichtsfenster und ein weiteres Objekt mit dem du das Ansichtsfenster "zuschneidest", zB. eine Polylinie. Adesk versucht die Internas vor dem Anwender zu verstecken und zeigt dir nur das Ansichtsfenster, intern sind aber beide Objekte markiert und der LayerDropDown zeigt NICHTS an (den im Moment hast du zwei Objekte mit unterschiedlichen Layern markiert). Das verstecken klappt also noch nicht soo gut. Und jetzt kommst du noch mit Programmierung, dafür muß man dann auch wissen was hinter den Kulissen los ist. Du solltest also prüfen ob das AF zugeschnitten ist und wenn ja, auch das zugehörige Objekt auf den Layer legen. PS: Ich empfehle immer einen Extra-Layer für AF (und Zuschneideobjekt), so kommt niemand auf die Idee (deswegen) den Layer0 auszuschalten - was wieder Probleme bringt.
Falls du das AF mit "falscher Farbe" siehst, dann wende doch mal diesen Ausdruck an und du wirst sehen: Es ist kein AF was du siehst.. (entget(car(entsel))) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 77 Registriert: 08.10.2010 Windows 10 AutoCAD 2023 Revit 2023
|
erstellt am: 23. Mrz. 2018 14:30 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, ein Extra-Layer für Af wäre gut, wird aber von unserem Aufsatz nicht unterstützt, daher Layer "0". Die Sache mit der Zuschneideumgrenzung, da war ja noch was! Im Nicht-Programmiermodus ist das für mich optisch immer sofort nachvollziehbar! Ist die Ermittlung des Zuschneideobjektes aufwändig, oder ist vielleicht eine auswertbare Info in den AF-Eigenschaften hinterlegt? Gruß Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 23. Mrz. 2018 16:04 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Schau dir die Objektdaten eines normalen und eines zugeschnittenen AF an, (entget (car (entsel)) '("*")) Und nicht das Polygon klicken, sondern das AF. Habe aktuell keine Zeit zielgerichteter darauf einzugehen, oder aus vla Sicht. Hoffe du kommst dennoch weiter, ansonsten noch einmal nachfragen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1734 Registriert: 11.10.2004 Window 10 ACAD 2021 CIVIL 2021 BricsCAD V14-V22 Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz 16.0GB RAM NVIDIA GeForce GTX 1050<P>
|
erstellt am: 23. Mrz. 2018 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
Hallo Archi, wenn Du die Entget-Liste vom Ansichtsfenster-Objekt nimmst erhälst Du im Gruppendcode 340 die Polylinie. könnte dann ungefähr so aussehen (ungetestet):
Code:
(if(=(strcase(vla-get-objectname ITEM))"ACDBVIEWPORT") (progn (if (setq obj(cdr(assoc 340 (entget(vlax-vla-object->ename ITEM))))) (vla-put-layer (vlax-ename->vla-object obj) AFLayer)) (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Layer (list ITEM AFLayer) ) ) ) )
------------------ viele Grüße Jörn http://www.bosse-engineering.com Attribute freistellen Youtube Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archi.archi Mitglied
Beiträge: 77 Registriert: 08.10.2010 Windows 10 AutoCAD 2023 Revit 2023
|
erstellt am: 26. Mrz. 2018 13:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Jörn, GC 340 hatte ich schon identifiziert. Danke für die Lösung - es funktioniert jetzt mit vla. Code:
(defun c:AF-Layer( / BLOCK ) ;alle AF auf AFLayer setzen (setq AFLayer "0") (vl-load-com) (vlax-for LAYOUT (vla-get-layouts(vla-get-activedocument(vlax-get-acad-object))) (vlax-for ITEM (setq BLOCK (vla-get-Block LAYOUT)) (if(=(strcase(vla-get-objectname ITEM))"ACDBVIEWPORT") (progn (if (setq obj(cdr(assoc 340 (entget(vlax-vla-object->ename ITEM))))) (vla-put-layer (vlax-ename->vla-object obj) AFLayer) ) ;if (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-Layer (list ITEM AFLayer) ) ) ) ;progn ) ;if ) ) (vla-regen(vla-get-activedocument (vlax-get-acad-object)) acAllViewports) ) ;AF-Layer
Zwischenzeitlich habe ich es ohne vla versucht:
Code:
(defun c:AF-Layer (/ ss) ;alle AF auf AFLayer setzen (setq AFLayer "0") (if (setq ss (ssget "_X" '((0 . "VIEWPORT") (-4 . "<NOT") (69 . 1) (-4 . "NOT>") ) ) ) (progn (setq i 0) (repeat (sslength ss) (setq edaten (entget (ssname ss i))) ;((0 . VIEWPORT) (setq edaten (subst (cons 8 AFLayer) (assoc 8 edaten) edaten)) ;Layer für Ansichtsfenster setzen (entmod edaten) ;funktioniert nicht bei polygonalem AF? ;polygonales AF? ;(340 . <Objektname: 23ee7a11b40>) ;Polylinie des Ansichtsfensters (setq poly (cdr (assoc 340 edaten))) (setq edaten (entget poly)) ;((0 . LWPOLYLINE) (if poly (progn (setq edaten (subst (cons 8 AFLayer) (assoc 8 edaten) edaten)) ;Layer für Polylinie setzen (entmod edaten) ) ;progn ) ;if polygonales AF (setq i (+ i 1)) ) ;repeat ) ;progn ) ;if (princ) ) ;AF-Layer
Die Polylinie wird auf Layer 0 gesetzt, das Ansichtsfenster aber nicht. Irgendwie scheint entmode für das AF nicht zu funktionieren. Gibt es dafür eine Ursache? Gruß Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Mrz. 2018 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für archi.archi
|
| Duales Studium Elektrotechnik ab Oktober 2024 Schwerpunkt: Elektrische Energietechnik | Als führendes europäisches Beratungs-, Planungs- und Projektmanagementunternehmen bietet Drees & Sommer Lösungen für erfolgreiche Gebäude, renditestarke Portfolios, leistungsfähige Infrastruktur und lebenswerte Städte. In interdisziplinären Teams unterstützen unsere über 5.100 Mitarbeiterinnen und Mitarbeiter an 59 internationalen Standorten Auftraggeber unterschiedlichster Branchen. Bei uns gestalten Sie Ihren individuellen Karriereweg aktiv mit.... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
archi.archi Mitglied
Beiträge: 77 Registriert: 08.10.2010 Windows 10 AutoCAD 2023 Revit 2023
|
erstellt am: 26. Mrz. 2018 16:23 <-- editieren / zitieren --> Unities abgeben:
Hallo cadffm, danke für den Hinweis - die Fehler macht eigentlich immer der der Mensch vor dem Computer! Mit vla ist es gelöst, also vorerst keine weiteren Probleme. Gruß bis zum nächsten Script!ß Archi Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |