Zobrazit plnou verzi příspěvku: Přiřazení obrázku nebo bloku textu
Poprosím Vás o radu viz. níže.Je možné přiřadit v Autocadu LT konkrétnímu textu předem definovaný blok, nebo obrázek?Například:Mám specifický text v referenci bloku např. obrazek_#1 a jakmile napíšu tento text do reference bloku, tak autocad automaticky nahradí tento text blokem, nebo obrázkem.Účel: Mám ve výkresu stovky různých textů a chtěl bych automaticky přiřadit textu i zmenšený obrázek, nebo blok.Nebo Vás napadá jiný způsob automatického přiřazení?
Vladimír Michl
06.03.2020, 09:36
To je stejná situace jako u podobného dotazu:https://www.cadforum.cz/forum/forum_posts.asp?TID=30124&title=vymena-textu-za-blok-autocadV AutoCADu LT prakticky žádnou automatizaci tohoho typu nezařídíte. V plné verzi AutoCADu celkem snadno.
Děkuji Vám za velmi rychlou reakci.Tento "program" funguje, ale "pouze" na jednotlivý text. Je možné použít obdobu tohoto "programu", ale aby byl funkční i na text uložený jako atribut v bloku?Je možné aby tuto funkci vykonal "program" automaticky bez označení?
Vladimír Michl
06.03.2020, 10:18
Nerozumím přesně požadavku. Ten program převádí texty na bloky. Pokud chcete pracovat s hodnotou atributu, je zdrojem naopak blok - co je pak cílem převodu? Označení všech textů bez ptaní (v původní verzi) je jednoduché:(setq ss (ssget "_X" '((0 . "*TEXT"))))
"Program" je napsán tak, že když označím text, tak ho změní na definovaný blok.Ale já bych potřeboval aby byl funkční, když označím blok, ve kterém je pomocí atributů přiřazen text a změnit ho na definovaný blok.
Vladimír Michl
06.03.2020, 10:44
Přesně takto to nejde. Reference bloku odkazují jednu společnou definici bloku - v ní se může individuálně měnit jediná věc - hodnoty proměnných textových atributů. Zbytek bloku je pořád tentýž. Různé obrázky by musely znamenat různé definice bloku, už by to nemohly být reference stejného bloku.Šlo by ale např. vložit poblíž reference bloku obrázek daného jména.
Napadá mě tedy "rozbít" bloky s referencí se zachováním textu pomocí příkazu "burst".Jakým způsobem vepsat do programu tuto funkci, tak aby našel jen konkrétní bloky s konkrétním názvem ty "rozbil" a následně by "program" pokračoval v nahrazení textu za blok?
Vladimír Michl
06.03.2020, 12:32
Pokud vám nevadí ve výsledku rozbité reference bloků, nebo pokud se původní blok má úplně smazat a nechat tam místo něj (nebo vedle něj) jen obrázek, nebude to složité.
Poradíte prosím jak tento příkaz (rozbít jen bloky s konkrétním názvem) dostat do "programu"?
Vladimír Michl
06.03.2020, 13:10
Zkuste tento LISP - je potřeba přednastavit proměnné na jeho konci - název bloku, název atributu, složku s obrázky, jejich typ/příponu.uploads/9/BlkAtt2img_2020-03-06_13-10-41.lsp
Bohužel nefunguje.Vytvořil jsem pro zkoušku blok, který se jmenuje 0011, text v atributu je 0011, obrázek v adresáři images se jmenuje 0011.png (defun C:BlkAtt2Img ( / blkname tagname imgfolder imgext imgscale) (vl-load-com) (setq blkname "0011") ; block name (setq tagname "0011") ; attribute tag (setq imgfolder "images") ; folder with images (setq imgext "0011.png") ; image extension/type (setq imgscale 10.0) ; image scale (ProcessAtt2Img blkname tagname) (princ) )
Vladimír Michl
08.03.2020, 19:46
Vidím zde několik nedorozumění - tagname je Název atributu, nikoliv jeho hodnota, ta se předpokládám mění. A imgext neměňte, to jen typ souboru, přípona.
Ano máte pravdu, děkuji.Upravil jsem a je to funkční. Je možné nahradit obrázek blokem?
Tak jsem se snažil "program" upravit, tak aby místo obrázku byl umístěn blok. Ale jsem teprve v začátcích pochopení jazyku.Poprosím Vás tedy znovu o radu.
Vladimír Michl
10.03.2020, 21:37
Upravit lze leccos, ale je potřeba vědět přesnou představu. Blok už to je, v něm je atribut. Na jeho místě je teď vkládán obrázek. Jak jsem psal, blok nemůže obsahovat proměnný obrázek. Jaký blok tam tedy chcete vkládat?
Teď program "BlkAtt2img_2020-03-06_13-10-41.lsp" přiřadí obrázek na souřadnice textu atributu a já bych chtěl to stejné, ale aby to nebyl obrázek, ale vytvořený blok.Např.: Mějme bloky s vyplněnými atributy např.: "+10", "+11", "+40"avytvořené bloky s názvem "+10", "+11", "+40" program najde text v bloku atributu a přiřadí na stejné souřadnice vytvořené bloky jako je text.Rozumím tomu, že text zůstane v bloku původní a nelze ho nahradit jiným blokem, ale pokusím se vytvořit takový blok, který "překryje" text v bloku. Nebo úplně ideálně, tedy pokud je to možné vybrané texty viz výše (např. "+10",.... ) navíc přesune do vybrané hladiny, která bude následně vypnuta/zmražena. Pokud není možné přesunout do vybrané hladiny, tak alespoň označí vybranou barvou, která bude nastavena při tisku jako "netisknutelná" a ve výkresové části, takovou barvou, která bude prakticky "neviditelná".
Vladimír Michl
11.03.2020, 10:15
Pokud jsem správně pochopil požadavek, pak to koliduje s principem bloků - blok je "jedna a tatáž geometrie" (nejvýš s proměnným textem) pro mnoho výskytů. Zde by se pro každý "zdrojový" blok vytvářel nový "blok s obrázkem". Proč potřebujete, aby to byl blok?Pokud jde jen o skrytí původního textového atributu, to není problém zařídit.
Znázornil jsem původní popis graficky.
Vladimír Michl
11.03.2020, 21:15
Ano, takto jsem to pochopil. Toto udělat není problém, ale onen obrázek pak není blokem, pouze se vloží na místo původního (skrytého nebo skrytelného) atributu. Obrázek nemůže být atributem bloku.
Vladimír Michl
11.03.2020, 21:45
Tato verze přesouvá úspěšně nahrazené atributy do zadané hladiny (ta musí předem existovat).uploads/9/BlkAtt2img_2020-03-11_21-45-00.lsp
Vladimír Michl
11.03.2020, 22:29
Teď mne ještě napadlo, jestli si pod pojmem "obrázek" náhodou nepředstavujete spíš onen symbol (ve skutečnosti asi blok). Nicméně na tom omezení "bloku v bloku" by se nic nezměnilo.
Pochopil jsem, že není možné doplnit blok do bloku resp. nahradit vyplněný text v referenci.Není třeba doplnit symbol přímo do bloku, ale "pouze" na pozici textu. Tj. nebude součástí bloku, ale bude umístěn blok na bloku.