| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: Dynamsiche Blöcke filtern (1028 / mal gelesen)
|
Danillo Mitglied Bauingenieur
 
 Beiträge: 245 Registriert: 12.11.2003 Windows 11 - AutoCAD 2023
|
erstellt am: 01. Mai. 2022 17:51 <-- editieren / zitieren --> Unities abgeben:         
Hallo Experten, habe bisher immer den Befehl (ssget "X" (list (cons 2 "Blockname"))) verwendet, um alle in der Zeichnung vorhanden Blöcke eines gewissen Namens zu erfassen. Nun möchte ich aber neben den bisherigen statischen Blöcken auch dynamische Blöcke verwendet und mit dem ssget-Befehl fangen. Leider wird beim Ändern der dynamischen Blöcke der Blocknamen in der Gruppe 2 umbenannt, sodass ich sie nicht mehr zu fassen bekomme. Da steht dann z.B. (2 . "*U13"). Wie bekomme ich ein Selection-Set mit allen dynamischen Blöcken eines gewissen Namens? Danke und viele Grüße Daniel ------------------ Windows 10 - AutoCAD 2017 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
    
 Beiträge: 1776 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. 2022 08:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Danillo
Hallo Daniel, direkt in der SSGET-Funktion wüßte ich keine Möglichkeit, falsch ich wüßte es gerne, weiß es aber nicht. Ich lasse im Nachgang den Auswahlsatz in einer Schleife auf den EffectiveName prüfen. Bei Zeichnungen mit sehr vielen Blöcken kann das dann aber schon dauern, vielleicht im ersten SSGET noch einen Layer als weiteren Filter einbauen, wenn möglich? Code:
(defun c:test ( / AWS BLOCKNAME) (setq Blockname "MeinBlock") (if(and (setq aws (ssget "_X" (list (cons 0 "INSERT")(cons 2 "*")))) (setq aws (aws:Dyn aws Blockname)) ) aws) ) (defun aws:Dyn (aws Blockname / AWS1 N) (setq aws1 (ssadd)) (setq n 0) (repeat (sslength aws) (if(wcmatch(strcase(vla-get-EffectiveName (vlax-ename->vla-object (ssname aws n)))) (strcase Blockname) ) (ssadd(ssname aws n)aws1)) (setq n (+ n 1))) (if (>(sslength aws1)0) aws1) )
------------------ viele Grüße Jörn http://www.bosse-engineering.com Bosse_tools-Überblick Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
       

 Beiträge: 22497 Registriert: 03.06.2002 Alles
|
erstellt am: 02. Mai. 2022 09:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Danillo
Zitat: Original erstellt von joern bosse: Bei Zeichnungen mit sehr vielen Blöcken kann das dann aber schon dauern, vielleicht im ersten SSGET noch einen Layer als weiteren Filter einbauen,
Da würde ich zunächst die Blockreferenzen ausschließen die auf keinen Fall in Frage kommen. (setq aws (ssget "_X" (list (cons 0 "INSERT")(cons 2 "*")))) (setq aws (ssget "_X" (list '(0 . "INSERT")(cons 2 (strcat "`*U*," Blockname)))))
So hat man nur noch Anordnungen und dynamische Varianten (+ die unveränderten Referenzen) des gesuchten Blockes in der Auswahl zum prüfen auf den effektiven Blocknamen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Danillo Mitglied Bauingenieur
 
 Beiträge: 245 Registriert: 12.11.2003 Windows 11 - AutoCAD 2023
|
erstellt am: 03. Mai. 2022 00:20 <-- editieren / zitieren --> Unities abgeben:         
|