Aller au contenu

insérer des points, mais distance par distance


litelsousa

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Lien vers le commentaire
Partager sur d’autres sites

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;

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

Lien vers le commentaire
Partager sur d’autres sites

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.

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

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é