Aller au contenu

Décaler plusieurs segments de polyligne


Messages recommandés

Posté(e)

Salut,

 

Bonuscad donnait ici un LISP pour décaler un segment de polyligne.

 

En voici un autre qui permet de décaler plusieurs segments.

Si les segments sélectionnés sont jointifs, il sont décalés en une seule polyligne.

Arcs et largeurs sont conservés.

Le LISP semble bien fonctionner quelques soient le SCU courant, le plan contenant la polyligne et la vue courante.

 

http://pagesperso-orange.fr/gile/Images/ofsegs.gif

 

PS : En téléchargement sur cette page

 

EDIT: correction d'un dysfonctionnement

 

EDIT 2 : mise en surbrillance des segments sélectionnés.

 

;;; OFFSEGS (gile) 25/08/2008
;;; Décale les segments de polyligne sélectionnés.
;;; Les segments jointifs sont décalés en une seule polyligne
;;; Les arcs et les largeurs cont conservés
;;; Fonctionne quelques soient le SCU courant, la vue courante et le plan de la polyligne

(defun c:ofsegs	(/	  space	   ofdist   ent	     pline    normal   elevat
	 params	  points   side	    closest  par      bulge    p1
	 p2	  temp	   arc_data swid     ewid     tmp_pline
	)

 (defun HighlightSegment (pl par / p1 p2 n lst)
   (setq p1 (trans (vlax-curve-getPointAtParam pl par) 0 1)
  p2 (trans (vlax-curve-getPointAtParam pl (+ par 1)) 0 1)
   )
   (if	(zerop (vla-getBulge pl par))
     (grvecs (list -255 p1 p2))
     (progn
(setq n 0)
(repeat	100
  (setq	lst (cons (trans (vlax-curve-getPointAtParam pl (+ n par)) 0 1)
		  lst
	    )
	n   (+ n 0.01)
  )
)
(grvecs
  (cons -255 (apply 'append (mapcar 'list lst (cdr lst))))
)
     )
   )
 )
 
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (setq	space (if (= 1 (getvar "CVPORT"))
	(vla-get-PaperSpace *acdoc*)
	(vla-get-ModelSpace *acdoc*)
      )
 )
 (initget 6 "Par")
 (if (setq
ofdist (getdist
	 (strcat "\nSpécifiez la distance de décalage ou [Par] 			 (if (			   "par"
		   (rtos (getvar "OFFSETDIST"))
		 )
		 ">: "
	 )
       )
     )
   (if	(= ofdist "Par")
     (setvar "OFFSETDIST" -1)
     (setvar "OFFSETDIST" ofdist)
   )
   (setq ofdist (getvar "OFFSETDIST"))
 )
 (if (and (setq ent (entsel "\nSélectionnez un segment à décaler: "))
   (setq pline (vlax-ename->vla-object (car ent)))
   (= (vla-get-ObjectName pline) "AcDbPolyline")
   (setq normal (vlax-get pline 'Normal))
   (setq elevat (vla-get-Elevation pline))
     )
   (progn
     (setq params (cons (fix (vlax-curve-getParamAtPoint
			pline
			(trans (osnap (cadr ent) "_nea") 1 0)
		      )
		 )
		 params
	   )
     )
     (HighlightSegment pline (car params))
     (while
(setq ent (entsel "\nSélectionnez le segment suivant ou [b]: "))
 (if (equal (vlax-ename->vla-object (car ent)) pline)
   (progn
     (setq params (cons	(fix (vlax-curve-getParamAtPoint
			       pline
			       (trans (osnap (cadr ent) "_nea") 1 0)
			     )
			)
			params
		  )
     )
     (HighlightSegment pline (car params))
   )
 )
     )
     (if (setq	side (getpoint
	       (if (minusp (getvar "OFFSETDIST"))
		 "\nSpécifiez une valeur pour \"Par le point\": "
		 "\nSpécifiez un point sur le côté à décaler: "
	       )
	     )
  )
(progn
         (redraw)
  (vla-StartUndoMark *acdoc*)
  (setq	side	(ilp
		  (trans side 1 0)
		  ((lambda (p)
		     (trans (list (car p) (cadr p) (1+ (caddr p))) 2 0)
		   )
		    (trans side 1 2)
		  )
		  (trans (list 0 0 elevat) normal 0)
		  normal
		)
	closest	(vlax-curve-getClosestPointTo pline side T)
	par	(vlax-curve-getParamAtPoint pline closest)
	params	(vl-sort params '	  )
  (if (minusp (getvar "OFFSETDIST"))
    (setq ofdist (distance side closest))
  )
  (cond
    ((equal closest (vlax-curve-getStartPoint pline) 1e-9)
     (setq side (trans side 0 normal))
    )
    ((equal closest (vlax-curve-getEndPoint pline) 1e-9)
     (setq par	(- par 1)
	   side	(trans side 0 normal)
     )
    )
    ((= (fix par) par)
     (setq side
	    (polar
	      (trans closest 0 normal)
	      ((if
		 (clockwise-p
		   (trans
		     (vlax-curve-getPointAtParam pline (- par 0.1))
		     0
		     normal
		   )
		   (trans closest 0 normal)
		   (trans
		     (vlax-curve-getPointAtParam pline (+ par 0.1))
		     0
		     normal
		   )
		 )
		  +
		  -
	       )
		(angle '(0 0 0)
		       (trans (vlax-curve-getFirstDeriv pline par)
			      0
			      normal
			      T
		       )
		)
		(/ pi 2)
	      )
	      ofdist
	    )
     )
    )
    (T
     (setq par	(fix par)
	   side	(trans side 0 normal)
     )
    )
  )
  (setq	bulge (vla-getBulge
		pline
		(fix (vlax-curve-getParamAtPoint pline closest))
	      )
	p1    (trans (vlax-curve-getPointAtParam
		       pline
		       (fix (vlax-curve-getParamAtPoint pline closest))
		     )
		     0
		     normal
	      )
	p2    (trans (vlax-curve-getPointAtParam
		       pline
		       (1+ (fix (vlax-curve-getParamAtPoint pline closest)))
		     )
		     0
		     normal
	      )
  )
  (if (zerop bulge)
    (if	(clockwise-p side p2 p1)
      (setq ofdist (- ofdist))
    )
    (progn
      (setq arc_data (PolyArc-data bulge p1 p2))
      (if (minusp bulge)
	(if (		       (distance (car arc_data) side)
	    )
	  (setq ofdist (- ofdist))
	)
	(if (		       (cadr arc_data)
	    )
	  (setq ofdist (- ofdist))
	)
      )
    )
  )
  (while params
    (setq temp	 (cons (car params) temp)
	  params (cdr params)
    )
    (while (= (car params) (1+ (car temp)))
      (setq temp   (cons (car params) temp)
	    params (cdr params)
      )
    )
    (setq temp (reverse (cons (1+ (car temp)) temp)))
    (setq
      points (mapcar
	       (function
		 (lambda (pa / pt)
		   (setq
		     pt	(trans (vlax-curve-getPointAtParam pline pa)
			       0
			       normal
			)
		   )
		   (list (car pt) (cadr pt))
		 )
	       )
	       temp
	     )
    )
    (setq tmp_pline
	   (vlax-invoke
	     space
	     'addLightWeightPolyline
	     (apply 'append points)
	   )
    )
    (foreach p (cdr (reverse temp))
      (vla-setBulge
	tmp_pline
	(vl-position p temp)
	(vla-getBulge pline p)
      )
      (vla-getWidth pline p 'swid 'ewid)
      (vla-setWidth tmp_pline (vl-position p temp) swid ewid)
    )
    (vla-put-Normal tmp_pline (vlax-3d-point normal))
    (vla-put-Elevation tmp_pline elevat)
    (vl-catch-all-apply 'vla-Offset (list tmp_pline ofdist))
    (vla-delete tmp_pline)
    (setq temp nil)
  )
  (vla-EndUndoMark *acdoc*)
)
     )
   )
   (princ "\nEntité non valide.")
 )
 (princ)
)


;;; Clockwise-p
;;; Retourne T si les points p1 p2 et p3 tournent dans le sens horaire

(defun clockwise-p (p1 p2 p3)
 ()

;;; Polyarc-data
;;; Retourne la liste des données d'un arc de polyligne (centre rayon angle).

(defun polyarc-data (bu p1 p2 / ang rad cen area cg)
 (setq	ang (* 2 (atan bu))
rad (/ (distance p1 p2)
       (* 2 (sin ang))
    )
cen (polar p1
	   (+ (angle p1 p2) (- (/ pi 2) ang))
	   rad
    )
 )
 (list cen (abs rad) ang)
)

;;; ILP Retourne le point d'intersection de la droite définie par p1 p2
;;; et du plan défini par un point et sa normale.

(defun ilp (p1 p2 org nor / scl)
 (setq	scl (/ (vxv nor (mapcar '- p1 org))
       (vxv nor (mapcar '- p2 p1))
    )
 )
 (mapcar (function (lambda (x1 x2) (+ (* scl (- x1 x2)) x1)))
  p1
  p2
 )
)

;;; VXV Retourne le produit scalaire (réel) de deux vecteurs

(defun vxv (v1 v2)
 (apply '+ (mapcar '* v1 v2))
) 

[Edité le 24/3/2008 par (gile)][Edité le 25/3/2008 par (gile)][Edité le 25/3/2008 par (gile)]

 

[Edité le 26/3/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

bonjour,

 

moi aussi, j'aime bien ce programme, (j'aimas bien déjà celui de bonuscad)

c'est seulement dommage que l'on ne voit pas en surbrillance les éléments que l'on clique (ou un changement de couleur provisoire)

 

A+

Posté(e)

Salut et merci pour ces premiers retours,

 

J'ai modifié le code pour corriger un dysfonctionnement révélé par ElpanovEvgeniy.

 

c'est seulement dommage que l'on ne voit pas en surbrillance les éléments que l'on clique

J'en suis bien conscient, mais j'essaye d'avoir un fonctionnement "irréprochable" avant d'essayer d'améliorer l'interface.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

bonjour,

 

peut être est ce une volonté de l'auteur,

 

quand on décale et que la polyligne est épaissit, la (les) polyligne(s) décalée(s)

prenne aussi la même épaisseur.

 

A+

Posté(e)

bonjour,

 

peut être est ce une volonté de l'auteur,

 

quand on décale et que la polyligne est épaissit, la (les) polyligne(s) décalée(s)

prenne aussi la même épaisseur.

 

A+

 

Oui, les largeurs et arcs sont conservés, comme dans la commande DECALER

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Dernière version : le fichier PolySegments.lsp en téléchargement sur cette page.

 

Nouveautés :

 

- Les propriétés de la polyligne source (calque, couleur, type de ligne ...) sont conservées dans le (ou les) segment(s) décalé(s).

 

- Cliquer sur un segment déjàs sélectionné permet de le désélectionner.

 

- Un nouvelle commande : copsegs permet de copier.

 

- Le fichier contient quelques sous-routines qui peuvent-être utiles aux amis lispeurs.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 3 semaines après...
Posté(e)

Bonjour,

 

Suis nouvelle sur ce forum, suis très intéressée par cette fonction.

Par contre serait-il possible, lorsque le segment est décalé, de prolonger ou de couper les autres segments de la polyligne pour se "raccrocher" au nouveau segment créé ?

 

Merci

Posté(e)

Salut et bienvenue,

 

Je ne comprends pas bien ta demande, mais à priori ça ne me semble pas très simple quant au but à automatiser et plutôt spécifique.

Ce LISP permet de faire quelque chose qu'AutoCAD ne fait pas (du moins pas encore). Pour ce que tu demandes, il me semble qu'AutoCAD fournit les outils nécessaires et sinon tu peux en trouver sur les pages suivantes :

http://bruno.valsecchi.neuf.fr/index.html

http://www.cadxp.com/sujetXForum-11303.htm

http://www.cadxp.com/sujetXForum-14737.htm

 

PS : tu peux effacer ton premier message en faisant Editer puis ! Supprimer ce message !

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour,

 

En fait, je voudrais que lorsque le segment est décalé, il supprime le segment original et qu'il raccorde la polyligne au nouveau segment.

 

Je sais pas si c'est plus clair ?

 

Merci

Posté(e)

Salut,

 

C'est bien ce que je pensais, ce que tu demandes n'est pas simple et nécessiterait de refaire un nouveau programme.

Je n'en ai ni le temps ni le courage en ce moment, peut-être quelqu'un d'autre voudra-t-il se pencher sur la question ?...

En attendant, tu as toujours les commandes COUPURE et PEDIT pour faire ce que tu désires.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 3 ans après...
Invité samuelM
Posté(e)

Super il me va aussi cependant, je ne comprend pas pourquoi il laisse joint deux côté et le troisième qui fait pourtant parti de la même sélection . il est décalé sans être joint avec les deux autres?

Invité samuelM
Posté(e)

j'ai dessiné un rectangle

Ensuite avec ce programme je souhaite décaler trois coté.

je lance donc le programme, j'entre la valeur de décalage, puis sélectionne mes trois cotés et indique le sens de décalage.

je fais entré et là deux coté sont décalé proportionnellement et reste joint mais le troisième ne touche pas le coté avec lequel il devrait être joint. l'angle qui ne joint pas et celui où se trouve le point de base du rectangle.

 

ça va mieux?

 

[Edité le 31/5/2011 par samuelM]

Posté(e)

Je n'arrive pas à reproduire ce que tu décris, si les segments sont jointifs sur la polyligne source, les segments décalés le sont aussi.

Le rectangle est-il bien dessiné avec la commande RECTANG ?

As-tu bien téléchargé la dernière version (sur cette page) ?

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité samuelM
Posté(e)

Voici si ça peu t'aider à comprendre. C'est mon programme complet avec à l'intérieur ton programme.

 

Il sert à tracer un rectangle (qui représente une fenêtre) sur un mur avec un décalage autour. le décalage est identique sur les "droit" et "gauche" et "dessus".

 

1 )tu pointe un point de base

2 )indique en +y

3 ) exemple "2100"

4 ) longueur largeur du rectangle

5 )après il faut décaler les coté comme je l'ai décris

 

(defun c:a4 (/ p1 p2 orient  dist   longueur   largeur   p3    userecho	   ent_select  	ent_pickpt     ent_orig	  off_pt

	 off_angle    last_entity  last_pt   expr   off_dist   newoff_pt  space	   ofdist   ent	     pline    normal   elevat

	 params	  points   side	    closest  par      bulge    p1

	 p2	  temp	   arc_data swid     ewid     tmp_pline )

 (setq p1     (getpoint "\nPoint de Base\n"))
 (setq orient (getorient p1 "\nIndiquer la direction\n"))
 (setq dist   (getdist "\nIndiquer la distance :\n"))
 (setq p2     (polar p1 orient dist )

     longueur (getdist p2 "\nLargeur tableau: ")

     largeur  (getdist p2 "\nLongeur tableau: ")

     p3       (mapcar '+ p2 (list longueur largeur))
)
(command "_rectangle" "_non" p2 "_non" p3)

(command "_rotate" "d" "" p2 180 "")

 ;;; Décalage de l'épaisseur du revêtement
 ;;;décalage du cadre



;;; Décale les segments de polyligne sélectionnés.

;;; Les segments jointifs sont décalés en une seule polyligne

;;; Les arcs et les largeurs cont conservés

;;; Fonctionne quelques soient le SCU courant, la vue courante et le plan de la polyligne



 (defun HighlightSegment (pl par / p1 p2 n lst)
   (setq p1 (trans (vlax-curve-getPointAtParam pl par) 0 1)
  p2 (trans (vlax-curve-getPointAtParam pl (+ par 1)) 0 1)
   )
   (if	(zerop (vla-getBulge pl par))
     (grvecs (list -255 p1 p2))
     (progn
(setq n 0)
(repeat	100
  (setq	lst (cons (trans (vlax-curve-getPointAtParam pl (+ n par)) 0 1)
		  lst
	    )
	n   (+ n 0.01)
  )
)
(grvecs
  (cons -255 (apply 'append (mapcar 'list lst (cdr lst))))
)
     )
   )
 )
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (setq	space (if (= 1 (getvar "CVPORT"))
	(vla-get-PaperSpace *acdoc*)
	(vla-get-ModelSpace *acdoc*)
      )
 )
 (initget 6 "Par")
 (if (setq
ofdist (getdist

	 (strcat "\nSpécifiez la distance de décalage ou [Par] <"
		 (if (< (getvar "OFFSETDIST") 0)
		   "par"
		   (rtos (getvar "OFFSETDIST"))
		 )
		 ">: "
	 )
       )
     )
   (if	(= ofdist "Par")
     (setvar "OFFSETDIST" -1)
     (setvar "OFFSETDIST" ofdist)
   )
   (setq ofdist (getvar "OFFSETDIST"))
 )
 (if (and (setq ent (entsel "\nSélectionnez un segment à décaler: "))
   (setq pline (vlax-ename->vla-object (car ent)))
   (= (vla-get-ObjectName pline) "AcDbPolyline")
   (setq normal (vlax-get pline 'Normal))
   (setq elevat (vla-get-Elevation pline))
     )
   (progn
     (setq params (cons (fix (vlax-curve-getParamAtPoint
			pline
			(trans (osnap (cadr ent) "_nea") 1 0)
		      )
		 )
		 params
	   )
     )
     (HighlightSegment pline (car params))
     (while
(setq ent (entsel "\nSélectionnez le segment suivant ou : "))
 (if (equal (vlax-ename->vla-object (car ent)) pline)
   (progn
     (setq params (cons	(fix (vlax-curve-getParamAtPoint
			       pline
			       (trans (osnap (cadr ent) "_nea") 1 0)
			     )
			)
			params
		  )
     )
     (HighlightSegment pline (car params))
   )
 )
     )
     (if (setq	side (getpoint
	       (if (minusp (getvar "OFFSETDIST"))
		 "\nSpécifiez une valeur pour \"Par le point\": "
		 "\nSpécifiez un point sur le côté à décaler: "
	       )
	     )
  )
(progn
         (redraw)
  (vla-StartUndoMark *acdoc*)
  (setq	side	(ilp
		  (trans side 1 0)
		  ((lambda (p)
		     (trans (list (car p) (cadr p) (1+ (caddr p))) 2 0)
		   )
		    (trans side 1 2)
		  )
		  (trans (list 0 0 elevat) normal 0)
		  normal
		)

	closest	(vlax-curve-getClosestPointTo pline side T)

	par	(vlax-curve-getParamAtPoint pline closest)

	params	(vl-sort params '<)
  )
  (if (minusp (getvar "OFFSETDIST"))

    (setq ofdist (distance side closest))
  )
  (cond
    ((equal closest (vlax-curve-getStartPoint pline) 1e-9)

     (setq side (trans side 0 normal))
    )
    ((equal closest (vlax-curve-getEndPoint pline) 1e-9)

     (setq par	(- par 1)
	   side	(trans side 0 normal)
     )
    )
    ((= (fix par) par)
     (setq side
	    (polar
	      (trans closest 0 normal)
	      ((if
		 (clockwise-p
		   (trans
		     (vlax-curve-getPointAtParam pline (- par 0.1))
		     0
		     normal
		   )
		   (trans closest 0 normal)
		   (trans
		     (vlax-curve-getPointAtParam pline (+ par 0.1))
		     0
		     normal
		   )
		 )
		  +

		  -
	       )
		(angle '(0 0 0)
		       (trans (vlax-curve-getFirstDeriv pline par)
			      0
			      normal
			      T
		       )
		)
		(/ pi 2)
	      )
	      ofdist
	    )
     )
    )
    (T
     (setq par	(fix par)
	   side	(trans side 0 normal)
     )
    )
  )
  (setq	bulge (vla-getBulge
		pline
		(fix (vlax-curve-getParamAtPoint pline closest))
	      )
	p1    (trans (vlax-curve-getPointAtParam
		       pline
		       (fix (vlax-curve-getParamAtPoint pline closest))
		     )
		     0
		     normal
	      )
	p2    (trans (vlax-curve-getPointAtParam
		       pline
		       (1+ (fix (vlax-curve-getParamAtPoint pline closest)))
		     )
		     0
		     normal
	      )
  )
  (if (zerop bulge)
    (if	(clockwise-p side p2 p1)
      (setq ofdist (- ofdist))
    )
    (progn
      (setq arc_data (PolyArc-data bulge p1 p2))
      (if (minusp bulge)
	(if (< (cadr arc_data)
	       (distance (car arc_data) side)
	    )
	  (setq ofdist (- ofdist))
	)
	(if (< (distance (car arc_data) side)
	       (cadr arc_data)
	    )
	  (setq ofdist (- ofdist))
	)
      )
    )
  )
  (while params
    (setq temp	 (cons (car params) temp)
	  params (cdr params)
    )
    (while (= (car params) (1+ (car temp)))
      (setq temp   (cons (car params) temp)
	    params (cdr params)
      )
    )
    (setq temp (reverse (cons (1+ (car temp)) temp)))
    (setq
      points (mapcar
	       (function
		 (lambda (pa / pt)
		   (setq
		     pt	(trans (vlax-curve-getPointAtParam pline pa)
			       0
			       normal
			)
		   )
		   (list (car pt) (cadr pt))
		 )
	       )
	       temp
	     )
    )
    (setq tmp_pline
	   (vlax-invoke
	     space
	     'addLightWeightPolyline
	     (apply 'append points)
	   )
    )
    (foreach p (cdr (reverse temp))
      (vla-setBulge
	tmp_pline
	(vl-position p temp)
	(vla-getBulge pline p)
      )
      (vla-getWidth pline p 'swid 'ewid)
      (vla-setWidth tmp_pline (vl-position p temp) swid ewid)
    )
    (vla-put-Normal tmp_pline (vlax-3d-point normal))
    (vla-put-Elevation tmp_pline elevat)
    (vl-catch-all-apply 'vla-Offset (list tmp_pline ofdist))
    (vla-delete tmp_pline)
    (setq temp nil)
  )
  (vla-EndUndoMark *acdoc*)
)
     )
   )
   (princ "\nEntité non valide.")
 )
 (princ)

;;; Clockwise-p

;;; Retourne T si les points p1 p2 et p3 tournent dans le sens horaire

(defun clockwise-p (p1 p2 p3)

 (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)

)

;;; Polyarc-data

;;; Retourne la liste des données d'un arc de polyligne (centre rayon angle).

(defun polyarc-data (bu p1 p2 / ang rad cen area cg)
 (setq	ang (* 2 (atan bu))
rad (/ (distance p1 p2)
       (* 2 (sin ang))
    )
cen (polar p1
	   (+ (angle p1 p2) (- (/ pi 2) ang))
	   rad
    )
 )
 (list cen (abs rad) ang)
)

;;; ILP Retourne le point d'intersection de la droite définie par p1 p2

;;; et du plan défini par un point et sa normale.

(defun ilp (p1 p2 org nor / scl)
 (setq	scl (/ (vxv nor (mapcar '- p1 org))
       (vxv nor (mapcar '- p2 p1))
    )
 )
 (mapcar (function (lambda (x1 x2) (+ (* scl (- x1 x2)) x1)))
  p1
  p2
 )
)
;;; VXV Retourne le produit scalaire (réel) de deux vecteurs

(defun vxv (v1 v2)
 (apply '+ (mapcar '* v1 v2))
)

;;;Volé roulant


  	
  	(initget "Oui Non")

(if (= (getkword "\nSouhaitez vous un volet roulant ? [Oui/Non] : ") "Oui")

	(progn
	  	(setq orient (getorient p2 "\nIndiquer la direction\n"))
 			(setq dist   (getdist "\nIndiquer la distance (hauteur du caisson) :"))
 			(setq p5     (polar p2 orient dist)
 			
    				 longueur (getdist p5 "\nLongueur du caisson VR : ")

    				 largeur  (getdist p5 "\nHauteur du caisson VR : ")

    				 p6       (mapcar '+ p5 (list longueur largeur))
		)
		(command "_rectangle" "_non" p5 "_non" p6)

		(command "_rotate" "d" "" p5 180 "")
	  
	  	(command "_move" p2 (/ new) "")
	)		
)	

 );defun

Posté(e)

Avais-tu essayé la routine séparément avant de la coller (n'importe comment) dans ton code ?

Si oui, fonctionnait-elle correctement ?

 

Je ne pense pas que le problème vienne des routines que j'ai donné.

 

Tu as collé au milieu de ton code les routines en modifiant la commande OFSEGS. Ça ne peut pas fonctionner comme ça (la programmation, c'est pas du patchwork).

 

Place les routines (sans les modifier) à l'extérieur de ton programme (ou charges PolySegments.lsp avant de lancer ton programme) et appelle ofsegs dans ton programme en faisant :

(c:ofsegs)

 

PS : évite de dire qu'un programme ne fonctionne pas alors que tu l'as modifié...

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité samuelM
Posté(e)

Je suis désolé de t'avoir véxé mais je l'ai essayé séparément et il ne fonctionne pas non plus tout seul. Enfin il fonctionne mais pas entièrement.

L'angle où se trouve le coin de base ne joint pas sur le décalage.

je viens de vérifier une nouvelle fois en dessinant simplement un rectangle puis en utilisant seulement ton programme.

  • 2 semaines aprè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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é