Aller au contenu

Angle de rotation d'un SCU pivoté


krunch

Messages recommandés

Bonjour à tous ..

 

Quand on crée avec une commande une entité comportant une propriété Rotation (RefBloc, Text ..) dans un SCU pivoté 2D/3D sa propriété Rotation (code de groupe 50) est mise à jour. Par exemple si on crée un TEXT avec un angle 0 dans un SCU pivoté on le récupère avec un angle calculé en fonction de l'angle 'horizontal' du SCU (et si on entre un angle quelconque cet angle est ajouté).

 

Mais si on fait pareil avec entmake ou vla-AddXXX la propriété Rotation n'est pas mise à jour (avec entmake l'entité est alignée sur le SCG mais on peut toujours actualiser la normale), et si le SCU a un angle horizontal l'entité est de traviole ..

 

La question est donc : comment calculer cet angle pour l'injecter dans le code 50 ?

 

En tâtonnant je suis arrivé à la fonction suivante (à partir d'un calcul angulaire piqué chez gile) en calculant l'angle entre l'axe (Ox) du SCU et l'axe (Ox) transformé selon la normale du SCU [a] :

; the angle stored in group code 50 is measured clockwise from the X axis of the Object Coordinate System (OCS)
(defun c:go (/ a B)
 (setq a (trans '(1 0 0) (trans '(0 0 1) 0 1 T) 1 T)
     	b (trans '(1 0 0) '(0 0 1) 1 T)
 )
 (angle_3pts a B) 
)
(defun angle_3pts (v1 v2 / v1 v2)
 (cond
  	((equal v1 v2 1e-009) (- pi (angle_3pts '(1 0 0) v1))) ; si uniquement pivoté selon (Oz)
  	((equal v1 (mapcar '- v2) 1e-009) 0.0)
  	(T (- pi (* 2 (asin (/ (distance v1 v2) 2)))))
 )
)
;;; ANGLE_3PTS Retourne l'angle (radians) défini par son sommet et deux points (méthode théorème de Carnot)
;;; ACOS Retourne l'arc cosinus du nombre en radians
(defun ASIN (num)
 (if (<= -1 num 1)
(atan num (sqrt (- 1 (expt num 2))))
(princ "\nErreur: L'argument pour ASIN doit être compris entre -1 et 1")
 )
)

 

Mais il semblerait qu'elle ne marche pas dans tous les cas : Il y a des seuils et des conditions dans lesquels il faut ajouter des pi et pi/2 (?)

En fait je comprends pas très bien la logique de tout ça ... quelqu'un sait comment faire ?

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité