| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Sammelbox measure blocks (639 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Okt. 2012 08:25 <-- editieren / zitieren --> Unities abgeben:
Ich erstelle Blöcke entlang von LinienObjekten mit dem Befehl measure und möchte gern alle erzeugten Blöcke in eine Liste sammeln, um sie später noch weiter verarbeiten zu können (Drehung der Blöcke). Wie kann ich das Objekt eines mit command erstellten Blocks zu einer Liste hinzuführen? ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Okt. 2012 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Okt. 2012 09:16 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Okt. 2012 10:30 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: ist mir neu, dass man mit entnext zum jeweiligen nächsten Block zugreifen kann
Das wäre mir auch neu ! Um ähnliche Fragestellung zu Kreisen und Layern zu vermeiden: Ein Blick in die kostenlose [ AutoLispReference ] von AutoDESK. Entnext gibt das nächste (oder erste) ENTITY zurück, bedeutet zum einen das nie ein BLOCK, aber neben Linien, Kreisen und anderen Entities - gerne auch mal eine Blockreferenz wiedergegeben wird. Einfach: Das nächste Entity in der Datenbank, egal ob Blockreferenz oder Punkt. Möchte man das gleiche für zB. Layer, also TABLEeinträge machen, müßte man TABLENEXT benutzen. Für DICTIONARYeinträge wie zB. wäre DICTNEXT zu nutzen. Alle drei Funktionen sind gut dokumentiert.
------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Okt. 2012 12:49 <-- editieren / zitieren --> Unities abgeben:
Sebastian, danke für deine Erläuterungen - werde ich bestimmt noch häufiger gebrauchen Thomas: Mir war das Ausmass deiner kostruktion gar nicht so bewusst, äusserst raffiniert wie die 2 while schleifen hier ineinandergreifen. Was mir jedoch unklar ist oder nicht richtig einleuchtet. Bei der ersten while-schleife ist ja noch kein Measure-objekt enthalten also nil Die Zweite while-schleife (nach command "measure") haut jetzt jedes Measure-objekt in die LISTE Mir stellt sich die Frage wie weiss die 2.Schleife von der ersten oder anders herum, wie weiss die 2. schleife das sie vom erst erstellten Measure-Objekt alles in die LISTE haut. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Okt. 2012 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
ok .... (setq LAST(entlast)) .. zuerst wird das letze Objekt der Datenbank ermittelt .. kann man ja einfach mal testen, indem man eine Linie zeichnet und (entget(entlast)) aufruft .... (entnext LAST) liefert hier nil .... ist das letzte Objekt aber eine Blockreferenz mit Attributen , liefert (entlast) die Blockreferenz ... (entnext LAST) aber noch die Attribute (kann man auch mal testen)..... deshalb zur Sicherheit noch die erste while-Schleife , um garantiert das Letzte Objekt der Datenbank als Startobjekt für die 2. while Schleife zum Einsammeln aller "zwischendurch" erzeugten Objekte zu haben .. alles klar ? ok .. LAST ist vielleicht etwas ungünstig als Variablenname ... da dadurch die funktion last "überschrieben" wird ... also selbstständig ändern ------------------ Also ich finde Unities gut ... --------------------------------------- - 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 |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 24. Okt. 2012 15:40 <-- editieren / zitieren --> Unities abgeben:
Ich würde ja gern noch mehr Punkte vergeben - danke für deine Hilfe Thomas! Hier mal das Resultat Code:
;; idea and program from cadplayer@gmail.com (defun c:RMes ( / ss ; Selectionset of Polylines blkname ; block name that should run measure meslen ; length between blocks pllen ; value of Polylines ent ; Entity of Polyline Mobj ; Measure object LISTE ; All Measure objects in a list v-liste; converted LISTE to vl-object ) (princ "\Select Lines to be measured...") (setq Mobj (entlast)) (while (entnext Mobj) (setq Mobj (entnext Mobj)) ) (setq ss (ssget (list (cons 0 "LINE,POLYLINE,LWPOLYLINE")))) (setq blkname (getstring "\nType the block name:")) (setq meslen (getreal "\nType the measure length:")) (command "._Zoom" "e") (if ss (progn (setq pllen (sslength ss)) (setq I 0) (repeat pllen (setq ent (ssname ss I)) (command "._Measure" ent "b" blkname "" meslen) (setq I (1+ I)) ) ) ) (while (setq Mobj (entnext Mobj)) (setq LISTE (cons Mobj LISTE)) ) (if LISTE (progn (while (setq vl_liste (mapcar '(lambda (x) (vlax-ename->vla-object x)) LISTE)) ;;; (setq vl-en (vlax-ename->vla-object (car LISTE))) ;;; (vlax-put vl-en 'Rotation (- (vlax-get vl-en 'Rotation) (/ pi 2.0))) (foreach x vl_liste (vlax-put x 'Rotation (- (vlax-get x 'Rotation) (/ pi 2.0)) ) ) (initget "Enter Escape") (setq aw (getkword "\nContinue rotate <Enter/Escape>: \n")) ) ) ) ) (princ "\nType \"RMes\" to apply Repeat Command on Multiple Lines.") (princ)
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Okt. 2012 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 24. Okt. 2012 15:48 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|