CADxp: Décaler une polyligne en conservant les 2 extrémités - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Décaler une polyligne en conservant les 2 extrémités

#1 L'utilisateur est hors-ligne   mocsar 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 4
  • Inscrit(e) : 27-juin 12

Posté 09 décembre 2016 - 09:07

Bonjour à tous,

Je travaille actuellement sur un projet de pose de câbles. Sur le plan, je me retrouve avec x câbles superposés, mon client me demande donc de décaler chaque polyligne afin d'éviter la superposition. C'est là que j'ai besoin de votre aide, je cherche un moyen (lisp, astuce, routine...) pour décaler ma polyligne, mais en conservant les points de départ et de fin de celle-ci. Contrainte supplémentaire, je ne peux pas utiliser de multilignes, et chaque polyligne doit être sur un calque différent.

Merci d'avance pour votre aide.

Bonne journée
0

#2 L'utilisateur est hors-ligne   nosset 

  • ceinture noire
  • Groupe : Membres
  • Messages : 363
  • Inscrit(e) : 06-septembre 12

Posté 09 décembre 2016 - 09:27

Un truc simple et sans programmation:
TU décales toute tes polylignes comme tu veux et après avec les grips tu "reconnectes" les départs et les arrivées sur 1 point.

Mais je n'ai peut être pas compris le résultat voulu.
0

#3 L'utilisateur est hors-ligne   mocsar 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 4
  • Inscrit(e) : 27-juin 12

Posté 09 décembre 2016 - 09:40

Si si c'est bien ça, et c'est ce que je fais actuellement, sauf que pour 2 ou 3 polylignes, ça va, mais là j'ai quelques centaines de polylignes sur mon plan, du coup, au niveau temps, c'est ingérable, mais merci quand meme
0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 10347
  • Inscrit(e) : 02-septembre 05

Posté 09 décembre 2016 - 09:50

Salut,

J'ai répondu ici.

PS: Quand on pense devoir "double-poster" une demande, le signaler me semble un minimum par respect pour ceux qui suivent le sujet.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#5 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4363
  • Inscrit(e) : 20-juin 03

Posté 09 décembre 2016 - 11:21

Bonjour,

J'ai tenté ceci sans avoir testé en profondeur (donc certainement améliorable)
(defun C:Offset4Scheme ( / obj ent vla-ent pt_sel param deriv alpha dis_offset where_pt v1 v2 det_or e_last obj_vlax AcDoc Space)

  (while (not (setq obj (entsel "\nSélectionner l'objet à décaler: "))))
  (setq ent (car obj) vla-ent (vlax-ename->vla-object ent))
  (cond
    ((member
      (vlax-get-property vla-ent 'ObjectName)
      '("AcDbPolyline" "AcDb2dPolyline")
     )
      (setq
        pt_sel (vlax-curve-getClosestPointTo vla-ent (trans (cadr obj) 1 0))
        param (vlax-curve-getparamatpoint vla-ent pt_sel)
        deriv (vlax-curve-getfirstderiv vla-ent param)
        alpha (atan (cadr deriv) (car deriv))
        pt1_start (vlax-curve-getStartPoint vla-ent)
        pt1_end (vlax-curve-getEndPoint vla-ent)
        par (vlax-curve-getParamAtPoint vla-ent pt1_end)
      )
      (redraw ent 3)
      (initget "Par _Through")
      (setvar "OFFSETDIST"
        (if (not (setq dis_offset (getdist (strcat "\nSpécifiez la distance de décalage ou [Par] <" (if (< (getvar "OFFSETDIST") 0) "Par" (rtos (getvar "OFFSETDIST"))) ">: "))))
          (progn (if (< (getvar "OFFSETDIST") 0) (setq dis_offset "Through")) (getvar "OFFSETDIST"))
          (if (eq dis_offset "Through") -1 dis_offset)
        )
      )
      (if (< (getvar "OFFSETDIST") 0)
        (princ "\nAttribuez une valeur à \"Par le point\": ")
        (princ "\nSpécifiez un point sur le côté à décaler: ")
      )
      (initget 9)
      (setq where_pt (getpoint))
      (if (< (getvar "OFFSETDIST") 0)
        (setvar "OFFSETDIST"
          (distance
            (vlax-curve-getClosestPointToProjection vla-ent
              (trans where_pt 1 0)
              (mapcar '- (trans (getvar "VIEWDIR") 1 0) (trans '(0 0 0) 1 0))
              T
            )
            (list (car (trans where_pt 1 0)) (cadr (trans where_pt 1 0)))
          )
        )
      )
      (redraw ent 4)
      (setq alpha (atan (cadr deriv) (car deriv)))
      (setq
        v1 (mapcar '- (polar pt_sel alpha 1.0) pt_sel)
        v2 (mapcar '- (trans where_pt 1 0) pt_sel)
      )
      (setq det_or (apply '(lambda (x1 y1 z1 x2 y2 z2) (- (* x1 y2) (* y1 x2))) (append v1 v2)))
      (cond
        ((> det_or 0.0) (setvar "OFFSETDIST" (- (abs (getvar "OFFSETDIST")))))
        ((< det_or 0.0) (setvar "OFFSETDIST" (abs (getvar "OFFSETDIST"))))
      )
      (setq e_last ent)
      (if
        (and
          e_last
          (vl-catch-all-error-p
            (vl-catch-all-apply
              'vla-Offset
              (list (vlax-ename->vla-object e_last)
                (getvar "OFFSETDIST")
              )
            )
          )
        )
        (progn (setq e_last nil) (princ "\nL'objet ne peut pas être décalé."))
        (progn
          (setq
            e_last (entlast)
            obj_vlax (vlax-ename->vla-object e_last)
            AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
            Space
            (if (eq (getvar "CVPORT") 1)
              (vla-get-PaperSpace AcDoc)
              (vla-get-ModelSpace AcDoc)
            )
            l_pt (cons (car pt1_start) (cons (cadr pt1_start) (cddr (reverse (cons (cadr pt1_end) (cons (car pt1_end) (cddr (reverse (vlax-get obj_vlax 'Coordinates)))))))))
          )
          (if (eq (vla-get-ObjectName obj_vlax) "AcDbPolyline")
            (vlax-invoke Space 'AddLightWeightPolyline l_pt)
            (vlax-invoke Space 'AddPolyline l_pt)
          )
          (entdel e_last)
        )
      )
    )
    (T (princ "\nL'objet ne peut pas être décalé."))
  )
  (princ)
)

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

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)