Matt666 Posté(e) le 12 juin 2007 Posté(e) le 12 juin 2007 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."
Patrick_35 Posté(e) le 12 juin 2007 Posté(e) le 12 juin 2007 SalutDe 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Matt666 Posté(e) le 12 juin 2007 Auteur Posté(e) le 12 juin 2007 Oui, effectivement c'est une solution ! "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 12 juin 2007 Auteur Posté(e) le 12 juin 2007 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."
bonuscad Posté(e) le 12 juin 2007 Posté(e) le 12 juin 2007 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
Matt666 Posté(e) le 12 juin 2007 Auteur Posté(e) le 12 juin 2007 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."
(gile) Posté(e) le 12 juin 2007 Posté(e) le 12 juin 2007 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
Matt666 Posté(e) le 12 juin 2007 Auteur Posté(e) le 12 juin 2007 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."
rebcao Posté(e) le 13 juin 2007 Posté(e) le 13 juin 2007 essayes avec la variable système NOMUTT à 1 et une fois terminé tu remets NOMUTT à 0 si ça peut convenir ! 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 @)
Matt666 Posté(e) le 13 juin 2007 Auteur Posté(e) le 13 juin 2007 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."
(gile) Posté(e) le 13 juin 2007 Posté(e) le 13 juin 2007 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
Matt666 Posté(e) le 13 juin 2007 Auteur Posté(e) le 13 juin 2007 Ah oui ok... Effectivement !! Merci du conseil gile.. "Chacun compte pour un, et nul ne compte pour plus d'un."
rebcao Posté(e) le 13 juin 2007 Posté(e) le 13 juin 2007 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 @)
(gile) Posté(e) le 15 juin 2007 Posté(e) le 15 juin 2007 Matt666, peut-être une bonne nouvelle, il semblerait que les prochaines versions des logiciels intelli* intègrent Visual LISP, voir ici Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Matt666 Posté(e) le 15 juin 2007 Auteur Posté(e) le 15 juin 2007 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."
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant