Newsgroup: it.comp.software.cad
Titolo: [LISP+C] Errore irreversibile

Ho scritto la seguente procedura per allineare un immagine raster ma ogni
tanto mi dà il seguente errore:
ERRORE IRREVERSIBILE
"i comandi non possono essere nidificati più di 4"
e mi butta fuori dandomi la possibilità di salvare.
Non sò cosa significa questo errore.
Potete aiutarmi
;;;;;;;;;;;;;;;;;;;;;;;;,BOF;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:ALIGN_TM (/ RASTER_TM LUNG )
 (SETQ RASTER_TM (ssget "_x" (list (cons 0 "IMAGE") (cons 8 "MAPPA_TM"))))
 (setq lung (sslength RASTER_TM))
 (IF (/= lung 1) (alert (strcat "Attenzione !!  Sul layer MAPPA_TM ci sono "
(rtos lung 2 0) " immagini raster")))
 (IF (/= lung 1) (alert "La procedura viene interrotta !!!!!!!!!!!!"))
 (IF (/= lung 1) (exit))
 (setq oldsnap (getvar "OSMODE"))
 (setvar "OSMODE" 0)
 (setq PT1O (GETPOINT "\nPrimo punto d'origine"))
 (setvar "OSMODE" 33)
 (setq PT1D (GETPOINT "\nPrimo punto di destinazione"))
 (setvar "OSMODE" 0)
 (setq PT2O (GETPOINT "\nSecondo punto d'origine"))
 (setvar "OSMODE" 33)
 (setq PT2D (GETPOINT "\nSecondo punto di destinazione"))
 (COMMAND "_align" "_P" "" PT1O PT1D PT2O PT2D "" "_N" "_REGEN")
 (setvar "OSMODE" oldsnap)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EOF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;
--
Massimo Ghio

  (SETQ RASTER_TM (ssget "_x" (list (cons 0 "IMAGE") (cons 8 "MAPPA_TM"))))
Ciaio Mario Scavroni


Non so perché metto "_x", me lo tiro dietro da tempo comunque ho sempre lo
stesso problema, anche togliendolo.
(defun C:METTI_TM (/ TM_DA_SPOST)
 (gc)
 (setq oldsnap (getvar "OSMODE"))
 (setvar "OSMODE" 0)
 (SETQ TM_DA_SPOST (ENTSEL "\nSeleziona TM da spostare:"))
 (SETQ TM_DATI (ENTGET (CAR TM_DA_SPOST)))
 (SETQ TM_INS (CDR (ASSOC 10 TM_DATI)))
 (SETQ TM_CEN (LIST (+ 100 (CAR TM_INS)) (+ 100 (CADR TM_INS))))
; (setq TM_center (getpoint "\nPunto di spostamento:"))
 (command "_find")
 (command "_move" TM_DA_SPOST "" TM_CEN (getvar "VIEWCTR"))
 (command "_zoom" "_C" "" (* 200 SC_foglio))
 (setvar "OSMODE" oldsnap)
 (command "_change" TM_DA_SPOST "" "_P" "_layer" "MAPPA_TM" "")
 (command "_REGEN")
)
Comunque mi da il problema anche se non uso la funzione ssget. Questa
funzione 'METTI_TM' mi dà l'errore al quarto utilizzo e non so perchè.
(defun C:ALIGN_TM (/ RASTER_TM LUNG )
 (SETQ RASTER_TM (ssget "x" (list (cons 0 "IMAGE") (cons 8 "MAPPA_TM"))))
; (setq RASTER_TM (car (ENTSEL "\nSelezionare il TM:")))
 (setq lung (sslength RASTER_TM))
 (IF (/= lung 1) (alert (strcat "Attenzione !!  Sul layer MAPPA_TM ci sono "
(rtos lung 2 0) " immagini raster")))
 (IF (/= lung 1) (alert "La procedura viene interrotta !!!!!!!!!!!!"))
 (IF (/= lung 1) (exit))
 (setq oldsnap (getvar "OSMODE"))
 (setq oldaunits (getvar "UNITS"))
 (setvar "OSMODE" 0)
 (setvar "AUNITS" 3)
 (setq PT1O (GETPOINT "\nPrimo punto d'origine"))
 (setvar "OSMODE" 33)
 (setq PT1D (GETPOINT "\nPrimo punto di destinazione"))
 (setvar "OSMODE" 0)
 (setq PT2O (GETPOINT "\nSecondo punto d'origine"))
 (setvar "OSMODE" 33)
 (setq PT2D (GETPOINT "\nSecondo punto di destinazione"))
; (COMMAND "_align" RASTER_TM "" PT1O PT1D PT2O PT2D "" PAUSE)
 (COMMAND "_MOVE" RASTER_TM "" PT1O PT1D)
 (SETQ ANGOLO (- (ANGLE PT1D PT2D) (ANGLE PT1O PT2O)))
 (COMMAND "_ROTATE" RASTER_TM "" PT1D ANGOLO)
 (COMMAND "_REGEN")
 (setvar "OSMODE" oldsnap)
 (setvar "AUNITS" oldaunits)
)
In quest'altra funzione ho provato a sostituire il comando align (mettendo ;
davanti) con _move e _rotate e non mi da l'errore. Me lo da però se
precedentemente ho usato METTI_TM. Perché questo cavolo di errore "i comandi
non possono essere nidificati più di 4".
Cosa vuol dire.
se mi puoi aiutare te ne sarei  veramente grato.
--
Massimo Ghio

il comando ALIGN in realtà non è un comando interno di AutoCAD ma un comando
aggiuntivo in ARX che viene caricato quando si invoca da menu o tastiera Align.
Per questo motivo il richiamo in una funzione command non è la scelta più felice
(infatti dopo 4 richiami il sw si blocca).
In un programma lisp andrebbe richiamato in questa maniera: (c:align)
oppure utilizzando la funzione align che però è disponibile solo dopo il
caricamento del comando.
In conclusione dovresti ri-progettare la tua routine, precaricando align
e poi sfruttando la funzione Autolisp  (align .. . .. ....)
ciao
--
;;;
;;; Domenico IEVA
;;; e-mail 
di...@lycosmail.com
;;; 
http://web.tiscalinet.it/ieva
**|| Novità:  PlanoVolumetrici  un nuovo tool x AutoCAD 2000 ||**
