| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Reactor, Eigenschaften von kopierten Objekten (967 mal gelesen)
|
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: 20. Mrz. 2007 12:15 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich bin gerade mal wieder mit Reactoren am ausprobieren, ich habe mir von Holger Brischke ein paar Zeilen aus dem Forum kopiert und die folgendermaßen geändert: Code:
;;;Reactor;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (if (not *VLR:CHECK_COMMAND*) (setq *VLR:CHECK_COMMAND* (VLR-Command-Reactor (vla-get-ActiveDocument (vlax-get-acad-object)) '((:VLR-commandWillStart . R:CHECK_COMMAND_START) (:VLR-commandEnded . R:CHECK_COMMAND_END) (:VLR-commandCancelled . R:CHECK_COMMAND_CANCEL))))) ;;;Start;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun R:CHECK_COMMAND_START (A B /) (if (wcmatch (strcase (car B)) "*COPY") (setq JB:R:LAST_OBJ (entlast))))
;;;End;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun R:CHECK_COMMAND_END (A B / AWS N) (if (and (wcmatch (strcase (car B)) "*COPY")) (progn (setq aws (ssadd)) (while (setq JB:R:LAST_OBJ (entnext)) (if (not (member (cdr (assoc 0 (entget JB:R:LAST_OBJ))) '("VERTEX" "SEQEND" "ATTRIB"))) (ssadd JB:R:LAST_OBJ aws))) (if (> (sslength aws) 0) (progn (setq n 0) (repeat (sslength aws) (entmod (cons 8 "NEUER_LAYER") (assoc 8 (entget (ssname aws n))) (entget (ssname aws n))) (setq n (+ n 1))))))))
;;Cancel;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun R:CHECK_COMMAND_CANCEL (A B / ) (if (wcmatch (strcase (car B)) "*COPY") (alert "Abbrechen Kopieren")))
Erreichen möchte ich, das beim kopieren alle neuen Objekte z.B. auf den Layer "NEUER_LAYER" umgelegt werden. Das soll in der Funktion R:CHECK_COMMAND_END erledigt werden. Ich habe mir vorher das letzte Objekt global in der Variablen JB:R:LAST_OBJ gespeichert, und wollte dann über ENTNEXT alle neuen Objekte in einen Auswahlsatz packen. Dann mußte ich aber feststellen, das der Kopieren-Befehl noch nicht ganz abgeschlossen war, denn mit ENTNEXT bekomme ich nur eine BLOCK mit einer durch AutoCAD festgelegten Benennung, der die neuen Objekte enthält. Habe ich eine Möglichkeit, an die neuen Objekte ranzukommen???
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 667 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 20. Mrz. 2007 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
|
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: 20. Mrz. 2007 13:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Georg, vielleicht ist das wirklich einfacher, wenn ich mit den Reactoren nicht weiterkomme, werde ich es so machen. Apropos Reactoren, ein Versuch habe ich noch gemacht, bei dem ich aber auch kläglich gescheitert bin: Code:
;;;Reactor;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (setq *VLR:CHECK_OBJECT* (VLR-Object-Reactor (list(vlax-ename->vla-object(car(entsel)))) "TEST-Objekt-Reactor" '((:vlr-copied . R:JB:neuer_layer) ))) ;;;vlr-copied;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun R:JB:neuer_layer (A B C / ) (if (=(type (car C))'ENAME) (entmod (subst(cons 8 "NEUER_LAYER")(assoc 8 (entget C))(entget C)))))
Dabei enthält die Variable C beim 2.ten Durchlauf den Entity-Namen des neuen Objektes (glaube ich), dieses Objekt ist aber ungültig, weiß da noch einer weiter???
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
benwisch Mitglied Bautechniker, CAD-Konstrukteur
Beiträge: 375 Registriert: 01.02.2001
|
erstellt am: 21. Mrz. 2007 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
Moin Jörn, Zitat: Erreichen möchte ich, das beim kopieren alle neuen Objekte z.B. auf den Layer "NEUER_LAYER" umgelegt werden.
[edit] wenn ich dein Anliegen richtig verstanden habe... Nö, nicht richtig gelesen... sorry, war gedanklich beim erzeugen und nicht beim kopieren [edit][Diese Nachricht wurde von benwisch am 21. Mrz. 2007 editiert.] 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: 21. Mrz. 2007 12:02 <-- editieren / zitieren --> Unities abgeben:
Hallo Benwisch, das mit der Eigenschaft "Layer" habe ich nur als Beispiel genommen, weil ich ungeübt im Umgang mit Reactoren bin und daher nur eine einfache Änderung vornehmen wollte. Letzendlich möchte ich, wenn ein Objekt kopiert wird, und dieses XDaten von einem meiner Programme enthält, das die XDaten entfernt werden Und dafür brauche ich den Objektnamen und muß mit entmod drauf zugreifen können. Ich werde aber wohl, wie Georg es geschrieben hat, den copy-Befehl neudefinieren. ------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 22. Mrz. 2007 11:39 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
Hi Jörn, wie du schon geschrieben hast, speicherst du hier das letzte Objekt ab:
Code:
;;;Start;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun R:CHECK_COMMAND_START (A B /) (if (wcmatch (strcase (car B)) "*COPY") (setq JB:R:LAST_OBJ (entlast)))) ;;;End;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Aber hier greifst du gar nicht auf dein gespeichertes Objekt zu, bzw. holst dir das nächste:
Code:
(defun R:CHECK_COMMAND_END (A B / AWS N) (if (and (wcmatch (strcase (car B)) "*COPY")) (progn (setq aws (ssadd)) (while (setq JB:R:LAST_OBJ (entnext)) (if (not (member (cdr (assoc 0 (entget JB:R:LAST_OBJ))) '("VERTEX" "SEQEND" "ATTRIB"))) ... ... ...
Kleine Änderung deiner while-Zeile und große Wirkung:
Code:
(while (setq JB:R:LAST_OBJ (entnext JB:R:LAST_OBJ)) ;;; (while (setq JB:R:LAST_OBJ (entnext))
So würd's jetzt gehen, wenn jetzt dein (entmod ...) nicht unvollständig wäre. Gruß CADchup
------------------ CADmaro.de 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: 22. Mrz. 2007 12:38 <-- editieren / zitieren --> Unities abgeben:
|
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: 28. Mrz. 2007 14:09 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, ich habe noch ein Verständnisproblem: wenn ich das obige Beispiel nehme, das funktioniert jetzt, wenn ich den Code in der aktuellen Zeichnung lade, dann werden die Layer aller neuen Objekte aus einer Kopie geändert. Kann man diesen Reactor jetzt in einer Zeichnung speichern?? Wenn ich sonst die Zeichnung wieder öffne muß ich den Reactorcode ja wieder laden. In der Acaddoc.lsp wollte ich das nicht reinbringen, da der Reactor nur für Zeichungen mit einem bestimmten Thema bestimmt sind. Bin wie immer dankbar für Tips und Anregungen
------------------ viele Grüße Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 28. Mrz. 2007 14:19 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
|
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 28. Mrz. 2007 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für joern bosse
|
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: 28. Mrz. 2007 14:46 <-- editieren / zitieren --> Unities abgeben:
|