Zobrazit plnou verzi příspěvku: správce stavů hladin - akt. pro všechny výřezy

Koluch
09.10.2020, 09:42
Dobrý den,prosím Vás, řeším jeden problém:Mám 50 rozvržení a v nich vždy jeden výřez (někde je výřez A, někde B a někde C - střídají se mi tyto tři výřezy). V každém výřezu mám zmražené různé hladiny. A pro každý výřez mám nastaveno STAV HLADIN. Když chci přidat novou hladinu a zobrazovat ji jen ve výřezech A, tak musím proklikat všechny rozvržení, prokliknout se do daných výřezů A a přes Správce stavů hladiny dát aktualizovat. A přitom by se mi hodilo, kdyby po klinutí na tlačítko AKTUALIZOVAT ve Správci stavů hladin, se zaktualizovaly všechny výřezy, kde mám daný stav hladiny.Dá se toto nějak udělat? Abych nemusel po přidání jedné nové hladiny, procházet všechny rozvržení a výřezy?Děkuji.Lukášuploads/40779/stav._hlad.pdf

splonk
09.10.2020, 12:27
Zdravím,asi to není 10% řešení... možná to může být směr, kudy se vydat...Zkoušel jste "tisknout přes XREFy". Do jednoho DWG kreslíte a do ostatních (např. A, B a C) to připojíte jako externí referenci a potřebné layouty si řešíte tam... Pak by StavHladin mohl platit pro všechny Layouty v DWG-čku (3 typy STavHlad -> 3 DWG) a k tomu by se asi lehce dalo napsat něco, co by je aktualizovalo...A vůbec, to tisknutí přes Xref otevírá další level možných "vychytávek" při tisku... 

Koluch
09.10.2020, 13:18
hmmm tak to už bude vyšší dívčí asi :-(

johny
13.10.2020, 13:51
Můžete zkusit tuto utilitku. Stav hladin se páruje dle názvu hladiny viewportu (výřezu). Updatuje všechny.Jinak má to trochu problém s regenerací, něco se zregeneruje, něco ne. Kdyžtak je třeba manuálně regenerovat. ; příklad použití; (lsapply "C2" "vykres_rozvrzeni C2")(vl-load-com)(defun LSApply (lsname vplayer / s o i b l a)   (if (and (or (layerstate-has lsname)        (prompt (strcat "\nError: No '" lsname "' layerstate found in the drawing.")))           (or (setq s (ssget "_X" (list '(0 . "VIEWPORT") (cons 8 vplayer))))        (prompt (strcat "\nError: No viewport found in '" vplayer "' layer.")))    (setq o (getvar 'ctab))           )    (progn      (repeat (setq i (sslength s)) (setq e (ssname s (setq i (1- i)))       b (cdr (assoc 410 (entget e)))       l (if (setq a (assoc b l))   (subst (append a (list e)) a l)   (cons (cons b (list e)) l))))      (foreach tab l (setvar 'ctab (car tab)) (foreach vp (cdr tab)   (layerstate-restore lsname vp 4)))  ; setting: http://help.autodesk.com/view/ACD/2021/ENU/?guid=GUID-84C7195D-12C1-4282-B5EE-8B9D6DDB705A (command "_.REGENALL")      (setvar 'ctab o)))  (princ)  )

Koluch
03.11.2020, 15:02
Johny, prosím Vás, poradíte mi, co mám dále dělat se zdrojovým kódem, který jsme napsal?Děkuji, L.

Koluch
12.01.2021, 11:01
Johny, prosím Vás, poradíte mi, co mám dále dělat se zdrojovým kódem, který jste napsal?Děkuji, L.

Vladimír Michl
12.01.2021, 11:30
Je to LISP makro, takže uložit do textového souboru s příponou .LSP, načíst jej do AutoCADu příkazem APLČTI a použít dle naznačeného příkladu.

Koluch
08.02.2021, 15:05
Dobrý den, Johny,utilitka mi nefunguje, ani po ruční aktualizaci.Oba výřezy mám v hladině 0. Poradíte mi ještě nějak prosím?Děkuji, Lukáš.

johny
08.02.2021, 17:16
https://autode.sk/3rsdOV4Funguje, přesně jak jsem psal asi před půl rokem. Jen je třeba to občas přeregenerovat aby se to updatovalo. Jediné co se tedy dá zlepšit, je to nechat regen ve všech layoutech.Toť asi vše co mohu pro vás udělat. Jestli se nezadaří, pak nechte ležet.(vl-load-com)(defun LSApply (lsname vplayer / s o i b l a)   (if (and (or (layerstate-has lsname)        (prompt (strcat "\nError: No '" lsname "' layerstate found in the drawing.")))           (or (setq s (ssget "_X" (list '(0 . "VIEWPORT") (cons 8 vplayer))))        (prompt (strcat "\nError: No viewport found in '" vplayer "' layer.")))    (setq o (getvar 'ctab))           )    (progn      (repeat (setq i (sslength s)) (setq e (ssname s (setq i (1- i)))       b (cdr (assoc 410 (entget e)))       l (if (setq a (assoc b l))   (subst (append a (list e)) a l)   (cons (cons b (list e)) l))))      (foreach tab l (setvar 'ctab (car tab)) (foreach vp (cdr tab)   (layerstate-restore lsname vp 4)   (command "_.regenall")))  ; setting: http://help.autodesk.com/view/ACD/2021/ENU/?guid=GUID-84C7195D-12C1-4282-B5EE-8B9D6DDB705A       (setvar 'ctab o)))  (princ)  )

Koluch
09.02.2021, 11:07
Děkuji Johny,ale pořád mi to nejde.Posílám na ukázku výkres ve kterém mám dvě rozvržení a každé rozvržení má několik výřezů.Když do modrého výřezu v Rozvržení1 dokreslím světle modrý 6-ti úhelník - aktualizuji stav hladiny MODRÉ. Poté spustím příkaz _.regenall a nic se nestane. Tady v tom momentě očekávám, že se druhý modrý výřez na Rozvržení1 taky zregeneruje a objeví se tam 2 modré obdélníky, modré kolečko a světle modrý 6-ti úhelník.Nebo jsem ten autoLISP pochopil špatně?Děkuji za rady.Lukášuploads/40779/stav_hladin_ve_výřezech.dwg

johny
09.02.2021, 11:52
@kolouchten lisp funguje bezchybně - https://autode.sk/3a3gSkBprvně se prosím vyhledejte a naučte jak lisp vůbec použít, jak jej načíst, jak jej spustit. ten lisp opravdu nefunguje automaticky, musíte jej spustit. třeba tak jak jsem to udělal v prvním videu, nebo ve druhém...taky se důkladně seznamte s tím jak stavy hladin fungují. jak se dají nastavit, co a jak se aktualizuje. pak se snažte si život trochu z zjednodušit - ten lisp aktualizuje všechny výřezy dané hladiny ve všech rozvrženích do daného stavu hladin. čili si pro každý stav hladin založte hladinu, optimálně stejného jména jako ten stav hladin a ty hladinu nepoužívejte pro nic jiného.učte se, zkoušejte a bojujte. já vám víc pomoct nemůžu

Koluch
09.02.2021, 15:05
Moc děkuji Johny,cítím, že jsem blízko :-) - moc děkuji za ta videa, moc si toho vážím.Snad budu mít zítra čas to doladit a udělat bez chyb.Hezký den.

Koluch
10.02.2021, 15:07
Super Johny,už mi to funguje, moooc děkuji za váš čas.Teď se ještě naučit, jak zautomatizovat ten příkaz (lsapply "MODRÉ" "Hladina MODRÁ"), abych to nemusel vypisovat.Hezký den.Lukáš