Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Wie Liste arrangieren für mit entmake erstellten 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:  Wie Liste arrangieren für mit entmake erstellten Block? (1735 mal gelesen)
holgerka75
Mitglied



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

Beiträge: 15
Registriert: 19.03.2004

erstellt am: 28. Apr. 2004 14:01    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 Lisp´ler,

ich erstelle einen Referenzpunkt mit entmake:

(setq referenzpunkt
(list
  '(0 . "INSERT")
  '(100 . "AcDbEntity")
  '(8 . "Layername")
  '(100 . "AcDbBlockReference")
  '(2 . "RefPkt")
  (assoc 10 (entget block1))
)
)
(entmake hauptrefpktliste)

Aus "block1" kommen Koordinaten, aber das nur nebenher....

So, nun möchte ich in die zweite Stufe der Hierarchie gehen. (entget block = Stufe 1; entnext entget block = Stufe 2 usw....)

In der zweiten Stufe wird nun die Punktnummer eingetragen.

Also z.B.
(list
'(0."INSERT")
...
...
...
'(2."PNR")
usw...

Jetzt meine schlaue Frage:
Wie bekomme ich die ganzen Hierarchie-Stufen in eine einzige Liste geschrieben? Ich kann das doch nicht einfach zusammenfassen, die einzelnen Attribute (2. 100. usw. )kommen ja öfters vor....!?

Oje oje, ich hoffe, Ihr habt verstanden was ich meine....

Gruß
Holger

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


Ex-Mitglied

erstellt am: 28. Apr. 2004 14:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Zitat:
Original erstellt von holgerka75:
Oje oje, ich hoffe, Ihr habt verstanden was ich meine....

Nöö, eigentlich nicht :-)

Du erzeugst eine Blockreferenz via ENTMAKE. Dazu verwendest Du die DXF-Liste so, wie sie benötigt wird. Die anderen zu erzeugenden Entities haben damit nix zu tun.

Du erwähnst ganz, ganz nebenbei was von Attributen - soll Deine Blockreferenz auch Attribute aufweisen? Die Attribute einer Blockreferenz haben so gut wie gar nichts mit den ATTDEF Elementen einer Blockdefinition zu tun. Du kannst Referenzen ohne Attribute von Blöcken erzeugen, die ATTDEFs haben, udn Du kannst Attribute an Blockreferenzen anhängen, deren Blockdefinitionen keine ATTDEFs haben. Für das Erzeugen der ATTRIBs erzeugst Du erst mal die Blockreferenz selber mit dem passenden 70er Flag (Attribute folgen), und unmittelbar danach die ATTRIBs, die Du haben willst. Ob zum Abschluss ein SEQUEND nötig ist, weiss ich im Moment auch nicht, aber das kannst Du ja einfach durch ENTNEXT auf ein Attribut selber heraus finden.

Tom Berger

------------------
Architekturwerkzeuge für AutoCAD: http://www.archtools.de

holgerka75
Mitglied



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

Beiträge: 15
Registriert: 19.03.2004

erstellt am: 28. Apr. 2004 14:46    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 Tom,

danke erstmal für Deine Antwort!

Aaalso, ja, ich will einen Block erstellen, und ja, der Block soll mehrere Attribute besitzen.
Und das was ich nicht weiss, ist, wie ich die verschiedenen Attribute in diese Liste reinbekomme.
Zur Erstellung des Blocks habe ich '(0. "INSERT"), dann kommen die Attribute, die ja immer mit '(0. "ATTRIB") anfangen, und dann hinten mit '(2. "PNR") oder "HOE" usw..(zusammen mit den Attributseigenschaften) aufhören! Wie fasse ich das alles zusammen? Ich kann doch nicht einfach alles hintereinander schreiben?
z.B.
'(0."ATTRIB")
'(1.eigenschaften_pnr)
'(2."PNR")

'(0."ATTRIB")
'(1.eigenschaften_hoe)
'(2."HOE")
usw...
Oder doch?

Gruß
Holger
Ist dieser von Dir genannte 70-Flag die Lösung?

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

CAD-Huebner
Ehrenmitglied V.I.P. h.c.
Verm.- Ing., ATC-Trainer



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 28. Apr. 2004 16:25    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 holgerka75 10 Unities + Antwort hilfreich

Wie kann ich eine eine Blockreferenz inklusive Attributen mit Entmake erzeugen. Ich hoffe, dass ist die gesuchte Antwort.
Das Flag 66 im Hauptelement "INSERT" bestimmt, ob Attribute folgen.

(DEFUN C:BLOCKTEST (/ ATTLISTE ATTPOS BLOCKNAME I PKT)

  ; Konstanten
  (SETQ Blockname "TESTBLOCK1"
        pkt      '(0.0 0.0 0.0)        ; Blockeinfügepunkt Vorgabe
        attliste  '(("PKTNR" . "100") ("HÖHE" . "12.12"))
        i        0                    ; Attributzähler für Attributversatz benutzt
  )
  ; lokale Funktion
  (DEFUN CREATE_BLOCK (blkname)        ; falls Block nicht defniert ist
    (ENTMAKE
      (LIST (CONS 0 "POINT") (CONS 8 "0") (LIST 10 0.0 0.0 0.0))
    )
    (COMMAND "_BLOCK" blkname (LIST 0.0 0.0 0.0) (ENTLAST) "")
  )


  ; Beginn Hauptprogramm

  (IF (NOT (TBLSEARCH "BLOCK" Blockname))
    (CREATE_BLOCK Blockname)
  )
  ; Hauptelement schreiben
  (ENTMAKE (LIST (CONS 0  "INSERT")
                (CONS 8  (GETVAR "CLAYER"))
                (CONS 2  Blockname)    ; Blockname
                (CONS 41 1.0)          ; ScaleX
                (CONS 42 1.0)          ; ScaleY
                (CONS 43 1.0)          ; ScaleZ
                (CONS 50 0.0)          ; rotation
                (CONS 10 pkt)          ; blkorigin
                (CONS 66 1)            ; Attribs follows / Attribute folgen
          )
  )
                                        ; attliste ist Beschreibungsliste für alle einzuhängenden Attribute
  (FOREACH ele attliste
    (SETQ attpos (LIST (+ (NTH 0 pkt) 1.0)
                      (- (NTH 1 pkt)
                          (* (SETQ i (1+ i))
                            (GETVAR "TEXTSIZE")
                          )
                      )
                )
    )
    (ENTMAKE (LIST (CONS 0 "ATTRIB")
                  (CONS 2 (CAR ele))  ; Attributname
                  (CONS 1 (CDR ele))  ; Attributinhalt
                  (CONS 8 (CAR ele))  ; Attributname als Layer
                  (CONS 10 attpos)    ; Textposition
                  (CONS 40 (GETVAR "TEXTSIZE")) ; Texthöhe
                  (CONS 70 0)          ; Sichtbarkeit
            )
    )
  )                                    ; ende foreach

                                        ; Sequenzende-Element
  (ENTMAKE (LIST (CONS 0 "SEQEND")))

  ;(PROMPT "Blockreferenz erzeugt!")
)                                      ; ende DEFUN

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