| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Request a special discount on NVIDIA RTX 5000 Ada Generation GPU !, eine Pressemitteilung
|
Autor
|
Thema: Daten speichern (1570 mal gelesen)
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 23. Mrz. 2004 11:17 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich möchte Daten anhand einer Liste einem Objekt anfügen, so dass ich nach erneutem laden der Zeichnung dies Daten wieder zur Verügung habe. Das Objekt das ich zeichnen möchte, wir über eine Maske dürch Längen der Kanten angegenen. Diese Daten möchte ich speichern (z.B. Viereck Höhe: 100 Breite: 200 Liste die gespeichert werden soll: ((1 100)(2 200)) Aus diesen Daten errechne ich mir die Koordinaten wo das Viereck gezeichnet werden soll. Leider sind die Objekte etwas komplizierter) Ich hab etwas Code gefunden mit dem das klappen soll aber ich schaff es nicht. Die Funktion verlagt den Objektnamen, den ich mit (cdr(car(entget(entlast)))) bekomme. aber irgendwie klappt das nicht. Wer Kann mir weiterhelfen? Hier noch der code den ich gefunden habe: ;; ! **************************************************************************** ;; ! XD_WriteX ;; ! **************************************************************************** ;; ! Function : Writes extended entity into an entity ;; ! Argument : [e] - entity name ;; ! [xdLst] - list of data ;; ! [AppName] - Application Name (must be already registered) ;; ! Return : complete entity list is returned if (XD_WriteX ...) is successful, ;; ! else nil is returned ;; ! Updated : August 11, 1998 ;; ! Copyright: (C) 2000, Four Dimension Technologies, Singapore ;; ! Contact : rakesh.rao@4d-technologies.com for help/support/info ;; ! Comment : - Program can detect data types (STR, REAL,INT, LIST). ;; ! - Entitiy handles must be prefixed by a "#" sign ;; ! (eg. (XD_WriteX e (list "300XLCU" "#5DE")). ;; ! - 1010 group stores points, which is a list of 3 reals ;; ! - If you want to store a nested list, it should have {} ;; ! - as the first element of the list ;; ! **************************************************************************** (defun XD_WriteX(ename xdLst AppName / entl xd) (setq xd (reverse (XD_WriteX@ xdLst)) xd (list -3 (cons AppName xd)) entl (append (entget ename) (list xd)) ) (entmod entl) entl ) (defun XD_WriteX@ (xdLst / xd xd1 itm) (setq xd '()) (foreach itm xdLst (cond ((and (= (type itm) 'LIST) (= (car itm) "{}")) (setq xd1 (cons (cons 1002 "}") (XD_WriteX@ (cdr itm))) xd1 (append xd1 (list (cons 1002 "{"))) xd (append xd1 xd) ) ) ((and (= (type itm) 'LIST) (= (length itm) 3)) (setq xd (cons (cons 1010 itm) xd)) ) ((and (= (type itm) 'STR) (= (substr itm 1 1) "#")) (setq xd (cons (cons 1005 (substr itm 2)) xd)) ) ((= (type itm) 'STR) (setq xd (cons (cons 1000 itm) xd)) ) ((= (type itm) 'INT) (setq xd (cons (cons 1070 itm) xd)) ) ((= (type itm) 'REAL) (setq xd (cons (cons 1040 itm) xd)) ) ) ) xd ) Gruß Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Mrz. 2004 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 23. Mrz. 2004 12:28 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Mrz. 2004 12:34 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
Hallo Michael, die XDatas werden einer bestimmten, bekannten Applikation zugeordnet -> (list -3 (cons AppName xd)) Damit das funktioniert, muss man Acad mitteilen, dass es die mit Applikation eines bestimmten Namens auch gibt. Das macht man mit (regapp "MEINSUPERAPPLOKATIONSNAME") Die LISP-Hilfe schreibt dazu: Zitat:
Registers an application name with the current AutoCAD drawing in preparation for using extended object data (regapp application) Arguments application A string naming the application. The name must be a valid symbol table name. See the description of snvalid for the rules AutoLISP uses to determine if a symbol name is valid. Return Values If an application of the same name has already been registered, this function returns nil; otherwise it returns the name of the application. If registered successfully, the application name is entered into the APPID symbol table. This table maintains a list of the applications that are using extended data in the drawing. Examples (regapp "ADESK_4153322344") (regapp "DESIGNER-v2.1-124753") NOTE It is recommended that you pick a unique application name. One way of ensuring this is to adopt a naming scheme that uses the company or product name and a unique number (like your telephone number or the current date/time). The product version number can be included in the application name or stored by the application in a separate integer or real-number field; for example, (1040 2.1).
Bei Fragen ... Grüße Holger
------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 23. Mrz. 2004 13:07 <-- editieren / zitieren --> Unities abgeben:
|
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Mrz. 2004 13:42 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
in jeder Zeichnung. Du kannst ja vorher Checken, ob es schon einen entsprechenden Eintrag in der Tabelle der Applikationseinträge gibt. (if (tblobjname "APPID" "DEINSUPIAPPNAME")) (alert "Ja, gibts schon") (alert "Nö, gibts noch nicht") ) Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 23. Mrz. 2004 14:33 <-- editieren / zitieren --> Unities abgeben:
|
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 23. Mrz. 2004 15:42 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, ich hab da noch ein Problem: Die Daten von Hand einfügen, also beim erzeugen des Objekt funktioniert jetzt. Wenn ich aber die oben gezeigte Funktion verwenden will, muss ich den ename mitgeben (1.Argument). Mit (entget(entlast)) bekomme ich die Letzte Lsite der Geometriedatenbank. Das entspricht auch dem Objekt dem ich die Daten anfügen will. ((-1 . <Objektname: 4005ded0> ).... Dann müsste doch 4005ded0 der Objektname sein. Oben in der Funktion gibt es den Aufruf (entget ename) Wenn ich jetzt (entget 4005ded0) eingebe kommt ein Fehler: ...lentityp nil Was muß ich dem entget mitgeben (ich würd gerne den Objektnamen mitgeben)? Was gehört alles zum Objektnamen? Gruß Michael Aber, was gehört zum Objektnamen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 23. Mrz. 2004 16:38 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
zum Objektnamen gehört alles nach dem (-1 . Wenn du ein Objekt wählen möchtest dann mit (car (entsel)). willst du viele Objekte dann mit (ssget), dann hast du allerdings erst einen Auswahlsatz. Um daraus eine Elementliste zu machen, dann kopiere dir aus dem Beitrag http://ww3.cad.de/foren/ubb/Forum145/HTML/000037.shtml die Funktion (defun bau_elemli ..) heraus. Mit den Elementnamen kannst du ja dann wieder etwas anfangen. Bist aber ganz schön mutig, ohne so recht zu wissen, was du machst, das einfach zu machen. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MH Bit Mitglied Angestellter
Beiträge: 20 Registriert: 23.03.2004
|
erstellt am: 25. Mrz. 2004 08:33 <-- editieren / zitieren --> Unities abgeben:
HAllo Holger Vielen Dank, Du hast mir sehr geholfen. Wenn ich noch weiter Fragen hab werde mich wieder melden. Ohne Mut kann man nichts neues lernen. Zum Glück weiß ich was das Proggi machen soll wenn es fertig ist. Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001 Microstation V8i, TriCAD, AutoCAD2014, EPlan P8 2.2, Core I5, 16GB Arbeitsspeicher
|
erstellt am: 03. Apr. 2007 11:59 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
Hallo, ich hab obige Routine mal ausprobiert, funktioniert auch, und hab Daten an einen Block angehängt, aber wie lese ich die Daten wieder aus ? Wo stehen die ? Hab GC -3 nirgends gefunden ! Gruß, Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Apr. 2007 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
(entget(car(entsel))'("*")) liefert dir Xdatas aller Applis (entget(car(entsel))'("ACAD")) liefert dir Xdatas der Appli ACAD usw.
------------------ - 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
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 03. Apr. 2007 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|
Juergen55 Mitglied Elektrotechniker
Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 10. Apr. 2007 11:22 <-- editieren / zitieren --> Unities abgeben: Nur für MH Bit
|