| | | 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: Teil einer DWG per Lisp öffnen ? (1517 mal gelesen)
|
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 Microstation V8i, TriCAD, AutoCAD2014, EPlan P8 2.2, Core I5, 16GB Arbeitsspeicher
|
erstellt am: 16. Apr. 2007 13:56 <-- editieren / zitieren --> Unities abgeben:
Hallo, ist es möglich eine DWG per Lisp zu öffnen, also nicht mit ACAD, ich meine so ähnlich wie das XPath-Edit von den Express-Tools macht, um eine Kleinigkeit zu ändern z.B. einen Layer umbenennen, da ich an sehr vielen Zeichnungen eine minimale Änderungen durchführen solte ! Gruß, Jürgen 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: 16. Apr. 2007 14:08 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 17. Apr. 2007 10:47 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Zitat: Original erstellt von Juergen55: Hallo,ist es möglich eine DWG per Lisp zu öffnen, also nicht mit ACAD, ich meine so ähnlich wie das XPath-Edit von den Express-Tools macht, um eine Kleinigkeit zu ändern z.B. einen Layer umbenennen, da ich an sehr vielen Zeichnungen eine minimale Änderungen durchführen solte ! Gruß, Jürgen
Ich vermute, Du meinst damit, die Zeichnungsdatei nicht im AutoCAD-Zeichnungseditor zu öffnen, sondern so wie im Designcenter. Ja, das geht auch mit Lisp, aber das ist nicht ganz ohne. Eine ausführliche Erklärung hier ginge viiiiiieeeeel zu weit, und mein Quellcode dafür ist mir zu wertvoll, als dass ich ihn hier einstelle. Aber ein paar Tipps gebe ich gerne: Du benötigst den ObjectDBX-Server, und der ist dummerweise abhängig von der AutoCAD-Version (ich hoffe, der Mitarbeiter bei Autodesk, der das verbrochen hat, wurde mittlerweile gefeuert!). Wenn Du nach ObjectDBX googelst, dann findest Du viele Beispiele, wie der Server eingerichtet wird. Dann musst Du mit vla-GetInterfaceObject (wieder googeln) das Interface-Object (das dient der Verbindung von ActiveX Servern) für die externen DWGs erzeugen und kannst die externen DWGs dann via Interface-Objekt ganz normal mit vla-open öffnen. Mit ein wenig Glück findest Du beim Googeln sicher den Quellcode für ein Programmbeispiel. Tom
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 17. Apr. 2007 11:06 <-- editieren / zitieren --> Unities abgeben:
Hallo Tom, ja genau so mein ich das ! Danke für die Hinweise, ich hab jetzt gesehen das dass im Moment zu aufwendig wird und hab mein Vorhaben jetzt doch per script in Kombination mit einem Lisp lösen können ! Die ObjectDBX werde ich mir aber auf jeden Fall bei Gelegenheit näher ansehen ! Gruß, Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fred_tomke Mitglied Applikationsingenieur
Beiträge: 156 Registriert: 14.06.2004 Map 2015 x64 Win7 x64 12 GB RAM ADN OpenDCL
|
erstellt am: 27. Apr. 2007 12:37 <-- editieren / zitieren --> Unities abgeben: Nur für Juergen55
Hi, Jürgen, so schwer ist das nicht. Code:
(defun DBX_OPEN (strFile / erg strDBX oDbx) (setq erg (getvar "ACADVER")) (cond ((= erg "15.0") (setq strDBX "ObjectDBX.AxDbDocument")) ((= (substr erg 1 4) "17.1") (setq strDBX "ObjectDBX.AxDbDocument.17")) ((= (substr erg 1 4) "17.0") (setq strDBX "ObjectDBX.AxDbDocument.17")) ((= (substr erg 1 4) "16.2") (setq strDBX "ObjectDBX.AxDbDocument.16")) ((= (substr erg 1 4) "16.1") (setq strDBX "ObjectDBX.AxDbDocument.16")) ((= (substr erg 1 4) "16.0") (setq strDBX "ObjectDBX.AxDbDocument.16")) ((= (substr erg 1 5) "15.05") (setq strDBX "ObjectDBX.AxDbDocument.15")) ((= (substr erg 1 5) "15.06") (setq strDBX "ObjectDBX.AxDbDocument.15")) ); cond (if (vl-catch-all-error-p (setq oDbx (vl-catch-all-apply 'vla-GetInterfaceObject (list (vlax-get-acad-object) strDBX)))) (setq oDbx nil) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list oDbx strFile))) (progn (vlax-release-object oDbx) (setq oDbx nil) ); progn ); if ); if oDbx ); DBX_OPEN
Und bis auf SelectionSets kannst Du jetzt alles machen. Du kannst Dir die Layers-Collection holen und diese iterativ durchlaufen. Kannst auch Objecte aus dieser Zeichnung in die aktuelle kopieren. Alles eigentlich einfach. (setq oDbx (DBX_OPEN "Myfile.dwg")) (setq oLayers (vla-get-layers oDbx)) (setq intLayers (vla-get-count oLayers)) (vlax-release-object oLayers) (vl-catch-all-apply 'vla-close (list oDbx)) (vlax-release-object oDbx) VG, Fred ------------------ Fred Tomke Dipl.-Ing. (FH) Landespflege
[Diese Nachricht wurde von fred_tomke am 27. Apr. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|