Aller au contenu

Contrôle de largeurs des lw-polylignes


fabcad

Messages recommandés

Aux programmeurs confirmés, je souhaiterais une routine permettant de contrôler et de modifier la largeur globale des lwpolylignes lorsque la largeur du segment de départ et la largeur du segment de fin sont identiques.

 

Exemple :

Soit une lwpolyline ayant :

- largeur du segment de départ de 9 unités.

- largeur du segment de finde 9 unités.

 

d'où affectation d'une valeur de 9 unités à la largeur globale.

 

merci pour vos réponses.

 

Fabcad

 

[Edité le 26/9/2008 par fabcad]

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un petit truc vite fait en "pur AutoLISP".

 

(defun c:plw (/ ss elst wid)
 (if (setq ss (ssget "_X" '((0 . "LWPOLYLINE"))))
   (foreach pl	(mapcar 'cadr (ssnamex ss))
     (setq elst (entget pl))
     (if (= (setq wid (cdr (assoc 40 elst)))
     (if (= 1 (logand 1 (cdr (assoc 70 elst))))
       (cdr (assoc 41 (reverse elst)))
       (cdr (assoc 41 (cdddr (reverse elst))))
     )
  )
(entmod (append elst (list (cons 43 wid))))
     )
   )
 )
 (princ)
) 

 

 

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

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

Lien vers le commentaire
Partager sur d’autres sites

Le même en Visual LISP, pour comparer/apprendre...

 

(defun c:plw (/ ss sw1 ew1 sw2 ew2)
 (vl-load-com)
 (if (setq ss (ssget "_X" '((0 . "LWPOLYLINE"))))
   (progn
     (vlax-for	pl (setq ss (vla-get-ActiveSelectionSet
		      (vla-get-ActiveDocument
			(vlax-get-acad-object)
		      )
		    )
	   )
(vla-getWidth pl 0 'sw1 'ew1)
(vla-getWidth
  pl
  (if (= (vla-get-Closed pl) :vlax-true)
    (1- (fix (vlax-curve-getEndParam pl)))
    (fix (vlax-curve-getEndParam pl))
  )
  'sw2
  'ew2
)
(if (= sw1 ew2)
  (vla-put-ConstantWidth pl ew)
)
     )
     (vla-delete ss)
   )
 )
) 

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

hello (gile),

 

Ta fonction s'exécute parfaitement en AutoLISP mais pas en VisualLISP.

Serait-il possible de pouvoir faire une sélection manuelle (avec le maintien du filtre) au lieu d'une sélection automatique.

 

Merci encore,

 

Fabcad

 

 

[Edité le 8/10/2008 par fabcad]

Lien vers le commentaire
Partager sur d’autres sites

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é