Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Comment faire fonctionner la fonction Layiso dans une Xref ?

 

Comme Layoff qui désactive un calque à l'intérieur d'une Xref, mais cette fois ci pour isoler plusieurs calques sélectionnés.

 

Merci d'avance.. :)

Posté(e)

Salut

 

Un petit lisp qui gèle que les calques sur des xref(s).

Il est possible de l'adapter pour qu'il prenne aussi le dessin, mais si le calque sur lequel le xref inséré est gelé, les calques sélectionnés seront aussi gelés, ce qui n'est pas le but recherché.

 

(defun c:gexr(/ cal doc js n nd nt sel vie vp xd xt)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (while (setq sel (nentsel))
   (setq cal (cdr (assoc 8 (entget (car sel)))))
   (or (member cal js)
     (setq js (cons cal js))
   )
 )
 (vla-startundomark doc)
 (and js
   (vlax-for lay (vla-get-layers doc)
     (or (member (setq sel (vla-get-name lay)) js)
  (not (vl-string-search "|" sel))
(if (or (eq (getvar "tilemode") 1) (eq (getvar "cvport") 1))
  (or (eq sel (getvar "clayer"))
    (vla-put-freeze lay :vlax-true)
  )
  (progn
    (setq vie (vla-get-activepviewport doc))
    (vla-getxdata vie "" 'xt 'xd)
    (or (member (vlax-make-variant sel) (vlax-safearray->list xd))
      (progn
	(setq n (vlax-safearray-get-u-bound xt 1)
	      nt (vlax-make-safearray vlax-vbinteger (cons 0 (1+ n)))
	      nd (vlax-make-safearray vlax-vbvariant (cons 0 (1+ n)))
	      j 0
	)
	(repeat (1+ n)
	  (vlax-safearray-put-element nt j (vlax-safearray-get-element xt j))
	  (vlax-safearray-put-element nd j (vlax-safearray-get-element xd j))
	  (setq j (1+ j))
	)
	(vlax-safearray-put-element nt (1+ n) 1002)
	(vlax-safearray-put-element nd (1+ n) "}")
	(vlax-safearray-put-element nt (1- n) 1003)
	(vlax-safearray-put-element nd (1- n) sel)
	(vla-setxdata vie nt nd)
	(setq vp T)
      )
    )
  )
)
     )
   )
 )
 (and vp
   (progn
     (vla-display vie :vlax-false)
     (vla-display vie :vlax-true)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

@+

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

Posté(e)

Merci Patrick_35 !

 

J'ai modifié :

 (vla-put-freeze lay :vlax-true)

 

par :

(vla-put-layeron lay :vlax-false) 

 

pour l'avoir en désactivé.

Par contre je ne sais pas comment faire pour qu'il prenne le dessin...

Et si la Xref est toujours insérée dans un calque qui se nomme Xref ? ;)

Posté(e)

Re,

 

Tu peux désactiver un calque, mais tu remarqueras que le lisp est aussi prévu pour conserver les calques sélectionnés dans la fenêtre active d'une présentation (d'où la gestion des xdatas dans le lisp). Les autres sont donc gelés (toujours dans la fenêtre active). Alors la logique entre désactivé et gelé ;)

 

Pour qu'il prenne aussi les calques dans le dessin, enlève cette ligne

(not (vl-string-search "|" sel))

 

Et si tu veux que le calque "xref" ne soit pas pris en compte par un malheureux clic, tu peux mettre à la place de la ligne supprimée précédemment.

(member (strcase sel) '("XREF"))

J'ai fait une liste '("XREF") afin de laisser la possibilité d'ajouter d'autres calques à exclure.

 

@+

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

Posté(e)

Nikel !

Ce lisp va changer ma façon de travailler !

Je voulais demander, si c'est possible avec une fenêtre sélection ?

Mais je pense que le nentsel empêche cette méthode ?

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é