Newsgroup: it.comp.software.cad
Titolo: Problema LISP

Mi sapere dire peechï¿œ il seguente lisp non funziona?
Sembra che non viene preso l'invio "" inserito dopo il selez.
Ho provato anche con "\r" ma niente da fare
(defun C:con ()
   (setq var (getvar "OSMODE"))
   (setq selez (ssget))
   (if (= selez nil)(alert "stracazzo"))
   (command "_-layer" "_f" "" selez "" "") ;<-- Qui l'invio dopo selez 
non viene effettuato
   (setvar "OSMODE" var)
)
grazie

Mi sapere dire perchï¿œ il seguente lisp non funziona?
Sembra che non viene preso l'invio "" inserito dopo il selez.
Ho provato anche con "\r" ma niente da fare
(defun C:con ()
   (setq var (getvar "OSMODE"))
   (setq selez (ssget))


 Ho provato anche con "\r" ma niente da fare
Cosa dovrebbe fare questa funzione "CON"?
se provi:
Comando: (command "_-layer" "_f" "")
nil
Digitare un'opzione
[?/Def/coRrente/Nuovo/RInomina/ON/OFF/Colore/Tipolinea/SPesslin/MAteriali/Stampa
/conGela/SCongela/BLocca/SBlocca/stAto/DEScrizione/RIConcilia]:
NON chiede una selezione di oggetti "(setq selez (ssget))"...
Marco

 NON chiede una selezione di oggetti "(setq selez (ssget))"...
Il comando -layer da tastiera dopo "_f" dice
"Digitare elenco nomi layer congelare o <selezionare oggetti>:"
e premendo "invio" chiede di selezionare degli oggetti, ma da lisp 
l'invio "" non funziona....

se devi studiarci ok fai bene e impegnati, se ti serve qualcosa di
veloce
ne ho uno che SPEGNE i layer, in caso lo modifichi tu
(defun C:LOFF ( / echo ent lyroff clyr)
   (setq echo (getvar "CMDECHO"))
   (setvar "CMDECHO" 0)
   (setq ent (entsel "\nSelect an entity on the layer to turn OFF: "))
   (if (NULL ent); Make sure an object was selected
      (while (NULL ent)
         (princ "\nTry again or press ^C to quit: ")
         (setq ent (entsel))
      ); While
   ): If
   (setq ent (entget (car ent)))
   (setq lyroff (cdr (assoc 8 ent)))
   (setq clyr (getvar "CLAYER"))
   (if (/= clyr lyroff); Don't attempt to turn off the current layer
      (COMMAND "LAYER" "_OFF" lyroff "")
      (princ "\nLAYR-OFF will not turn off the current layer.\n")
   ); IF
   (setvar "CMDECHO" echo)
   (princ)
); Defun LAYR-OFF



 Dovrebbe congelare i layer degli oggetti selezionati con ssget.
Non ï¿œ questione di essere principianti, probabilmente non molti
conoscono l'uso di "InitCommandVersion".
Prova:
(defun C:congela_oggetti ( / selez)
   (setq selez (ssget))
   (InitCommandVersion)
   (command "_-layer" "_f" "" selez "" "")
)
Fai sapere.
Ciao.
-- 
 Marc'Antonio Alessi
 
http://xoomer.virgilio.it/alessi
-- 

Anzi, visto il post che hai eliminato:
(defun C:CongelaLayerDaOggetti ( / SelSet)
  (if (setq SelSet(ssget))
    (progn
      (InitCommandVersion)
      (command "_-layer" "_f" "" SelSet"" "")
    )
    (alert "Nessuna selezione!")
  )
)


 
Neanch'io avevo fatto caso alla possibilitï¿œ del comando layer di 
congelare un layer in base alla selezione degli oggetti.
Comunque non riesco a capire dove sia l'inghippo.
-- 
Ciao
Maci

 Comunque non riesco a capire dove sia l'inghippo.
L'inghippo sta nella compatibilitï¿œ dei comandi con le varie versioni di 
AutoCAD,
dall'help:
initcommandversion
Forces the next command to run with the specified version.
(initcommandversion [version])
This function makes it possible to force a specific behavior for a supported 
command regardless of how it is being run. This only affects commands that 
have been updated to support a command version. In such commands, a test for 
an initialized command version replaces the legacy test for whether the 
command is being run from LISP or a script. When a supported command is 
being run manually, the default version is 2 (or the latest version). When a 
command is being run from automation, the default version is 1.
Arguments
version
This argument specifies the version of the command tobe used. If this 
argument is not present, the next use (and nextuse only) of a supported 
command will initialize to the latest version.
Return Values
T
Examples
Initializing a specific command version may affect each supported command 
differently. For example, here is the FILLET command with and without an 
initialized version:
Command: FILLET
Current settings: Mode = TRIM, Radius = 0.0000
Select first object or [Undo/Polyline/Radius/Trim/Multiple]: *Cancel*
Command: (INITCOMMANDVERSION 1)
Command: FILLET
Current settings: Mode = TRIM, Radius = 0.0000
Select first object or [uNdo/Polyline/Radius/Trim/mUltiple]: *Cancel*
Another typical example is the COLOR command. Run normally, COLOR displays 
the Select Color dialog; but by running (initcommandversion 1) before the 
COLOR command, it is forced to prompt from color from the command line.


 
Interessante (e tu come sempre molto preciso).
Sulla 2008 INITCOMMANDVERSION non c'era ancora.
L'ho visto ora sulla 2010.
Questo significa che la possibilitï¿œ di congelare layer scegliendo 
oggetti ï¿œ una funzionalitï¿œ relativamente nuova, ma all'interno di 
AutoLISP viene usata la versione del comando -layer precedente e quindi 
la routine si blocca. Giusto?
Grazie
-- 
Ciao
Maci

 blocca. Giusto?
Nel readme 2010 ho trovato questo (che risponde alle tue domande):
----
Controllo delle versioni dei comandi
A partire da AutoCAD 2009, ï¿œ stato introdotto il controllo delle versioni 
dei comandi con il Registratore di azioni. Il controllo delle versioni dei 
comandi consente ad AutoCAD di determinare quale iterazione del comando 
utilizzare durante l'esecuzione di una macro di azioni, un file di script o 
una macro di comandi CUI. In seguito a questa modifica, per alcuni comandi 
potrebbero essere necessario utilizzare la sequenza di controllo ^R nella 
macro di comandi CUI.
La sequenza di controllo ^R fa sï¿œ che AutoCAD utilizzi la versione piï¿œ 
recente del comando. Se non si utilizza tale sequenza, viene eseguita la 
versione piï¿œ obsoleta del comando.
Ad esempio, se una macro di comandi CUI contiene il comando RACCORDO, ï¿œ 
necessario utilizzare la sequenza di controllo ^R per fare in modo che il 
funzionamento della macro sia uguale rispetto ad AutoCAD 2008 e release 
precedenti. Di seguito viene riportato un esempio della macro di comandi CUI 
che utilizza la sequenza di controllo ^R:
^C^C^R_fillet;u; r;0.1;
Di seguito sono riportati alcuni dei comandi solitamente utilizzati con le 
macro di comandi CUI che sono interessati dal controllo delle versioni dei 
comandi:
CIMA
COLORE
ESPLODI
RACCORDO
LAYOUT
ALLUNGA
TAGLIA
Se si utilizza AutoLISP, ï¿œ possibile determinare la versione del comando che 
verrï¿œ utilizzata facendo precedere la funzione Command dalla funzione 
InitCommandVersion. La sintassi per la funzione InitCommandVersion ï¿œ la 
seguente:
(InitCommandVersion <numero_versione>)
Dove numero_versione determina la versione del comando che verrï¿œ eseguita 
dalla funzione Command.
----


Marco_AA ha scritto:

Ottime info.
Grazie ancora
-- 
Ciao
Maci

 Fai sapere.
Perfetto!
ï¿œ comunque strano...
Non posso provare con AutoCAD 2009 o 2008 ma mi sembra di ricordare che 
manualmente il comando funzioni allo stesso modo; quindi non avrebbe 
senso obbligarlo ad utilizzare una versione precedente di -layer
giusto?

 )
ok grazie!

>>
Command: FILLET
Current settings: Mode = TRIM, Radius = 0.0000
Select first object or [Undo/Polyline/Radius/Trim/Multiple]: *Cancel*
Command: (INITCOMMANDVERSION 1)
Command: FILLET
Current settings: Mode = TRIM, Radius = 0.0000
Select first object or [uNdo/Polyline/Radius/Trim/mUltiple]: *Cancel*
<<<
a lanciare il tuo comando prima di (INITCOMMANDVERSION 1) e dopo,
dovresti vedere una differenza nelle richieste come sopra.

ciao Marco
hai disponibile uno dei tuoi lisp per convertire globalmente tutti i campi
dati in testo ?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:hced38$hle$1...@news.newsland.it...


 ma... vedremo...
ok
