Aller au contenu

interpolation d\'une polyligne


Messages recommandés

Posté(e)

Bonjour,

 

J'ai cherché un peut partout sur le forum sans rien trouver a ce sujet.

Je cherche une petite routine me permettant, sur une polyligne de marquer (à l'image de diviser ou mesurer) un point à un Z donné sur la polyligne (X Y etant en plan et Z en altitude).

 

exemple une polyligne début (500,500,400) fin (600,500,410) .

je veux noter sur cette polyligne le point a Z 409.00 (ou mieux encore tout les entiers)

 

j'espère avoir été assez claire et vous remercie par avance.

 

Joël

 

 

[Edité le 21/11/2007 par joell]

Posté(e)

Par contre il peut y avoir plusieurs points sur cette polyligne... Si elle n'est pas linéaire en Z...

 

C'est vrai que c'est un bon challenge !

 

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Bon, j'entame ce challenge ;)

 

Le code qui suit ne fonctionnera que sur une polyligne 3D.

Il vous sera demandé un interval en Z qui devra être répété pour placer les points en Z correspondants (exemple tout les 1 mètres, ou 25 mètre (centimètre,...)

 

(defun round_number (xr n / )
(* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n))
)
(defun c:z_interval ( / js dxf_ent vla_obj n pt_lst z_value z_min z_max pt_int)
(vl-load-com)
(princ "\nSélectionnez une polyligne 3D.")
(while
	(null
		(setq js
			(ssget "_+.:E:S"
				(list
					'(0 . "POLYLINE")
					(cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
					(cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
					'(-4 . "[b]<[/b]NOT")
						'(-4 . "&")
						'(70 . 112)
					'(-4 . "NOT>")
				)
			)
		)
	)
	(princ "\nCe n'est pas une polyligne 3D!")
)
(setq
	dxf_ent (entget (ssname js 0))
	vla_obj (vlax-ename->vla-object (cdar dxf_ent))
	n -1
	pt_lst nil
)
(if (zerop (getvar "USERR1")) (setvar "USERR1" 1.0))
(initget 6)
(setq z_value (getreal (strcat "\nEntrez l'interval en Z [b]<[/b]" (rtos (getvar "USERR1")) ">: ")))
(if (not z_value) (setq z_value (abs (getvar "USERR1"))))
(setvar "USERR1" z_value)
(repeat (fix (vlax-curve-getEndParam vla_obj))
	(setq pt_lst (cons (vlax-curve-getPointAtParam vla_obj (setq n (1+ n))) pt_lst))
)
(if (zerop (boole 1 1 (cdr (assoc 70 dxf_ent))))
	(setq pt_lst (cons (vlax-curve-getEndPoint vla_obj) pt_lst))
	(setq pt_lst (cons (vlax-curve-getStartPoint vla_obj) pt_lst))
)
(while (cdr pt_lst)
	(setq
		z_min (round_number (min (caddar pt_lst) (car (cddadr pt_lst))) (/ 1 z_value))
		z_max (max (caddar pt_lst) (car (cddadr pt_lst)))
	)
	(while ([b]<[/b] z_min z_max)
		(setq pt_int
			(inters
				(car pt_lst)
				(cadr pt_lst)
				(list (caar pt_lst) (cadar pt_lst) z_min)
				(list (caadr pt_lst) (cadadr pt_lst) z_min)
				T
			)
		)
		(if pt_int
			(entmake
				(list
					(cons 0 "POINT")
					(cons 100 "AcDbPoint")
					(cons 10 pt_int)
					(list 210 0.0 0.0 1.0)
				)
			)
		)
		(setq z_min (+ z_min z_value))
	)
	(setq pt_lst (cdr pt_lst))
)
(prin1)
)

 

NB: Le calcul des Z et les points sont traités dans tous les cas dans le SCG. Le code a été testé rapidement.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

je ne trouve pas de fonction tangente.Comme fait on.

 

tangente alpha = sinus alpha / cosinus alpha

 

cotangente alpha = cosinus alpha / sinus alpha

 

Débloqué ? ;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Super boulot, et quel vitesse pour répondre a ma petite question.

 

J'ai une autre question a bonuscad et tu celui qui a fait bonuscad justement ?

 

merci encore

Joël

Posté(e)

es tu celui qui a fait bonuscad justement ?

 

C'est bien moi, un utilisateur ancien d'autocad, qui a horreur des taches répétitives, et qui fait tout pour l'éviter. :P

 

Donc je partage pour simplifier la vie des dessinateurs comme moi. Une solidarité dans le corps du métier en sorte. ;)

 

 

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é