| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: Anzahl der Attribute einer Zeichnung (788 mal gelesen)
|
mkl-cad Mitglied Technischer Zeichner
Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 03. Nov. 2003 11:55 <-- editieren / zitieren --> Unities abgeben:
Hallo Programmierer, ich hab schon wier so ´ne blöde Frage: Ist es mit Lisp möglich festzustellen wieviele Attribute eine Zeichnung hat die momentan nicht geladen ist. Brauche das um einen Block einzufügen dessen Atributsanzahl von den Usern geändert werden kann und der direkt nach dem Einfügen nicht über das Dialogfenster "Attribute bearbeiten" geändert werden brauch. Danke
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: 03. Nov. 2003 12:03 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
Hallo mkl-cad, du möchtest auf eine Zeichnung zugreifen die nicht geöffnet ist - richtig? Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD NEU: AutoLISP- Projektschulung NEU: Praxisorientierte Schulungen und Workshops durch die bekannten CAD.de Moderatoren AutoCAD, AutoCAD LT, AutoCAD Mechanical, Mechanical Desktop, Architectural Desktop Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marvin101010 Mitglied ingenieur der architektur ohne diplom, bauzeichner ohne lehre, cad-admin ohne wissen :-)
Beiträge: 562 Registriert: 22.01.2003 Pentium 4 Windows XP Autocad 2002 Autocad 2002LT + Extender ADT 3.3 ArchiCAD
|
erstellt am: 03. Nov. 2003 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
|
mkl-cad Mitglied Technischer Zeichner
Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 03. Nov. 2003 13:33 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von Brischke: Hallo mkl-cad,du möchtest auf eine Zeichnung zugreifen die nicht geöffnet ist - richtig?
Ja fast. Ich möchte die Attributsanzahl von einem Block wisesn den ich gerade einfüge. Mit Attdia kann ich das Dialogfenster wegschalten muß aber dann mit Lisp die Antworten auf die Atributsabfragen geben. Komme aber durcheinander wenn ich nicht weiß wieviele Atribute der Block hat. Martin
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: 03. Nov. 2003 13:37 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
Hallo mkl-cad, mit ATTMODE, ATTDIA, ATTREQ steuerst du, ob und wie die Attribute abgefragt werden. Ist der Block erst einmal drin, dann kannst du mit (entlast) auf diesen zugreifen und dann mit einer while-Schleife die Attribute raussuchen. Bei Fragen ... Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD NEU: AutoLISP- Projektschulung NEU: Praxisorientierte Schulungen und Workshops durch die bekannten CAD.de Moderatoren AutoCAD, AutoCAD LT, AutoCAD Mechanical, Mechanical Desktop, Architectural Desktop Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 03. Nov. 2003 13:57 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
hier 2 kleine lisp programme mit dem einen kannst du attribute per lisp setzten (WriteAttribute (entlast) "Myattribut" "MyNewValue") das 2. liest dir alle attributte eines eingefügten blockes als assoc-liste aus (GetAllAttributes (entlast)) ergibt (("Attname1" . "AttValue1")("AttName2" . "AttValue2") ...) also ATTREQ auf 0 setzen, den block per lisp eingügen, und mit (sslenght (GetAllAttributes (entlast))) kriegst du rasu wieviele attribute der block hat ; ; schreibt in einen Block ein Attribut ; (defun WriteAttribut(ename tagname textstring / ret ) (setq ret nil) (setq br (vlax-ename->vla-object ename) ) (if (and (= (vla-get-hasattributes br) :vlax-true) (safearray-value (setq atts (vlax-variant-value (setq a0 (vla-getattributes br)) ) ) ) ) (foreach tag (setq a1 (vlax-safearray->list atts)) (if (= (strcase tagname) (strcase (vla-get-tagstring tag))) (progn (vla-put-TextString tag textstring)(setq ret t)) ) ) (vla-update br) ) ret ) ; ; gibt alle Attribute eines Blockes als Assoc liste zurück ; (defun GetAllAttributes (ename / i atts daten) (setq i (vlax-ename->vla-object ename)) (if (and (= (vla-get-hasattributes i) :vlax-true) (safearray-value (setq atts (vlax-variant-value (vla-getattributes i) ) ) ) ) (foreach tag (vlax-safearray->list atts) (setq daten (cons (cons (vla-get-tagstring tag) (vla-get-TextString tag) ) daten)) ) )
daten ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 03. Nov. 2003 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
|
mkl-cad Mitglied Technischer Zeichner
Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 03. Nov. 2003 14:36 <-- editieren / zitieren --> Unities abgeben:
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 06. Nov. 2003 08:01 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
Hallo Ich hab da auch noch was: ;liefert für den übergebenen Blocknamen eine Liste der Attributsanfragen ;13.Zeile: (cdr (assoc 2 atrdeflist)) würde die Attributsbezeichnung liefern (defun attriblist (#blkname / #elist #ename #atrdeflist #art #atrname #attlist) (setq #attlist nil) (setq #elist (tblsearch "BLOCK" #blkname)) (setq #ename (cdr (assoc -2 #elist))) (while #ename (setq #atrdeflist (entget #ename)) ;datenliste (setq #art (cdr (assoc 0 #atrdeflist))) (if (= #art "ATTDEF") (progn (setq #atrname (cdr (assoc 3 #atrdeflist))) ; attributanfrage (setq #attlist (cons #atrname #attlist)) ) ) (if (setq #ename (entnext #ename)) ; weitere? (setq #atrdeflist (entget #ename)) ) ) (setq #attlist (reverse #attlist)) ) ;---------------------------------------- ;zusammen mit der obigen Funktion (attriblist) fügt diese Funktion ;Blöcke ein. Die Funkt. (attriblist) ermittelt die Anzahl der Attribute, ;sodass mit (insauto) Blöcke mit beliebig viele Attributen eingefügt werden können (defun insauto (#blkname #einfpkt #skal #richt / #attlist #attwert) (setq attfrage (car (setq #attlist (attriblist #blkname)))) ;Funkt. (attriblist) siehe oben ; ev. Objfang setzen (command "_-INSERT" #blkname #einfpkt #skal "" #richt) ; ev. Objfang rücksetzen (while #attlist (if (/= attfrage "") (progn (setq #attwert (getstring (strcat "\nBitte " attfrage " eingeben: "))) (command #attwert) ) ) (setq attfrage (car (setq #attlist (cdr #attlist)))) ) ) ------------------ Gruß, Ernst Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Atir Mitglied Technischer Zeichner
Beiträge: 3 Registriert: 07.12.2004
|
erstellt am: 10. Dez. 2004 12:45 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
Hi Geos, ich bin gerade am Anfang von Lsp. Was Du da geschrieben hast würde ich sehr gern verwenden! was muß ich dazu noch editieren. Muß ich den Blocknamen angeben? oder eventuell andere Sachen? Danke im voraus
Zitat: Original erstellt von Geos: HalloIch hab da auch noch was: ;liefert für den übergebenen Blocknamen eine Liste der Attributsanfragen ;13.Zeile: (cdr (assoc 2 atrdeflist)) würde die Attributsbezeichnung liefern (defun attriblist (#blkname / #elist #ename #atrdeflist #art #atrname #attlist) (setq #attlist nil) (setq #elist (tblsearch "BLOCK" #blkname)) (setq #ename (cdr (assoc -2 #elist))) (while #ename (setq #atrdeflist (entget #ename)) ;datenliste (setq #art (cdr (assoc 0 #atrdeflist))) (if (= #art "ATTDEF") (progn (setq #atrname (cdr (assoc 3 #atrdeflist))) ; attributanfrage (setq #attlist (cons #atrname #attlist)) ) ) (if (setq #ename (entnext #ename)) ; weitere? (setq #atrdeflist (entget #ename)) ) ) (setq #attlist (reverse #attlist)) ) ;
------------------ Atir 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: 10. Dez. 2004 13:10 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
Zitat: Original erstellt von Atir: Hi Geos,ich bin gerade am Anfang von Lsp. Was Du da geschrieben hast würde ich sehr gern verwenden! was muß ich dazu noch editieren. Muß ich den Blocknamen angeben? oder eventuell andere Sachen? Danke im voraus
Hallo Atir, Willkommen! Schau dir mal auf der Autodesk-Seite den Link an. Dort habe ich eine Serie zur Einführung in die AutoLISP-Programmierung veröffentlicht. Es ist auch erläutert, wie die Übergabe von Parametern, die Unterschiede der Funktionsdefinition usw. funktionieren. Bei Fragen ... Grüße Holger PS: Falls der Link nicht geht, dann www.autodesk.de Produkte->AutoCAD->Training->Einstieg in AutoLISP I-V ------------------ Holger Brischke (defun - Lisp over night! Autodesk User Group Central Europe AutoLISP-Programmierung für AutoCAD AUGCE Manager Deutschland Da weiß man, wann man's hat! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 13. Dez. 2004 08:32 <-- editieren / zitieren --> Unities abgeben: Nur für mkl-cad
|