Zobrazit plnou verzi příspěvku: Změna hladiny bloku podle entit, které ho tvoří

Pavel Pospíšil
19.08.2025, 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, abyminimum: 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.

Vladimír Michl
19.08.2025, 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

Petr75
19.08.2025, 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.

Petr752025-08-19 13:24:17

Pavel Pospíšil
19.08.2025, 13:43
[QUOTE=Vladimír Michl] 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[/QUOTE] 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. Pavel Pospíšil2025-08-19 14:02:18

Vladimír Michl
19.08.2025, 13:50
[QUOTE=Petr75]Myslím, že by na to stačil jednoduchý lisp program.[/QUOTE]Nestačil. U druhého vložení téhož bloku to selže (definice bloku už bude jednou modifikována).
Vladimír Michl2025-08-19 13:53:27

Petr75
19.08.2025, 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.

Vladimír Michl
19.08.2025, 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).