CAD tip # 11401:
Otázka
Máte např. blok s 3 atributy a chcete, aby 3. atribut obsahoval řetězec složený (pospojovaný) vždy z aktuální hodnoty prvních dvou atributů. Příklad viz ConcatAtt.dwg - Blok #15079.
Pro nastavení požadované operace v definici bloku nastavte hodnotu třetího atributu z polí odkazujících na objekty (hodnoty) definic obou zdrojových atributů (v Poli: Objekt>Definice atributu>Hodnota a zaškrtnout Reference bloku). Aby se po vložení nebo změně hodnot vyhodnotila operace s dynamickými poli, musí být blok dynamický - musí tedy obsahovat nějakou dynamickou akci, např. polohu, stav viditelnosti, apod. a po jeho vložení do DWG výkresu je navíc potřeba onu dynamickou akci alespoň jednou vyvolat - např. potáhnout uzel polohy, změnit stav viditelnosti. Viz příklad, blok Concat (vlevo) nebo TestHiLo (níže).
Pro operaci definovanou v referenci bloku stačí v editoru atributů nastavit dynamické pole odkazující na tentýž objekt (již vloženou referenci) a v něm hodnotu prvního a druhého atributu. Takováto definice je vyhodnocována automaticky - tedy např. při regeneraci. Viz příklad, blok ConcatRef (vpravo).
Po změně hodnoty zdrojových atributů tedy proveďte požadovanou aktualizační akci a blok bude reflektovat změněnou hodnotu i v cílovém atributu.
Podobný postup můžete použít pro propojení/zrcadlení dvou atributů - pro získání dvou různých atributů nesoucích stejnou hodnotu v jediném bloku.
Pro výpočet hodnot v definici bloku můžete rovněž využít zjednodušený způsob nevyžadující dynamické bloky, se snadnou automatickou aktualizací při vložení nebo následném otevření či regeneraci DWG výkresu.
Příklad - blok TestHiLo (viz) s řídicím atributem "Val0" a s dvěma závislými atributy "Hi" a "Lo". Ty budou automaticky nabývat hodnotu vždy o jedničku vyšší a nižší než je nastaven řídicí atribut. Do přednastavené (výchozí) hodnoty těchto atributů stačí vložit jako text výraz s vzorečkem pro výpočet hodnoty - zde konkrétně:
%<\AcExpr (%<\AcObjProp.16.2 Object(?BlockRefId,1).Val0>%+1)>%
a:
%<\AcExpr (%<\AcObjProp.16.2 Object(?BlockRefId,1).Val0>%-1)>%