| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: xref (1791 mal gelesen)
|
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 03. Mrz. 2006 21:38 <-- editieren / zitieren --> Unities abgeben:
|
WolfgangGutke Mitglied Konstrukteur
Beiträge: 109 Registriert: 28.09.2004 AutoCAD 2002 AutoCAD 2006 ObjectDCL 2.02
|
erstellt am: 04. Mrz. 2006 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für fca_mi2
Hallo Frank, dies Problem hatte ich auch. Folgende Lösung siehe Anhang. P.S.: Ich verwende in diesem Prog die Zusatzapplikation ObjectDCL. Must das Prog also etwas umbauen. VG Wolfgang ------------------ LISP = Lots of Insane Stupid Parantheses Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 04. Mrz. 2006 12:05 <-- editieren / zitieren --> Unities abgeben:
|
WolfgangGutke Mitglied Konstrukteur
Beiträge: 109 Registriert: 28.09.2004 AutoCAD 2002 AutoCAD 2006 ObjectDCL 2.02
|
erstellt am: 04. Mrz. 2006 12:14 <-- editieren / zitieren --> Unities abgeben: Nur für fca_mi2
Tja, gute Frage ;-) Muss ich erst selber gucken! VG Wolfgang P.S.: Versuche doch mal mit (entget (car (entsel "\nxRef wählen:"))) dir alle GC anzuschauen. Danach die Zuschnittgröße ändern und mit (entget ...) erneut abfragen. Dann findest du bestimmt irgendwelche Unterschiede (GC 410?). ------------------ LISP = Lots of Insane Stupid Parantheses Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 04. Mrz. 2006 13:49 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 06. Mrz. 2006 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für fca_mi2
Hallo Frank, wie aus Wolfgangs Programm ersichtlich ist, werden die Umgrenzungen in dictionarys abgelegt. Da kommst Du am besten mit dictsearch ran. Für Deinen Fall mal eingebunden: Code: (defun get-clips (block / eig dict clips points) (setq eig (entget block));Blockeigenschaften (if (and (setq dict (cdr (assoc 360 eig)));Dictionary existiert -> Umgrenzung ist oder war vorhanden (setq clips (dictsearch (cdr (assoc -1 (dictsearch dict "ACAD_FILTER"))) "SPATIAL"));aktuelle Umgrenzung vorhanden );Umgrenzung existiert (setq points (mapcar 'cdr (multi-assoc 10 clips))) ) points ) (defun multi-assoc (key liste / return) (if (and liste (setq return (assoc key liste))) (cons return (multi-assoc key (cdr (member return liste)))) ) )
Grüsse, Henning(PS: habe im Moment keine Zeit für lange Erläuterungen, aber such doch mal nach dictionary...) ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 06. Mrz. 2006 12:59 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 06. Mrz. 2006 13:14 <-- editieren / zitieren --> Unities abgeben: Nur für fca_mi2
Hallo Frank, die Koordinaten sind im OKS(als Objekt-Koordinaten) abgespeichert. Du musst sie noch mit trans in WKS/BKS umwandeln. Ach ja, und noch was: gibt es nur 2 Punkte, ist es ein rechteckiger Zuschneidebereich. Grüsse, Henning ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 06. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 06. Mrz. 2006 17:02 <-- editieren / zitieren --> Unities abgeben:
|
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 06. Mrz. 2006 20:01 <-- editieren / zitieren --> Unities abgeben:
|
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 07. Mrz. 2006 10:22 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 07. Mrz. 2006 14:15 <-- editieren / zitieren --> Unities abgeben: Nur für fca_mi2
Hallo Frank, hab's jetzt auch mal probiert: Code: (defun c:clip-info ( / bl pt) (setq bl (car (entsel))) (setq pt (get-clips bl)) (mapcar '(lambda (x) (trans x bl 0)) pt) )
Du hast tatsächlich recht, aber wie jetzt weiter weiss ich auch nicht spontan. (Das Problem tritt aber nur bei kopierten xrefs auf.) In der AutoCAD-Hilfe steht halt nur: Definitionspunkt für Zuschneide-Umgrenzung (im OKS; stets größer oder gleich 2), basierend auf einem XRef-Skalierfaktor von 1. Darauf hab' ich mich verlassen... Wenn Du eine Lösung hast, melde Dich. Grüsse, Henning------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fca_mi2 Mitglied Bauingenieur
Beiträge: 508 Registriert: 10.01.2003 ACAD2018
|
erstellt am: 07. Mrz. 2006 14:39 <-- editieren / zitieren --> Unities abgeben:
jo, ich hab's irgendwie hingebogen: ;(get-clips (car (entsel))) (defun get-clips (block / eig dict clips points ex ey dx dy) (setq eig (entget block));Blockeigenschaften (if (and (setq dict (cdr (assoc 360 eig)));Dictionary existiert -> Umgrenzung ist oder war vorhanden (setq clips (dictsearch (cdr (assoc -1 (dictsearch dict "ACAD_FILTER"))) "SPATIAL"));aktuelle Umgrenzung vorhanden );Umgrenzung existiert (setq points (mapcar 'cdr (multi-assoc 10 clips))) ) (setq ex (+ (nth 0 (cdr (assoc 10 eig))) (nth 0 (nth 0 points)) (nth 3 (mapcar 'cdr (multi-assoc 40 clips))))) (setq ey (+ (nth 1 (cdr (assoc 10 eig))) (nth 1 (nth 0 points)) (nth 7 (mapcar 'cdr (multi-assoc 40 clips))))) (setq dx (- (nth 0 (nth 1 points)) (nth 0 (nth 0 points)))) (setq dy (- (nth 1 (nth 1 points)) (nth 1 (nth 0 points)))) (princ "\n") (princ (list (list (list ex ey) (list (+ ex dx) (+ ey dy))) (list (list (+ (nth 0 (nth 0 points)) (nth 3 (mapcar 'cdr (multi-assoc 40 clips)))) (+ (nth 1 (nth 0 points)) (nth 7 (mapcar 'cdr (multi-assoc 40 clips))))) (list dx dy))) ) ) (defun multi-assoc (key liste / return) (if (and liste (setq return (assoc key liste))) (cons return (multi-assoc key (cdr (member return liste)))) ) )
Teamwork ist alles !
------------------ MfG Frank Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 07. Mrz. 2006 22:15 <-- editieren / zitieren --> Unities abgeben: Nur für fca_mi2
Hi Frank, Habe mir Deine Funktion mal angesehen. Wesentlich ist da ja, dass Du zu den einzelnen Koordinaten noch die entsprechenden Koordinaten den jeweiligen Basispunkt des Blockes hinzuzählst. Guter Ansatz, entspricht ja der Basispunkt dem null-Punkt des OKS des Blockes, und wenn schon das (trans x bl 0) nicht geht , muss man's halt von Hand machen... (Ich glaube das mit dem nth 3 und nth 7 kannst Du Dir sparen, weil da - bei mir zumindest - immer 0 steht). Daher könnte man die Funktion noch etwas eindampfen: Code: (defun get-clips (block / eig dict clips points) ... (setq points (mapcar '(lambda (x) (mapcar '+ (cdr (assoc 10 eig)) x)) (mapcar 'cdr (multi-assoc 10 clips)))) ) )
Tja, aber was ist mit gedrehten Blöcken, mit (unterschiedlich) skalierten... Na, dann hab' ich Deinen Ansatz halt weitergestrickt: Nullpunkt und Drehung über ein "BKS Objekt", Skalierung einzeln auslesen und auf die ermittelten Clipkoordinaten anwenden. Und Fertig ist die Funktion: Code: (defun get-clips (block / eig dict clips points) (setq eig (entget block));Blockeigenschaften (if (and (setq dict (cdr (assoc 360 eig)));Dictionary existiert -> Umgrenzung ist oder war vorhanden (setq clips (dictsearch (cdr (assoc -1 (dictsearch dict "ACAD_FILTER"))) "SPATIAL"));aktuelle Umgrenzung vorhanden );Umgrenzung existiert ; (print clips) (setq points (mapcar 'cdr (multi-assoc 10 clips))) ) (command "_ucs" "_ob" block) (setq points (mapcar '(lambda (x) (mapcar '* x (list (cdr (assoc 41 eig)) (cdr (assoc 42 eig)) (cdr (assoc 43 eig))))) points)) (setq points (mapcar '(lambda (x) (trans x 1 0)) points)) (command "_ucs" "_p") (setq points (mapcar '(lambda (x) (trans x 0 1)) points)) )
Bleibt eigentlich nur die Frage, wieso Autocad das (trans x bl 0) nicht richtig macht Grüsse, Henning ------------------ VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |