Změna hladiny bloku podle entit, které ho tvoří
Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: AutoCAD
Popis fóra: Otázky kolem aplikací AutoCAD a AutoCAD LT, AutoCAD web, prohlížečů, DWG a DXF, Design Review, Navisworks, nadstavby, Drive a cloud Autodesk
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=35698
Datum vytištění: 12.říj.2026 v 09:35
Téma: Změna hladiny bloku podle entit, které ho tvoří
Odeslal: Pavel Pospíšil
Předmět: Změna hladiny bloku podle entit, které ho tvoří
Datum odeslání: 19.srp.2025 v 09:56
Dobrý den, mám ve výkrese bloky, které jsou tvořeny entitami s nastavenou Tloušťkou čáry, Typem čáry, Barvou a Hladinou. Všechny entity v každém bloku mají tyto vlastnosti nastavené stejným způsobem. Samotné bloky jsou v hladině 0. Ve výkrese jsou nižší desítky unikátních bloků s takovými vlastnostmi, z nichž každý má větší množství duplicit. Celkové množství bloků ve výkrese je v řádu tisíců, někdy nízkých desetitisíců. Rád bych dosáhl toho, aby
minimum: jedním příkazem nastavím pro každý blok takovou hladinu, jakou mají jeho entity (hromadně, pro všechny jeho duplicity současně). Dneska to dělám tak, že otevřu "Blok1" v editoru bloků, zjistím, že jeho entity jsou v hladině "28", poznamenám si to nebo si to zapamatuji, zavřu editor bloků, Rychlým výběrem vyberu ve výkresu všechny "Bloky1" a hromadně změním jejich hladinu z "0" na "28"
v lepším případě: když už mám otevřený ten editor bloků, potřebuji změnit Tloušťku čáry, Typ čáry a Barvu na "DleHlad" a Hladinu entit na "0". Takže by se mi hodilo, kdybych dokázal jedním nebo dvěma příkazy změnit hladinu bloku podle entit, ze kterých se skládá a pak ty entity nastavit na výše uvedené hodnoty. Opět hromadně, pro všechny duplicity "bloku1"
v dokonalém světě: úplně dokonalé by bylo udělat to pro všechny bloky ve výkrese naráz. "Blok1" má entity v hladině "28", potřebuji ho tedy dostat do hladiny "28" a jeho entity přenastavit viz výše. Ve všech jeho duplicitách. "Blok2" má entity v hladině "11", potřebuji tedy všechny "Bloky2" dostat do hladiny "11" a entity, které ho tvoří, nastavit opět na "DleHlad" a hladinu "0". A tak dále.
Děkuji za případné tipy.
Pavel Pospíšil.
|
Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 19.srp.2025 v 13:05
|
Můžete vyzkoušet aktualizovanou verzi naší utility SetByBlock. Volitelně umí povýšit vlastnosti definičních entit bloku na vlastnosti reference daného bloku.
Viz https://www.cadforum.cz/cz/existuje-i-prikaz-nastavdleblok-setbyblock-tip13857 - https://www.cadforum.cz/cz/existuje-i-prikaz-nastavdleblok-setbyblock-tip13857
------------- Vladimír Michl https://CADs.cz - CADs.cz , https://www.linkedin.com/in/vmichl/ - LinkedIn Autodesk Expert Elite
|
Odeslal: Petr75
Datum odeslání: 19.srp.2025 v 13:08
|
Myslím, že by na to stačil jednoduchý lisp program. Bez ošetřování nějakých chyb bo to mohlo být např. toto:
(defun c:Block_Layer ( / ss i n n_text en en2 enList enList2 name Layer) (setq ss (ssget "_X" (list (cons 0 "INSERT")))) (if ss (progn (setq n (sslength ss)) (setq n_text (strcat "/" (itoa n))) (setq i 0) (repeat n (setq en (ssname ss i)) (setq enList (entget en)) (setq name (cdr (assoc 2 enList))) (setq en2 (tblobjname "BLOCK" name)) (setq enList2 (entget (entnext en2))) (setq Layer (cdr (assoc 8 enList2))) (setq enList (subst (cons 8 Layer) (assoc 8 enList) enList)) (entmod enList) (setq i (1+ i)) (princ (strcat "\r" (itoa i) n_text)) ) ;repeat (princ "\r ") (setq oldSetByLayerMode (getvar "SetByLayerMode")) (setvar "SetByLayerMode" 255) (setq ss (ssget "_X")) (command-s "_.setbylayer" ss "" "_y" "_y") (setvar "SetByLayerMode" oldSetByLayerMode) )) ;if (command "._REGEN") (princ) ) ;defun Block_Layer (princ)
-- Byl jsem byl o pár minut pomalejší s odpovědí a možná jsem vymýšlel něco, co už je vymyšlené. Bohužel si tipy na tomto serveru nepřečtu.
|
Odeslal: Pavel Pospíšil
Datum odeslání: 19.srp.2025 v 13:43
Vladimír Michl napsal(a):
Můžete vyzkoušet aktualizovanou verzi naší utility SetByBlock. Volitelně umí povýšit vlastnosti definičních entit bloku na vlastnosti reference daného bloku.
Viz https://www.cadforum.cz/cz/existuje-i-prikaz-nastavdleblok-setbyblock-tip13857 - https://www.cadforum.cz/cz/existuje-i-prikaz-nastavdleblok-setbyblock-tip13857 |
Díky za tip, funguje. Vaší utilitou hromadně změním hladinu bloků podle potřeby (a současně entity uvnitř bloku převedu do hladiny "0") a pak příkazem AutoCADu NASTAVDLEHLAD stejně tak hromadně upravím vlastnosti entit uvnitř bloků. Mám všechny bloky ve výkrese na dva příkazy, což je paráda. Ještě jednou děkuji. Pavel Pospíšil.
|
Odeslal: Vladimír Michl
Datum odeslání: 19.srp.2025 v 13:50
Petr75 napsal(a):
Myslím, že by na to stačil jednoduchý lisp program. |
Nestačil. U druhého vložení téhož bloku to selže (definice bloku už bude jednou modifikována).
------------- Vladimír Michl https://CADs.cz - CADs.cz , https://www.linkedin.com/in/vmichl/ - LinkedIn Autodesk Expert Elite
|
Odeslal: Petr75
Datum odeslání: 19.srp.2025 v 14:25
|
Já v programu vybral všechny bloky a postupně se přesouval jednotlivé bloky do hladiny, dle první entity v bloku. Až nakonec jsem všechny bloky nastavil dlehlad.
|
Odeslal: Vladimír Michl
Datum odeslání: 19.srp.2025 v 15:18
Jenomže ty definice procházíte vícekrát a už po první úpravě se definice změní (opravoval jsem v mé aplikaci stejnou chybu).
------------- Vladimír Michl https://CADs.cz - CADs.cz , https://www.linkedin.com/in/vmichl/ - LinkedIn Autodesk Expert Elite
|
|