litelsousa Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 Bonjour, Y a-t-il un moyen de faire la commande "point - mesurer" (_MEASURE) mais de donner une mesure différente à chaque point sur une polyligne? Par exemple le premier point à 6 mètres, le deuxième à 3 mètres du premier, le suivant à un mètre et ainsi de suite. Ce qui me donnerait ça: ------X---X-X--------X------X Merci pour votre aide. Citer
Tramber Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 Il y a la commande MODIFLONG. Je trace la polyligne. Et je la réduis régulièrement à l'aide de l'option différence. J'ajoute un point au bout et ainsi de suite.Si le besoin devient récurent, il suffit de créer une macro ou un lisp. Citer Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
litelsousa Posté(e) le 26 mai 2016 Auteur Posté(e) le 26 mai 2016 ok merci,Je ne connaissait pas cette commande, elle ira très bien. Citer
litelsousa Posté(e) le 26 mai 2016 Auteur Posté(e) le 26 mai 2016 En fait elle est très pénible... il faut à chaque fois que je calcule la différance de longueur :( j'ai seulement la distance cumulée (c'est un axe de chaussée)) Citer
Demixav Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 Salut... Il y a un lisp "measure_on_curve" (de BonuCad!) qui permet de faire ce que tu cherches je pense... http://cadxp.com/topic/36494-faire-une-mesure-sur-un-objet-curviligne/page__p__198631__hl__measure_on_curve__fromsearch__1#entry198631 Xav Citer AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
bonuscad Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 Un autre (que je ne pense pas avoir posté), basé sur le même concept mais qui répondrait mieux au souhait. (defun draw_pt (pt col / rap) (setq rap (/ (getvar "viewsize") 50)) (foreach n (mapcar '(lambda (x) (list ((eval (car x)) (car pt) rap) ((eval (cadr x)) (cadr pt) rap) (caddr pt) ) ) '((+ +) (+ -) (- +) (- -)) ) (grdraw pt n col) ) ) (defun c:measure_on_curve_whith_CSV ( / js ent dxf_ent vla_obj param_end perim_obj pt_ref dist_ref op input f_open l_read len_vtx lst_measure nb_el q_el new_pt) (vl-load-com) (princ "\nSélectionner un objet curviligne sur lequel vous voulez effectuer une mesure.") (while (not (setq js (ssget "_+.:E:S" (list (cons -4 "<OR") (cons -4 "<AND") (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE") (cons -4 "<NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") (cons -4 "AND>") (cons 0 "SPLINE") (cons -4 "OR>") ) ) ) ) ) (setq ent (ssname js 0) dxf_ent (entget ent) vla_obj (vlax-ename->vla-object ent) param_end (vlax-curve-getEndParam vla_obj) perim_obj (vlax-curve-getDistAtParam vla_obj param_end) ) (redraw ent 3) (initget 1) (setq pt_ref (getpoint "\nPoint de référence de la mesure: ") pt_ref (vlax-curve-getClosestPointTo vla_obj (trans pt_ref 1 0)) ) (draw_pt (trans pt_ref 0 1) 1) (setq dist_ref (vlax-curve-getDistAtPoint vla_obj pt_ref)) (initget "+ -") (setq op (getkword "\nAdditonner-Soustraire [+/-]? <+>: ")) (if (or (eq op "+") (not op)) (setq op '+) (setq op '-)) (setq input (getfiled "Select a CSV file" "" "csv" 2) f_open (open input "r") ) (while (setq l_read (read-line f_open)) (setq len_vtx (atof (substr l_read 1 (vl-string-position 59 l_read)))) (setq lst_measure (cons len_vtx lst_measure)) ) (close f_open) (setq lst_measure (reverse lst_measure) nb_el (length lst_measure) len_vtx 0 q_el 0 ) (while (<= (setq len_vtx (+ len_vtx (nth q_el lst_measure))) (- perim_obj dist_ref)) (if (or (null (setq new_pt (vlax-curve-getPointAtDist vla_obj (+ dist_ref len_vtx)))) (> ((eval op) dist_ref len_vtx) perim_obj)) (setq new_pt (vlax-curve-getPointAtDist vla_obj (- dist_ref len_vtx))) ) (draw_pt (trans new_pt 0 1) 3) (if (and (<= ((eval op) dist_ref len_vtx) perim_obj) (>= ((eval op) dist_ref len_vtx) 0.0)) (setq new_pt (vlax-curve-getPointAtDist vla_obj ((eval op) dist_ref len_vtx))) (setq new_pt nil) ) (if new_pt (progn (redraw) (draw_pt (trans pt_ref 0 1) 1) (draw_pt (trans new_pt 0 1) 3)) (progn (redraw) (draw_pt (trans pt_ref 0 1) 1)) ) (redraw) (if new_pt (entmake (list '(0 . "POINT") '(100 . "AcDbEntity") (assoc 67 dxf_ent) (assoc 410 dxf_ent) (cons 8 (getvar "CLAYER")) (cons 10 new_pt) '(210 0.0 0.0 1.0) '(50 . 0.0) ) ) ) (setq q_el (rem (1+ q_el) nb_el)) ) (redraw ent 4) (prin1) ) Il faut au préalable un petit fichier au format CSV qui contiendrait par exemple pour le cas de litelsousa 6.0; 3.0; 1.0; Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Demixav Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 BonusCad, c'est quoi la différence entre les deux stp? Citer AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
bonuscad Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 BonusCad, c'est quoi la différence entre les deux stp? Celui que j'ai proposé avec un fichier CSV génére les points automatiquement avec les interdistances données dans le fichier CSV en répétant celles-ci autant de fois que possible.Alors que dans le lien proposé, il faut le faire un par un en répétant chaque fois l'opération! Le fichier CSV permet en somme la simulation de la commande "mesurer" classique en mode paramètrique. Citer Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Demixav Posté(e) le 26 mai 2016 Posté(e) le 26 mai 2016 Merci pour ta réponse et tes très bons lisp ! :) Citer AutoCad Map 3D 2011 - Covadis v16.0dWindows 7 - 64b
Messages recommandés