Aller au contenu

cacher les résultats d\'une commande


Matt666

Messages recommandés

Bonjour !

 

J'ai une petite question toute bête... Ne riez pas quand vous aurez fini, parce que c'est tout simple...

 

Voilà : J'ai créé une routine il y a longtemps permettant d'isoler un calque. Sur AutoCad elle existe dans le menu express, mais pas dans =certains autres logiciels !!

 

La routine demande à l'utilisateur de choisir les objets sur le ou les calques à isoler (ssget)

Ensuite un petit (repeat) du nombre d'entités sélectionnées pour rappatrier les noms des calques.

Après ça, un petit traitement pour supprimer les doublons (à ce propos merci (gile) d'avoir trouvé une méthode 10 fois plus simple pour ça !!!)

Et pour finir, une commande calque.

 

Je lui demande de GELER (et pas éteindre) tous les calques puis de dégeler ceux de la sélection utilisateur.

 

Le fait de geler tous les calques génère un message du genre :

"Le calque "nomcalque" est le calque actif. Il ne peut être gelé."

 

Et ça, j'aimerais bien le masquer !!

 

Comment feriez-vous, professionnels du développement entre parenthèses ???

 

Merci d'avance !

A bientot.

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

Salut

De ne pas geler le calque actif ;)

Ou encore de cette manière

(vlax-map-collection (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) '(lambda (x)(vl-catch-all-apply 'vla-put-freeze (list x :vlax-true))))

 

ps : tu peux ajouter un test afin de ne pas geler ou dégeler les calques que tu souhaites conserver dans la fonction anonyme afin de ne pas faire deux boucles

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Le problème c'est que je ne peux pas lire les fonctions de visual lisp..

J'aimerais bien moi, mais faut voir ça avec les développeurs de BricsCad...

 

Non, il me faudrait (si possible, bien entendu) une méthode en autolisp pur permettant de cacher les messages commande... Et une méthode rapide, si possible

 

voilà....

Je vais tenter de passer directement par la table LAYER mais j'ai peur de perdre en rapidité d'exécution...

 

Merci Patrick_35 pour ta réponse rapide et intéressante, je la garde sous le coude... Y en a un peu marre de travailler sur des clones de logiciels valables !!

 

A bientôt.

 

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

Si tu veux conservé tes appels par commande, tu peux utiliser la variable "EXPERT" pour cacher/éviter certain message de retour. Voir l'aide pour les différentes valeurs possibles.

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

Lien vers le commentaire
Partager sur d’autres sites

J'ai trouvé un système qui permet de détourner le problème...

Il vaut ce qu'il vaut, mais ça fonctionne...

Bon c'est fait avec les moyens du bord, donc pas de rigolades quant au visuel du code !!

 

Dites-moi ce que vous en pensez ! N'hésitez pas à me dire si on peut faire autrement !

 

(defun layiso ()
    (setvar "cmdecho" 0)
    (setq clayer (getvar "clayer"))
    (if (eq (ssget "i") nil)
         (progn
              (princ "\nSélectionner des objets sur les calques à afficher: ")
              (setq P (ssget))
         )
         (setq p (ssget "i"))
    )
    (setq cntr 0 lis '() isol "" freez "" la nil)
    (if P (progn
              (repeat (sslength p)
                   (setq lis (cons (setq clay (cdr (assoc 8 (entget (ssname p cntr))))) lis))
                   (setq cntr (1+ cntr))
              )
              (if lis (setq lis (remove-doubles lis)))
              (foreach pt lis (setq isol (strcat pt "," isol))(if (eq clay pt)(setq cla T)))
              (if (null cla) (command "-layer" "d" clay ""))
              (setq isol (substr isol 1 (1- (strlen isol))) la (tblnext "layer" t))
              (while la 
                   (if (and (/= (cdr (assoc 2 la)) clay)(/= (cdr (assoc 2 la)) clayer))
                        (progn
                             (setq nonn nil)
                             (foreach pt lis (if (eq pt (cdr (assoc 2 la))) (setq nonn T)))
                             (if (null nonn)(setq freez (strcat (cdr (assoc 2 la)) "," freez)))
                   ))
                   (setq la (tblnext "layer"))
              )
              (setq freez (substr freez 1 (1- (strlen freez))))
              (command "-layer" "g" freez "l" isol "")
              
    ))
    (princ)
)

 

Cette routine fait appel à deux routines de (gile) : "remove-doubles" et "remove".

Un grand merci à (gile), d'ailleurs, d'avoir proposé des routines pour pallier les manques d'autolisp et pour faciliter le travail...

 

A bientot !

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

La variable nomutt ??? Connais pas celle là !!

Je vais tenter, merci !!

 

Sinon la routine un peu améliorée...

 

 
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; Layiso Isole les calques sélectionnés
(defun c:layiso ()
    (setq temperror *error* *error* myerror)
    (setvar "cmdecho" 0)
    (setq clayer (getvar "clayer"))
    (if (eq (ssget "i") nil)
         (progn
              (princ "\nSélectionner des objets sur les calques à afficher: ")
              (setq P (ssget))
         )
         (setq p (ssget "i"))
    )
    (setq cntr 0 lis '() isol "" freez "" la nil cla nil)
    (if P (progn
              (repeat (sslength p)
                   (setq lis (cons (setq clay (cdr (assoc 8 (entget (ssname p cntr))))) lis))
                   (setq cntr (1+ cntr))
              )
              (setq lis (remove-doubles lis))
              (foreach pt lis (setq isol (strcat pt "," isol)))
              (if (null (string-search clayer isol nil))(command "-layer" "d" clay ""))
              (setq isol (substr isol 1 (1- (strlen isol))) la (tblnext "layer" t))
              (while la 
                   (if (/= (cdr (assoc 2 la)) (getvar "clayer"))(setq freez (strcat (cdr (assoc 2 la)) "," freez)))
                   (setq la (tblnext "layer"))
              )
              (setq freez (substr freez 1 (1- (strlen freez))))
              (command "-layer" "g" freez "l" isol "")
              
    ))
    (princ)
)

A bientot les gens !!

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Lien vers le commentaire
Partager sur d’autres sites

Pour éviter des gestions d' ERREUR trop fastidieuse !!! Je fais en sorte de ne passer aucune instruction particulière tant que je suis en phase acquisition de la part de l'utilisateur...

 

J' effectue toute modif. de l'environnement utilisateur dans l'exécution de la/les commandes...

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

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é