Aller au contenu

cacher les résultats d\'une commande


Messages recommandés

Posté(e)

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."

Posté(e)

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

Posté(e)

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."

Posté(e)

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

Posté(e)

Merci bonuscad pour ce conseil..

 

Cela ne fonctionne pas, la commande génère toujours le même message d'erreur.

 

Mais bien tenté !

 

A bientot.

Matt.

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

Posté(e)

Salut,

 

Tu peux supprimer le calque courant de la liste de calques en utilisant la routine remove sur ta liste de calques :

 

(remove (getvar "CLAYER") liste_de_calques) 

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

Posté(e)

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."

Posté(e)

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."

Posté(e)

attention avec la variable NOMUTT, il faut avoir une gestion des erreurs qui la restaure à 0 si l'utilisateur faisait Echap pour ne pas se retrouver avec une ligne de commande "muette".

 

 

 

[Edité le 13/6/2007 par (gile)]

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

Posté(e)

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 @)

Posté(e)

Aha !! Aaaaaaah !!

Alors ça ce serait assez dément !! Surtout les réacteurs...

Terrible ! J'attends ça avec impatience....

 

Merci Gile pour l'info !

A+.

Matt.

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

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é