Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Elemente eines Blocks

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
Autor Thema:   Elemente eines Blocks (1288 mal gelesen)
gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 647
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 22. Jul. 2008 10:30    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!

Endet die Schleife nach dem letzten Element mit NIL oder mit "ENDBLK"? (ENDBLK gibt's doch eigentlich gar nicht als entity, wird aber im DXF-Format als solches verwendet. Warum?)


(DEFUN block-elemente (
/
bl-obj
bl
)

 
(SETQ bl-obj (CDR (ASSOC -2 (tblsearch "BLOCK" (gc_dxf 2 (ENTGET (CAR (ENTSEL))))))))
(SETQ bl (ENTGET bl-obj))
(WHILE <------------------------------- nil oder ENDBLK??
    (SETQ bl (ENTGET bl-obj))
    (SETQ bl-obj (ENTNEXT bl-obj))

)

Ciao Georg

------------------
http://www.xx-tausend.info

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13464
Registriert: 30.11.2003

.

erstellt am: 22. Jul. 2008 10:42    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 gmk 10 Unities + Antwort hilfreich

mal ein Codeschnipsel.. denke , die Formatierung bekommst du wieder hin

(if(setq BLOCKDEF (tblsearch "BLOCK" BLOCKNAME))          ; Blockdefinition zum Blocknamen auslesen
  (progn           
    (if(and (/=(logand(cdr(assoc 70 BLOCKDEF))4)4)                 ; ist Block kein kein XREF, und
            (or (/= (logand(cdr(assoc 70 BLOCKDEF))1)1)            ; auch kein unbenannter Block wie
                (=(vl-string-search "*U" BLOCKNAME) 0)            ; Bemassung , Schraffur ect. ...
            )
       )
      (progn
         (setq BLOCKELEMENT (cdr (assoc -2 BLOCKDEF)))             ; Adresse der Blockelemente holen
         (while BLOCKELEMENT            ; und solange nicht alle Blockelemente abgearbeitet sind ...
            ;"MACH WAS MIT BLOCKELEMENT"  
            (setq BLOCKELEMENT (entnext BLOCKELEMENT))
         )
      )
    )
  )
)

------------------
      - 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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1683
Registriert: 11.10.2004

erstellt am: 22. Jul. 2008 11:02    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 gmk 10 Unities + Antwort hilfreich

Hallo Georg,
außerdem ist der Unterschied zwischen Block und Blockdefinition zu beachten.
Wenn ich z.B. alle Attribute eines Blockes haben will, dann

Code:

(setq obj (car (entsel)))
(while(and(setq obj (entnext obj))
          (/= (cdr(assoc 0 (entget obj)))"SEQEND"))
    (if (=(cdr(assoc 0 (entget obj)))"ATTRIB")
        (setq att_liste (cons obj att_liste))))

Wenn ich diese aber aus der Blockdefinition beziehen will, dann

Code:

(setq obj (tblobjname "BLOCK" "Blockname"))
(while (setq obj (entnext obj))
  (if (=(cdr(assoc 0 (entget obj)))"ATTDEF")
    (setq att_liste (cons obj att_liste))))

Bei der Blockdefinion solange entnext bis nil zurückgegeben wird, dafür werden alle Blockelemente durchlaufen.
Bei dem Block solange kein "SEQEND" auftaucht, es werden aber nur die Attribute durchlaufen, nicht die Geometrieobjekte.

------------------
viele Grüße

Jörn

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 647
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 22. Jul. 2008 11:42    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!

Das mit NIL dachte ich mir schon, war auch der Rückgabewert beim 1.Versuch, war mir blos nicht ganz sicher da im DXF und in der Hilfe immer von ENDBLK geschrieben wird.

@Jörn
Es gibt noch den dritten Fall dass in einem Block ein insert mit Attributen abgelegt ist. Dann befinden sich im übergeordneten Block auch Attribute und um das geht es mir eigentlich .....

Danke nochmal für die schnellen Infos!

Ciao Georg

------------------
http://www.xx-tausend.info

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

Hans-Leo Müller
Mitglied
Lehrer an Berufsbildenden Schulen


Sehen Sie sich das Profil von Hans-Leo Müller an!   Senden Sie eine Private Message an Hans-Leo Müller  Schreiben Sie einen Gästebucheintrag für Hans-Leo Müller

Beiträge: 29
Registriert: 24.09.2003

erstellt am: 08. Feb. 2021 11: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 gmk 10 Unities + Antwort hilfreich

Hallo Forum,

Ich habe ein Problem mit dem Auslesen von Blöcken.
Kann zwar die Liste erstellen mit den Objekteinträgen "SEQEND",
es fehlt mir aber die Möglichkeit auf die Geometriedaten (z.B Kreis oder Bogen zuzugreifen. Ich habe es schon versucht mit assoc und tblsearch, leider kein Erfolg.
Kann mir jemand dabei helfen ?
Gruß Hans-Leo


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

cadffm
Moderator
良い精神




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

Beiträge: 20275
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 08. Feb. 2021 11:43    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 gmk 10 Unities + Antwort hilfreich

Hi,

so wie du es beschreibst hast du wohl keinen Block, sondern eine Blockreferenz..
Eine Blockreferenz hat keine Geometrie (außer den vielleicht damit verknüpften Attributen).

Eine Blockreferenz zeigt nur die grafischen Objekte eines Blockes..
An den Block und den darin enthaltenen Objekten kommst du wie es hier in der ersten Antwort bereits gezeigt wurde.
https://ww3.cad.de/foren/ubb/Forum145/HTML/002535.shtml#000001

EDIT:
Wo CADmium die Zeile
;"MACH WAS MIT BLOCKELEMENT" 
hat, ergänze doch um eine einfache Rückmeldung wie zB "alert Objekttyp"
(alert (cdr(assoc 0 (entget BLOCKELEMENT)))) ;"MACH WAS MIT BLOCKELEMENT" 


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)2021 CAD.de | Impressum | Datenschutz