Aller au contenu

Messages recommandés

Posté(e)

A tous les lispeurs de génie, bonjour!

 

J'appelle depuis un lisp la commande layiso (qui fait partie des bonus cadtools) en écrivant (c:layiso) pas de problème.

Mais pas moyen de lui indiquer un objet à choisir depuis le lisp comme on le ferait par exemple avec (ssget pt1) pt1 étant sur un objet.

 

Qui pourrait me filer un tuyau?

 

Merci

 

Denis

Posté(e)

Salut et bienvenue !

 

layiso est un lisp des express tool que tu trouveras dans C:\Program Files\AutoCAD xxxx\Express, donc soit tu le modifies, soit tu le copies est tu te créés une fonction "clone" sous un autre nom en renseignant SS en argument.

 

copie ci-dessous :

(Defun C:LAYISO (/ SS CNT LAY LAYLST VAL VPMODE)
 ;;;local function to find an unused layer state name for saving

 (acet-error-init
   (list
     (list "cmdecho" 0
           "expert"  0
     )
     T     ;flag. True means use undo for error clean up.
   );list
 );acet-error-init
 (acet-autoload '("lman.lsp" "(bns_sl  name)"))   ;;changed to support LAYUNISO

 (if (and (= 1 (acet-LayVpMode-Get))
          (= 0 (getvar "tilemode"))                          ; if in a paper space
          (/= 1 (getvar "cvport"))                           ; viewport
     )
     (setq VPMODE T)                                           ; set flag for viewport behavior
 )

 (if (not (setq [surligneur][b]SS[/b][/surligneur] (ssget "_i")))
   (progn
     (prompt "\nSelect object(s) on the layer(s) to be isolated: ")
     (setq SS (ssget))
   )
 )


 (if SS
   (progn

     (setq CNT 0)

     (while (and ss
                 (> (sslength ss) 0)
                 (setq LAY (ssname SS CNT))
            );and
       (setq LAY (cdr (assoc 8 (entget LAY))))
       (if (not (member LAY LAYLST))
         (setq LAYLST (cons LAY LAYLST))
       )
       (setq CNT (1+ CNT))
     )

     (cond
       (VPMODE
         (bns_sl "ACET-lAYISO") ;setq    Save the current layer state
         (setq acet:LSTVPORT (list (xstrcase (getvar "ctab")) (acet-currentviewport-ename))) ;setq save the layout and the viewport
         (command "_.vplayer" "_freeze" "*" "_Current")
         (foreach VAL LAYLST (command "_Thaw" VAL "_Current"))
         (command "")
         (if (= (length LAYLST) 1)
           (prompt (acet-str-format "\nLayer %1 has been isolated in this viewport." (car LAYLST)))
           (prompt (acet-str-format "\n%1 layers have been isolated in this viewport." (itoa (length LAYLST))))
         )
       )
       (T
         (bns_sl "acet-layiso") ;setq    Save the current layer state
         (setq acet:LSTVPORT (list (xstrcase (getvar "ctab")) (acet-currentviewport-ename))) ;setq save the layout and the viewport
         ;(setq acet:LSTVPORT (list "MODEL")) ;setq   new GLOBAL for LAYUNISO
         (if (member (getvar "CLAYER") LAYLST)
           (setq LAY (getvar "CLAYER"))
           (setvar "CLAYER" (setq LAY (last LAYLST)))
         )

         (command "_.-LAYER" "_OFF" "*" "_Y")
         (foreach VAL LAYLST (command "_ON" VAL))
         (command "")

         (if (= (length LAYLST) 1)
           (prompt (acet-str-format "\nLayer %1 has been isolated." (car LAYLST)))
           (prompt (acet-str-format "\n%1 layers have been isolated. Layer %2 is current."
                                     (itoa (length LAYLST)) LAY)
           )
         )
       )
     )
   )
 )

 (acet-error-restore)

 (princ)
)

 

[Edité le 26/2/2007 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Ah, Bred a été le plus rapide ;)

Le plus simple, au vu du besoin c'est de faire son propre layiso comme avec cet exemple

 

(defun c:geler(/ doc lay sel)
 (vl-load-com)
 (vla-startundomark (vla-get-activedocument (vlax-get-acad-object)))
 (if (setq sel (entsel))
   (progn
     (setq sel (entget (car sel))
    doc (vla-get-activedocument (vlax-get-acad-object)))
     (vla-put-activelayer doc (vla-item (vla-get-layers doc) (cdr (assoc 8 sel))))
     (vlax-for lay (vla-get-layers doc)
(if (not (eq (vla-get-name lay) (cdr (assoc 8 sel))))
  (vla-put-freeze lay :vlax-true)
)
     )
   )
 )
 (vla-endundomark (vla-get-activedocument (vlax-get-acad-object)))
)

 

@+

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)

Vous êtes des chefs!

 

Pas pu me conecter aujourd'hui, c'est la bourre!!!

çà fait plaisir de voir que d'autres trouvent des solutions pendant ce temps

C'est une solution simple

Merci beaucoup

 

Denis

 

 

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é