Zobrazit plnou verzi příspěvku: update dynamického bloku s parametry

kryspin
31.07.2013, 13:37
Dobry den,mam nasledujici problem. Mam soubor, ve kterem udrzuji aktualizovane definice bloku, jak dynamickych tak beznych. Pracovne mu rikam template.dwg. Jak to tak byva, tak tyto bloky se vyskytuji v ruznych dalsich souborech, kde se pouzivaji. Obcas je potreba nektery blok upravit. Upravim ho v templatu. A ted potrebuji, aby se updatoval i v jinych souborech. Na to jsem nasel dve cesty:1. varianta - blok si z templatu ulozim jako soubor, pak ho vlozim ze souboru do souboru, ktery potrebuji updatovat a zde ho necham redefinovat novym (vkladanym blokem). Je to sice kostrbate, ale funguje to i u dynamickych bloku s atributy2. pres design center - zde je potreba mit otevrene oba soubory - template i soubor, jehoz blok potrebuji upravit. V karte otevrene soubory najedu na soubor template, rozkliknu, otevru bloky, najdu ten, co me zajima a pravym tlacitkem na nej kliknu. Z nabidky vyberu "redefine only". Blok se redefinuje v ostatnich otevrenych souborech. Az potud OK. Ale pokud se jedna o dynamicky blok s atributy je v nove redefinovanych blocich misto atributu jen ####. Je nejaka naprava? (attsync to neni...)(varianta pres express tools a prikaz "replace block with another block" neni varianta, bloky by musely mit jina jmena)Pripadne - je nejaka jednodussi cesta, jak nechat redefdinovat stavajici stary blok nove vkladanym? (acad standardne ignoruje nove vkládanou definici, pokud blok se stejným jménem jiz ve vykrese existuje).  Zadnou systemovou promennou na toto tema jsem nenasel, neexistuje na to treba nejaky lisp?
kryspin2013-07-31 13:42:23

splonk
31.07.2013, 14:12
Dobry den,Myslim ze by se Vam mohla hodit utilitka z downloadcentra - BlkReDef.lspLisp dela v podstate podobnou vec, jao popisujete v bode 1. :-)Dle potreby ho lze drobne upravit tak, aby Vam napr. replace-oval primo konkretni blok (pak to lze i zautomatizovat, porp. batch...)

kryspin
31.07.2013, 15:20
to je super. celkem to ubere nekolik kroku. Jsem uplny lispovy zacatecnik, tak ze nejspis jde o hloupy dotaz, ale je mozne lisp upravit tak, aby se neptal na jmeno, ale aby bylo mozno vybrat blok a jeho jmeno by si vzal?

Vladimír Michl
31.07.2013, 15:43

Ano, to není problém - upraveno (viz Download).Pokud by vadil ten mezidotaz na "?", stačí vyhodit řádky označené "; rem".

splonk
31.07.2013, 16:52
[QUOTE=kryspin]to je super. celkem to ubere nekolik kroku. Jsem uplny lispovy zacatecnik, tak ze nejspis jde o hloupy dotaz, ale je mozne lisp upravit tak, aby se neptal na jmeno, ale aby bylo mozno vybrat blok a jeho jmeno by si vzal?
[/QUOTE]Ale vubec ne :-)... Ja sice nejsem o moc lepsi nez Vy, ale zkuste nasledujici...Nize je vypsan puvodni LISP...  [CODE];Block redefinition - for batch scripts;replaces <BLKNAME> with a new version of the block saved in <BLKNAME>.DWG;(DWG file must be on search path); ;(C) 2007 XANADU a.s. - www.xanadu.cz; (defun C:BLKREDEF ( / blkname cmde) (setq cmde (getvar "cmdecho")) (setvar "cmdecho" 0) (setq blkname (getstring "\nBlock name: ")) (if (tblsearch "block" blkname)  (progn   (command "._-insert" (strcat blkname "=") "_y" nil "_regen")   (princ (strcat "\nBlock " (strcase blkname) " redefined."))  )  (princ "Block not found.") ) (setvar "cmdecho" cmde) (prin1)) [/CODE]Kdyz v textovem editoru vymenite radek:[CODE] (setq blkname (getstring "\nBlock name: "))[/CODE]za radek:[CODE] (setq blkname "MujBlock")[/CODE]... kde MujBlock je nazev Vaseho bloku...Tim by uprava lispu byla hotova...Pak nezapomente mit nekde ve vyhledavacich cestach AutoCAu umisteno DWGcko ktere se jmenuje "MujBlock". Toto DWG si vytvorite prikazem _WBLOCK z vykresu kde mate spravnou verzi tohoto bloku.Snad dost srozumitelne...Hmmm, koukam ze nez jem si "odskocil" od CADFora, pan Michl byl aktivnejsi.. :-)... diky

kryspin
01.08.2013, 12:02
Diky, to je presne co jsem mel na mysli. Vyzkousel jsem to a zda se, ze to funguje na normalni bloky. Dynamicke bloky s atributem je sice mozne vybrat, ale lisp neprobehne korektne (zrejme souvisi, ze blok se sice nejak jmenuje, ale interne je to vlastne instance bloku s jinym jmenem).