stufff Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 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
papyrus1985 Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 Salut stufff, 1°)Tu fais une ligne de cotation (COTLIGN) que tu supprime après ou2°)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é Zavec 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
(gile) Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 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
stufff Posté(e) le 13 mai 2008 Auteur Posté(e) le 13 mai 2008 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 ?
(gile) Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 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
(gile) Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 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
bonuscad Posté(e) le 13 mai 2008 Posté(e) le 13 mai 2008 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
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