Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  Lisp
  Dynamisch Blöcke in statisch Blöcke umwandeln

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:  Dynamisch Blöcke in statisch Blöcke umwandeln (209 / mal gelesen)
Helmi3000
Mitglied



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

Beiträge: 184
Registriert: 04.02.2013

ADT 2025
Lenovo p16s
nVidia T550

erstellt am: 30. Apr. 2025 10:13    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,

ich habe irgentwo diese Lisp gefunden hier im Forum aber ich finde den Eintrag nicht mehr.
Diese funktioniert super nur ein Problem habe ich damit der erste Block der Erzeugt wird hat keine Nummer erst der 2 Block bekommt eine Nummer.
Also der dynamische Block heißt zum Beispiel
Kasten_dy
dann wird mit der Lisp zu erst ein Block mit Kasten_dy erzeugt und dann einer mit Kasten_dy 01
Jetzt hätte ich gerne das der erste Block schon Kasten_dy 01 heißt.
Kann man die Formel so umbauen?

Code:

(defun c:UnDynamic
    (   /
        _get_item
        _right
        _make_key
        _dynamic->static_block
        _get_locked
        _get_dynamic_inserts
        _main
     bn_lst
    adoc
    )
    (defun _get_item ( collection key / item )
        (vl-catch-all-apply
           '(lambda ( ) (setq item (vla-item collection key)))
        )
        item
    )
    (defun _right ( str n / len )
        (if (< n (setq len (strlen str)))
            (substr str (1+ (- len n)))
            str
        )
    )
    (defun _make_key ( collection prefix len / key )
        (   (lambda ( i pad )
                (while
                    (_get_item collection
                        (setq key
                            (strcat prefix
                                (_right
                                    (strcat pad (itoa (setq i (1+ i))))
                                    len
                                )
                            )
                        )
                    )
                )
                key
            )
            0
            (   (lambda ( pad )
                    (while (< (strlen pad) len)
                        (setq pad (strcat "0" pad))
                    )
                    pad
                )
                ""
            )
        )
    )


;;; Autodesk Lisp Forum            ;;;

     
      (defun _dynamic->static_block ( blocks insert len blst / f bn  bnr)
       (setq bn  (vla-get-effectivename insert))   
        (vla-ConvertToStaticBlock
            insert
            (setq bnr (_make_key blocks (strcat bn " ") len))
        )
        (setq bnr (list bn (vl-string-left-trim (strcat bn " ") bnr) insert))  
        (if (setq f (assoc bn blst))
(subst bnr f blst)(cons bnr blst))
)

;;; Autodesk Lisp Forum            ;;;

     
    (defun _get_locked ( layers / locked )
        (vlax-for layer layers
            (if (eq :vlax-true (vla-get-lock layer))
                (setq locked (cons layer locked))
            )
        )
        locked
    )
    (defun _get_dynamic_inserts ( blocks / inserts )
        (vlax-for block blocks
            (vlax-for object block
                (if (eq "AcDbBlockReference" (vla-get-objectname object))
                    (if (eq :vlax-true (vla-get-isdynamicblock object))
                        (setq inserts (cons object inserts))
                    )
                )
            )
        )
        inserts
    )
    (defun _main ( document / blocks inserts locked len )
        (if
            (setq inserts
                (_get_dynamic_inserts
                    (setq blocks (vla-get-blocks document))
                )
            )
            (progn
                (foreach layer (setq locked (_get_locked (vla-get-layers document)))
                    (vla-put-lock layer :vlax-false)
                )
                (setq len (strlen (itoa (length inserts))))
                (foreach insert inserts
(Setq bn_lst
                    (_dynamic->static_block blocks insert len bn_lst))
                     
                )
                (foreach layer locked
                    (vla-put-lock layer :vlax-true)
                )
            )
        )
        (princ)
    )


;;; Autodesk Lisp Forum            ;;;

(repeat 4 (vla-purgeall (setq adoc (vla-get-activedocument (vlax-get-acad-object)))))
     
(_main adoc)
     
(repeat 4 (vla-purgeall adoc))
(setq blocks (vla-get-blocks adoc))
(foreach itm bn_lst
(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name
          (list (vla-item blocks (Strcat (Car itm)" "(cadr itm))) (Car itm))))
   )

;;; Autodesk Lisp Forum            ;;;
         
)


[Diese Nachricht wurde von Helmi3000 am 05. Mai. 2025 editiert.]

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung und AutoLISPler


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: 1779
Registriert: 11.10.2004

Window 11
ACAD 2021
CIVIL 2021
BricsCAD ab V14
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
32.0GB RAM
NVIDIA GeForce MX450<P>

erstellt am: 02. Mai. 2025 08:20    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 Helmi3000 10 Unities + Antwort hilfreich

Hallo Helmi,
wenn Du folgende Zeilen auskommentierst (Semikolon(s) voranstellen) oder entfernts sollten alle Blöcke eine Nummer haben:
Code:

;;;(setq blocks (vla-get-blocks adoc))
;;;(foreach itm bn_lst
;;;(vl-catch-all-error-p (vl-catch-all-apply 'vla-put-name
;;;          (list (vla-item blocks (Strcat (Car itm)" "(cadr itm))) (Car itm))))
;;;  )


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

Jörn
http://www.bosse-engineering.com

Der Multifilter (V 1.1)

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



Anzeige:Infos zum Werbeplatz >>

cseTools Kanalsanierung CAD APP für Tiefbau, AEC - Architektur-, Ingenieur- und Bauwesen

Mit cseTools Kanalsanierung kann auf Basis des Kanalkatasters eine Sanierungsplanung durchgeführt werden. Vollautomatisch durch intelligente Zuordnung von Sanierungsverfahren zu Schadensbildern oder manuell. Voraussetzung ist das Modul "cseTools Kanalkataster".

Helmi3000
Mitglied



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

Beiträge: 184
Registriert: 04.02.2013

ADT 2025
Lenovo p16s
nVidia T550

erstellt am: 05. Mai. 2025 07: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

Vielen Dank Jörn das hat super funktioniert     

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