chris_mtp Posté(e) le 25 novembre 2008 Posté(e) le 25 novembre 2008 Bonjour à tous Est il possible (en adpatant le lisp de gile ci-dessous) par sélection d'un axe en plan qui est en fait une polyligne 2d classique de tracer directement pour chaque sommet la bissectrice de l'angle correspondant et si possible d'une largeur prédéfini de part et d'autre de cet axe ? Je m'explique. j'ai un profil qui fait un peu plus de 90 côtés.Pour tracer les bissectrices, j'utilise le lisp de gile qui nécessite de sélectionner d'abord un côté puis l'autre avant de tracer la bissectrice de la longueur souhaité. Mais avec une polyligne de 90 côtés ou même plus, ca fait du taf de sélectionner un côté après l'autre puis de tracer la bissectrice voulue pour chaque sommet. ;;; C:BISSECTRICE 10/02/07 ;;; Crée une ligne sur la bissectrice de l'angle formé par les deux segments sélectionnés. (defun c:bissectrice (/ erreur acdoc space e1 e2 l1 l2 p1 p1e p1m p2 p2e p2m som ang gr pe) (defun erreur (msg) (if (= msg "Fonction annulée") (princ "\n*Annuler*") (princ (strcat "\nErreur: " msg)) ) (redraw) (setq *error* m:err m:err nil ) ) (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)) space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace acdoc) (vla-get-ModelSpace acdoc) ) m:err *error* *error* erreur ) (while (not (setq e1 (entsel "\nSélectionnez le premier segment: ")) ) ) (while (not (setq e2 (entsel "\nSélectionnez le second segment: ")) ) ) (setq l1 (entget (car e1)) l2 (entget (car e2)) p1 (osnap (cadr e1) "_near") p2 (osnap (cadr e2) "_near") ) (if (and (or (and (member (cdr (assoc 0 l1)) '("XLINE" "RAY")) (setq p1m (mapcar '+ p1 (trans (cdr (assoc 11 l1)) 0 1 T))) (setq p1e (mapcar '- p1 (trans (cdr (assoc 11 l1)) 0 1 T))) ) (and (setq p1m (osnap (cadr e1) "_midpoint")) (setq p1e (osnap (cadr e1) "_endpoint")) ) ) (or (and (member (cdr (assoc 0 l2)) '("XLINE" "RAY")) (setq p2m (mapcar '+ p2 (trans (cdr (assoc 11 l2)) 0 1 T))) (setq p2e (mapcar '- p2 (trans (cdr (assoc 11 l2)) 0 1 T))) ) (and (setq p2m (osnap (cadr e2) "_midpoint")) (setq p2e (osnap (cadr e2) "_endpoint")) ) ) ) (if (vl-every '(lambda (x) (equal (caddr p1) (caddr x) 1e-009)) (list p1m p1e p2 p2m p2e) ) (if (and (null (inters p1 p1m p1 p1e)) (null (inters p2 p2m p2 p2e)) ) (if (setq som (inters p1 p1e p2 p2e nil)) (progn (setq ang (ang<2pi (/ (+ (angle som p1) (angle som p2)) 2.0))) (while (and (setq gr (grread T 12 0)) (/= (car gr) 3)) (if (= 5 (car gr)) (progn (redraw) (setq pe (polar som (if (< 0 (ang<2pi (- (angle som (cadr gr)) (+ (/ pi 2) ang))) pi ) (+ ang pi) ang ) (distance som (cadr gr)) ) ) (grdraw som pe -1) ) ) ) (vla-StartUndoMark acdoc) (vla-addLine space (vlax-3d-point (trans som 1 0)) (vlax-3d-point (trans pe 1 0)) ) (redraw) (vla-EndUndoMark acdoc) ) (princ "\nErreur: segments parallèles") ) (princ "\nErreur: segment non linéaire") ) (princ "\nErreur: segments non coplanaires ou non parallèles au plan du SCU courant" ) ) (princ "\nErreur: entité non valide") ) (setq *error* m:err m:err nil ) (princ) ) ;;; Ang<2pi Retourne l'angle, à 2*k*pi près, compris entre 0 et 2*pi (defun ang<2pi (ang) (if (and (<= 0 ang) (< ang (* 2 pi))) ang (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi))) ) ) Merci par avance de votre aide.Chris_mtp
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant