| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Verschachtelte Elemente schieben (1515 mal gelesen)
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 09. Jun. 2009 15:35 <-- editieren / zitieren --> Unities abgeben:
Hallo Bei den Express-Tools gibts ja den Befehl "Verschachtelte Elemente kopieren" (ncopy). Hatte jemand schon mal die Begegnung mit "Verschachtelte Elemente schieben" oder schon mal in die Richtung gedacht (Lösungsansätze)? Denke zwar nicht, dass sowas mit "vertretbaren" Aufwand zu machen wäre, aber vielleicht bin ich auch nur blind ... Hintergrund: Eine neuere Zeichnung in eine ältere einarbeiten. Die neue enthält aber nur Teilinformationen - also nix nix mit ausstanzen und einfügen. ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 09. Jun. 2009 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
ja hatte ich .. z.B. bei dem Tool Blockmovebasepoint .. geht über die entsprechende vla-move Methode ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 10. Jun. 2009 08:13 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Jun. 2009 08:30 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 10. Jun. 2009 08:36 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 10. Jun. 2009 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
weils fast das gleiche wie mein vorheriger Post ist : (vl-load-com) (defun MOVE (OBJ VEKTOR) (if(and(setq OBJ(cond ((=(type OBJ)'VLA-OBJECT)OBJ) ((=(type OBJ)'ENAME)(vlax-ename->vla-object OBJ)) ) ) (=(type VEKTOR) 'LIST) (=(length VEKTOR) 3) (vl-every 'numberp VEKTOR) ) (progn (vla-move OBJ (vlax-3d-point '(0 0 0)) (vlax-3d-point VEKTOR)) (vla-update OBJ) (vla-Regen(vla-get-activedocument(vlax-get-acad-object))acAllViewports) ) ) ) (MOVE (car(nentsel"\nObjekt wählen:")) (mapcar '* '(-1.0 -1.0 -1.0) (mapcar '- (getpoint "\nAusgangspunkt wählen: ") (getpoint "\nEndpunkt wählen: ") ) ) ) ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 11. Jun. 2009 12:11 <-- editieren / zitieren --> Unities abgeben:
Nachdem ich mir die Funde von vla-move und Deinen Code, Thomas, zu Gemüte geführt habe, muss ich zu dem Schluß kommen, dass ich ich mein Ziel nicht gut genug beschrieben habe. Bei Jimmy Bergmarks http://www.jtbworld.com/lisp/axblock.htm konnte ich zwar sehen, wie man ein Objekt aus einem Block/Xref entfernt und zusammen mit trexblk.lsp aus den Express-Tools eine Krücke bauen, aber eben nur eine Krücke ... Ich würde also gerne das "neue File" (mit aktuellerem Inhalt) als Xref einfügen, kann dann bequem die Xref-Layer einfärben, Strichstärken ändern und somit den Inhalt klar erkennbar machen. Sodann die "überholten" Objekte löschen und das entsprechende "neue Objekt" aus dem Xref-Bereich in den Model-Bereich verschieben. Man könnte zwar über (nentsel) an die Entity-Liste kommen und dann je nach Typ (Linie, Polyline, Block, usw.) die Objekte neu erzeugen (der oben erwähnte Aufwand), aber vielleicht gibts ja eine Möglichkeit zum schieben? (oder kopieren, denn löschen kann ich ja jetzt) ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Jun. 2009 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Zitat: Original erstellt von Geos: und das entsprechende "neue Objekt" aus dem Xref-Bereich in den Model-Bereich verschieben.
na dann ist die Methode vla-copyobjects [--> Googlestichwort]genau das richtige für dich ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 11. Jun. 2009 15:35 <-- editieren / zitieren --> Unities abgeben:
Soweit ich nach den (großteils englischen - ist ja anstrengender als arbeiten) Funden vermute, sollte/könnte? die Syntax etwa so aussehen: (vla-copyobjects Quellblock=Xref Objekt Zielblock=ModelBereich) ? Auf Grund dieser Vermutung hab ich mal folgendes gebastelt: Code: (defun c:mxobj (setq #actdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (setq #mspace (vla-get-modelSpace #actdoc)) (setq #blk (vlax-ename->vla-object (car (entsel "\nWähle Xref: ")))) (while (setq #vobj (vlax-ename->vla-object (car (nentsel "\nObjekt aus der Xref: ")))) (vla-copyobjects #blk #vobj #mspace ;(auch mit #actdoc probiert) ) ) )
Is allerdings falsch, wie die Antwort von ACAD zeigt: Befehl: mxobj Wähle Xref: Objekt aus der Xref: ; Fehler: ActiveX-Server gab folgenden Fehler zurück: unbekannter Name: CopyObjectsDa bereits in mehreren Variationen, aber ohne Erfolg probiert, bitte ich nochmal um Hilfe.
------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Jun. 2009 15:41 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
(vla-copyobjects #actdoc #vobj #mspace ) Koordinaten wirst du allerdings noch anpassen müssen, da zu den koordinaten des Objektes in der Xref auch noch die Transformation der Xref in der akt. Zeichnung hinzukommt. (ist die Xref ungleich skaliert gibts noch mehr Probleme .. ist aber wohl bei dir nicht der Fall) ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 11. Jun. 2009 15:53 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Jun. 2009 15:57 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
na ja , so sollte es zumindest bei Blöcken gehen , was Xrefs ja in gewisserweise auch sind .. ist jetzt aber alles ungetestet. Kannst den Zugriff ja mit obiger MOVE-Funktion testen ... ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 11. Jun. 2009 16:00 <-- editieren / zitieren --> Unities abgeben:
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 11. Jun. 2009 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
Zitat: Original erstellt von Geos: ...und kannst Du mit der Fehlermeldung was anfangen?
ja .. der Xref-Block kennt keine Methode COpyobjects .. die kennt nur ein Document ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 15. Jun. 2009 07:57 <-- editieren / zitieren --> Unities abgeben:
Zitat: na dann ist die Methode vla-copyobjects [--> Googlestichwort]genau das richtige für dich
Zitat: der Xref-Block kennt keine Methode COpyobjects .. die kennt nur ein Document
Heißt das jetzt mein Vorhaben ist nicht möglich, oder wie ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Jun. 2009 08:40 <-- editieren / zitieren --> Unities abgeben: Nur für Geos
dann machs (ohne die Transformation) so : (defun c:mxobj(/ RESULT OBJ NEWOBJ) (setq RESULT (nentsel "\nObjekt aus der Xref: ")) (setq OBJ(car RESULT)) (setq DATA(entget OBJ '("*"))) (entmake DATA) ) über copyobjects muß man IMHO die xrefdatabse als OBJECT-Parameter angeben .. ist mir jetzt zu aufwendig. sorry ------------------ - 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 |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 15. Jun. 2009 18:37 <-- editieren / zitieren --> Unities abgeben:
Hallo Thomas Ich hatte gehofft, dass es was "V-Lisp-iges" gibt, das alle Objekte kann (sind auch Blocks in der Xref)- natürlich ohne großen Aufwand. Übrigens, die Transformation brauch ich nicht, beide Files haben das gleiche Koord.System bzw. den gleichen Ursprung. Danke für Deine Mühe. ------------------ Schöne Grüße Ernst www.geopaint.at [Diese Nachricht wurde von Geos am 15. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 01. Jul. 2009 19:40 <-- editieren / zitieren --> Unities abgeben:
Wollt Euch noch nachliefern, was draus geworden ist - zwar eine etwas "russische" G'schichte, aber mir hat's geholfen. Übrigens - die Original-Xref-Datei wird dadurch nicht verändert. Code: ;Funktion (f#DeleteObjectFromBlock) von Jimmy Bergmarks http://www.jtbworld.com/lisp/axblock.htm ;;; Deletes the specified subentity from its block definition ;;; Arguments: the entity name of an item within a block reference ;;; Returns: the remaining item count of the block definition ;;; The drawing must be regenerated for the change to become visible (defun f#DeleteObjectFromBlock (ent / doc blk) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)) ent (vlax-ename->vla-object ent) blk (vla-ObjectIdToObject doc (vla-get-OwnerID ent)) ) (vla-Delete ent) (vla-get-Count blk) ) ;--------------------------------------------- (defun c:nmove (/ #elist #actdoc #obj #blk #xrefname #ename #elist #art #layer #objliste) ($undostart) (setq #actdoc (vla-get-ActiveDocument (vlax-get-acad-object))) (while (setq #obj (entsel "\nObjekt aus der Xref: ")) (setq #blk (vlax-ename->vla-object (car #obj))) (setq #xrefname (vla-get-Name #blk)) (setq #ename (car (nentselp (cadr #obj)))) (setq #elist (entget #ename '("*"))) (setq #art (cdr (assoc 0 #elist))) (setq #layer (substr (cdr (assoc 8 #elist)) (+ 2 (strlen #xrefname)))) (setq #elist (subst (cons 8 #layer) (assoc 8 #elist) #elist )) (setq #objliste (list "LINE" "LWPOLYLINE" "CIRCLE" "TEXT" "MTEXT" "ARC")) (if (member #art #objliste) (f#entmake #elist #layer #ename) (alert (strcat "das Objekt " #art " ist noch nicht freigegeben)")) ;bei neu auftauchenden Objekten erst prüfen, obs einwandfrei funktioniert ;dann in #objliste eintragen );if );while (command "_REGEN") ($undoend) );defun ;--- (defun f#entmake (#elistx #layer #ename / #layobj) (if (setq #layobj (entsel "\nLayer von Objekt: <Nein> ")) (progn (setq #layer (cdr (assoc 8 (entget (car #layobj))))) );progn (if (= 1 (crt2opt "Layer auswählen:" "Objekt auf welchen Layer legen?" (strcat "Akt. Layer: " (getvar "CLAYER")) (strcat "Layer aus Xref: " #layer) 1)) (setq #layer (getvar "CLAYER")) );if );if (setq #elistx (subst (cons 8 #layer) (assoc 8 #elistx) #elistx )) (setq #lastobj (entlast)) (if (/= #lastobj (entlast)) (f#DeleteObjectFromBlock #ename) ) );defun
Edit - vergessener Hinweis: die Funktion (crt2opt) stammt von hier: http://www.freecadapps.com/download.php?file=&filename=CreateDCL.exe&ID=4272 ------------------ Schöne Grüße Ernst www.geopaint.at [Diese Nachricht wurde von Geos am 01. Jul. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |