Zobrazit plnou verzi příspěvku: refedit vnorene bloky2

Ferdinand
10.06.2008, 13:32
Když se přece jenom stane, že součástí BLOKU je kromě jiných entit také nějaký jiný blok, lze ten vnořený blok identifikovat (v lispu)? Tj. aby se vytvořila nenulová výběrová množina obsahující entitu vnořeného bloku v tom jednom konkrétním BLOKU.

Vladimír Michl
10.06.2008, 15:36
Jde, ale ne nějakou jedinou geniální LISP funkcí - je potřeba projet definici bloku cyklem.

Ferdinand
11.06.2008, 10:20
Aha, to mne nenapadlo - a v tom cyklu pak najít ten blok, že. A tak potom lze měnit vlastnosti vnořeného bloku - ta změna má být provedena v těle cyklu anebo stačí až cyklus skončí, blok zdárně najde a teprv měnit?

Vladimír Michl
11.06.2008, 21:09
Závislý blok by se měl měnit samostatně - až "po".
Definici ale můžete měnit i programově přímo ve výkresové databázi, nemusíte spouštět REFEDIT.

Ferdinand
12.06.2008, 08:10
Co v případě, když je těch vnořených bloků více a každý je jiný? To asi musím předem znát název hledaného bloku, který chci měnit?
Možná by stačilo vložit ten (již upravený) blok, odpovědět "_Yes" na dotaz zda to chci předefinovat a pak ho zas smazat - musím prvně vyzkoušet.

Ferdinand
12.06.2008, 12:51
Ano, jde to tak. Ovšem můj konkrétní dotaz je: chci změnit pouze měřítko vnořeného bloku z 1 na 15, nikoli modifikovat blok. Našel jsem, že jsou to klíče 41-42-43. Jak se přiřazují nové hodnoty těmto klíčům?

alfred
13.06.2008, 09:01
chce to si vytvorit novy list s konkretni vlastnosti a spravnou hornotou - myslim prikaz "cons" vymenit ho ve vlastnostech entity"subst"a "zapsat zmenu" - "entmod"a nakonec zregenerovat vykresMyslim, ze v napovede byl uveden jednoduchy priklad...

Ferdinand
13.06.2008, 09:31
Děkuji, jdu to zkoušet. V AutoCADu v Helpu nejsou (ale před časem ještě byly...  ) funkční odkazy pro odstavec AutoLISP, Visual LISP, and DXF
ED: objeví se tato hláška:
 

a (po potvrzení YES anebo NO) nic se neděje...Ferdinand2008-06-13 09:38:51

Ferdinand
13.06.2008, 10:38
Někde mám asi chybu, ale nevím kde
uploads/20080613_103748_nvb.lsp

alfred
13.06.2008, 14:51
chyba je v radce:(command "._-insert" (strcat NB "=") "_y" nil "_regen")nebo mate ve vykrese blok s nazvem (strcat NB "=") - v tomhle pripade "FOE-LOGO0=" ?

alfred
13.06.2008, 14:54
Takhle vypada kratka funkce: vybere blok, funkce zvetsi meritko bloku na 2(defun c:xx ( / objekt vlastnosti_objektu nove_vlastnosti_objektu)  (setq objekt (car (entsel "ukazte na blok: ")))  (setq vlastnosti_objektu (entget objekt))  ;(subst newitem olditem lst)  (setq nove_vlastnosti_objektu (subst '(41 . 2) (assoc 41 vlastnosti_objektu) vlastnosti_objektu))  (entmod nove_vlastnosti_objektu)  (princ))

Ferdinand
16.06.2008, 08:04
Blok s názvem FOE-LOGO0 ve výkrese je (má být) - právě ten chci redefinovat vložením "nového" FOE-LOGO0.
Chci se vyhnout případu, kdy je třeba uživatelského vstupu (ukázání na něco, zadávání něčeho z klávesnice...), protože funkci chci aplikovat na mnoho výkresů (asi scriptem).

alfred
16.06.2008, 12:33
[QUOTE=Ferdinand] Blok s názvem FOE-LOGO0 ve výkrese je (má být) - právě ten chci redefinovat vložením "nového" FOE-LOGO0.[/QUOTE]

Ale Vy v te funkci v souboru "20080613_103748_nvb.lsp" pred upravami (entmod) vkladate blok "FOE-LOGO0=" a ne "FOE-LOGO0" - stringy spojujete funkci (strcat NB "=")

A dále pokud blok "FOE-LOGO0" ve výkrese je definovan pred prejmenovanim, tak prejmenovani neprobehne.Mel by jste na to pridelat test.

Ferdinand
16.06.2008, 12:42
Ta "rovná se" právě slouží k tomu, aby ten původní blok se redefinoval k podobě nového vkládaného bloku (není to součást názvu, nýbrž syntaxe příkazu). Pokud bych nový blok vkládal bez "=", tak nebudu dotazován na to, zda chci blok předefinovat a vloží se aktuální podoba dle toho, jak je momentálně ve výkresu nadefinován. Ferdinand2008-06-16 12:43:32

Ferdinand
20.06.2008, 12:35
[QUOTE=alfred] A dále pokud blok "FOE-LOGO0" ve výkrese je definovan pred prejmenovanim, tak prejmenovani neprobehne.Mel by jste na to pridelat test.[/QUOTE]
To je přece logické - když už existuje pod tím jménem, není třeba ho přejmenovávat. Nejde mi o přejmenování - to je jen upřesňující krok, ale o předefinování. A protože to programově (zatím) neumím, potřebuji s tím pomoct.
Dík za pochopení.Ferdinand2008-06-20 12:40:05