| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Attribute zum Block (3063 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 23. Jan. 2013 11:04 <-- editieren / zitieren --> Unities abgeben:
Hi ist es möglich zu einem bestehenden block attribute hinzuzufuegen, ich habe zwar eine routine, die mir prueft ob bereits attribute in einem block sind. mein gedanke ist jetzt eine kopie vom block aufzubauen, dabei die bestehenden attribute zu uebernehmen und neue dranzupabben. es scheitert daran zum ersten, wenn mehr als ein attribut im block ist, programmabbruch jedoch bei nur einem bestehenden attribut wird der block versucht aufzubauen Augegangen bin ich von einem code, der mir einen block mit attribut aufbaut Code: (defun c:ent () (setq bn (getstring "\ngive a block name ")) (setq bez (getstring "\ngive a attribut name ")) (entmake (list (cons 0 "BLOCK")(list 10 0 0 0)(cons 2 bn)(cons 70 2))) (setq fe (entmakex (list (cons 0 "CIRCLE") (cons 8 "0") (cons 10 '(0 0 0)) (cons 40 1)))) (entmake (list (cons 0 "ATTDEF") (cons 8 "0") (cons 10 '(0 0 0)) (cons 11 '(0 0 0)) (cons 40 1) (cons 1 bez) (cons 3 "TOP") (cons 2 "NAME") (cons 70 0) (cons 73 0) (cons 50 0) (cons 41 1) (cons 51 0) (cons 7 "STANDARD") (cons 71 0) (cons 72 0) (cons 210 (list 0 0 1)) (cons 74 0) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) (entmake (list (cons 0 "ENDBLK")(cons 8 "0"))) (entdel fe) (entmake (list (cons 0 "INSERT")(cons 2 bn)(cons 10 '(0 0 0))(cons 66 1) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) (entmake (list (cons 0 "ATTRIB") (cons 8 "0") (cons 10 '(1 1 0)) (cons 11 '(1 1 0)) (cons 40 1) (cons 1 bez) (cons 2 "NAME") (cons 70 0) (cons 73 0) (cons 50 0) (cons 41 1) (cons 51 0) (cons 7 "STANDARD") (cons 71 0) (cons 72 0) (cons 210 (list 0 0 1)) (cons 73 0) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) (entmake (list (cons 0 "SEQEND")(cons 8 "0"))) )
im anschluss habe ich versucht das auf meine beduerfnisse umzuschreiben, indem ganz am anfang geprueft wird ob attribute da sind und die wiederum gleich als attributdefinitionen in der foreach schleife erzeugt werden und später die dazugehörigen attributeinträge werden am ende angehangen. wenn ich ein attribut nun hinzufuegen will, geb ich die bezeichnung ein die attributdefinition wird erzeugt die attributbezeichnung wird erzeugt aber kein block. darf man so ueberhaupt bei blockerzeugung vorgehen
Code: ; pruef routine nach attributen in einem block (defun Gather_Attribs ( EN ;;entity name of INSERT object / EN2 ;;temporary entity name EL ;;entity list ) ;; Get first attrib entity. (setq EN2 (entnext EN) EL (entget EN2) ATTS nil ;;note that ATTS is global! ) ;; So long as there are attributes... (while (= (cdr (assoc 0 EL)) "ATTRIB") ;;build ATTS data list containing tag name ;;and attribute value. (setq ATTS (cons (list (cdr (assoc 2 EL)) (cdr (assoc 1 EL)) ) ATTS) EN2 (entnext EN2) EL (entget EN2) ) ATTS ) )
; hauptprogramm (defun c:add (/ i bn blk attlist bez bpt) (setq i -1) ; zähler fuer y-position des AttDef (if (= "INSERT" (cdr (assoc 0 (setq bn (entget (setq blk (car (entsel "\nwähle einen block ")))))))) (progn (setq bpt (cdr (assoc 10 (entget blk)))) (entmake (list (cons 0 "BLOCK")(list 10 0 0 0)(assoc 2 bn)(cons 70 2))) (entmake (list (cons 0 "CIRCLE") (cons 8 "0") (assoc 10 bn) (cons 40 1))) (if (= (cdr (assoc 66 bn)) 1) ; wenn der gewählte block bereits attribute hat (progn (setq attList (Gather_Attribs blk)) (foreach N attList (entmake (list (cons 0 "ATTDEF") (cons 8 "0") (cons 10 (list 0 (1+ i) 0)) (cons 11 '(0 0 0)) (cons 40 1) (cons 1 (cadar N)) ; soll den Attr bezeichnung abfragen ??? (cons 3 "TOP") (cons 2 (caar N)) ; soll den tag name abfragen (cons 70 0) (cons 73 0) (cons 50 0) (cons 41 1) (cons 51 0) (cons 7 "STANDARD") (cons 71 0) (cons 72 0) (cons 210 (list 0 0 1)) (cons 74 0) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) (setq i (1+ i)) ) ) (princ "\nkeine Attribute vorhanden ") ) (if (setq bez (getstring "\nneue Attribut bezeichnung: ")) ; um neue attribute hinzuzufuegen (entmake (list (cons 0 "ATTDEF") (cons 8 "0") (cons 10 (list 0 (1+ i) 0)) (cons 11 '(0 0 0)) (cons 40 1) (cons 1 "NEU") (cons 3 "TOP") (cons 2 bez) (cons 70 0) (cons 73 0) (cons 50 0) (cons 41 1) (cons 51 0) (cons 7 "STANDARD") (cons 71 0) (cons 72 0) (cons 210 (list 0 0 1)) (cons 74 0) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) ) (entmake (list (cons 0 "ENDBLK")(cons 8 "0"))) (entmake (list (cons 0 "INSERT")(cons 2 "blockname")(cons 10 '(0 0 0))(cons 66 1) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) (if (/= attList nil) (foreach N attList (entmake (list (cons 0 "ATTRIB") (cons 8 "0") (cons 10 '(1 1 0)) (cons 11 '(1 1 0)) (cons 40 1) (cons 1 (cadar N)) (cons 2 (caar N)) (cons 70 0) (cons 73 0) (cons 50 0) (cons 41 1) (cons 51 0) (cons 7 "STANDARD") (cons 71 0) (cons 72 0) (cons 210 (list 0 0 1)) (cons 73 0) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) ) ) (entmake (list (cons 0 "ATTRIB") (cons 8 "0") (cons 10 (list (+ 1 i (car bpt)) (+ 1 i (cadr bpt)) 0)) (cons 11 '(1 1 0)) (cons 40 1) (cons 1 bez) (cons 2 "NEU") (cons 70 0) (cons 73 0) (cons 50 0) (cons 41 1) (cons 51 0) (cons 7 "STANDARD") (cons 71 0) (cons 72 0) (cons 210 (list 0 0 1)) (cons 73 0) (cons 62 256) (cons 39 0) (cons 6 "BYLAYER"))) ) (entmake (list (cons 0 "SEQEND")(cons 8 "0"))) ) (princ "\nkeinen Block gewählt !!!")(princ) )
------------------ Gruss Dirk [Diese Nachricht wurde von cadplayer am 23. Jan. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 23. Jan. 2013 14:51 <-- editieren / zitieren --> Unities abgeben:
einfacher formuliert: kann man einem block ohne ihn zu "sprengen" attribute hinzufügen ? _attsync _attredef möchte ich gern umgehen, find ich zu umständlich und erfordert eine neue positionierung der attribute in der planansicht !!! ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Wolfgang Kirsch Mitglied Büroberater
Beiträge: 41 Registriert: 29.04.2002
|
erstellt am: 24. Jan. 2013 10:50 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 24. Jan. 2013 11:54 <-- editieren / zitieren --> Unities abgeben:
Danke für den sehr interessanten Beitrag... Auf die lösung mit den fantasie attributen bin ich auch gestossen, dabei hängen die attribute zwar am block, also sind sichtbar, sollte man aber den block erneut eingeben oder auflösen, synchronisieren ect. verschwindet das fantasie attribut. schade also, dass das hier nicht umsetzbar ist. ich werde mich mal weiter schlau machen und suche gerade einen weg, es über das artful-programming API durchzuführen, da gibt es funktionen für attribut modifying. hier noch im anhang, das program für F-ATT zum ausprobieren, bin aber nicht zufrieden wie gesagt ------------------ Gruss Dirk 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: 24. Jan. 2013 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
laut deiner Sysinfo, hast du doch das VisualStudio 2010. Warum schlägst du dich dann mit Lisp rum .. in .Net (beispielsweise C#) ist das überhaupt kein Problem, Attribute an eine Blockreferenz anzuhängen. Wenn ich mich nicht täusche, bist du eh noch am Anfang vom Lisp-Lernen. Ich kann dir nur mpfehlen, auf c#.Net zu wechseln, besonders auch im Hinblick auf die bei dir eingesetzte Applikation. Da wird vieles einfacher (klar, manches auch schwerer). Hast du das AutoCAD Magazin? Da habe ich im vergangene Jahr ein Tool zum anhängen von Attributen veröffentlicht, im c#.Net-Quellcode. Da die Rechte daran alle an den Verlag übergehen, poste ich diesen hier nicht. Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! 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
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 24. Jan. 2013 12:57 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger! Mit lisp schlage ich mich schon seit geraumer zeit herum, habe da zwar viele fortschritte gemacht. Muss aber immer wieder feststellen, dass codes for 10 jahren einfach anders geschrieben wurden als heutzutage. mein hauptstandbein liegt da aber nach wie vor. den eintrag hast du richtig erkannt, das ist aber eben noch ein langer weg bis ich da wirklich durchsteige. drum päppel ich langsam meine lisp kenntnisse mit active´x auf. ein fluchtweg, der mehr oder minder dokumentierten visual lisp library ist phil kerkers ap-API, schon mal davon gehört? Das Autocad-magazin erhalte ich leider nicht, zumal ich neuerungen oft aus der direkten quelle ADESK erhalte - schade aber trotzdem, den code wirst du aber nicht veröffentlicht haben, daher ist es nicht wirklich eine hilfe für mich. ------------------ Gruss Dirk 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: 24. Jan. 2013 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: ... phil kerkers ap-API, schon mal davon gehört?...
Kenne ich nicht, inzwischen kenne ich mich (denke ich) auch in der .Net und der ActiveX und Lisp-API recht gut aus. Zitat: Original erstellt von cadplayer: ... Das Autocad-magazin erhalte ich leider nicht, zumal ich neuerungen oft aus der direkten quelle ADESK erhalte ......
... was nützen die Neuerungen? Diese haben doch eh nur in den seltensten Fällen etwas davon, was man als Lösung der Probleme bezeichnen könnte. Zitat: Original erstellt von cadplayer: ... den code wirst du aber nicht veröffentlicht haben, daher ist es nicht wirklich eine hilfe für mich.
Auf den AutoCAD Magazin Tool-CD's sind alle Programme, auch meine c#.NetTools, im QuellCode drauf - würde sich dann wohl doch lohnen. Grüße! Holger ------------------ Holger Brischke FREIE SCHULUNGSPLÄTZE -- C#.NET-Schulung im Mai 2013 Bei Interesse bitte melden! 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
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 24. Jan. 2013 13:55 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 31. Jan. 2013 09:59 <-- editieren / zitieren --> Unities abgeben:
|