Zobrazit plnou verzi příspěvku: potlačení hlášky

Dlouhy
02.03.2007, 12:08
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.

Dlouhy
05.03.2007, 08:23
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.

Mantlík
05.03.2007, 08:43
[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

Dlouhy
05.03.2007, 08:52
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