CGDESSINE Posté(e) le 6 septembre 2004 Posté(e) le 6 septembre 2004 Bonjour tout le monde Comment récuperer dans une LWPOLYLINE de 2 points en arc ces informations :centre, rayon, angle départ et angle de finLes seules infos retournées par entget sont :les courbures et les deux points Ou il y a t'il une formule Merci d'avance [Edité le 6/9/2004 par CGDESSINE]
Tramber Posté(e) le 7 septembre 2004 Posté(e) le 7 septembre 2004 Non, il me semble que c'est le centre et les 2 angles dans le plan formés par les 2 points qui sont retournés. Non ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
CGDESSINE Posté(e) le 7 septembre 2004 Auteur Posté(e) le 7 septembre 2004 salut Merci pour la réponseDésolé mais c'est bien ce que j'ai écrit A quoi correspondent ces courbures ?A mon avis il peut y avoir une formule Merci@+
bonuscad Posté(e) le 7 septembre 2004 Posté(e) le 7 septembre 2004 Salut, Inspiré de la discussionhttp://www.cadxp.com/sujetXForum-3162.htmqui m'a permis d'écrire plusieurs routines basée sur ce code:Elever une perpendiculaire, continuer une tangente a un segment ou un arc, interroger un angle entre 2 segments, faire une bissectrice entre 2 segment, interroger 1 rayon Voici cette dernière ou tu retrouvera le rayon calculer sur un arc de polyligne. Je te laisse méditer dessus :) (defun near_vertex_arr (obj / obj dxf_obj obj_vlax pt_sel pt_dist param_start param_end perim_obj e_next l_som l_arr l_dist n n_first n_second) (setq dxf_obj (entget (car obj))) (vl-load-com) (setq obj_vlax (vlax-ename->vla-object (car obj)) pt_sel (vlax-curve-getClosestPointTo obj_vlax (trans (osnap (cadr obj) "_near") 1 0)) pt_dist (vlax-curve-getDistAtPoint obj_vlax pt_sel) param_start (vlax-curve-getStartParam obj_vlax) param_end (vlax-curve-getEndParam obj_vlax) perim_obj (vlax-curve-getDistAtParam obj_vlax (+ param_start param_end)) ) (cond ((eq (cdr (assoc 0 dxf_obj)) "LWPOLYLINE") (setq l_som (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_obj)) l_arr (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 42)) dxf_obj)) ) ) (T (setq e_next (entnext (car obj))) (while (= "VERTEX" (cdr (assoc 0 (setq dxf_next (entget e_next))))) (if (zerop (boole 1 223 (cdr (assoc 70 dxf_next)))) (setq l_som (cons (cdr (assoc 10 dxf_next)) l_som) l_arr (cons (cdr (assoc 42 dxf_next)) l_arr) ) ) (setq e_next (entnext e_next)) ) (setq l_som (reverse l_som) l_arr (reverse l_arr)) ) ) (setq l_dist (mapcar '(lambda (x) (vlax-curve-getDistAtPoint obj_vlax x)) l_som)) (if (vlax-curve-isClosed obj_vlax) (progn (setq l_som (append l_som (list (car l_som)))) (setq l_dist (append l_dist (list perim_obj))) ) ) (setq n 0) (repeat (1- (length l_dist)) (if (and (> pt_dist (nth n l_dist)) (< pt_dist (nth (1+ n) l_dist))) (setq n_first n n_second (1+ n)) ) (setq n (1+ n)) ) (list (trans (nth n_first l_som) 0 1) (trans (nth n_second l_som) 0 1) (nth n_first l_arr)) ) (defun c:q_ray ( / ent dxf_ent typent pt_sel l_2pt) (setvar "cmdecho" 0) (while (not (setq ent (entsel "\nInterroger le rayon du segment arrondi: ")))) (setq typent (cdr (assoc 0 (setq dxf_ent (entget (car ent))))) pt_sel (osnap (cadr ent) "_near")) (cond ((and (or (eq typent "ARC") (eq typent "CIRCLE")) (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0))) (setq l_2pt (distance pt_sel (trans (cdr (assoc 10 dxf_ent)) 0 1))) ) ((or (and (eq typent "LWPOLYLINE") (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0))) (and (eq typent "POLYLINE") (zerop (boole 1 124 (cdr (assoc 70 dxf_ent)))) (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0)) ) ) (setq l_2pt (near_vertex_arr ent)) (if (zerop (caddr l_2pt)) (princ "\nCe segment est droit et ne peut être interrogé!") (setq l_2pt (/ (distance (car l_2pt) (cadr l_2pt)) (sin (* 2.0 (atan (caddr l_2pt)))) 2.0))) ) (T (if (not (equal (assoc 210 dxf_ent) '(210 0.0 0.0 1.0))) (princ "\nEntité non parralèlle au SCG.") (princ "\nCet objet ne peut être interrogé!") ) ) ) (if (eq (type l_2pt) 'REAL) (progn (alert (strcat "\nRayon = " (rtos (abs l_2pt) 2 3) ) ) (princ (strcat "\nRayon = " (rtos (abs l_2pt) 2 3) ) ) ) ) (setvar "cmdecho" 1) (princ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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