Zobrazit plnou verzi příspěvku: potlačení hlášky
Dobrý den,
mám problém při tvorbě makra. V jedné části zadávám příkaz explode a jelikož rozkládám velké množství bloků vyskakuje mi hláška:
Tato operace rozložení může trvat dlouho.
Výkon lze podstatně zvýšit, pokud bude potlačeno pořadí vykreslování.
Chcete pro tuto operaci potlačit pořadí vykreslování?
Ano Ne
a tím mi plánovaný automat trochu dost kazí.
Dík za radu.
Dlouhý
P.S.: Na pořadí mi nezáleží.
Ferdinand
02.03.2007, 14:11
(C:<jmenofunkce>) _A; V lispu se napíše:Závorka-dvojtečka-<jmenofunkce>-závorka-mezera-podtržítko-<A>-středník-mezera
Vladimír Michl
02.03.2007, 14:19
Tento typ hlášení se dá potlačit zvýšením hodnoty proměnné EXPERT.
Bohužel tato proměnná na to nemá vliv. I když jsem nastavil na 5 hláška trvá.
Ferdinand
05.03.2007, 08:37
V Helpu pro AutoCAD jsou popsány všechny možnosti nastavení proměnné expert.
Vladimír Michl
05.03.2007, 08:37
Ta hláška je divná - je to normální příkaz ._EXPLODE ?
Ještě by to šlo ošetřit přes otestování proměnné CMDACTIVE.
[QUOTE=Vladimír Michl]
Ta hláška je divná - je to normální příkaz ._EXPLODE ?
.[/QUOTE]
Mně už se tahle hláška také jednou při běžném explodování objevila
EXPERT ... měl jsem za to, že čím víc expert tím méně hlášek. Nicméně ani jeden expert hlášku nepotlačí.
CMDACTIVE je rovna 1 (pouze pro čtení)
_EXPLODE ... úplně normální příkaz, ale nad mnoha entitami cca 45tis.
Ferdinand
05.03.2007, 08:57
Co lze získat s tím otestováním? To pouze zjistíme, jakou má hodnotu sys.prom. cmdactive (která je pouze pro čtení - viz Help).
Vladimír Michl
05.03.2007, 09:44
U příkazů "s nejistým koncem" se to dá řešit tak, že dokud je CMDACTIVE=1 posílám do příkazové řádky ENTER, nebo "_Yes" nebo něco podobného. Pak je jedno, kolikrát se příkaz zeptá, zda zobrazí potvrzovací hlášku nebo ne, apod.
Ferdinand
05.03.2007, 11:30
Takže např. když po editování před uložením zadám příkaz close tak se mne bude ptát, jestli chci / nechci výkres uložit - já to uložit nechci / chci, ale zároveň nechci, aby se mi ta výzva na disleji zobrazovala (to nevím, jak se může/?/ nastavit...). Bude to psát tu hlášku do př.ř. anebo ji nebude psát vůbec?
Vladimír Michl
05.03.2007, 14:20
Nevím, jestli zrovna na CLOSE, ale obecně: nastavení EXPERT pomůže potlačit většinu zvědavých dotazů typu chcete opravdu?, kdežto trik s CMDACTIVE (určený pro makra) zajistí, že i pokud už se takovýto neplánovaný dotaz objeví, nenabourá to probíhající uživatelské makro a to na něj může předdefinovaným způsobem zareagovat.
Ferdinand
06.03.2007, 10:47
Takže - v čem vlastně ten "trik" s cmdactive spočívá?
Vladimír Michl
06.03.2007, 11:53
Týká se to maker - pokud se příkaz může a nemusí zeptat na otázku typu ano/ne, můžete do makra (např. LISP) dát např. sekvenci:
(while(>(getvar "cmdactive")0)(command "_Y"))
v tomto případě makro odpoví "ANO" na libovolný počet dotazů příkazu.
Sedláček
06.03.2007, 12:51
Zkoušel jsem použít CMDACTIVE:
_select \_explode _p;$M=$(if,$(>,$(getvar,cmdactive),0),_Y)
a narazil na jiný problém:
Pokud použiji _explode z příkazové řádky, mohu následně vybrat objekty všemi výběry (Okno, Křížení...)
Pokud však použiji _explode v makru, mohu následně vybrat pouze JEDEN objekt (i na př. řádku je "Vyber objekt" a ne "Vyber objekty":
Příkaz: _selectVyberte objekty: nalezeno: 1
Vyberte objekty:
Příkaz: _explodeVyberte objekt: _p
*Neplatný výběr*Očekává se bod nebo posLední/všE/Skupina
A2002LT
P. Sedláček
Ferdinand
08.03.2007, 09:53
Zkoušel jsem... (setq QS5 (ssget "X" (list (cons 0 "insert") (cons 2 NPF_C))))... (if QS5 (command "_qsave") (progn (setvar "sdi" 0) (command "_close") (while(>(getvar "cmdactive")0)(command "_Y")) (setvar "sdi" 1) ) )...ale takhle to nefunguje - na př.ř. je..._close_open 2VL_ARIONWLII_PP_RF#3P_PP_VP.dwgYes or No, please.; error: Function cancelledCommand: *Cancel*Command: *Cancel*Command: *Cancel*Command: _close Command CLOSE is not available under SDI mode.
Ferdinand
13.03.2007, 14:22
Prosím, v čem je chybka? Ví to někdo? I když dám opačný sled tj.... (if QS5 (command "_qsave") (progn (setvar "sdi" 0) (while(>(getvar "cmdactive")0)(command "_Y")) (command "_close") (setvar "sdi" 1) ) )...tak to taky nefung... To mi zase píše:Command: _close Command CLOSE is not available under SDI mode.Proč mi to SDI nenastaví na 0 přesto že je to před příkazem?Pozn.: Takhle mi to dělá v případě, že QS5 je nil. Pokud QS5 existuje, tak vše provede OK.
pavelstyl
14.03.2007, 06:05
[QUOTE=Ferdinand]Pozn.: Takhle mi to dělá v případě, že QS5 je nil. Pokud QS5 existuje, tak vše provede OK.[/QUOTE]
To je přece jasné. Když je QS5 nil, tak to dělá jenom (command "qsave").
Když QS5 není nil, tak to dělá všechny příkazy uvnitř progn ...
Pavel Štyl
Ferdinand
15.03.2007, 17:09
takže podmínka má tvar(if QS5 ;když QS5 neexistuje (command "_qsave") ;tak proveď prvně tohle (progn ;a když existuje tak proveď tohle (... )Já jsem žil v představě, že podmínka je postavena takhle:(if NECO (NECO je splněno/je nenulové -> Akce1) (NECO nesplněno/je nulové -> Akce2),)
pavelstyl
16.03.2007, 06:21
Aaaaaa, trošku mi to ujelo. Omlouvám se.
Když QS5 existuje, dělá (command "_qsave"), jinak dělá všechny ty příkazy uvnitř (progn ... )
Pavel Štyl
Ferdinand
16.03.2007, 14:56
Uff, to se mi ul(o)evilo...Ale vracím se k mému původnímu dotazu: co zapříčinilo, že se mi ty příkazy pod (progn...) v tom lispu neprovádí?
Ferdinand2007-03-16 14:59:18