Aller au contenu

distance le long d\'une polyligne ???


Messages recommandés

Posté(e)

HELP !!

 

Est-ce que quelqu'un connait le moyen de mesurer, le long d'une polyligne, la distance d'un point par rapport à l'origine sans devoir utiliser à chaque fois la commande DI.

 

Je dois en effet placer précisément les points particuliers venant d'un profil en long sur l'axe en plan.

 

Merci d'avance

Posté(e)

Salut stufff,

 

1°)Tu fais une ligne de cotation (COTLIGN) que tu supprime après

ou

2°)Tu as la possibilité de créer un bloc avec attribut champs du genre

-Attribut 1 = coordonné X

-Attribut 2 = coordonné Y

-Attribut 3 = coordonné Z

avec origine de SCU le début de la polyligne

 

ou encore

3°)Le LISP (mais c'est sans moi pas le temps)

 

Cyprien

Utilisateur AutoCAD depuis la R12

Longue Vie à CADxp

 

Posté(e)

Salut,

 

Si c'est la distance le long de la polyligne, tu peux utiliser la commande MESURER (_MEASURE) en ne conservant à chaque fois que le premier point.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci à vous mais, pour etre plus clair:

 

Je dois reporter des dizaines points sur une polyligne composée de centaines de sommets. Je dispose pour cela des distances entre les point à reporter. Il faudrait en fait que je puisse par exemple faire implanter un point à telle distance de l'origine (ou du point précédent) tout en ayant plusieurs sommet intermédiaires entre ces deux points.

 

Bref je ne suis pas sûr d'être vraiment plus clair.

 

Pour la commande MESURER (_MEASURE), je ne voit pas comment elle marche !!!

 

Ya t'il des applications donnant plus de possibilité de modif de polyligne ?

 

 

Posté(e)

La commande MESURER demande à l'utilisateur de choisir un objet à mesurer (ta polyligne) puis la longueur des segments elle place ensuite des points le long de l'objet équidistant de la longueur spécifiée à partir du côté sur lequel a été choisi l'objet.

 

Je proposais de l'utiliser et d'effacer à chaque mesure tous les points sauf le premier.

 

Je ne connais pas d'autre commande qui permettrait de faire ce que tu veux, mais je pense que c'est assez facilement programmable.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Un petit LISP vite fait,

 

On lance DIST-PTS, on sélectionne la polyligne (ou n'importe quel autre objet curviligne) et on spécifie des distances depuis le départ de la polyligne. Tant qu'elles sont valides, un point est ajouté sur la ployligne.

 

(defun c:dist-pts (/ ent space dist pt)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
     )
 (if
   (and (setq ent (car (entsel)))
 (setq ent (vlax-ename->vla-object ent))
 (not
   (vl-catch-all-error-p
     (vl-catch-all-apply 'vlax-curve-getStartPoint (list ent))
   )
 )
 (setq space (vla-ObjectIDtoObject *acdoc* (vla-get-OwnerID ent)))
   )
    (while
      (and (setq dist (getdist "\nSpécifiez la distance à partir du départ: "))
    (setq pt (vlax-curve-getPointAtDist ent dist))
      )
(vla-addPoint space (vlax-3d-point pt))
    )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Je n'ai pas de temps à moi suffisant en ce moment pour approfondir la demande.

Cependant je te propose 2 lisp qui semble approcher ta demande.

Essayes les voir si ils peuvent te convenir, ou les modifier un peu.

 

(defun draw_pt (pt / pt1 pt2 pt3 pt4)
(setq
	rap (/ (getvar "viewsize") 100)
	pt1 (list (+ (car pt) rap) (+ (cadr pt) rap) (caddr pt))
	pt2 (list (+ (car pt) rap) (- (cadr pt) rap) (caddr pt))
	pt3 (list (- (car pt) rap) (- (cadr pt) rap) (caddr pt))
	pt4 (list (- (car pt) rap) (+ (cadr pt) rap) (caddr pt))
)
(grdraw pt pt1 -1)
(grdraw pt pt2 -1)
(grdraw pt pt3 -1)
(grdraw pt pt4 -1)
)
(defun c:dist_curv (/ js pt en dxf_11 d_curv)
(vl-load-com)
(princ "\nSélectionnez un objet curviligne.")
(while (setq js (ssget "_+.:E:S" '((0 . "*LINE,ARC,CIRCLE,ELLIPSE") (-4 . "[b]<[/b]NOT") (0 . "MLINE") (-4 . "NOT>"))))
	(while (setq pt (getpoint "\nDonnez un point pour mesurer la distance curviligne: "))
		(redraw)
		(setq dxf_11 (vlax-curve-getClosestPointTo (setq en (ssname js 0)) (trans pt 1 0)))
		(cond
			((and
				(not (equal dxf_11 (vlax-curve-getStartPoint en) 1e-9))
				(not (equal dxf_11 (vlax-curve-getEndPoint en) 1e-9))
			 )
				(setq d_curv (vlax-curve-getDistAtPoint en dxf_11))
				(draw_pt (trans (vlax-curve-getStartPoint en) 0 1))
				(draw_pt (trans dxf_11 0 1))
				(princ (strcat "\nLongueur du segment " (rtos d_curv) " sur une longueur totale de "(rtos (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)))))
			)
			(T (princ (strcat "\nLongueur du segment " (rtos (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en))))))
		)
	)
	(redraw)
)
(prin1)
)

 

Ou celui ci un peu plus sophistiqué

 

(defun draw_pt (pt / pt1 pt2 pt3 pt4)
(setq
	rap (/ (getvar "viewsize") 50)
	pt1 (list (+ (car pt) rap) (+ (cadr pt) rap))
	pt2 (list (+ (car pt) rap) (- (cadr pt) rap))
	pt3 (list (- (car pt) rap) (- (cadr pt) rap))
	pt4 (list (- (car pt) rap) (+ (cadr pt) rap))
)
(grdraw pt pt1 -1)
(grdraw pt pt2 -1)
(grdraw pt pt3 -1)
(grdraw pt pt4 -1)
)
(defun c:lg_curv ( / js ent vlaobj pt_org pt_end param_start param_end perim_obj mnpt mxpt minpt maxpt vmin vmax zt pt_brk abs_curv pt_tmp)
(while (not (setq js (ssget "_+.:S" '((0 . "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE")(-4 . "[b]<[/b]NOT")(-4 . "&") (70 . 112)(-4 . "NOT>"))))))
(vl-load-com)
(redraw (setq ent (ssname js 0)) 3)
(setq
	vlaobj (vlax-ename->vla-object ent)
	pt_org (vlax-curve-getStartPoint vlaobj)
	pt_end (vlax-curve-getEndPoint vlaobj)
	param_start (vlax-curve-getStartParam vlaobj)
	param_end (vlax-curve-getEndParam vlaobj)
;		perim_obj (vlax-curve-getDistAtParam vlaobj (+ param_start param_end))
	perim_obj (vlax-curve-getDistAtParam vlaobj param_end)
)
(vla-GetBoundingBox vlaobj 'mnpt 'mxpt)
(setq
	minpt (trans (safearray-value mnpt) 0 1)
	maxpt (trans (safearray-value mxpt) 0 1)
	vmin (mapcar '- (getvar "viewctr") (list (/ (* (car (getvar "screensize")) (* 0.5 (getvar "viewsize"))) (cadr (getvar "screensize"))) (* 0.5 (getvar "viewsize")) 0.0))
	vmax (mapcar '+ (getvar "viewctr") (list (/ (* (car (getvar "screensize")) (* 0.5 (getvar "viewsize"))) (cadr (getvar "screensize"))) (* 0.5 (getvar "viewsize")) 0.0))
)
(setq zt (or ([b]<[/b] (car minpt) (car vmin)) ([b]<[/b] (cadr minpt) (cadr vmin)) (> (car maxpt) (car vmax)) (> (cadr maxpt) (cadr vmax))))
(if zt (command "_.zoom" "_window" "_none" minpt "_none" maxpt))
(while (setq pt_brk (getpoint "\nChoix du point pour définir l'abscise curviligne "))
	(setq pt_brk (vlax-curve-getClosestPointTo vlaobj (trans pt_brk 1 0)))
	(if pt_brk
		(progn
			(draw_pt (trans pt_org 0 1))
			(draw_pt (trans pt_brk 0 1))
			(setq abs_curv (vlax-curve-getDistAtPoint vlaobj pt_brk) ordon_y (caddr pt_brk))
			(princ (strcat "\nAbscise curviligne du point = " (rtos abs_curv) " Z du point = " (rtos ordon_y)))
			(princ "\n[b]<[/b]Click+gauche> pour inverser le sens de parcours; [b]<[/b]Entrée>/[Espace]/Click+droit pour finir!.")
			(while (and (not (member (setq key (grread T 4 2)) '((2 13) (2 32)))) (/= (car key) 25))
				(cond
					((eq (car key) 3)
						(draw_pt (trans pt_org 0 1))
						(draw_pt (trans pt_end 0 1))
						(setq abs_curv (- perim_obj abs_curv) pt_tmp pt_org pt_org pt_end pt_end pt_tmp)
						(princ (strcat "\nAbscise curviligne du point = " (rtos abs_curv) " Z du point = " (rtos ordon_y)))
					)
				)
			)
			(redraw)
		)
	)
)
(if zt (command "_.zoom" "_previous"))
(redraw ent 4)
(prin1)
)

 

[Edité le 13/5/2008 par bonuscad]

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é