• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

教育 >if< は動作しません

  • Thread starter Thread starter Angelo2449
  • Start date Start date

Angelo2449

Guest
salve a tutti,
in questo codice, il comando > if < non funziona come dovrebbe, infatti, anziché selezionare il caso corrente, li passa tutti!
la variabile > tipodrone < viene valorizzata in modo esatto come "zoom ", "pro" e "manuale".
forse lo osservo troppo, evidentemente la soluzione è lì, sotto il naso!
grazie.
Code:
 ;; @quadro

    (defun quadro (/ tipodrone pa pb pc pd x2 y2 beta alfa gamma x1 y1 x2 y2 xb yb xc yc xd yd)

        (runapp "c:\\autocadsupporto\\libertytre\\sceltadrone.exe " "c:\\autocadsupporto\\libertytre\\sceltadrone.tkn" :vlax-true)
        (setq tipodrone (getcliptext))

        (if (= tipodrone "nessuno")
            (progn
                (runapp "c:\\autocadsupporto\\libertytre\\funzioneinterrotta.exe " "c:\\autocadsupporto\\libertytre\\funzioneinterrotta.tkn" :vlax-true)
                (vl-exit-with-error "uscita dal programma")
            );;progn
        );;if

        (princ "\n")
        (princ "tipodrone >>>>>>")
        (princ tipodrone)
        (princ "<<<<")
        (princ "\n")

        if (= tipodrone "zoom")
        (progn
            (setq pa (getpoint "\nclicca il primo punto - zoom (vertice alto a sinistra)"))
            (setq pb (getpoint "\nclicca il secondo punto - zoom (vertice alto a destra)"))
        );;progn
    end if

        if (= tipodrone "pro")
        (progn
            (setq pa (getpoint "\nclicca il primo punto - pro (vertice alto a sinistra)"))
            (setq pb (getpoint "\nclicca il secondo punto - pro (vertice alto a destra)"))
        );;progn
    end if

        if (= tipodrone "manuale")
        (progn
            (setq pa (getpoint "\nclicca il primo punto - manuale (vertice alto a sinistra)"))
            (setq pb (getpoint "\nclicca il secondo punto - manuale (vertice basso a destra)"))
        );;progn
    end if

       (setq alfa (angle pa pb))
       (setq beta (- pi alfa))

       (setq x2 (* 45.00 (cos alfa)))
       (setq y2 (* 45.00 (sin alfa)))

       (setq y1 (* 32.00 (cos beta)))
       (setq x1 (* 32.00 (sin beta)))

       (setq xd (+ (car pa) x1))
       (setq yd (+ (cadr pa) y1))
       (setq pd (list xd yd))   

       (setq xc (+ (car pd) x2))
       (setq yc (+ (cadr pd) y2))
       (setq pc (list xc yc)) 

       (setq xb (+ (car pa) x2))
       (setq yb (+ (cadr pa) y2))
       (setq pb (list xb yb))
       (command "_pline" pa pb pc pd pa "")       

   );;defun
 
scusate, evidentemente ieri ero troppo stanco e non riuscivo a vedere anche gli errori macroscopici.
ho semplicemente mischiato due linguaggi di programmazione diversi > end in < oltre ad aver omesso delle parentesi!
questo è il codice funzionante _
Code:
 ;; @quadro

    (defun quadro (/ tipodrone pa pb pc pd x2 y2 beta alfa gamma x1 y1 x2 y2 xb yb xc yc xd yd)

        (runapp "c:\\autocadsupporto\\libertytre\\sceltadrone.exe " "c:\\autocadsupporto\\libertytre\\sceltadrone.tkn" :vlax-true)
        (setq tipodrone (getcliptext))

        (if (= tipodrone "nessuno")
            (progn
                (runapp "c:\\autocadsupporto\\libertytre\\funzioneinterrotta.exe " "c:\\autocadsupporto\\libertytre\\funzioneinterrotta.tkn" :vlax-true)
                (vl-exit-with-error "uscita dal programma")
            );;progn
        );;if

        (princ "\n")
        (princ "tipodrone >>>>>>")
        (princ tipodrone)
        (princ "<<<<")
        (princ "\n")

        (if (= tipodrone "zoom")
        (progn
            (setq pa (getpoint "\nclicca il primo punto - zoom (vertice alto a sinistra)"))
            (setq pb (getpoint "\nclicca il secondo punto - zoom (vertice alto a destra)"))
        );;progn
    );;if

        (if (= tipodrone "pro")
        (progn
            (setq pa (getpoint "\nclicca il primo punto - pro (vertice alto a sinistra)"))
            (setq pb (getpoint "\nclicca il secondo punto - pro (vertice alto a destra)"))
        );;progn
    );;if

        (if (= tipodrone "manuale")
        (progn
            (setq pa (getpoint "\nclicca il primo punto - manuale (vertice alto a sinistra)"))
            (setq pb (getpoint "\nclicca il secondo punto - manuale (vertice basso a destra)"))
        );;progn
       );;if

       (setq alfa (angle pa pb))
       (setq beta (- pi alfa))

       (setq x2 (* 45.00 (cos alfa)))
       (setq y2 (* 45.00 (sin alfa)))

       (setq y1 (* 32.00 (cos beta)))
       (setq x1 (* 32.00 (sin beta)))

       (setq xd (+ (car pa) x1))
       (setq yd (+ (cadr pa) y1))
       (setq pd (list xd yd))   

       (setq xc (+ (car pd) x2))
       (setq yc (+ (cadr pd) y2))
       (setq pc (list xc yc)) 

       (setq xb (+ (car pa) x2))
       (setq yb (+ (cadr pa) y2))
       (setq pb (list xb yb))
       (command "_pline" pa pb pc pd pa "")       

   );;defun
grazie comunque.
 

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top