Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Objekte mit dictionary lokalisieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 07. Nov. 2014 08:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Stichwort: peristenter Objectreaktor ??

Ansonsten: du kannst am Objekt mittels XDATA oder Dictionarie alles mögliche speichern .... Speichern, Auslesen und Auswerten muss dann deine Application

------------------
Also ich finde Unities gut ... und andere sicher auch
---------------------------------------
  - 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

CADwiesel
Moderator
CAD4FM UG




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 07. Nov. 2014 08:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 07. Nov. 2014 10:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Wow, danke das war sehr hilfreich!

------------------
Gruss Dirk
http://cadplayerlounge.blogspot.se

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 16. Nov. 2014 16:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 16. Nov. 2014 19:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 16. Nov. 2014 20:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 20. Nov. 2014 23:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

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 >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz