| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Objekte mit dictionary lokalisieren (1392 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 07. Nov. 2014 08:18 <-- editieren / zitieren --> Unities abgeben:
Im Anhang lässt sich erkennen, dass die Objekte (Höhenblock - Gefälle(Text,Richtungspfeil)) miteinander verknüpft sind. Schaut man sich Objekte genauer an, stehen da Dictionarys jeweils in allen Objekten. Was heisst das konkret: Ein Dictionary ist ein Datensatzverweis, der an ein Entity angehangen wird ? Im Datensatzverweis selbst lese ich heraus, dass hier Entities abgelegt sind. Müssen das XRECORD entities sein ? Folgendes passiert, sofern ich den Programmaufsatz "Novapoint" = NPLandscape laufen lasse. Lösche ich ein Objekt (z.B. den Gefälletext) wird gleich der Richtungspfeil und der betr. Höhenblock mit gelöscht. DWG [Diese Nachricht wurde von cadplayer am 07. Nov. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 07. Nov. 2014 08:45 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 07. Nov. 2014 08:52 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Dictionarys sind Container in der Zeichnung ähnlich wie Layer oder Blockdefs Die Verbindung zwischen den Objekten und den Dicts sind die xdata, die an den Objekten hängen. Jedoch passiert aus dieser Konstellation heraus noch nichts automatisch. Es muss die Verbindung der Objekte untereinander noch Programmtechnisch überwacht werden. Könnte durch einen Reaktor passieren, der dauf veränderung überwacht und dann eben die Maßnahme löschen, oder updaten, oder sonstwas auslöst ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 07. Nov. 2014 10:12 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 11. Nov. 2014 10:27 <-- editieren / zitieren --> Unities abgeben:
Hallo! Ich bin etwas am experimentieren mit folgendem Objektreaktor, der bewirkt, dass Textfahnen von Attrib- zum BlockInsertPunkt gezeichnet werden. Mir fehlt etwas die Erfahrung, was eigentlich genau passiert, wenn der Reaktor aktiviert ist bzw. was passiert im Reaktorprzess
Code: (defun c:foo ( / ) (defun Object:Reactor (react param / ) (redraw) (if (setq ss (ssget "_I" '((0 . "INSERT")))) (progn (setq ent (ssname ss 0)) (setq i 0) (setq pt (cdr (assoc 10 (entget ent)))) (while (and (setq ent (entnext ent) eg (entget ent)) (not (= "SEQEND" (cdr (assoc 0 eg))))) (if (= "ATTRIB" (cdr (assoc 0 eg))) (progn (setq i (1+ i)) (grdraw (trans pt 1 0) (trans (cdr (assoc 10 eg)) 1 0) 6 5) ;;; (entmake (list '(0 . "LINE") (cons 10 (trans pt 1 0)) (cons 11 (trans (cdr (assoc 10 eg)) 1 0)))) ) ) ) (if (= i 0) (princ "\tAttribut not found") (princ (strcat "\t" (itoa i) " Attributes found")) ) ) (princ "\tBlock not found") ) (princ) ) (vlr-set-notification (setq *Object:Reactor* (vlr-miscellaneous-reactor nil '((:vlr-pickfirstmodified . Object:Reactor)) ) ) 'Active-Document-Only ) (prompt "\nObject Reactor active!") (princ) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 16. Nov. 2014 16:50 <-- editieren / zitieren --> Unities abgeben:
Was will ich mit diesem Beispiel erreichen: Sobald der Reactor auf active gestellt ist, soll ein Block der Attribute beinhaltet, eine Fahne zeichnen (um das Attrib dem jeweiligen Block zuordnen zu können). Vielleicht hat sich schon einer gefragt, was die entmake Zeile mit der Linie bewirken soll. Ich möchte es eigentlich nicht raten. Wenn man sie aber in den Program einschaltet kommt es zu einem Crash - was mugt da Autocad blos ? Mein Ziel soll es hier sein, Textfahnen mit Hilfe von Leader (luxerös wären Mleader) zu erzeugen sobald ein Attrib von seiner Ursprungsposition verschoben wird. Könnte das mit meiner Vorgehsweise gelingen oder liege ich da falsch ? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 16. Nov. 2014 19:03 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, ich kann es mir nicht verkneifen. Was du möchtest, hat wieder etwas mit Userinteraktion zu tun. Zu gleichem Thema hatte ich ja schon in einem anderen deiner Threads geschrieben, dass da die Möglichkeiten mit Lisp sehr begrenzt sind. Dass du den User über alles Mögliche direkt informieren möchtest, ist richtig und zeichnet gute Tools auch aus - das steigert die AkzeptNz bei den Anwendern. Nur wenn du mehr und mehr in diese Richtung gehst, solltest du den einen deiner ursprünglichen deiner Gedanken, nämlich etwas in .Net zu machen, aufleben lassen. Konkret bedeutet das für deine Aufgabe, das die Lösung in der .Net-API zu finden ist: Thema Overruling. Damit kannst du temporär die Darstellung der Objekte in Abhängigkeit irgendwelcher Bedingungen nach belieben manipulieren. Vorteil ist zudem, dass keine Objekte in der Zeichnung selbst erzeugt werden, die nicht zum Zeichnungsinhalt gehören und folglich wieder gelöscht werden müss(t)en. Was ich sagen will: du wirst dir mit Lisp mehrere Beine ausreißen müssen, um deine Aufgaben erfüllen zu können, und in den meisten fällen doch nur eine Kompromisslösung gestalten können. In dem Beitrag, in dem ich zuletzt ein .Net-Dll eingestellt hatte, wird die Verknüpfung beider Sprachwelten demonstriert. Du solltest an dieser Stelle einsehen, dass Lisp für die Realisierung dieser intensive Userinteraktion nicht das geeignete Werkzeug ist. Die Verbindung beider Welten aber enorm viele Vorteile zu bieten hat. 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 |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 16. Nov. 2014 20:08 <-- editieren / zitieren --> Unities abgeben:
Hi Holger! Danke für deinen Beitrag, sorry ich bin noch gar nicht dazu gekommen auf deine Antwort im anderen Thread zu antworten. Vorab aber schon mal vielen Dank. Ich hatte nur die letzte Woche mit anderem Kram zu tun. Ich hoffe es morgen mal angehen zu können. Ich geb dir vollkommen recht, der bessere Weg wird mit NET sein. Ich muss sagen, es macht echt Laune, etwas mit LISP auf die Schnelle zu schreiben. Man erreicht echte Wunder. Dünnes Eis bietet mir allerdings das Thema Reaktoren. Bisher habe ich noch nicht allzuviel herausgefunden. Ausser, dass ich mein Acad mal schnell abmorxen konnte ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 823 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 20. Nov. 2014 23:31 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Hi Holger! Danke für deinen Beitrag, sorry ich bin noch gar nicht dazu gekommen auf deine Antwort im anderen Thread zu antworten. Vorab aber schon mal vielen Dank. Ich hatte nur die letzte Woche mit anderem Kram zu tun. Ich hoffe es morgen mal angehen zu können. Ich geb dir vollkommen recht, der bessere Weg wird mit NET sein. Ich muss sagen, es macht echt Laune, etwas mit LISP auf die Schnelle zu schreiben. Man erreicht echte Wunder. Dünnes Eis bietet mir allerdings das Thema Reaktoren. Bisher habe ich noch nicht allzuviel herausgefunden. Ausser, dass ich mein Acad mal schnell abmorxen konnte
Ich möchte Holger widersprechen: man kann das alles ganz hervorragend mit Lisp lösen. Und sogar schneller und eleganter als in .Net mit C#. Ein mittlerweile schon fast 25 Jahre altes, in der Funktionalität aber bisher zumindest meines Wissens nicht vergleichbar erreichtes Beispiel ist mein Programm objectiveCAD, das Du kostenfrei von http://www.archtools.de/d-download.html herunter laden kannst. Das Programm war damals Teil meiner Dissertation, die Entwicklung wurde von der MTU/DASA mit finanziert, und eine kurze Zeitlang hab' ich das Programm für ca 7.000 DM pro Lizenz vermarktet. Aber für den normalen AutoCAD-Anwender war's wohl doch zu komplex. Du kannst damit einigermaßen komplexe Simulationen gestalten, Du kannst das als Variantenkonstruktionsprogramm verwenden, und Du kannst das als Programm für die Entwicklung selbstoptimierender Systeme nutzen. Und alles ist programmierbar, so dass man damit auch spezielle Branchenapplikationen entwickeln kann. Letzeres haben einige Kunden getan, merkwürdigerweise alle aus dem Tiefbaubereich. Zwei dieser auf objectiveCAD aufsetzenden Tiefbau-Applikationen sind meines Wissens auch heute noch auf dem Markt. Die Nachteile von Lisp gegenüber der von Holger aber trotzdem zurecht favorisierten .Net Lösung sind - Performance - Beschränkung auf das AutoCAD Datenmodell (außer natürlich selbstentwickelte Datenbanksysteme und Systemprogrammen, in die Du Schnittstellen von Lisp einbauen kannst) - fehlende Zukunftssicherheit Die mir bekannten Vorteile der Lisp Lösung sind die elegantere und langfristig besser verständliche Programmierung und v.a. der deutlich geringere Programmieraufwand. Der ist zwar bei .Net mit C# viel geringer als mit C++, aber doch sehr viel höher als mit Lisp. Damals, als ich objectiveCAD entwickelt habe, gab's kein Objektmodell in AutoCAD, es gab kein .Net, und auch sonst nicht viel. Deshalb wird Dir, wenn Du das mal ansiehst, das objectiveCAD Objektmodell ziemlich ungewöhnlich und unkonventionell erscheinen. Damals gab's aber eben keine Konventionen dafür, und ich musste alles selber erfinden. Übrigens: weil der Lisp-Interpreter in BricsCAD extrem viel schneller ist als der in AutoCAD (Danke, Torsten!), ist in BricsCAD der Performanceunterschied zwischen der Lisp und der .Net-Lösung kaum spürbar. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|