| | | Gut zu wissen: Gemeinsame Anlagenplanung mit Autodesk AutoCAD Plant 3D und Autodesk BIM 360 Design | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Per Lisp auf die Schriftfeld-Werte zugreifen (1492 / mal gelesen)
|
KeepCat Mitglied CAE-Admin
Beiträge: 82 Registriert: 01.06.2004
|
erstellt am: 31. Jul. 2017 14:03 <-- editieren / zitieren --> Unities abgeben:
Moin alle zusammen, gern würde ich per VisualLisp auf die Werte der Schriftfeld-Texte (MTexte auf der Zeichnung) zugreifen. Zur detaillierten Erklärung: In dem Schriftfeld einer Orthogonalen Zeichnung setze ich "Schriftfeld-Objekte" mittels: EINFÜGEN -> SCHRIFTFELD Damit werden z.B.: der Projektname, die Projektnummer, AktuelleDWGBeschreibung etc. auf dem Layout platziert und automatisch mit den jeweiligen Werten gesetzt. Diese Inhalte möchte ich gern per VisualLisp auslesen, um diese anschließend extern zu verwenden (Archivierung in Richtung TIFF) Hinweis: Per VisualLisp muss es leider sein, da ein altes Konstrukt der Programmierung aus alten AutoCAD-Zeiten vorliegen und ich diese nur adaptieren soll und keine Zeit bekomme, mich auf C# oder ähnlichem einzulassen. Hat irgendwer von euch damit schon gearbeitet? Kann mir ggf. jemand einen Code-Schnippsel geben, womit ich an meine gewünschten Werte heran kommen kann?
Mit hoffnungsvollen Grüßen Thomas Wrobel ------------------ Jeder ist zu etwas nütze, er kann immer noch als schlechtes Beispiel dienen 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: 4187 Registriert: 17.05.2001 ACAD; defun-tools
|
erstellt am: 01. Aug. 2017 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Hallo Thomas, versuch's mal dort (AutoLISP-Forum) Eine Anmerkung habe ich jedoch: Warum gehst du den Umweg über die Texte, die sich (aufgrund der Schriftfeldfunktionalität) ohnehin auf Informationen beziehen, die an anderer Stelle der Zeichnungsdatenbank bereits vorhanden sind. Aus meiner Sicht wäre es sinnvoller, die Informationen genau dort abzugreifen, da die Interpretation der frei fliegenden Texte schwierig wird (es sei denn, diese Info's sind Bestandteil in einem Block mit Attributen, so dass man über das AttributTAG interpretieren kann, welche Info das ist.) Noch eine Anmerkung zu c#: Man kann c#-Funktionen ganz hervorragend auch mit Lisp mischen, denn in c# lassen sich auch eigene Lisp-Funktionen definieren, die sich dann aus dem Lisp-Code aufrufen lassen. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Soui21 Mitglied
Beiträge: 669 Registriert: 24.11.2010 Intel Core 2 Duo, E8500 @ 3.16 Ghz, 3,5gb RAM<P>Plant 3D 2013 SP2
|
erstellt am: 01. Aug. 2017 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Hi, ich kann mich auch nur Holger anschließen, man sollte die Datenbank nutzen und deren Funktionen anstatt wieder mit alten Lisp Funktionen anzufangen. Außer es geht nicht anders. Heutzutage kann man sehr viel schon aus den Datenbanken unkompliziert extrahieren, sodass hier Autolisp nicht mehr zum Einsatz kommen sollte. Vielleicht kannst du uns mal ein Beispiel zur Verfügung stellen was du genau machen willst. 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: 4187 Registriert: 17.05.2001 ACAD; defun-tools
|
erstellt am: 01. Aug. 2017 10:01 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Zitat: Original erstellt von Soui21: ... man sollte die Datenbank nutzen und deren Funktionen anstatt wieder mit alten Lisp Funktionen anzufangen. Außer es geht nicht anders. Heutzutage kann man sehr viel schon aus den Datenbanken unkompliziert extrahieren, sodass hier Autolisp nicht mehr zum Einsatz kommen sollte. ...
Hallo Soui21, da hast du mich falsch verstanden. Mit Zeichnungsdatenbank meine ich die tatsächliche Zeichnung. Diese ist eine Datenbank, die mit AutoCAD lediglich eine grafische Interpretation (eines Teils) des Inhalts erfährt. Wenn Thomas Projektnummer, etc. als Schriftfeld implementiert, wird diese Information aus dieser Zeichnungsdatenbank genommen. Diese Infos sind als nichtgrafische Elemente in der Zeichnungsdatenbank gespeichert, z.Bsp in den Zeichnungseigenschaften. Auf diese Elemente kann man mit Lisp auch zugreifen. Meine Hinweis diente lediglich dazu, den Umweg über die Texte, in denen die nichtgrafischen Informationen der Zeichnung angezeigt werden, zu sparen -- vielmehr direkt auf die Daten zugreifen, egal, ab die in einem Text dargestellt werden oder nicht. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Soui21 Mitglied
Beiträge: 669 Registriert: 24.11.2010 Intel Core 2 Duo, E8500 @ 3.16 Ghz, 3,5gb RAM<P>Plant 3D 2013 SP2
|
erstellt am: 01. Aug. 2017 12:04 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Für mich ist das von hinten durch die Schulter ins Auge. Aber ok, wie gesagt Thomas soll sich hierzu nochmal äußern was er genau vorhat und wieso er die klassischen Schriftfelder verwenden will wenn die Datenbank diese Attribute doch schon hergibt. Das ist mir bisher noch nicht klar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KeepCat Mitglied CAE-Admin
Beiträge: 82 Registriert: 01.06.2004
|
erstellt am: 01. Aug. 2017 12:33 <-- editieren / zitieren --> Unities abgeben:
Moin zusammen, erst einmal vielen Dank an Holger und Soui21, dass Ihr mein Thema angenommen habt. Den Grundgedanken von Holger kann ich gut nachvollziehen und denke mal, dass dieses auch der richtige Weg ist. Die MTexte, die den Inhalt auf der Zeichnung darstellen, bekommen ihr "value" aus einer anderen Quelle. (Siehe Anhang) Und genau diese Werte möchte/muss ich auslesen, damit ich diese in einem nächsten Schritt benötige, um die Zeichnung als TIFF zu drucken und in unserem Zeichnungsarchiv (externes Programm) zu archivieren und zu verwalten. Nun habe ich noch arge Probleme an diese "Werte", aus der Zeichnungsdatenbank heranzukommen. Auch hier gebe ich euch Recht, dass wohl das "LISP-Forum" der korrekte Ort für meine weiteren Fragen ist. Laut Aussage unseres Dienstleisters, von dem wir Plant3D gekauft haben, ist die Einrichtung und das Handling von C# / C++, oder ähnlichem, viel zu aufwendig für den "kleinen" Anwendungsfall, den ich zur Zeit habe. Deswegen bleibe ich bei AutoLISP und hoffe bald an die Werte heranzukommen. Danke schon mal euch, für die wichtigen Hinweise Gruß Thomas ------------------ Jeder ist zu etwas nütze, er kann immer noch als schlechtes Beispiel dienen 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: 4187 Registriert: 17.05.2001 ACAD; defun-tools
|
erstellt am: 01. Aug. 2017 14:30 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Zitat: Original erstellt von KeepCat: ... Laut Aussage unseres Dienstleisters, von dem wir Plant3D gekauft haben, ist die Einrichtung und das Handling von C# / C++, oder ähnlichem, viel zu aufwendig für den "kleinen" Anwendungsfall, den ich zur Zeit habe. Deswegen bleibe ich bei AutoLISP und hoffe bald an die Werte heranzukommen. ...
Nun, da möchte ich deinem Dienstleister nicht zustimmen. a) auf Plant3D bezogenIn deinem Fall ist es womöglich ein riesiger Zeitvorteil, wenn man das Thema mit c# angeht. Denn wenn ich das richtig sehe, willst du an die Plant3D-Projekteigenschaften. diese sind in der .Net-API hervorragend zugänglich. In Lisp musst du dich durch irgendwelche Dictionaries, deren Namen du erst einmal kennen/ ggf. ermitteln musst, durcharbeiten. Da die Lisp-Schnittstelle sich rein auf AutoCAD-Objekte bezieht, wirst du dazu auch kaum eine Dokumentation hinsichtlich der Plant3D-Themen finden - in c# sieht das dagegen ganz anders aus. Die API ist mehr oder weniger gut dokumentiert. b) allgemeinIch höre das öfter, dass man mit Lisp schneller programmieren kann. Ich habe (in alten Projekten tue ich das noch immer) bis 2008 nur in Lisp programmiert. Seit dem erledige ich alles mit c#.Net. Seit dem in den neueren Versionen der Code auch während des Debuggens geändert werden kann, sehe ich absolut keine Vorteile mehr an Lisp festzuhalten. Die VLIDE (Lisp-Entwicklungsumgebung) ist auf einem Stand, als Windows 3.11 ein aktuelles Betriebssystem war. Mit Visual Studio hat man eine moderne und leistungsfähige Entwicklungsumgebung, die das Programmieren richtig beschleunigt. Die Möglichkeiten des Handlings eigener Code-Bibliotheken sind unvergleichlich zu denen in der VLIDE. Alleine dieser Fakt wird mich wohl nicht wieder zu Lisp zurückkehren lassen. Wenn für den User ein Dialog zur Verfügung gestellt werden soll, eine zusätzliche Palette oder die Programmoptionen sich nahtlos in den AutoCAD-Optionsbildschirm integrieren sollen, dann ist das mit Lisp schlicht nicht möglich. Die Features der aktuellen AutoCAD-API wie das Jigg oder Overrule erlauben die grafische Darstellung von Ergebnissen ohne die Zeichnungsdatenbank zu verändern - geht auch nicht in Lisp. Das sind bei der Performance und bei der Benutzerführung unschlagbare Vorteile. Stichwort Performance: Greift man von Lisp auf Objektdaten zu und ändert diese, dann wird bei jedem Zugriff eine (Zeichnungs-)Datenbankoperation vollständig committed - das Ergebnis also auch auf Gültigkeit geprüft. Auf .Net-Seite kann ich entscheiden, wann die Ergebnisse der Objektmanipulation in die Datenbank geschrieben werden - bis zu diesem Zeitpunkt läuft alles im Speicher ab .. dass das ein extremer Performancegewinn in der Programmgeschwindigkeit leuchtet wohl ein. Ein weiterer Vorteil .. gerade Plant3D betreffend. Ein Projekt ist häufig auf mehrere Zeichnungen aufgeteilt. Von Lisp aus, können sicher auch die Zeichnung im Hintergrund geöffnet werden .. die Kommunikation des Programms mit diesen Zeichnungen läuft dann allerdings über die extremst unperformante Com/ActiveX-Schnittstelle. Eine Massenbearbeitung von Zeichnungen wird da ganz schnell zur ausgedehnten Mittagspause. Das man mit c# nicht langsamer sein muss zeigt ein aktuelles Beispiel, bei dem es um Dialoge und Datenbankanbindung geht. Der Lisp-Entwickler hat hierfür 90 Tage veranschlagt (zzgl. des Aufsetzens der Datenbank). Meine Aufwandsschätzung (für die gleiche Aufgabe) liegt bei ca. 15 Tagen (inklusive des Aufsetzens der Datenbank) mit weitaus benutzerfreundlicheren Dialogen, die zudem deutlich mehr Funktionalität beinhalten. War jetzt mehr als ich schreiben wollte ... nur noch zwei Sätze: die Geschwindigkeit des Programmierens hängt aber auch sehr viel davon welche Vorkenntnisse und wieviel Erfahrung der Programmierer in welcher Programmierumgebung hat. Ohne Erfahrung erzielt man mit Lisp sicher schneller erste Ergebnisse. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
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: 4187 Registriert: 17.05.2001 ACAD; defun-tools
|
erstellt am: 01. Aug. 2017 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Zitat: Original erstellt von Soui21: Für mich ist das von hinten durch die Schulter ins Auge.Aber ok, wie gesagt Thomas soll sich hierzu nochmal äußern was er genau vorhat und wieso er die klassischen Schriftfelder verwenden will wenn die Datenbank diese Attribute doch schon hergibt. Das ist mir bisher noch nicht klar.
Sicher hast du Recht, dass man auch gleich die Plant3D-Datenbank anzapfen könnte ... Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Soui21 Mitglied
Beiträge: 669 Registriert: 24.11.2010 Intel Core 2 Duo, E8500 @ 3.16 Ghz, 3,5gb RAM<P>Plant 3D 2013 SP2
|
erstellt am: 01. Aug. 2017 17:16 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
Zitat: Nun, da möchte ich deinem Dienstleister nicht zustimmen. a) auf Plant3D bezogen In deinem Fall ist es womöglich ein riesiger Zeitvorteil, wenn man das Thema mit c# angeht. Denn wenn ich das richtig sehe, willst du an die Plant3D-Projekteigenschaften. diese sind in der .Net-API hervorragend zugänglich. In Lisp musst du dich durch irgendwelche Dictionaries, deren Namen du erst einmal kennen/ ggf. ermitteln musst, durcharbeiten. Da die Lisp-Schnittstelle sich rein auf AutoCAD-Objekte bezieht, wirst du dazu auch kaum eine Dokumentation hinsichtlich der Plant3D-Themen finden - in c# sieht das dagegen ganz anders aus. Die API ist mehr oder weniger gut dokumentiert. b) allgemein Ich höre das öfter, dass man mit Lisp schneller programmieren kann. Ich habe (in alten Projekten tue ich das noch immer) bis 2008 nur in Lisp programmiert. Seit dem erledige ich alles mit c#.Net. Seit dem in den neueren Versionen der Code auch während des Debuggens geändert werden kann, sehe ich absolut keine Vorteile mehr an Lisp festzuhalten. Die VLIDE (Lisp-Entwicklungsumgebung) ist auf einem Stand, als Windows 3.11 ein aktuelles Betriebssystem war. Mit Visual Studio hat man eine moderne und leistungsfähige Entwicklungsumgebung, die das Programmieren richtig beschleunigt. Die Möglichkeiten des Handlings eigener Code-Bibliotheken sind unvergleichlich zu denen in der VLIDE. Alleine dieser Fakt wird mich wohl nicht wieder zu Lisp zurückkehren lassen. Wenn für den User ein Dialog zur Verfügung gestellt werden soll, eine zusätzliche Palette oder die Programmoptionen sich nahtlos in den AutoCAD-Optionsbildschirm integrieren sollen, dann ist das mit Lisp schlicht nicht möglich. Die Features der aktuellen AutoCAD-API wie das Jigg oder Overrule erlauben die grafische Darstellung von Ergebnissen ohne die Zeichnungsdatenbank zu verändern - geht auch nicht in Lisp. Das sind bei der Performance und bei der Benutzerführung unschlagbare Vorteile. Stichwort Performance: Greift man von Lisp auf Objektdaten zu und ändert diese, dann wird bei jedem Zugriff eine (Zeichnungs-)Datenbankoperation vollständig committed - das Ergebnis also auch auf Gültigkeit geprüft. Auf .Net-Seite kann ich entscheiden, wann die Ergebnisse der Objektmanipulation in die Datenbank geschrieben werden - bis zu diesem Zeitpunkt läuft alles im Speicher ab .. dass das ein extremer Performancegewinn in der Programmgeschwindigkeit leuchtet wohl ein. Ein weiterer Vorteil .. gerade Plant3D betreffend. Ein Projekt ist häufig auf mehrere Zeichnungen aufgeteilt. Von Lisp aus, können sicher auch die Zeichnung im Hintergrund geöffnet werden .. die Kommunikation des Programms mit diesen Zeichnungen läuft dann allerdings über die extremst unperformante Com/ActiveX-Schnittstelle. Eine Massenbearbeitung von Zeichnungen wird da ganz schnell zur ausgedehnten Mittagspause.Das man mit c# nicht langsamer sein muss zeigt ein aktuelles Beispiel, bei dem es um Dialoge und Datenbankanbindung geht. Der Lisp-Entwickler hat hierfür 90 Tage veranschlagt (zzgl. des Aufsetzens der Datenbank). Meine Aufwandsschätzung (für die gleiche Aufgabe) liegt bei ca. 15 Tagen (inklusive des Aufsetzens der Datenbank) mit weitaus benutzerfreundlicheren Dialogen, die zudem deutlich mehr Funktionalität beinhalten. War jetzt mehr als ich schreiben wollte ... nur noch zwei Sätze: die Geschwindigkeit des Programmierens hängt aber auch sehr viel davon welche Vorkenntnisse und wieviel Erfahrung der Programmierer in welcher Programmierumgebung hat. Ohne Erfahrung erzielt man mit Lisp sicher schneller erste Ergebnisse.
Sehr schöne Beschreibung! @Thomas, Als was brauchst du denn deine Daten? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Soui21 Mitglied
Beiträge: 669 Registriert: 24.11.2010 Intel Core 2 Duo, E8500 @ 3.16 Ghz, 3,5gb RAM<P>Plant 3D 2013 SP2
|
erstellt am: 01. Aug. 2017 17:39 <-- editieren / zitieren --> Unities abgeben: Nur für KeepCat
ok wir kürzen das mal ab. Öffne deine Ortho Zeichnung. - Befehl Eattext - neue datenextration - irgendwo die dxe datei speichern - Ordner hinzufügen (in deinem Plant Project) den Ortho/DWG Ordner wählen - die nächsten Einstellungen musst du halt so konfigurieren das du die Werte angezeigt bekommst die du auslesen willst. Schriftweld Value steht in Inhalt - Dann Excel,csv, oder ähnliches speichern. Wenn dir das reicht, kannst du das so relativ schnell und umkompliziert lösen. Ohne Programmierung. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|