Aller au contenu

Contrôle de largeurs des lw-polylignes


Messages recommandés

Posté(e)

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]

Posté(e)

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

Posté(e)

Merci Gile pour ta réponse mais peux tu renommer ta fonction car AutoCAD utilise déjà ce nom plinewid comme variable.

 

Je teste ta routine sous un autre nom.

 

A+

 

Posté(e)

peux tu renommer ta fonction car AutoCAD utilise déjà ce nom plinewid comme variable.

 

C'est fait

 

Je me disais bien en le tapant que ça me disais quelque chose... :P

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

Posté(e)

J'ai testé sous MAP 2008 mais il semble que la modification ne soit pas prise en compte.

 

Pourrais-je t'envoyer un extrait de mon fichier ?

 

Merci d'avance.

 

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

Posté(e)

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

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

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]

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é