Vytisknout stránku | Zavřít okno

refedit vnorene bloky2

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=6610
Datum vytištění: 13.kvě.2026 v 09:16


Téma: refedit vnorene bloky2
Odeslal: Ferdinand
Předmět: refedit vnorene bloky2
Datum odeslání: 10.čer.2008 v 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.

-------------
-FerTh-



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 10.čer.2008 v 15:36
Jde, ale ne nějakou jedinou geniální LISP funkcí - je potřeba projet definici bloku cyklem.

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Ferdinand
Datum odeslání: 11.čer.2008 v 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?

-------------
-FerTh-


Odeslal: Vladimír Michl
Datum odeslání: 11.čer.2008 v 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.


-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: Ferdinand
Datum odeslání: 12.čer.2008 v 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.


-------------
-FerTh-


Odeslal: Ferdinand
Datum odeslání: 12.čer.2008 v 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?



-------------
-FerTh-


Odeslal: alfred
Datum odeslání: 13.čer.2008 v 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 vykres

Myslim, ze v napovede byl uveden jednoduchy priklad...


Odeslal: Ferdinand
Datum odeslání: 13.čer.2008 v 09:31

Děkuji, jdu to zkoušet. V AutoCADu v Helpu nejsou (ale před časem ještě byly... Confused ) 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...


-------------
-FerTh-


Odeslal: Ferdinand
Datum odeslání: 13.čer.2008 v 10:38
Někde mám asi chybu, ale nevím kde
http://www.cadforum.cz/forum/uploads/20080613_103748_nvb.lsp - uploads/20080613_103748_nvb.lsp


-------------
-FerTh-


Odeslal: alfred
Datum odeslání: 13.čer.2008 v 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=" ?






Odeslal: alfred
Datum odeslání: 13.čer.2008 v 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)
)


Odeslal: Ferdinand
Datum odeslání: 16.čer.2008 v 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).


-------------
-FerTh-


Odeslal: alfred
Datum odeslání: 16.čer.2008 v 12:33
Původně odeslal(a) Ferdinand Ferdinand napsal(a):

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.


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.


Odeslal: Ferdinand
Datum odeslání: 16.čer.2008 v 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.

-------------
-FerTh-


Odeslal: Ferdinand
Datum odeslání: 20.čer.2008 v 12:35
Původně odeslal(a) alfred alfred napsal(a):


A dále pokud blok "FOE-LOGO0" ve výkrese je definovan pred prejmenovanim, tak prejmenovani neprobehne.Mel by jste na to pridelat test.
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í.


-------------
-FerTh-



Vytisknout stránku | Zavřít okno