Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  ENTMOD - Blockdefinition

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:  ENTMOD - Blockdefinition (3001 mal gelesen)
andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 13. Mai. 2003 20:21    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

Ich möchte zu einem 'Symbol Tabel Entity' XDATA mit ENTMOD hinzufügen.
Bei 'normalen' Zeichnungelementen habe ich mit XDATA keine Probleme, aber bei dem 'Symbol Tabel Entity' funzt das ganze nicht.

Dieses Entity kann ich überhaupt nicht mit ENTMOD ändern (ergibt immer 'nil).
(laut Online-Hilfe solls aber gehen)

hier nur mal ein Beispiel (ohne XDATA):

(setq ename (tblobjname "BLOCK" "myblock"))
-> <Objektname: 400b4da0>

(setq dxflist (entget (ename)))
-> ((-1 . <Objektname: 400b4da0> ) (0 . "BLOCK") (330 . <Objektname: 400b4d98> ) (5 . "C74") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 2) (100 .
"AcDbBlockBegin") (70 . 0) (10 0.0 0.0 0.0) (-2 . <Objektname: 400b4db0> ) (2 . "myblock") (1 . ""))

(entmod dxflist)
-> nil

Bei dem Beispiel werden keine Werte geändert. ENTMOD müßte aber trotzdem was zurückgeben ?!?

Warum läßt sich dieses Entity nicht ändern ?
Wie kann ich diesem Entity XDATA aufdrängen ? (geht das überhaupt ?)

Ich probiere schon seit Stunden herum.
Ihr seid meine letzte hoffnung...

Grüße

Andi

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 14. Mai. 2003 08:34    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 andi2050 10 Unities + Antwort hilfreich

Das geht nicht bei Blockdefinitionen, du kannst nur den Insert's XData's anklatschen

------------------
Gruß
CADwiesel

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 14. Mai. 2003 09:08    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 andi2050 10 Unities + Antwort hilfreich

Ich kann es jetzt auch nicht defintiv sagen - aber ich hänge auch XDATA an Layer - und das sind doch genauso Table-Entities. Kann aber sein, dass entmod da eine Sperre hat - entmod geht nicht bei Viewports, ändert nicht GC 330 u.ä., und noch ein paar Sachen.

XData an Bestandteilen von Blöcken (also nicht am BLOCK-Entity selbst, sondern an Geometrie) geht aber auf jeden Fall. Ist halt nur doof, wenn der Block nur Attribute enthalten soll.

Gruss, Axel

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 14. Mai. 2003 10:10    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 andi2050 10 Unities + Antwort hilfreich

Code:

(setq oBlock(vlax-ename->vla-object(tblobjname "BLOCK" "test")))
(setq ar1 (vlax-make-safearray vlax-vbInteger '(0 . 3)))
(vlax-safearray-fill ar1 '(1001 1000 1070 1040))
(setq ar2 (vlax-make-safearray vlax-vbVariant '(0 . 3)))
(vlax-safearray-fill ar2 '("myApp" "myString" 777 333.333 ))

(vla-setXdata oBlock ar1 ar2)  ; => nil

(entget(tblobjname"block""test")'("*"))

; => ((-1 . <Objektname: 4007de68> ) (0 . "BLOCK")
;     (330 . <Objektname: 4007de60> ) (5 . "9DC2F45")
;     (100 . "AcDbEntity") (67 . 0) (8 . "0")
;     (100 . "AcDbBlockBegin") (70 . 0) (10 0.0 0.0 0.0)
;     (-2 . <Objektname: 4007de70> ) (2 . "test") (1 . "")
;     (-3 ("myApp" (1000 . "myString") (1070 . 777)
;     (1040 . 333.333))))


(vla-getXdata oBlock "myApp" 'v1 'v2)

(vlax-safearray->list v1)
; =>  (1001 1000 1070 1040)

(vlax-safearray->list v2)
; =>  (#<variant 8 myApp> #<variant 8 myString>
;     #<variant 2 777> #<variant 5 333,333> )


Mit ActiveX geht's also. ABER: Ich kann keinen GC 1002 verwenden,
da kommt sofort eine Fehlermeldung. Ohne Gruppierung mit
(1002 . "{") und (1002 . "}") kann man das Ganze aber wohl in die
Tonne treten...

Nachtrag: Geht doch! Mein AutoCAD war wohl schon instabil....

Bei mir raucht Acad übrigens ab, wenn ich vla-setXData und vla-getXdata direkt hintereinander aufrufe.

Gruss, Axel

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

[Diese Nachricht wurde von mapcar am 14. Mai 2003 editiert.]

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 14. Mai. 2003 19:35    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

Erstmal Danke für Eure Antworten !

Schade, daß es nicht so ohne Probleme geht.
Muß ich halt mein Programm zum 3.Mal umstellen... (nerv !  )

@mapcar
Danke für Deine Bemühungen, aber das ganze ist mir etwas zu unsicher.
Hab in meinem Programm vorher mit LDATA gearbeitet. Es sah anfangs auch ganz gut aus und war recht einfach zu handhaben. Leider zeigte sich beim Testen, daß ACAD ständig abkackte ! -> LDATA + Grafik-Entitys = Müll !
Brauche jetzt eine stabile Lösung, sonst werde ich nie fertig !

Der XDATA-Satz soll auf jeden Fall irgendwo in der Blockdefinition enthalten sein. Da der BLOCK durch mein LISP erstellt wird, 'male' ich mir einfach als erstes ENTITY einen Punkt, an den ich dann XDATA anhänge. Dauert zwar etwas länger die Daten zu erhalten, ist aber glaub ich stabil. Den Punkt kann ich ja über GC60 unsichtbar machen, dann stört er nicht.

Grüße
Andi

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 16. Mai. 2003 23: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

Falls es jemanden interessiert...

XDATA läßt sich problemlos mir ENTMOD auf das BLOCKRECORD-Entity draufklatschen. (GC 330 von TBLOJNAME "BLOCK"...)
Design-Center haut da auch seine XDATA drauf. Könnte vielleicht Speicherplatzprobleme geben, aber 'a bisserl wos geht oiwei'.

Grüße
Andi

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

romi1
Mitglied
Bautechniker


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

Beiträge: 638
Registriert: 09.02.2006

Xeon E3-1245V2
16GB RAM
Windows 10 Professional 64 bit
AutoCAD 2014

erstellt am: 27. Dez. 2019 18:39    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 andi2050 10 Unities + Antwort hilfreich

Hallo!
Wie ist es möglich mittels Lisp eine Blockdefinition derart zu ändern, daß man entweder ein Objekt hinzufügt bzw. eines löscht.
Z. B. wenn der Block als Kreis mit div. Attributen definiert ist soll ein zweiter Kreis hinzugefügt werden oder wenn ein Block bereits mit 2 Kreisen definiert ist soll einer gelöscht werden.

Unten geht es z. B. um den Block "500". Wie man sieht folgen auf den "CIRCLE" die Attribute. Deren gibt es mehrere - ich habe hier nurs eines hereinkopiert. Wie kann ich einen weiteren CIRCLE hinzufügen. Geht das z. B. über entmake??. Schön wär's, wenn es eine Lösung mit herkömlichen (alten?) lisp-Befehlen gibt. Mit den vl-Befehlen (Visual-Lisp) kenn ich mich leider nicht aus.

Gruß,
Roman


Code:
Befehl: (entget(tblobjname "BLOCK" "500"))
((-1 . <Objektname: 7ff45bb84350>) (0 . "BLOCK") (330 . <Objektname: 7ff45bb84330>) (5 . "10E2D") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 7) (370 . 25) (100 . "AcDbBlockBegin") (70 . 2) (10 0.0 0.0 0.0) (-2 . <Objektname: 7ff45b00fbf0>) (2 . "500") (1 . ""))
Befehl: (entget(entnext(tblobjname "BLOCK" "500")))
((-1 . <Objektname: 7ff45b00fbf0>) (0 . "CIRCLE") (330 . <Objektname: 7ff45bb84330>) (5 . "3436F") (100 . "AcDbEntity") (67 . 0) (8 . "0") (62 . 7) (6 . "Continuous") (370 . 18) (100 . "AcDbCircle") (10 0.0 0.0 0.0) (40 . 0.25) (210 0.0 0.0 1.0))
Befehl: (entget(entnext(entnext(tblobjname "BLOCK" "500"))))
((-1 . <Objektname: 7ff45b00fc70>) (0 . "ATTDEF") (330 . <Objektname: 7ff45bb84330>) (5 . "34387") (100 . "AcDbEntity") (67 . 0) (8 . "PUNKTE1") (100 . "AcDbText") (10 1.44327 3.89793 0.0) (40 . 1.0) (1 . "") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "TXT") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttributeDefinition") (280 . 0) (3 . "Nummer") (2 . "PNUM") (70 . 0) (73 . 0) (74 . 0) (280 . 0))

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