Les fonctions: GET-ROT.LSP

;************************************************************************
;* [CMFAO] AME 6602 ACQUISITION DES DONNÉES SPATIALES                   *
;* [GRCAO] Claude Parisel                                               *
;* Mars 1999                                                            *
;************************************************************************
; GET-ROT
; Saisie d'un ensemble de rotations dans l'ordre choisi
; et calcul de la matrice dans cet ordre
;------------------------------------------------------------------------
; P1     1er point d'un axe quelconque de rotation
; P2     2ème point d'un axe quelconque de rotation
; ANG    Angle de rotation autour d'un axe en degrés
; REP    Réponse de l'usager
; CHOIX  Choix de l'usager
; C      Compteur
; LONG   Longueur des choix successifs
; R1     indice de boucle
;------------------------------------------------------------------------
; RETOUR:
; MATTRANS  matrice de rotation globale
;---------------------------------------------------------------------
(defun get-rot ( / p1 p2 ang rep retour choix c long r1)

  ;Acquisition des choix
  ;---------------------
  (setq r1 1)
  (print "Donnez, en séquence, les diverses rotations: ")
  (setq retour (list))
  (while
    (= r1 1)
    (setq choix "Z")
    (setq rep (strcase (getstring "\n  X/Y/Z/Quelconque/F <Z>: ")))
    (if (/= rep nil)(setq choix rep))
    (cond
      (
        (= choix "Q")
        (setq p1 (getpoint "  Donnez le 1er  point de l'axe de rotation: "))
        (setq p2 (getpoint "  Donnez le 2ème point de l'axe de rotation: "))
        (setq ang (getreal "  Donnez l'angle de rotation: "))
        (setq retour (cons (list choix ang p1 p2) retour))
      )
      (
        (or (= choix "X")(= choix "Y")(= choix "Z"))
        (setq ang (getreal "  Donnez l'angle de rotation: "))
        (setq retour (cons (list choix ang) retour))
      )
      (
        (= choix "F")
        (setq r1 0)
        (setq retour (reverse retour))
      )
    )
  )

  ;Execution de la matrice
  ;--------------------------
  (setq matrot (make-rot retour))
)
;---------------------------------------------------------------------------
; Exemple:
; Command: (get-rot)
;          "Donnez, en séquence, les diverses rotations: "
;           X/Y/Z/Quelconque/F <Z>:
x
;           Donnez l'angle de rotation: 30
;           X/Y/Z/Quelconque/F <Z>: f
;           ((1.0 0.0 0.0 0.0) (0.0 0.866025 0.5 0.0) (0.0 -0.5 0.866025 0.0)
;           (0.0 0.0 0.0 1.0))
;----------------------------------------------------------------------------