| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Eigene Zeichnungseigenschaften definieren (4329 mal gelesen)
|
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 27. Aug. 2004 08:51 <-- editieren / zitieren --> Unities abgeben:
Hallo Leute, ich möchte mir in einer Zeichnung eigene Werte abspeichern. Z.B. Kundenname, Projektname, Ersteller, usw. diese Werte sollten in irgend einer Form mit der Zeichnung gespeichert werden. Wer kann mir sagen wie ich diese Werte speichere, auslese und aktualisieren kann. Einen Dialog für diese Werte hab ich schon mit den genialen Tools von DOSLIB erstellt www.mcneel.com. Diese Werte benötige ich z.B. für Schriftfelder. Danke für Eure Hilfe. Gruß Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erwin Fortelny Mitglied Tech. Zeichner
Beiträge: 877 Registriert: 13.12.2001
|
erstellt am: 27. Aug. 2004 09:36 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Hallo, Zitat: Original erstellt von berndhock: ich möchte mir in einer Zeichnung eigene Werte abspeichern. Z.B. Kundenname, Projektname, Ersteller, usw. diese Werte sollten in irgend einer Form mit der Zeichnung gespeichert werden. Wer kann mir sagen wie ich diese Werte speichere, auslese und aktualisieren kann.
Hmm, bei welcher Acad-Version?! Seit - AFAIK - Acad2000 gibt ja die "Zeichnungseigenschaften" (Befehl: dwgeigen)!!! Die kann/könnte man auch sicher via LISP oder VB manipulieren ... Ansonsten gibt's ja noch die "USER*" Systemvariablen, die ja jeweils in der Zeichnung gespeichert werden ...
------------------ Servus, Erwin -- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Erwin Fortelny Mitglied Tech. Zeichner
Beiträge: 877 Registriert: 13.12.2001 -Firma: Lenovo S30 + 2x Acer B246HL, Win7 x64 Enterprise AutoCAD 2019 ELCAD 2020
|
erstellt am: 27. Aug. 2004 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Hallo, Zitat: Ansonsten gibt's ja noch die "USER*" Systemvariablen, die ja jeweils in der Zeichnung gespeichert werden ...
Uih, kleiner Fehler meinerseits: Gerade die interessanten USERS1-5 werden *nicht* gespeichert ... ------------------ Servus, Erwin -- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 27. Aug. 2004 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
tunnelbauer Ehrenmitglied V.I.P. h.c. Bauingenieur
Beiträge: 7085 Registriert: 13.01.2004 ich hab eh keine Probleme damit...
|
erstellt am: 27. Aug. 2004 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 27. Aug. 2004 09:50 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 27. Aug. 2004 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 27. Aug. 2004 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Hatte mal was angefangen .. gucke hier -> sonst: Siehe Cadffm Mhmm .. sehe gerade bei 2004'er Dateien gibts kein Dictionary "DWGPROPS" mehr !??! ... muß ich die Speicherstelle erst wieder suchen.. ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 27. Aug. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 27. Aug. 2004 14:23 <-- editieren / zitieren -->
Zitat: Original erstellt von CADmium: Hatte mal was angefangen .. gucke hier -> sonst: Siehe CadffmMhmm .. sehe gerade bei 2004'er Dateien gibts kein Dictionary "DWGPROPS" mehr !??! ... muß ich die Speicherstelle erst wieder suchen..
Warum sollte man auch sowas verwenden, wenn man mit demselben Aufwnad eigene Dictionaries anlegen udn verwalten kann? Damit macht man sich nur ein Stück weiter von Adesk abhängig. Jeder LISP-Programmierer wird sich Bibliotheksroutinen der Art (DICTIONARY-PUT KEY VALUE) und (DICTIONARY-GET KEY) geschrieben haben, mit denen man beliebige anwender- und applikationsspezifische Daten in die DWG speichert, und vielleicht hat ja auch irgend jemand diese Routinen veröffentlicht. Von mir gibt's diese Funktionen leider nicht für lau :-) Gruß Tom Berger
------------------
|
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 27. Aug. 2004 14:34 <-- editieren / zitieren --> Unities abgeben:
Danke für die tolle Resonanz. Ich versteh das nicht es ist doch nicht so ganz abwägig, Informationen für Schriftfelder zu speichern und diese in jedem Schriftfeld zu verwenden bzw. in allen Schriftfelder zu aktualisieren. Danke CADmium für deinen Code aber der funktioniert nicht so wirklich oder ich werde daraus nicht schlau. Ich habe mir jetzt mal die Funktionen dictadd, dictsearch usw. angesehen vielleicht kann ich mir ja daraus was basteln. Wäre aber trozdem begeistert wenn jemand schon was fertiges hat. Gruß Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 27. Aug. 2004 17:33 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
FiT Mitglied
Beiträge: 22 Registriert: 27.08.2004 Pentium-IV, 1GB-Ram, Matrox-Parphelia, SCSII-UW2, Win2k, acad2004, BauCaD*K+R*17.
|
erstellt am: 27. Aug. 2004 23:15 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 30. Aug. 2004 08:03 <-- editieren / zitieren --> Unities abgeben:
|
Ex-Mitglied
|
erstellt am: 30. Aug. 2004 11:04 <-- editieren / zitieren -->
Zitat: Original erstellt von berndhock: Danke für die Infos, genau das was FiT mir geschickt hat habe ich gesucht super!!!
Vor der Verwendung von LDATA kann ich nur ganz eindringlich warnen! Google mal nach LDATA. Die sind schon immer völlig lausig implementiert (mittels persistenter Reaktoren, was Proxy-Meldungen erzeugt), aber beim Übergang von R14 zu A2K hat ein Bug in AutoCAD dafür gesorgt, dass die LDATA die Zeichnungsdateien langsam zerstörten! Inzwischen mag der Bug behoben sein, aber die lausige Implementierung bleibt. Auch wenn's programmtechnisch erst mal ein wenig Aufwand ist: nimm' lieber Dictionaries. Gruß Tom Berger ------------------
|
berndhock Mitglied Holztechniker
Beiträge: 35 Registriert: 07.03.2003 AutoCAD2004 und 2005 3,20 gigahertz Intel Pentium 4 1022 Megabytes Installed Memory Matrox Parhelia 128MB
|
erstellt am: 30. Aug. 2004 12:21 <-- editieren / zitieren --> Unities abgeben:
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 30. Aug. 2004 13:55 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
FiT Mitglied
Beiträge: 22 Registriert: 27.08.2004 Pentium-IV, 1GB-Ram, Matrox-Parphelia, SCSII-UW2, Win2k, acad2004, BauCaD*K+R*17.
|
erstellt am: 30. Aug. 2004 19:40 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 30. Aug. 2004 21:11 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
|
Ex-Mitglied
|
erstellt am: 31. Aug. 2004 11:51 <-- editieren / zitieren -->
Zitat: Original erstellt von FiT:
SaveData.lsp von Vladimir Nesterovsky: http://vnestr.tripod.com/SaveData.lsp http://xarch.tu-graz.ac.at/autocad/news/lisp_adv/store_in_dwg.html
Die beiden sind nur eins, nämlioch das Programm von Vladimir Nesterovsky. Es macht ja genau das, was ich oben erwähnte, und es scheint bis auf Kleinigkeiten sehr empfehlenswert, so weit ich das gesehen habe. Der erste Haken: dotted pairs werden nicht gespeichert und führen zu einer Fehlermeldung. Das Programm liesse sich leicht modifizieren, so dass das auch klappt. Der zweite Haken: Listen mit 3 Integer-Werten werden in Listen mit 3 Reals umgewandelt. Auch das liesse sich natürlich leicht korrigieren. Gruß Tom Berger
------------------
|
FiT Mitglied
Beiträge: 22 Registriert: 27.08.2004 Pentium-IV, 1GB-Ram, Matrox-Parphelia, SCSII-UW2, Win2k, acad2004, BauCaD*K+R*17.
|
erstellt am: 31. Aug. 2004 23:01 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
sorry, berndhock, ich habe, glaube ich, das Thema etwas verfehlt. Ging es nicht um eine EINFACHE Möglichkeit Anwenderspezifische Daten IN der Zeichnung zu speichern? Da fällt mir bezüglich der ersten Antwort (von Erwin Fortelny) auf Deine Frage folgendes ein: Die Daten in den Zeichnungseigenschaften werden wohl auch in einer Dictionary gespeichert; (man belehre mich eines besseren): (dictsearch (namedobjdict) "DWGPROPS") ergibt z.B. (falls vorhanden) ansonsten nil (acad2004) '( (-1 . <OBJEKTNAME: 40084328>) (0 . "XRECORD") (5 . "15D") (102 . "{ACAD_REACTORS") (330 . <OBJEKTNAME: 40082C48>) (102 . "}") (330 . <OBJEKTNAME: 40082C48>) (100 . "AcDbXrecord") (280 . 1) (1 . "DWGPROPS COOKIE") (2 . "") (3 . "") (4 . "") (6 . "") (7 . "") (8 . "FiT") (9 . "") (300 . "GEZ=FiT") (301 . "PROJ-NR=04-08") (302 . "PROJEKT=DICTIONARY") (303 . "BAUHERR=FiT") (304 . "BAUORT=Würzburg") (305 . "INHALT=mal_seh'n") (306 . "PLAN-NR=1") (307 . "MASSTAB=1:50") (308 . "LAYER=A*") (309 . "DATUM=31.08.2004") (40 . 0.634927) (41 . 2.45533e+006) (42 . 2.45425e+006) (1 . "") (90 . 10) ) ; also Zugriff per LISP; ?: (dictremove (namedobjdict) "DWGPROPS") (dictadd (namedobjdict) "DWGPROPS" (entmakex MY_LIST)) ;_ ? > Tom Berger schrieb: > Die beiden sind nur eins, nämlioch das Programm von Vladimir Nesterovsky. Es > macht ja genau das, was ich oben erwähnte, und es scheint bis auf Kleinigkeiten > sehr empfehlenswert, so weit ich das gesehen habe. > > Der erste Haken: dotted pairs werden nicht gespeichert und führen zu einer > Fehlermeldung. Das Programm liesse sich leicht modifizieren, so dass das auch > klappt. > > Der zweite Haken: Listen mit 3 Integer-Werten werden in Listen mit 3 Reals > umgewandelt. Auch das liesse sich natürlich leicht korrigieren. > Was sind das für "Kleinigkeiten"?, und wie kann man "gepunktete paare" speichern oder Listen in Listen: '(1 2 3 ("1" 2 3.33)) ; (cons (cons... und wie integer-to-real? Und noch 'ne Frage: was ist der Unterschied zwischen XRECORD und DICTIONARY ? Und... habe noch einen Berg anderer Fragen... stelle ich erst mal zurück. Gruß aus Würzburg. An 'mapcar; Ich war heute auf der alten Mainbrücke: Ganz lieber Gruß von Kolonat!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 31. Aug. 2004 23:31 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Danke, FiT. Möchte noch mal, was LDATA betrifft, auf diesen Thread hinweisen: http://ww3.cad.de/foren/ubb/Forum259/HTML/000323.shtml Wenn das ganze 'einfach' bleiben soll, würde ich auch gar keine Anstrengungen unternehmen, Sachen wie dotted pairs usw. zu integrieren. Das mag zwar schön für den Programmierer sein, aber für den Benutzer würde ich auf die Datentypen Int32, Double, Point2d, Point3d, [optional auch Vector2d, Vector3d] und String setzen. Das hat den Vorteil, dass auch Applikationen in anderen Sprachen problemlos auf die Daten zugreifen können. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze [Diese Nachricht wurde von mapcar am 31. Aug. 2004 editiert.] [Diese Nachricht wurde von mapcar am 31. Aug. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Sep. 2004 11:25 <-- editieren / zitieren -->
Zitat: Original erstellt von FiT: Was sind das für "Kleinigkeiten"?, und wie kann man "gepunktete paare" speichern oder Listen in Listen: '(1 2 3 ("1" 2 3.33)) ; (cons (cons... und wie integer-to-real?
Verschachtelte Listen gehen bei Dir nicht? Dann ist aber was faul. Aber man kann all diese Fehler beheben, selbst ohne den Quellcode von Vladimirs Programm zu kennen (das will ich mir jetzt auch nicht antun, obwohl auch ich von Vladimir noch was lernen kann). Das geht ganz einfach: Füge als erste Zeilen in der Funktion DICT-PUT das ein: (cond ;; dotted pair: ((and (listp val) (not (listp (cdr val))) ) (setq val (list "$$$DOTTED-PAIR" (car val) (cdr val))) ) ;; Liste mit 3 Zahlen ((and (listp val) (= 3 (length val)) (apply 'AND (mapcar 'numberp val)) ) (setq val (cons "$$$3-NUMBER-LIST" val)) ) ) Passend dazu muss die Funktion dict-get dann so aussehen: (defun dict-get (name key / val) ;; name and key As strings (setq val (x-relist ;; decode the data! (cddr (member '(100 . "AcDbXrecord") ;; new (280) code group in r15 (dict-getrawdata name key) ) ) ) ) (cond ((and (listp val) (= "$$$DOTTED-PAIR" (car val)) ) (cons (cadr val) (caddr val)) ) ((and (listp val) (= "$$$3-NUMBER-LIST" (car val)) ) (cdr val) ) ('T val) ) ) Du siehst, dass man auch mit uneleganten Mitteln schnelle Halblösungen erzielt :-) "Halblösung" ist das, weil es immer noch Probleme gibt, wenn ein dotted pair oder eine 3-Zahlen-Liste innerhalb einer Liste verschachtelt ist. Für eine saubere Lösung musst Du den Eingriff dort machen, wo Vladimir die zu speichernden Werte codiert und decodiert. Das ist auch nicht schwerer als meine obige Lösung (die kannst Du vermutlich 1:1 verwenden), ich war jetzt nur zu faul, Vladimirs Code danach zu durchsuchen. Gruß Tom Berger ------------------
|
FiT Mitglied
Beiträge: 22 Registriert: 27.08.2004 Pentium-IV, 1GB-Ram, Matrox-Parphelia, SCSII-UW2, Win2k, acad2004, BauCaD*K+R*17.
|
erstellt am: 01. Sep. 2004 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Danke, das schau ich mir mal an. Hatte mich mit den Prog. von Reini Urban beschäftigt, aber auch da gehen verschachtelte Listen; hatte wohl was falsch gemacht. ------------------ Gruß Gerald Fischer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiT Mitglied
Beiträge: 22 Registriert: 27.08.2004 Pentium-IV, 1GB-Ram, Matrox-Parphelia, SCSII-UW2, Win2k, acad2004, BauCaD*K+R*17.
|
erstellt am: 01. Sep. 2004 22:06 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Hallo Tom; habe Deinen *hack* nachvollzogen und verstanden; werde mich mit Vladimir's Quelltext ausfühlicher beschäftigen; Jo, da kann ich was lernen; Ziel ist sowas; '(("FiT" . 1.1)"(FiT" . 2.2)) ; also verschachtelte *dotted pairs* in einer Dict... ...und (Frage) LDATA braucht dann hierfür extra entities? '(sorry, ha'b gra'd kein Bei-Spiel parat). ------------------ Gruß Gerald Fischer Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 01. Sep. 2004 23:11 <-- editieren / zitieren -->
Zitat: Original erstellt von FiT: Hallo Tom; habe Deinen *hack* nachvollzogen und verstanden; werde mich mit Vladimir's Quelltext ausfühlicher beschäftigen; Jo, da kann ich was lernen; Ziel ist sowas; '(("FiT" . 1.1)"(FiT" . 2.2)) ; also verschachtelte *dotted pairs* in einer Dict...
Dann mach's aber so: '(("FiT1" . 1.1)"(FiT2" . 2.2)) damit Du die Daten auch wieder findest :-) Zitat:
...und (Frage) LDATA braucht dann hierfür extra entities?
Dictionaries sind ja auch Objekte. LDATA sind aber irgendwie ziemlich seltsam implementiert, mit persistenten Reaktoren und Applikationsdaten (in dem Fall ACAD, wobei der A2K-Bug zumdinest damit zusammen hing, dass auch die ACDA-versionsnummer mit gespeichert wurde, und dass in A2K mit anderer Versionsnummer die R14-LDATA dann nicht mehr gelesen werden konnten). Da die erwünschte Funktionalität der LDATA ohne deren unliebsame Nebenerscheinungen mit den Dictionaries vollkommen erreicht wird, kann man sie also auch einfach vergessen. Gruß Tom Berger ------------------
|
FiT Mitglied
Beiträge: 22 Registriert: 27.08.2004 Pentium-IV, 1GB-Ram, Matrox-Parphelia, SCSII-UW2, Win2k, acad2004, BauCaD*K+R*17.
|
erstellt am: 02. Sep. 2004 22:49 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
OK, ich hab's jetzt eingesehen: LDATA ist überflüssig bzw. nicht rückwärtskompatibel. dotted pairs sind in diesem Fall auch unnötig, Liste in Liste genügt. Habe das heute mal mit einigen Programmen von mir getestet; Dank modularen Aufbau's brauch ich nur zwei Funktionen austauschen; Statt Anwendungsspezifische Daten in 'ne Datei schreiben/lesen, eben in einer DICT. Und das funktioniert, weil in die Datei auch nur 'ne Liste geschrieben wird. Da werde ich mir in Zukunft die zusätzlichen Files schenken. Habe beobachtet, dass die Zeichnung um etwa 4 bis 5 KB groesser wird. Eine letzte Frage: Was ist sinnvoller? Eine DICT mit einer evtl. sehr langen Liste oder lieber einige Dict's mit kurzen Listen? ------------------ Gruß Gerald Fischer 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. Sep. 2004 17:16 <-- editieren / zitieren --> Unities abgeben: Nur für berndhock
Nochmal zum Thema: (vl-load-com) (vlax-dump-object(vla-get-summaryInfo(vla-get-activeDocument(vlax-get-acad-object)))'T) ..wenn jemand auf die Standarddwgprops zurückgreifen will.. ------------------ - Thomas - Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 07. Sep. 2004 18:31 <-- editieren / zitieren -->
Zitat: Original erstellt von FiT: Was ist sinnvoller? Eine DICT mit einer evtl. sehr langen Liste oder lieber einige Dict's mit kurzen Listen?
Das sagt Dir die Logik Deiner Anwendung - eine allgemeingültige Antwort darauf gibt's nicht. Eventuelle Performance-Unterschiede dürften in den allermeisten Fällen irrelevant sein Gruß Tom Berger
------------------
|