Vytisknout stránku | Zavřít okno

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 360, prohlížečů, DWG a DWF, Design Review, Navisworks, nadstavby, 123D, A360 a cloud Autodesk 360
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=35698
Datum vytištění: 28.kvě.2026 v 08:47


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 (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


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
Původně odeslal(a) Vladimír Michl 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
Původně odeslal(a) Petr75 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 (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)


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 (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz emea.support.arkance.world)



Vytisknout stránku | Zavřít okno