Aller au contenu

Messages recommandés

Posté(e)

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 fin

Les 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]

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

Salut,

 

Inspiré de la discussion

http://www.cadxp.com/sujetXForum-3162.htm

qui 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

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é