| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Dictionary, mehrere Items ablegen (1714 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 20. Jun. 2013 10:02 <-- editieren / zitieren --> Unities abgeben:
Da sich der Thread "Variablen dauerhauft speichern" ziehmlich überladen hat, wollte ich hier nochmal ein feedback zum Anlegen von Dictionary´s geben. Visual bietet Funktionen, die eigentlich sehr komfortabel alles anbietem zum Anlegen, Speichern, Editieren und Löschen von D. Man kann es eigentlich alles nachlesen, aber ich habe hier mal ein kleines Tutorial zusammengstellt, wie man ein Lispfunktion in einem Dictionary und damit in der Zeichendatenbank ablegen kann. Code: ; Testfunktionen (vlax-ldata-test "(quote (defun c:test (/) (entsel \" Wähle etwas \")))"); Durch diese Funktion können beliebig viele Items in einem Dictionary ; abgelegt werden (vlax-ldata-put "dict2" "function" "(defun c:test (/) (entsel \" Wähle etwas \")))") _$"(defun c:test (/) (entsel \" Wähle etwas \")))" ; Damit können die Dictionary abgefragt werden (vlax-ldata-list "dict2" ) _$ (("function" . "(defun c:test (/) (entsel \" Wähle etwas \")))")) ; Damit kann man das entsprechende Item abfragen (vlax-ldata-get "dict2" "function") _$"(defun c:test (/) (entsel \" Wähle etwas \")))" ; Und hier als Beispiel die Funktion ausführen (eval (read (vlax-ldata-get "dict2" "function"))) _$(c:test)
------------------ 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 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 21. Jun. 2013 08:21 <-- editieren / zitieren --> Unities abgeben:
Hi! Kann mir eigentlich jemand sagen, was der Unterschied zwischen ldata und xdata ist - beides sind dictionary und legen aber in unterschiedlichen GC´s im dictionary-objekt ab. In anderen foren lass ich, dass ldatas nicht so "beliebt" sind, aber nicht warum. ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
reltro Mitglied student
Beiträge: 125 Registriert: 08.11.2009 Acad 2012 - VBA,Lisp Revit 2012 3dsMax 2012 Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3
|
erstellt am: 21. Jun. 2013 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zum Unterschied kann ich nichts sagen... Zu Ldata: Hier im Forum Schade dass man Ldata vermeiden sollte, denn folgendes würde auch funktionieren...
Code:
(vlax-ldata-put "dict2" "function" '(defun c:test (/) (entsel "Wähle etwas")))
Man kann dort auch Listen eintragen!Aber laut Erfahrung von Erfahreneren ist davon abzuraten... Desshalb ja auch die Diskussion über die geforderte Struktur der Daten von XData, Xdictionary, Dictionary lg [Diese Nachricht wurde von reltro am 21. Jun. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 29. Jun. 2013 14:24 <-- editieren / zitieren --> Unities abgeben:
Danke reltro für den Link, der hat mich wachgerüttelt - ich dachte weniger kritisch, warum die ldatas nicht hernehmen, wenn sie einfacher zu händeln sind. Ein andere Sache ist, passt jetzt vllt nicht unbedingt zum Thema: ich find es ziehmlich clever, wie du den variablen immer gleich ganze Funktionen zuweisst und damit ein variablenGeschwürr abwendest. Gewisserweise Übersicht schaffst, ohne viele Subfunktionen anzulegen. Das ist häufig mein Problem, wenn eine Subfunktion nur einmal durchlaufen wird, warum getrennt progn. Es macht ja den Code unleserlich und ist später schwer nachzuvollziehen. Deshalb mehr von deinen Codes, anfangs schwer nachzuvollziehen aber mittlerweile finde ich gefallen daran. ------------------ 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: 29. Jun. 2013 17:28 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Danke reltro für den Link, der hat mich wachgerüttelt - ich dachte weniger kritisch, warum die ldatas nicht hernehmen, wenn sie einfacher zu händeln sind.
Nun, ich denke, dass die LData-Probleme mittlerweile behoben sein sollten, und dass Autodesk sich hüten wird, nochmals solches Chaos anzurichten. Andererseits haben wohl die meisten Programmierer mittlerweile Bibliotheksfunktionen zum Schreiben von Dictionaries, die exakt denselben Zweck wie die LData erfüllen. Was für mich aber eine dauerhafte Lehre aus der ganzen Angelegenheit war und ist: niemals, unter keinen Umständen, nie, nie, nie sollte man Mitglied im Autodesk Developer Network werden, solange man damit auch nur teilweise Rechte an seinen Sourcen aufgibt, oder Pflichten für Offenlegung o.ä. seiner Sourcen übernimmt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 01. Jul. 2013 09:22 <-- 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: 03. Jul. 2013 14:11 <-- editieren / zitieren --> Unities abgeben:
Nun vermische ich wiedermal Äpfel mit Birnen, mal sehen was raus kommt... Im vorangegangenen Teil ersteinmal der Hinweis, ich habe von ldata-dictionary gesprochen, bei denen wahrscheinlich alle Mängel von Autodesk beseitigt wurden. Jetzt komme ich aber nochmal auf die xdata-dictionary zurück. Da ich mir jetzt einige Funktionen geschrieben habe, zum Anlegen, Lesen, Editieren, Löschen... von dictionary und zum Anlegen, Lesen von Items im dictionary. Mein Problem ist jetzt beim Löschen eines Items, die betreffende liste aus dem dictionary rauszuschmeissen. Ich kann die Liste zwar in der Funktionsausführung löschen, aber wie schreibe ich die Änderung in den dictionary, So eine simple Funktion wie "dictremove" gibt es nicht auch für Items oder? ------------------ 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: 03. Jul. 2013 16:43 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Nun vermische ich wiedermal Äpfel mit Birnen, mal sehen was raus kommt...Im vorangegangenen Teil ersteinmal der Hinweis, ich habe von ldata-dictionary gesprochen, bei denen wahrscheinlich alle Mängel von Autodesk beseitigt wurden. Jetzt komme ich aber nochmal auf die xdata-dictionary zurück. Da ich mir jetzt einige Funktionen geschrieben habe, zum Anlegen, Lesen, Editieren, Löschen... von dictionary und zum Anlegen, Lesen von Items im dictionary. Mein Problem ist jetzt beim Löschen eines Items, die betreffende liste aus dem dictionary rauszuschmeissen. Ich kann die Liste zwar in der Funktionsausführung löschen, aber wie schreibe ich die Änderung in den dictionary, So eine simple Funktion wie "dictremove" gibt es nicht auch für Items oder?
Sowas wie ein xdata-dictionary gibt's nicht. Es gibt Xdata und es gibt Xdictionaries und es gibt Dictionaries. Und natürlich gibt's außerdem noch Ldata. Ich nehme an, Du meinst ein Xdictionary. Wenn Du da einzelne Daten ändern willst, dann löschst Du das XDictionary und schreibst die geänderten Daten komplett neu rein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 03. Jul. 2013 17:34 <-- editieren / zitieren --> Unities abgeben:
Genau, du hast mich richtig verstanden - danke. Dann muss ich, wenn bereits 10 items in dem dictionary enthalten sind, alle wiederherstellen, bis auf den, den ich gelöscht haben will. Ist es so richtig, wie ich es aufzäume (cooler Audruck - geht auf den Feierabend hin) ------------------ 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: 04. Jul. 2013 13:38 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Genau, du hast mich richtig verstanden - danke. Dann muss ich, wenn bereits 10 items in dem dictionary enthalten sind, alle wiederherstellen, bis auf den, den ich gelöscht haben will. Ist es so richtig, wie ich es aufzäume (cooler Audruck - geht auf den Feierabend hin)
Um Verwirrungen zu vermeiden: wenn Du ein Xdictionary meinst, dann nenne es nicht Dictionary. Das gibt's nämlich auch. Bezüglich der Daten wiederhole ich mich: beim Schreiben eines (X)Dictionarys musst Du ALLE Daten angeben. Eine Modifizierungsfunktion nur eines Teils der gespeicherten Daten gibt es nicht, und sie wäre auch unsinnig, weil damit eine Struktur der speicherbaren Daten verbindlich vorgeschrieben wäre. Du musst Dir sowas also selbst schreiben. Ich habe beispielsweise eigene "Systemvariablen", die ich in einem Dictionary in der DWG ablege. Diese Variablen und deren Werte werden in einer simplen ASSOC-Liste geführt, und diese komplette Liste wird z.B. unter dem Appnamen "MYAPP" und dem Key "MYSYSVARS" gespeichert. Wenn nur eine einzige Variable geändert werden soll, dann lese ich die komplette Liste aus, packe den neuen Wert mittels SUBST in diese Liste rein, und speichere die komplette Liste wieder ab. Da ich meine Datenstrukturen dabei selbst kontrolliere, kann ich also problemlos Funktionen wie (mysetvar "MYVAR1" 123) oder (mygetvar "MYVAR1") nutzen. Dass dabei immer die ganze Liste aller Systemvariablen komplett neu ins Dictionary geschrieben werden muss, interessiert mich von da an nicht mehr.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Jul. 2013 12:41 <-- editieren / zitieren --> Unities abgeben:
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|