CADxp: Décalage de polyligne - 2 valeurs différentes - CADxp

Aller au contenu

  • 5 Pages +
  • 1
  • 2
  • 3
  • Dernière »
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Décalage de polyligne - 2 valeurs différentes

#1 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 21 septembre 2017 - 16:22

Bonjour,
Est-ce que quelqu'un aurait dans ça boite à lisp, un bout de code qui permettrait de décaler une polyligne d'une valeur x de décalage à une extrémité et d'une valeur y à l'autre extrémité. Ce qui entrainerait un décalage linéaire le long de la polyligne.
Pour une droite, c'est facile à construire, mais pour une courbe, ou même une polyligne composée de n éléments, c'est une autre histoire.

Je ne sais pas si je me suis bien fait comprendre, alors n'hésitez pas à le dire.

Merci.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#2 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6140
  • Inscrit(e) : 06-janvier 03

Posté 22 septembre 2017 - 08:58

Salut

Si j'ai bien compris, voici un exemple
(setq ent (vlax-ename->vla-object (car (entsel)))) ; Sélection de la poly
(vlax-invoke ent 'offset 30.0)  ; Décalage d'un coté
(vlax-invoke ent 'offset -30.0) ; Puis de l'autre


@+
Les Lisps de Patrick
Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.
Joseph Joubert, 1754-1824
0

#3 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 22 septembre 2017 - 09:28

Salut Patrick,
Bon, je me suis mal expliqué.

Voici une image de ce que je voudrais:
Image IPB

Imaginons le fonctionnement de la commande:
- 1, je sélectionne la polyligne de base
- 2, j'indique la valeur de décalage de l'origine de la polyligne. Ici 5.00
- 3, j'indique la valeur de décalage de la fin de la polyligne. Ici 3.00
- 4, j'obtiens la polyligne résultante

Alors pour une droite, c'est simple, mais pour un arc, ou une polyligne à plusieurs éléments....

Pour une courbe, la polyligne résultante serait une sorte de clothoïde, et pour une polyligne à plusieurs éléments (arc ou éléments droits) ce serait un mixte.

Merci
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#4 L'utilisateur est hors-ligne   Aleck Ultimate 

  • ceinture noire
  • Groupe : Membres
  • Messages : 468
  • Inscrit(e) : 18-novembre 16
  • LocationAlpes de Hautes Provences (04)

Posté 22 septembre 2017 - 12:09

Salut.

C'est une idée en l'aire, mais serait il possible d’associer un style de trait de deux lignes parallèles et une largeur du trais non uniforme ? je crois bien avoir lue quelque part qu'avec un LISP ou une MACROS on pouvait faire des lignes dont le début et la fin n'avaient pas le même facteur de largeur, applicable à des courbes.

Cordialy.
En DAO, la passion me porte !

Citation

"La foi, une histoire vraie, racontée par des menteurs."Médine (Porteur saint)

Utilisateur d'
AutoCAD 2015 sous Windows 10
0

#5 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 22 septembre 2017 - 12:29

Bonjour Alek,

Le truc c'est que moi il faut que ce soit de vrai polyligne. Car ensuite, j'ai plusieurs choses à construire avec, notamment les transformer en poly 3D.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#6 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7408
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 22 septembre 2017 - 14:54

Hello

Est ce que ta Polyligne de base est seulement 2D ?
Et tu veux traiter les 2D Polylignes "Legeres" seulement ou aussi les "Lourdes" (splinees par exemple)

Donc il te faut une transition "douce" du 1er Vertex au Dernier Vertex !?
Que la Polyligne soit de UN SEUL segment/arc OU N segments + N Arcs ...

C pas si simple !!

Bye, lecrabe
Autodesk Expert Elite Team
0

#7 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 22 septembre 2017 - 15:20

Hello,
Non, je ne veux traiter que des polylignes "légères".
Je ne sais pas trop ce que tu appels un Vertex, mais effectivement, il faut une transition progressive pour partir de la 1ière valeur de décalage en début de polyligne, et arrivé à la 2ième valeur de décalage en fin de polyligne.

La polyligne peux être formée de N segments et N arcs.

Effectivement je pense que ce n'est pas simple. Mais justement, je demandais ça juste pour savoir si quelqu'un avait ça de coté.

Merci.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#8 L'utilisateur est hors-ligne   thierry.garré 

  • ceinture noire 5em dan
  • Groupe : Moderateurs
  • Messages : 2829
  • Inscrit(e) : 30-juin 04
  • LocationAubenas 07 le pays des Chataignes

Posté 22 septembre 2017 - 15:43

Juste comme ca pourquoi ne pas utiliser autopiste ?
Thierry Garré

Autocad-Autocad Map-Covadis-Autopiste-Infraworks 360

Mon "autre vie"
La Salamandre - Chambres d'hôtes en Ardèche
0

#9 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 22 septembre 2017 - 16:00

Bonjour Thierry,
Justement pour l'instant je me débrouille avec Autopiste. Mais quand on fait de la conception à la chaine rapide et uniquement en 2d pour dégrossir le travaille, une "petite" fonction comme ça serait pas mal.
Merci.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#10 L'utilisateur est hors-ligne   zebulon_ 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1297
  • Inscrit(e) : 02-mai 03
  • LocationSchnersheim

Posté 23 septembre 2017 - 22:17

Citation

La polyligne peux être formée de N segments et N arcs.

chaque segment est tangent avec les segments adjacents ? J'imagine que oui, puisqu'on parle de tracé routier.

Dans les parties courbes, le résultat serait une suite de segments droits, avec une longueur assez petite pour que cela reste acceptable. On paramètre cette longueur de précision en début de lisp et on permet à l'utilisateur de la changer.

Je pense que c'est faisable et je regarderai lundi, à moins que quelqu'un d'autre se soit penché sur le sujet entre temps :)

Amicalement
Vincent
C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
0

#11 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 24 septembre 2017 - 10:05

Salut Zebulon,
Effectivement, chaque segments est tangent ou quasi. Et oui, pour les arc une succession de segments droit assez petits conviendraient.

Merci.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#12 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7408
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 24 septembre 2017 - 12:47

Hello

Pour aider voici une routine "Arc2Seg" (OK sur version 2018 et precedentes) de Gilles que j'utilise depuis longtemps !
Ce sera plus facile de decaler subtilement et progressivement des Segments !!

Elle "elimine" les Arcs (par exemple dans les LW Polylignes - NON Splines / NON Arcs) en les simulant par des Segments (Nombre de Segments parametrable) ...

Bye, Bon Dimanche


;;
;; Generation de Polygones Reguliers sur les Arcs , Cercles et Arcs dans Polylignes 
;;
;; Amelioration: Les XDatas sont copiees sur la nouvelle polyligne.
;;
;; Routine:  ARC2SEG  vers 1.03 par GC le 10 Nov 2008 (Pour Patrice) 
;; Transforme les arcs, cercles et polyarcs en polylignes constituees de segments droits
;;
;; 1 - Correction du bug sur les arcs > 180 degres
;; 2 - Pour les XDatas, soit je copie tout dans la nouvelle entite soit, 
;; dans le cas des polylignes avec suppression, je ne fais que modifier les sommets de la polyligne. 
;; 3 - J'ai peaufine le traitement des largeurs, si la largeur de depart et la largeur de fin different,
;; celle des segments changera aussi proportionnellement.
;; 4 - Generation soit sur le calque courant, soit sur le calque d'origine des objets (vs 1.03)
;;

(vl-load-com) 

(defun c:Arc2Seg (/ arc2pol pol2pol seg del org ss n ent elst)

  ;; Retourne la liste dxf de la polyligne (d'après un arc ou un cercle)
  (defun arc2pol
	 (elst seg org / closed alpha delta cen elv rad lay nlst)
    (and (= (cdr (assoc 0 elst)) "CIRCLE") (setq closed T))
    (setq alpha	(if closed
		  (* pi 2)
		  (cdr (assoc 51 elst))
		)
	  delta	(if closed
		  (/ alpha seg)
		  (/ (ang<2pi (- alpha (cdr (assoc 50 elst)))) seg)
		)
	  cen	(cdr (assoc 10 elst))
	  elv	(caddr cen)
	  cen	(list (car cen) (cadr cen))
	  rad	(cdr (assoc 40 elst))
	  lay	(if org
		  (assoc 8 elst)
		  (cons 8 (getvar "CLAYER"))
		)
	  nlst	(vl-remove-if-not
		  (function (lambda (x) (member (car x) '(210 -3))))
		  elst
		)
	  nlst	(cons (cons 10 (polar cen alpha rad)) nlst)
    )
    (repeat (if	closed
	      (1- seg)
	      seg
	    )
      (setq
	nlst (cons (cons 10
			 (polar cen (setq alpha (- alpha delta)) rad)
		   )
		   nlst
	     )
      )
    )
    (setq nlst
	   (cons '(0 . "LWPOLYLINE")
		 (cons '(100 . "AcDbEntity")
		       (cons (cons 410 (getvar "CTAB"))
			     (cons lay
				   (cons '(100 . "AcDbPolyline")
					 (cons (cons 90
						     (if closed
						       seg
						       (1+ seg)
						     )
					       )
					       (cons (cons 70
							   (if closed
							     1
							     0
							   )
						     )
						     (cons (cons 38 elv) nlst)
					       )
					 )
				   )
			     )
		       )
		 )
	   )
    )
  )

  ;; Retourne la liste dxf de la polyligne modifiée (d'après une polyligne)
  (defun pol2pol (elst	seg   org   /	  cnt	closed	    nlst  p0
		  p1	p2    bu    larg  inc	bdata delta cen	  rad
		  alpha	n
		 )
    (setq closed (logand 1 (cdr (assoc 70 elst)))
	  cnt	 0
    )
    (and (= closed 1) (setq p0 (cdr (assoc 10 elst))))
    (while elst
      (if (= (caar elst) 10)
	(progn
	  (setq	p1 (cdar elst)
		p2 (cdr (assoc 10 (cdr elst)))
		bu (cdr (assoc 42 elst))
	  )
	  (if (or (= 0 bu)
		  (and (zerop closed) (null p2))
	      )
	    (setq nlst (cons (cadddr elst)
			     (cons (caddr elst)
				   (cons (cadr elst)
					 (cons (car elst) nlst)
				   )
			     )
		       )
		  elst (cddddr elst)
	    )
	    (progn
	      (and (not p2) (= closed 1) (setq p2 p0))
	      (setq larg  (cdr (assoc 40 elst))
		    inc	  (/ (- (cdr (assoc 41 elst)) larg) seg)
		    bdata (BulgeData bu p1 p2)
		    delta (/ (car bdata) seg)
		    rad	  (abs (cadr bdata))
		    cen	  (caddr bdata)
		    alpha (angle cen p1)
		    n	  0
		    cnt	  (+ cnt seg -1)
	      )
	      (while (< n seg)
		(setq nlst (cons
			     (cons 10
				   (polar cen
					  (+ alpha (* delta n))
					  rad
				   )
			     )
			     nlst
			   )
		      nlst (cons (cons 40 larg) nlst)
		      nlst (cons (cons 41 (setq larg (+ larg inc))) nlst)
		      nlst (cons '(42 . 0.0) nlst)
		      n	   (1+ n)
		)
	      )
	      (setq elst (cddddr elst))
	    )
	  )
	)
	(setq nlst (cons (car elst) nlst)
	      elst (cdr elst)
	)
      )
    )
    (or	org
	(setq nlst (subst (cons 8 (getvar "CLAYER")) (assoc 8 nlst) nlst))
    )
    ((lambda (dxf90)
       (subst (cons 90 (+ (cdr dxf90) cnt))
	      dxf90
	      (reverse (subst '(42 . 0.0) (assoc 42 nlst) nlst))
       )
     )
      (assoc 90 nlst)
    )
  )

  ;; Fonction principale

  (or (getenv "SegmentsNumberPerCircle")
      (setenv "SegmentsNumberPerCircle" "64")
  )
  (initget 6)
  (if
    (setq seg (getint
		(strcat	"\nNombre de segments par arc <"
			(getenv "SegmentsNumberPerCircle")
			">: "
		)
	      )
    )
     (setenv "SegmentsNumberPerCircle" (itoa seg))
     (setq seg (atoi (getenv "SegmentsNumberPerCircle")))
  )
  (initget "Oui Non")
  (if (= "Oui"
	 (getkword "\nEffacer les objets source [Oui/Non] ? <N>: ")
      )
    (setq del T)
  )
  (initget "Courant Origine")
  (if (= "Origine"
	 (getkword
	   "\nCalque des nouveaux objets [Courant/Origine] ? <C>: "
	 )
      )
    (setq org T)
  )
  (prompt
    "\nSélectionner les objets à traiter ou <tous>."
  )
  (and
    (or	(setq ss (ssget '((0 . "ARC,CIRCLE,LWPOLYLINE"))))
	(setq ss (ssget "_X" '((0 . "ARC,CIRCLE,LWPOLYLINE"))))
    )
    (setq n 0)
    (while (setq ent (ssname ss n))
      (setq elst (entget ent '("*")))
      (if (= (cdr (assoc 0 elst)) "LWPOLYLINE")
	((if del
	   entmod
	   entmake
	 )	   (pol2pol elst seg org)
	)
	(progn
	  (entmake (arc2pol elst seg org))
	  (and del (entdel ent))
	)
      )
      (setq n (1+ n))
    )
  )
  (princ)
)


;; BulgeData
;; Retourne les données d'un polyarc (angle rayon centre)
(defun BulgeData (bu p1 p2 / alpha rad cen)
  (setq	alpha (* 2 (atan bu))
	rad   (/ (distance p1 p2)
		 (* 2 (sin alpha))
	      )
	cen   (polar p1
		     (+ (angle p1 p2) (- (/ pi 2) alpha))
		     rad
	      )
  )
  (list (* alpha 2.0) rad cen)
)


;;; Ang<2pi
;;; Retourne l'angle, à 2*k*pi près, compris entre 0 et 2*pi

(defun ang<2pi (ang)
  (if (and (<= 0 ang) (< ang (* 2 pi)))
    ang
    (ang<2pi (rem (+ ang (* 2 pi)) (* 2 pi)))
  )
) 


Autodesk Expert Elite Team
0

#13 L'utilisateur est hors-ligne   zebulon_ 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1297
  • Inscrit(e) : 02-mai 03
  • LocationSchnersheim

Posté 24 septembre 2017 - 22:26

Voir le messageLa Lozère, le 24 septembre 2017 - 10:05 , dit :

Salut Zebulon,
Effectivement, chaque segments est tangent ou quasi. Et oui, pour les arc une succession de segments droit assez petits conviendraient.

Merci.


(defun PTaDroiteObj (obj pt / PTN PM fder PT1DERIV)
  (if (= (type Obj) 'ENAME)
    (setq Obj (vlax-ename->vla-object Obj))
  )
  (setq PTN (vlax-curve-GetClosestPointTo obj PT))
  (setq PM (vlax-curve-GetParamAtPoint obj PTN))
  (setq fder (vlax-curve-getfirstderiv obj PM))
  (setq PT1DERIV (mapcar '+ PTN fder))
  (< (sin (- (angle PTN PT) (angle PTN PT1DERIV))) -1e-14)
)

(defun getpolySegs (ent / PTL I PTB SEG LSEG)
  (if (= (type ent) 'ENAME)
    (setq ent (vlax-ename->vla-object ent))
  )
  ;; collecter la liste des point sous la forme (x1 y1 x2 y2 ... xn yn)
  (setq PTL (vlax-safearray->list (vlax-variant-value (vla-get-Coordinates ENT))))
  ;; collecter la liste des bulges
  (setq I 0) 
  (repeat (/ (length PTL) 2)
    (setq PTB (cons (vla-GetBulge ent I) PTB))
    (setq I (1+ I))
  )
  (setq PTB (reverse PTB))
  ;; polyligne fermée -> rajouter le premier point à la liste de points
  (if (= (vla-get-closed ent) :vlax-true)
    (setq PTL (append PTL (list (car PTL) (cadr PTL))))
  )
  ;; transformer en liste de segments
  (setq I 0)
  (repeat (- (/ (length PTL) 2) 1)
    (setq SEG
      (list
        (list (nth I PTL) (nth (+ I 1) PTL))
        (nth (/ I 2) PTB)
        (list (nth (+ I 2) PTL) (nth (+ I 3) PTL))
      )
    )
    (setq LSEG (cons SEG LSEG))
    (setq I (+ I 2))
  )
  (reverse LSEG)
)

(defun getArcInfo (segment / a p1 bulge p2 c p3 p4 p r s result)
  ;; assigner variables avec les valeurs de l'argument
  (mapcar 'set '(p1 bulge p2) segment)
  (if (not (zerop bulge))
    (progn
      ;; trouver la corde
      (setq c (distance p1 p2))
      ;; trouver la flèche
      (setq s (* (/ c 2.0) (abs bulge)))
      ;; trouver le rayon par Pythagore
      (setq r (/ (+ (expt s 2.0) (expt (/ c 2.0) 2.0)) (* 2.0 s)))
      ;; distance au centre
      (setq a (- r s))
      ;; coordonnées du milieu de p1 et P2
      (setq P4 (polar P1 (angle P1 P2) (/ c 2.0)))
      ;; coordonnées du centre
      (setq p
        (if (>= bulge 0)
          (polar p4 (+ (angle p1 p2) (/ pi 2.0)) a)
          (polar p4 (- (angle p1 p2) (/ pi 2.0)) a)
        )  
      )
      ;; coordonnées de P3
      (setq p3
        (if (>= bulge 0)
          (polar p4 (- (angle p1 p2) (/ pi 2.0)) s)
          (polar p4 (+ (angle p1 p2) (/ pi 2.0)) s)
        )  
      )
      (setq result (list p r))
    )
    (setq result nil)
  )
  result
)

(defun getptsegd (SEG PT)
    (mapcar 'set '(P1 BULGE P2) SEG)
    (if adroite 
       (setq ANG (* 3 (/ pi 2)))
       (setq ANG (/ pi 2))
    )
    (polar PT (+ (angle P1 P2) ANG) (+ decd (* (- decf decd) (/ (vlax-curve-getDistAtpoint obj PT) LongObj))))
)

(defun getptsegc (SEG PT)
    (mapcar 'set '(P1 BULGE P2) SEG)
    (setq PTC (car (getarcinfo SEG)))
    (if adroite 
       (setq ANG pi)
       (setq ANG 0)
    )
    (if (> BULGE 0)
      (setq ANG (+ (angle PT PTC) ANG))
      (setq ANG (+ (angle PTC PT) ANG))
    )
    (polar PT ANG (+ decd (* (- decf decd) (/ (vlax-curve-getDistAtpoint obj PT) LongObj))))
)


(defun c:decvar ()

  ;; valeur de décalage au départ
  (if (not decd) (setq decd 0.20))
  (setq tmp (getdist (strcat "\nSpécifier la distance de décalage à l'origine  <" (rtos decd) "> : ")))
  (if tmp (setq decd tmp))

  ;; valeur de décalage à la fin
  (if (not decf) (setq decf 0.50))
  (setq tmp (getdist (strcat "\nSpécifier la distance de décalage à la fin  <" (rtos decf) "> : " )))
  (if tmp (setq decf tmp))

  (setq e (car (entsel "\nSélectionner la polyligne à décaler : ")))
  (setq pt (getpoint "\n Spécifiez un point sur le côté à décaler : "))

  ;; précision des parties courbes
  (if (not PREC_COURBE) (setq PREC_COURBE 0.50))
  (setq tmp (getdist (strcat "\nLongueur approximative d'un pas de polygonisation des parties courbes  <" (rtos PREC_COURBE) "> : ")))
  (if tmp (setq PREC_COURBE tmp))
  
  (setq obj (vlax-ename->vla-object e))
  (setq LongObj (vla-get-length obj))

  (setq adroite (PTaDroiteObj obj (trans PT 1 0)))

  (setq Lsegs (getPolySegs obj))
  ;; le premier point
  (setq SEG (car Lsegs))
  (mapcar 'set '(P1 BULGE P2) SEG)
  (if (zerop BULGE)
    (setq LPT (list (getptsegd SEG (vlax-curve-getPointAtDist obj 0.0)))) ;; c'est un segment droit
    (setq LPT (list (getptsegc SEG (vlax-curve-getPointAtDist obj 0.0)))) ;; c'est un segment courbe
  )
  ;; les points suivants
  (while Lsegs
    (setq SEG (car Lsegs))
    (setq lsegs (cdr Lsegs))
    (mapcar 'set '(P1 BULGE P2) SEG)
    (if (zerop BULGE) ;; c'est un segment droit
      (progn
        (setq PT (getptsegd SEG P2))
        (setq LPT (cons  PT LPT))
      )
      (progn  ;; c'est un segment courbe
        (setq PKdebut (vlax-curve-GetDistAtPoint obj P1))
        (setq PKfin (vlax-curve-GetDistAtPoint obj P2))
        (setq Larc (- PKfin PKdebut))
        (setq NBPAS (fix (/ Larc PREC_COURBE)))
        (setq PAS (/ Larc NBPAS))  ;; je coupe les courbes en NBPAS segments droits de longueur environ PREC_COURBE
        (setq PKcourant (+ PKdebut PAS))
        (repeat NBPAS
          (setq LPT (cons (getptsegc SEG (vlax-curve-GetPointAtDist obj PKcourant)) LPT))  ;; un point à chaque pas
          (setq PKcourant (+ PKcourant PAS))
        ) ;; repeat
      ) ;; progn
    ) ;; if
  ) ;; while       
  (setq LPT (reverse LPT))

  (command "_pline")
  (while LPT
    (setq PT (car LPT))
    (setq LPT (cdr LPT))
    (command "_non" (trans PT 0 1))
  )
  (command "")

  (princ)
)


à tester

Amicalement
Vincent

Ce message a été modifié par zebulon_ - 28 septembre 2017 - 21:56 .

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
0

#14 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 25 septembre 2017 - 06:45

Salut Vincent,
Je viens de tester, et apparemment il y a un problème avec les arcs. Quelque soit la longueur d'arc 30-40m ou même 10000m, il me créait un élément droit entre l'origine de l'arc et la fin de l'arc.
Ensuite, il faudrait pouvoir mettre des valeurs inférieur à 1 pour la précision des courbes.

En tout cas merci.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#15 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7408
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 25 septembre 2017 - 07:00

Hello

Et si tu fais passer la routine Arc2Seg de Gilles avant ?!

La routine de Zebulon_ est elle OK ?

Bien, lecrabe
Autodesk Expert Elite Team
0

#16 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 25 septembre 2017 - 07:10

Effectivement, avec Arc2Seg avant, plus de problèmes. Ca marche nickel.
Merci à vous deux et à (gile).

En combinant les 2 dans un seul lisp, ça sera parfait.

Encore merci et A plus.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#17 L'utilisateur est hors-ligne   zebulon_ 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1297
  • Inscrit(e) : 02-mai 03
  • LocationSchnersheim

Posté 25 septembre 2017 - 08:45

Voir le messageLa Lozère, le 25 septembre 2017 - 07:10 , dit :

Effectivement, avec Arc2Seg avant, plus de problèmes. Ca marche nickel.
Merci à vous deux et à (gile).

En combinant les 2 dans un seul lisp, ça sera parfait.

Encore merci et A plus.


bonjour,

C'est sûr que si vous enlevez les segments courbes, ça devient facile. Mais ça marche aussi pour ce cas de figure.

Mais, je pense que vous interprétez mal le paramètre de précision. Ce que j'ai paramétré est le nombre de fois que je divise le segment d'arc. Forcément, ça ne peut pas être inférieur à 1. Et si vous mettez la valeur 1, ça va couper les arcs en 1 segment, ce qui n'est pas très précis... Il faudrait plutôt mettre 50 ou 100.

Si vous voulez, je peux changer le lisp en demandant de donner une longueur approximative de segment droit plutôt qu'un nombre de division. Ce serait peut être plus parlant et, d'autre part, évite de couper les petits segments courbes en autant de parties qu'un grand segment courbe. Je vais faire ça et publier le lisp modifié.

Le plus simple serait de partager un exemple en dwg que je pourrai faire passer dans la moulinette et voir comment ça marche sur un cas concret. Et on pourrait comparer nos résultats.

Amicalement
Vincent
C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
0

#18 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 25 septembre 2017 - 08:59

Arf... Effectivement, j'avais mal compris le terme "précision". Autant pour moi.
Du coup, ça marche nickel.

Je te remercie.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

#19 L'utilisateur est hors-ligne   zebulon_ 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1297
  • Inscrit(e) : 02-mai 03
  • LocationSchnersheim

Posté 25 septembre 2017 - 09:07

Voir le messageLa Lozère, le 25 septembre 2017 - 08:59 , dit :

Arf... Effectivement, j'avais mal compris le terme "précision". Autant pour moi.
Du coup, ça marche nickel.

Je te remercie.


voilà j'ai changé le code ci-dessus pour entrer non plus un nombre de divisions mais une longueur de corde, ce qui semble plus "naturel", effectivement.

Amicalement
vincent
C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
0

#20 L'utilisateur est hors-ligne   La Lozère 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2247
  • Inscrit(e) : 28-juin 06
  • LocationVienne (38) - Etude APA - A480

Posté 25 septembre 2017 - 09:30

Parfait, t'es un chef. c'est exactement ce qu'il me faut. Merci.

A plus.
www.cad-is.fr
Autocad Map 2016/2018 - Covadis/Autopiste V16.0b - Mensura Genius V8
Nous n’héritons pas de la Terre de nos ancêtres, nous l’empruntons à nos enfants
0

Partager ce sujet :


  • 5 Pages +
  • 1
  • 2
  • 3
  • Dernière »
  • 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)