| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| CIDEON Whitepaper: Konfigurationsprozess - durchgängig und zukunftsweisend, ein Whitepaper |
Autor
|
Thema: DWGs mit LISP als Block laden (5739 mal gelesen)
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 15. Mai. 2002 14:20 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich habe schon vor einiger Zeit ein Lispprogramm geschrieben, mit dem man Koordinaten aus einer ASCII-Datei einlesen kann. Dann wird an jede Koordinate ein Block oder ein Punkt gezeichnet (ich weiß, so was gibt es massenweise, aber kein Programm ist genau so wie ich es will). Mein Problem: Das Programm soll anhand einer Punktkennung eine bestimmte DWG als Block verwenden. Dazu muss ich es erst einmal hin kriegen, mit LISP eine DWG als Block zu laden. Wenn es geht nicht mit (command "_insert" ....). Dann muss ich auch feststellen können, ob der Block schon in der Zeichnung existiert. Sonst könnte ich einen vorhandenen Block gleichen Namens zerstören. Irgenwie geht's, dass weiß ich. Eventuell mit VLISP. Aber da bin ich nicht firm! Wer kann's besser als ich??? ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1988 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 16. Mai. 2002 07:58 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001
|
erstellt am: 16. Mai. 2002 11:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Cadwiesel! Danke für die Auskunft. Ich probiers gleich aus, wenn ich Zeit habe. Ich versuche zur Zeit alle Aufrufe von (command ...) zu umgehen. Das macht das Programmieren zwar etwas schwerer, aber die Programme wesentlich schneller. Das Programm an dem ich arbeite erzeugt für jede Koordinate die eingelesen wird einen Block und einen Text der die Höhe über NN (über dem Meer) enthält. Mit (command "_point"...) und (command "_text" ...) dauert es ewig, bis 1000 Punkte eingelesen sind. Mit (entmake ...) geht's viel besser. Aber um einen einmaligen Aufruf von _insert komme ich wohl nicht drum rum (danach ist der Block ja vorhanden). ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4186 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 16. Mai. 2002 12:53 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Hallo Stefan, wenn der Block immer gleich aussehen soll, dann kann man diesen ja auch im Programm mit entmake erzeugen. Dann brauchst Du kein Insert mehr. Dem Block gleich noch ein Attribut anhängen und du kannst an jeden Punkt diesen Block mit dem gewünschten Text plazieren. Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001
|
erstellt am: 16. Mai. 2002 13:16 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger! Klar, da hast du recht. Aber dann müsste ich die Blockdefinitionen erst ermitteln und dann in das Lisp übernehmen. Das wäre ein sehr umfangreicher Quellcode. Außerdem müsst ich für jeden neuen Block das Lisp wieder ändern. Das ist zu Aufwändig. Dann lieber _insert. Aber Danke! ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4186 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 16. Mai. 2002 13:41 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Hallo Stefan, die Frage ist, wie kompliziert bzw. aus wievielen Elementen die Blöcke bestehen. Zur Not kann man sich auch ein kleines Tool schreiben, welches einem das Schreiben der Blockdefinition abnimmt. Nachteil oder auch Vorteil ist: andere können nicht die Blöcke verpfuschen. Den Lisp-Code brauchst du nicht zu ändern, wenn du die Blockdefinitionen in eigenen Konfig-dateien speicherst. entsprechend der Konstellation im Programm wird genau wie beim Einfügen dann eben der eine oder der andere Block geladen (nicht per "command" eingefügt!). Bei Fragen ... Holger
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
nahe Ehrenmitglied
Beiträge: 1756 Registriert: 18.01.2001 arbeite mit: Dell Precision 7750 i7 2,6 GHz 6 Kerne 32GB RAM 512GB SSD NVIDIA Quadro RTX 4000 ------------------------ SWX-2020 SP5.0 EPDM ---------------- Windows 10 ---------------- VB.net VB VBA ein wenig Swift am Mac
|
erstellt am: 17. Mai. 2002 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Hallo s.wickel Wie ist denn Dein Programm aufgebaut? Durchläufst Du eine Schleife und fügst bei jedem Durchlauf die Punkte und Blöcke ein? Wenn ja, dann versuch mal folgendes: Beim Durchlaufen der Schleife eine Liste erstellen die den Punkt und den Block einfügt und erst nach dem Schleifenende die Liste ausführen lassen. Ich hab auch mal ein Programm zum Einlesen von Koordinaten geschrieben und die Lösung zuerst die Liste zu erstellen und diese danach auszuführen war deutlich schneller. Der Vorteil dabei ist, dass Du nur einen command Aufruf brauchst. Die Liste könnte in etwa so aufgebaut werden: (setq cmdl '(command)) solange koordianten gelsen werden (setq cmdl (cons "_point" cmdl)) (setq cmdl (cons (strcat x "," y) cmdl)) schleifenende (setq cmdl (reverse cmdl)) (eval cmdl) Grüße Heinz Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4186 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 22. Mai. 2002 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
Hallo Stefan, da ich es selber auch gut brauchen kann, habe ich mich mal damit beschäftigt, die Blöcke ohne (command "_.insert" ...) in die Zeichnung zu holen. Die von mir vorgeschlagene Variante scheitert ja nur an der Tatsache, dass das Erstellen der Blockdefinitionen zu aufwendig ist, weshalb ich mich damit beschäftigt habe. Beiliegendes Tool erstellt ASCII-Dateien mit der Erweiterung BLK für Block. Diese kann mit (load"C:\\temp\\blockname.blk") geladen werden. der Block steht dann in der Zeichnung zur Verfügung und kann mit (command "_.insert" ...) in der Zeichnung verwendet werden. Bei Fragen ... Grüße Holger
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: 23. Mai. 2002 13:05 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001
|
erstellt am: 23. Mai. 2002 13:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen! Vielen Dank für die Tips! Im Moment habe ich leider keine Zeit mich um das Problem zu kümmern, weil es nichts Projektbezogenes ist und dann sind andere Sachen immer wichtiger. Ich werde die verschiedenen Dinge ausprobieren und mich vielleicht noch mal melden! ------------------ Nodda, Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AutoCATer Mitglied
Beiträge: 40 Registriert: 13.02.2004 AutoCAD 2007, civil3D 2007, windows xp pro, amd athlon xp 64, 2gb ram
|
erstellt am: 01. Jul. 2004 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für s.wickel
|