Newsgroup: it.comp.software.cad
Titolo: problema con un lisp

Ciao, vorrei chiedere a chi è appassionato di Lisp perché non riesco a far 
funzionare il programma sotto riportato sul mio Civil3D 2007. E' un'utilità 
che mi risparmierebbe un sacco di tempo, probabilmente si tratta di un 
piccolo problema. In ogni caso il link da cui l'ho preso è il seguente:
http://www.territorio.regione.umbria.it/canale.asp?id=160
 ed insieme al lisp 
ci sono due file arx che vanno copiati insieme ad esso nella cartella di 
Civil.
Io li ho copiati tutti e tre, caricato il lisp, avviato ma una volta che 
rispondo alla domanda sulla provincia di appartenenza mi dice errore; 
ARXLOAD non riuscito
Grazie tante
andrea
;
;    Richiesta della provincia da elaborare
;
(defun C:ferens ()
  (initget 1 "Perugia Terni Esci")
  (setq resp (getkword "Provincia di appartenenza foglio? 
(Perugia/Terni/<Esci>): "))
  (if (/= resp "Esci")
      (tr_en15 resp)
  )
)
;
;    Trasla le entita' (POLYLINE, LINE, INSERT, TEXT)
;
(defun tr_en15 (resp);
;******
;
;
;
;caricamento del file arx relativo alle scelte effettuate
  (if (= resp "Perugia")
    (progn
     (getstring " Elaboro Perugia - premere INVIO per proseguire ...")
     (arxload "c2gbpg")
    )
; else
    (progn
     (getstring " Elaboro Terni - premere INVIO per proseguire ... ")
     (arxload "c2gbtr")
    )
  );fine if
       (setq all_entita (ssget "x"))             ; seleziona tutte le 
entita' del disegno
       (setq num_entita (sslength all_entita))   ; verifica il numero di 
entita' selezionate
       (setq contatore 0)
       (while (< contatore num_entita)           ; inizia il ciclo per 
memorizzare i nomi di
            (setq nome_elemento (ssname all_entita contatore))
            (setq nome_entita   (entget nome_elemento))
            (setq tipo_entita   (assoc 0 nome_entita))
            (setq tipo_entita   (cdr tipo_entita))
            (setq cox  0)
            (setq coy  0)
            (setq coz  0)
            (if (and (/= tipo_entita "POLYLINE")
                     (/= tipo_entita "LWPOLYLINE")
                     (/= tipo_entita "LINE")
                     (/= tipo_entita "INSERT")
                     (/= tipo_entita "TEXT")
                 );fine or
                 (progn
                     (setq frase (strcat "manca entità " tipo_entita))
                     (print frase)
                     (getstring " ")
                 );fine progn
            );fine if
            (if (= tipo_entita "POLYLINE")
             (leggipoly nome_entita)
            )
            (if (= tipo_entita "LWPOLYLINE")
              (leggilwpoly nome_entita)
            )
            (if (= tipo_entita "LINE")
              (leggiline nome_entita)
            )
            (if (= tipo_entita "INSERT")
            (legginsert nome_entita)
            )
            (if (= tipo_entita "TEXT")
              (leggitext nome_entita)
            )
            (setq contatore (1+ contatore))
       )
;scaricamento del file arx relativo alle scelte effettuate
  (if (/= resp "Perugia")
     (arxunload "c2gbtr")
; else
     (arxunload "c2gbpg")
  );fine if
  (princ "\t\t  Programma terminato regolarmente\n")
  (terpri)
)
;
; modifica delle entit_ di tipo polilinea
;
(defun leggipoly (nome_entita)
        (setq vertice_poly (entget (entnext (cdr (assoc -1 nome_entita)))))
        (while (/= (cdr (assoc 0 vertice_poly)) "SEQEND")
             (setq coord_vecchie_pt (cdr (assoc 10 vertice_poly)))
             (trasla coord_vecchie_pt)
          (setq vertice_poly
              (subst
                   (append '(10) coord_nuove_pt)
                   (assoc 10 vertice_poly)
                   vertice_poly
              )
          )
          (entmod vertice_poly)
          (setq vertice_poly (entget (entnext (cdr (assoc -1 
vertice_poly)))))
        )
        (entupd (cdr (assoc -1 nome_entita)))
)
;
; modifica delle entit_ di tipo LWpolilinea
;
(defun leggilwpoly (nome_entita)
      (setq len (length nome_entita))
      ;get the length of the list
      (setq n 0)
      ;set counter to zero
      (setq new_entita (list (cons 1 1))) ;azzera lista new_entita
      (repeat len
      ;repeat for the length of the entity list
        (setq atomo (nth n nome_entita))
        (setq e1 (car (nth n nome_entita)))
        ;get each item in the entity list
        ;and strip the entity code number
        (if (= e1 10)
        ;check for code 10 (vertex)
          (progn
          ;if it's group 10 do the following
             (setq coord_vecchie_pt (cdr (nth n nome_entita)))
           ;setta the co-ordinates
             (setq coord_x  (nth 0 coord_vecchie_pt))
             (setq coord_y  (nth 1 coord_vecchie_pt))
             (setq coord_z  0)
             (setq coord_vecchie_pt (list coord_x coord_y coord_z))
             (trasla coord_vecchie_pt)
             (setq coord_x  (nth 0 coord_nuove_pt))
             (setq coord_y  (nth 1 coord_nuove_pt))
             (setq coord_nuove_pt (list coord_x coord_y))
             (setq atomo (append '(10) coord_nuove_pt));
       ;     (setq coord_nuove_pt (append '(10) coord_nuove_pt));
       ;     (setq coord_vecchie_pt (nth n nome_entita));
       ;  (setq nome_entita
       ;      (subst
       ;           ;(append '(10) coord_nuove_pt)
       ;           ;(assoc 10 nome_entita)
       ;            coord_nuove_pt;
       ;            coord_vecchie_pt;
       ;           nome_entita
       ;      )
       ;  )
          );progn
        );if
        (setq new_entita (cons atomo new_entita)) ;------nuovo
        (setq n (1+ n))
        ;increment the counter
      );repeat
      (setq new_entita (reverse new_entita))
      (setq nome_entita (cdr new_entita))
      ;(setq nome_entita new_entita)
       (entmod nome_entita)
)
;
; modifica delle entita' di tipo linea
;
(defun leggiline (nome_entita)
       ;legge e sposta il primo vertice
          (setq coord_vecchie_pt (cdr (assoc 10 nome_entita)))
          (trasla coord_vecchie_pt)
          (setq nome_entita
              (subst
                   (append '(10) coord_nuove_pt)
                   (assoc 10 nome_entita)
                   nome_entita
              )
          )
       ;legge e sposta il secondo vertice
          (setq coord_vecchie_pt (cdr (assoc 11 nome_entita)))
          (trasla coord_vecchie_pt)
          (setq nome_entita
              (subst
                   (append '(11) coord_nuove_pt)
                   (assoc 11 nome_entita)
                   nome_entita
              )
          )
       (entmod nome_entita)
)
;
; modifica delle entit_ di tipo INSERT
;
(defun legginsert (nome_entita)
;--------------------------------------------------------------
;------------legge e sposta il punto di inserimento------------
;--------------------------------------------------------------
          (setq coord_vecchie_pt (cdr (assoc 10 nome_entita)))
          (trasla coord_vecchie_pt)
          (setq nome_entita
              (subst
                   (append '(10) coord_nuove_pt)
                   (assoc 10 nome_entita)
                   nome_entita
              )
          )
          (entmod nome_entita)
;--------------------------------------------------------------
        (setq swc (cdr (assoc 66 nome_entita)))
        (if ( = swc 1)
          (progn
          ;se il valore di assoc 66 è uguale a 1 esegue quello che segue
             (setq attributi_insert (entget (entnext (cdr (assoc -1 
nome_entita)))))
             (while (/= (cdr (assoc 0 attributi_insert)) "SEQEND")
                  (setq coord_vecchie_pt (cdr (assoc 10 attributi_insert)))
                  (trasla coord_vecchie_pt)
               (setq attributi_insert
                   (subst
                        (append '(10) coord_nuove_pt)
                        (assoc 10 attributi_insert)
                        attributi_insert
                   ); fine subst
               ); fine setq
               (entmod attributi_insert)
               (setq attributi_insert (entget (entnext (cdr (assoc -1 
attributi_insert)))))
             )
             (entupd (cdr (assoc -1 nome_entita)))
           ); fine progn
        );fine if
)
;
; modifica delle entita' di tipo TEXT
;
(defun leggitext (nome_entita)
          ;legge e sposta il punto di inserimento
          (setq coord_vecchie_pt (cdr (assoc 10 nome_entita)))
          (trasla coord_vecchie_pt)
          (setq nome_entita
              (subst
                   (append '(10) coord_nuove_pt)
                   (assoc 10 nome_entita)
                   nome_entita
              )
          )
       (entmod nome_entita)
)
;
; Sposta le entita' secondo quanto specificato in questo algoritmo
;
(defun trasla (coord_vecchie_pt)
             ; estrae i valori delle coordinate x y z
             (setq coord_x  (nth 1 coord_vecchie_pt))
             (setq coord_y  (nth 0 coord_vecchie_pt))
             (setq coord_z  (nth 2 coord_vecchie_pt))
;=========> Richiama funzione di translazione
            (cat2gb)
            ;(setq coord_x (+ coord_x 100000))
            ;(setq coord_y (+ coord_y 100000))
;=========> FINE Richiama funzione di trnslazione
             ; imposta i valori delle nuove coordinate x y z
             (setq coord_nuove_pt (list coord_x coord_y coord_z))
)
;=========>> (arxload "lispLink"
;=========>>          (print " LispLink già caricato ...")
;=========>> )
(terpri)
;(load "smartdem")
;(smartdem) 


perche ' i files .arx sono stati compilati per la versione 14 di AutoCAD, 
occorre ricompilarli per la versione 2007 che hai te. per quello la funzione 
arxload fallisce nel caricamento dei files
ciao
stefano 

potresti provare a convertire semplicemente le coordinate da
cassini_soldner a gauss -boaga e spostarti il disegno nelle coordinate
volute
http://www.collegiogeometri.pg.it/ris_soft_cartlab.htm

Ok, grazie, anche per la dritta su Cartlab!
andrea