Aller au contenu

Messages recommandés

Posté(e)

bonjour,

 

J'ai un client qui n'utilise pas de plumes

alors on lui met des polyligne plus ou moins large

 

mais quand il faut verifier les plans c'est pas facile avec les epaisseurs

y a t'il une phrase magique qui m'enleverai les epaisseurs a l'affichage et une qui la remet?

 

merci

 

[Edité le 29/9/2006 par Fraid]

Posté(e)

Bonsoir,

 

pour mettre à Zéro toutes les polylignes épaissies,

utiliser PEDIT,

Répondre M,

sélectionner toutes les polylignes,

choisir LA

et répondre 0.

 

maintenant si tu veux mémoriser l'épaisseur attribuée à chaque polyligne

avant la modification par PEDIT,

soit mettre un contrôle ANNULER avant de lancer la modif et revenir à l'état initial ensuite.

soit passer par un lisp mais c'est pas simple dit comme ça.

 

j'ai une ou deux idées mais c'est pas évident (de sagesse)

 

amicalement

Posté(e)

Salut,

 

Deux petits LISP qui devraient fonctionner uniquement avec les polylignes de largeur constante.

La largeur des polylignes est consevée dans le dessin (même après fermeture et enregistrement).

 

Version améliorée le 30/09/06

 

;;; Met toutes les polylignes de largeurs constantes à 0
;;; et enregistre leurs largeurs initiale
(defun c:SetPlineWidthTo0 (/ lst ss n e_lst width)
 (setq lst (vl-bb-ref 'PlineWidth))
 (if (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (-4 . ">") (43 . 0))))
   (repeat (setq n (sslength ss))
     (setq e_lst (entget (ssname ss (setq n (1- n))))
    lst	  (cons	(cons (cdr (assoc 5 e_lst)) (cdr (assoc 43 e_lst)))
		lst
	  )
     )
     (entmod (subst '(43 . 0) (assoc 43 e_lst) e_lst))
   )
 )
 (vl-bb-set 'PlineWidth lst)
 (princ)
)

;;; Restaure leurs largeurs initiales aux polylignes modifiées
;;; avec SetPlineWidthTo0
(defun c:RestorePlineWidth (/ lst ent e_lst)
 (if (setq lst (vl-bb-ref 'PlineWidth))
   (mapcar
     '(lambda (x)
 (if (setq ent (handent (car x)))
   (progn
     (setq e_lst (entget ent))
     (entmod (subst (cons 43 (cdr x)) (assoc 43 e_lst) e_lst))
   )
 )
      )
     lst
   )
 )
 (princ)
)

 

[Edité le 30/9/2006 par (gile)]

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

Posté(e)

Merci,

 

pour cet exemple concis qui me montre l'interêt de l'usage de vl-bb-set et vl-bb-ref

sur lequel je ne m'été jamais penché.

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

Posté(e)

Je l'ai découvert il y a peu sur un forum anglo-saxon (peut-être ici).

 

Mais, même si ça fonctionne, ce n'est peut-être pas la fonction la plus adaptée.

Je n'avais pas très bien compris la discussion en anglais, en fait, l'intérêt principal de vl-bb-set et vl-bb-get est de permettre de faire passer une valeur contenue dans une variable entre différents dessins pendant la même session.

 

Dans le cas présent il me semble plus "rationnel" de lier les données au document (dictionnaire) avec les Xdata (vlax-ldata-put et vlax-ldata-get).

 

Donc, une nouvelle version, avec les Xdata, les données sont conservées pour chaque dessin même après fermeture et ré-ouverture d'AutoCAD.

 

;;; Met toutes les polylignes de largeurs constantes à 0
;;; et enregistre leurs largeurs initiale
(defun c:SetPlineWidthTo0 (/ lst ss n e_lst data)
 (setq lst (vlax-ldata-get "PlineDict" "Width"))
 (if (setq ss (ssget "_X" '((0 . "LWPOLYLINE") (-4 . ">") (43 . 0))))
   (repeat (setq n (sslength ss))
     (setq e_lst (entget (ssname ss (setq n (1- n))))
    data  (cons (cdr (assoc 5 e_lst)) (cdr (assoc 43 e_lst)))
     )
     (cond
((null (assoc (car data) lst))
 (setq lst (cons data lst))
)
((/= (cdr (assoc (car data) lst)) (cdr data))
 (setq lst (subst data (car sav) lst))
)
     )
     (entmod (subst '(43 . 0) (assoc 43 e_lst) e_lst))
   )
 )
 (vlax-ldata-put "PlineDict" "Width" lst)
 (princ)
)

;;; Restaure les largeurs initiales des polylignes modifiées
;;; avec SetPlineWidthTo0
(defun c:RestorePlineWidth (/ lst ent e_lst)
 (if (setq lst (vlax-ldata-get "PlineDict" "Width"))
   (mapcar
     '(lambda (x)
 (if (setq ent (handent (car x)))
   (progn
     (setq e_lst (entget ent))
     (entmod (subst (cons 43 (cdr x)) (assoc 43 e_lst) e_lst))
   )
   (setq lst (vl-remove x lst))
 )
      )
     lst
   )
 )
 (vlax-ldata-put "PlineDict" "Width" lst)
 (princ)
) 

 

[Edité le 30/9/2006 par (gile)]

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

Posté(e)

Le LISP ci-dessus a été modifié pour prendre en compte une éventuelle modification de largeur de polyligne entre deux appels de la fonction SetPlineWidthTo0, ainsi que pour l'ajout ou la suppression d'une polyligne.

 

[Edité le 30/9/2006 par (gile)]

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

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é