Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Attribute zum Block

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Attribute zum Block (2963 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 23. Jan. 2013 11:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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


Sehen Sie sich das Profil von Wolfgang Kirsch an!   Senden Sie eine Private Message an Wolfgang Kirsch  Schreiben Sie einen Gästebucheintrag für Wolfgang Kirsch

Beiträge: 41
Registriert: 29.04.2002

erstellt am: 24. Jan. 2013 10:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


AddAttributesToBlock3.LSP

 
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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 24. Jan. 2013 12:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 24. Jan. 2013 12:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 24. Jan. 2013 13:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 24. Jan. 2013 13:55    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

UI dann wäre es natürlich interessant; ich hatte doch mal den link in meine explorer buttos gelegt, doch nicht überholt 

------------------
Gruss Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich verweise mal auf meine Nachfrage

------------------
Gruss Dirk

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz