chrisbric Posté(e) le 28 février 2011 Posté(e) le 28 février 2011 Bonjour a tous,J'ai un fichier avec plein, plein plein, de page de presentation. Dans chaque page, il y a deux ou trois fenêtre actives. Lorsque je passe d'un espace papier à un autre, il met 30 secondes alors qu'il n'a pas grand chose à régénérer.Y a t'il un moyen de désactiver toutes les fenêtres de tout les espaces papier en même temps, soit par une fonction, soit par une appli. que l'on charge sur autocad complet. Merci a vous de votre aide.
bryce Posté(e) le 28 février 2011 Posté(e) le 28 février 2011 Bonjour, Ça peut se faire avec macro si les présentations sont numérotées.Comment sont nommées tes présentations ? Sinon en lisp, si tu as bien une version complète. Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
chrisbric Posté(e) le 28 février 2011 Auteur Posté(e) le 28 février 2011 Nous avons bien des versions complètes (Autodesk Architectural Desktop 2011) mais je ne sais pas créer de LISP, je n'ai jamais eu vraiment le temps de m'y pencher.Si quelqu'un connait une lisp pour activer ou désactiver toutes les fenêtres, je suis preneurs.Mes fenêtres ne sont pas numérotées...
bryce Posté(e) le 28 février 2011 Posté(e) le 28 février 2011 Bonsoir, Je te propose ceci : http://www.creao.fr/uploads/lisp/vpai.lsp (defun c:vpai (/ obj acdoc layouts lay oldcmdecho olderr action ss clayout) ; Brice Studer, février 2011 ; Permet d'activer toutes les fenêtres de toutes les présentations du dessin, ; ou de toutes les désactiver (en choisissant éventuellement de garder actives ; certaines fenêtres de la présentation active). (vl-load-com) (setq layouts (vla-get-layouts (setq acdoc (vla-get-ActiveDocument (setq obj (vlax-get-acad-object))))) ) (vla-startundomark acdoc) (setq olderr *error*) (setq *error* trap) (setq oldcmdecho (getvar "CMDECHO")) (setvar "CMDECHO" 0) (defun trap(errmsg) (command nil nil nil) (or (member (strcase errmsg) '("FUNCTION CANCELLED" ""QUIT / EXIT ABORT"" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " errmsg)) ) (setq *error* olderr) (setvar "CMDECHO" oldcmdecho) (setvar "NOMUTT" 0) (vla-EndUndoMark acdoc) (princ) ) (initget "Activer Désactiver") (setq action (getkword "\nEntrée pour désactiver toutes les fenêtres ou [Activer]: ")) (if (= action "Activer") (setq action "_on") (progn (setq action "_off") (princ "\nSélectionnez les fenêtres à garder actives (Entrée pour aucune): ") (setq ss (ssget '( (0 . "VIEWPORT") ))) ) ) (setvar "NOMUTT" 1) (setq clayout (getvar "CTAB")) (vlax-for lay layouts (if (eq :vlax-false (vla-get-modeltype lay)) (progn (vla-put-activelayout acdoc lay) (command "_.-vports" action "_all" "") (if (/= 0 (getvar "CMDACTIVE")) (command nil nil nil) ) );progn );if layout not model );vlax-for lay (setvar "CTAB" clayout) (if ss (command "_.-vports" "_on" ss "") ) (setvar "CMDECHO" oldcmdecho) (setvar "NOMUTT" 0) (vla-endundomark acdoc) (princ) ) (princ "\nCommande à utiliser: VPAI") (princ) Si jamais un Maître Jedi du lisp passait dans le coin, j'aimerais son avis sur le code ci-dessous, que je n'ai pas réussi à faire fonctionner.Je n'arrive pas à trouver ce qui cloche... :exclam: (defun c:vpai (/ obj acdoc layouts lay action clayout) (vl-load-com) (setq layouts (vla-get-layouts (setq acdoc (vla-get-ActiveDocument (setq obj (vlax-get-acad-object))))) ) (vla-startundomark acdoc) (initget "Activer Désactiver") (setq action (getkword "\nEntrée pour désactiver toutes les fenêtres ou [Activer]: ")) (if (= action "Activer") (setq action :vlax-true) (setq action :vlax-false) ) (setq clayout (getvar "CTAB")) (vlax-for lay layouts (if (eq :vlax-false (vla-get-modeltype lay)) (progn (vla-put-activelayout acdoc lay) (vlax-for ent (vla-get-block lay) (if (and (= "AcDbViewport" (vla-get-objectname ent)) (vlax-property-available-p ent 'viewporton) ) (vla-put-viewporton ent action) ) );vlax-for ent );progn );if layout not model );vlax-for lay (setvar "CTAB" clayout) (vla-endundomark acdoc) (princ) ) [Edité le 28/2/2011 par bryce] Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Fraid Posté(e) le 28 février 2011 Posté(e) le 28 février 2011 Bonjour, Je me suis aussi planté le nez ce soir en vla quand je fait un dump sur une fenetre voici ce que cela me donne Commande: dump sélectionnez l'objet: ; IAcadPViewport2: Interface IAcadPViewport ; Valeurs de propriétés: ; Application (RO) = # ; ArcSmoothness = 100 ; Center = (0.9839 0.1485 0.0) ; Clipped (RO) = 0 ; CustomScale = 0.00499995 ; Direction = (0.0 0.0 1.0) ; DisplayLocked = -1 ; Document (RO) = # ; EntityTransparency = "DuCalque" ; GridOn = 0 ; Handle (RO) = "1BD7" ; HasExtensionDictionary (RO) = 0 ; HasSheetView (RO) = 0 ; Height = 0.297 ; Hyperlinks (RO) = # ; LabelBlockId = Une exception s'est produite ; LabelBlockId32 = ; erreur: une exception s'est produite: 0xC0000005 (Violation d'accès) ; avertissement: fonction unwind ignorée exception ; erreur: une exception s'est produite: 0xC0000005 (Violation d'accès) Commande: :exclam: :casstet: https://github.com/Fraiddd
bryce Posté(e) le 28 février 2011 Posté(e) le 28 février 2011 Pas de pb avec le dump chez moi, et je peux activer/désactiver une fenêtre avec vla-put-viewporton en tapant directement dans la ligne de commande AutoCAD. Mais le lisp plante quand j'essaie d'utiliser cette fonction en parcourant les présentation avec vlax-for... :casstet: Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
(gile) Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Salut, Je n'ai pas testé le code en profondeur, mais il me semble que le problème vient du fait que chaque présentation contient un objet Viewport qui est la fenêtre de présentation elle même (cvport = 1). Un petit code vite fait (pas de gestion des erreurs) Code corrigé : gestion de la variable LAYOUTREGENCTL (defun c:vpon (/ ss) (gc:AllViewportOn :vlax-true) (princ) ) (defun c:vpoff () (gc:AllViewportOn :vlax-false) (princ) ) (defun gc:AllViewportOn (bool / *error* lrc ss) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-activeDocument *acad*))) (defun *error* (msg) (and msg (/= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (setvar 'layoutregenctl lrc) (princ) ) (setq lrc (getvar 'layoutregenctl)) (setvar 'layoutregenctl 0) (if (ssget "_X" '((0 . "VIEWPORT") (410 . "~Model") (-4 . "/=") (69 . 1))) (vlax-for vp (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (vla-put-ViewportOn vp bool) ) ) (and ss (vla-Delete ss)) (*error* nil) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Hello Sur mon MAP 2011 32 bits : Commande: VPOFF ou VPON; erreur: type d'argument incorrect: VLA-OBJECT nil Dans l'onglet Objet ou dans une Presentation sur le Papier ou dans un VPORT (Fenetre) Le Decapode Autodesk Expert Elite Team
chrisbric Posté(e) le 1 mars 2011 Auteur Posté(e) le 1 mars 2011 Merci à vous pour votre aide précieuse.Après avoir tester vos différentes LISP, c'est celle de Bryce qui fonctionne le mieux. Une fenêtre parmi toute ne veut pas se désactiver mais c'est pas grave, toutes les autres ne sont plus actives.
(gile) Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Hello Sur mon MAP 2011 32 bits : Commande: VPOFF ou VPON; erreur: type d'argument incorrect: VLA-OBJECT nil Dans l'onglet Objet ou dans une Presentation sur le Papier ou dans un VPORT (Fenetre) Le Decapode Une faute de frappe, corrigé. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Hello VPON et VPOFF semblent mieux marcher (Test sur MAP 2011 32 bits) :) mais il faut etre dans l'espace papier d'une presentation ! Pourquoi pas ? Une petite question du genre :Traiter TOUTEs les Presentations (O/N) - Defaut = Oserait eventuellement la bienvenue ! ou bien 2 nouvelles commandes : VPONALL et VPOFFALL et si en plus le VPOFFALL et VPONALL pouvaient etre realises dans l'espace Objet, ca serait TIP-TOP ! :D Car avec un VPOFF de toutes les presentations, on change de presentation TRES VITE on regarde le blabla du cartouche et eventuellement on ferait un VPON LOCAL de cette presentation pour plonger dans une fenetre si necessaire ! Merci d'avance, Le Decapode Autodesk Expert Elite Team
grand_sapin Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Bonjour, Pour ce que ça vaut, j'adore l'idée de notre ami octo-membré à pinces. Sapin
chrisbric Posté(e) le 1 mars 2011 Auteur Posté(e) le 1 mars 2011 Bonjour, Je viens de tester le lisp de "gile", il a l'air plus rapide que celui de bryce car il ne passe pas d'une presentation à l'autre pour désactiver les fenêtres cependant il ne fonctionne pas correctement, en tout cas chez moi. :( Explication: Si mes fenêtres de chaque presentation sont inactives, et que je fais VPON, la fonctionne marche impeccablement et super rapidement, cependant, l'inverse ne fonctionne pas, pourquoi, je ne suis pas calé dans les créations de LISP pour comprendre.Le VPOFF ne fonctionne que sur la presentation ou je suis et pas sur les autresPrécision, nous sommes sur ADT2011 avec W7-64bL'idée de "lecrabe" serrait très intéressante. :) Chrisbric
bryce Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Bonjour, J'allais justement poster pour dire que le VPOFF de (gile) effectivement ne désactive que les fenêtres de l'onglet courant. Je sais que mon lisp n'est pas top, mais je n'ai pas réussi à désactiver les fenêtres sans changer d'onglet actif. Cela dit, j'espère bien trouver un moyen de l'améliorer. ;) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
(gile) Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 J'allais justement poster pour dire que le VPOFF de (gile) effectivement ne désactive que les fenêtres de l'onglet courant. Le problème vient de la valeur de la variable LAYOUTREGENCTL.J'ai modifié le code pour mettre cette valeur à 0. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bryce Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Super ! :) Du coup mon lisp est bon pour la poubelle, c'est infiniment plus rapide de cette façon. (gile), je me suis permis de me baser sur ton code pour ajouter les options demandées par lecrabe. ; VPST : active/désactive toutes les fenêtres de l'onglet courant/tous les onglets ; VPAON : active toutes les fenêtres de tous les onglets ; VPON : active toutes les fenêtres de l'onglet courant ; VPAOFF : désactive toutes les fenêtres de tous les onglets ; VPOFF : désactive toutes les fenêtres de l'onglet courant (defun c:vpon (/ ss) (gc:AllViewportOn :vlax-true (getvar 'ctab)) (princ) ) (defun c:vpaon (/ ss) (gc:AllViewportOn :vlax-true nil) (princ) ) (defun c:vpoff () (gc:AllViewportOn :vlax-false (getvar 'ctab)) (princ) ) (defun c:vpaoff () (gc:AllViewportOn :vlax-false nil) (princ) ) (defun c:vpst (/ option) (initget "DT AT D A") (setq option (getkword "\nChoisissez une option [Désactiver Tout/Activer Tout/Désactiver courant/Activer courant] : ")) (cond ((= option "AT") (c:vpaon)) ((= option "A") (c:vpon)) ((= option "D") (c:vpoff)) ( T (c:vpaoff)) ) (princ) ) (defun gc:AllViewportOn (bool layout / *error* lrc ss) (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-activeDocument *acad*))) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (setvar 'layoutregenctl lrc) (princ) ) (setq lrc (getvar 'layoutregenctl)) (setvar 'layoutregenctl 0) (if layout (or (/= layout "Model") (progn (princ "\n** Commande non autorisée dans l'onglet Objet**") (quit) ) ) (setq layout "~Model") ) (if (ssget "_X" (list(cons 0 "VIEWPORT") (cons 410 layout) (cons -4 "/=") (cons 69 1))) (vlax-for vp (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (vla-put-ViewportOn vp bool) ) ) (and ss (vla-Delete ss)) (*error* nil) ) (princ "\nCommandes: VPST ou VPON, VPOFF, VPAON, VPAOFF") (princ) http://www.creao.fr/uploads/lisp/vpst.lsp Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
chrisbric Posté(e) le 1 mars 2011 Auteur Posté(e) le 1 mars 2011 Merci Gile et BryceLe fait d'avoir mis le "LAYOUTREGENCTL" à 0, tout fonctionne à merveille.Vous êtes trop cool d'avoir répondu aussi rapidement à ma demande, je pense que ce lisp va servir à d'uatre personnes que moi.En tout cas, merci encore à vous
bryce Posté(e) le 1 mars 2011 Posté(e) le 1 mars 2011 Une variante vite fait, pour verrouiller/déverrouiller toutes les fenêtres de tous les onglets ou de l'onglet courant:http://www.creao.fr/uploads/lisp/vplock.lsp Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
chrisbric Posté(e) le 1 mars 2011 Auteur Posté(e) le 1 mars 2011 Salut Bryce, Merci pour ta petite lisp supplémentaire, on en demandais pas tant mais peut-être très utile. @+
grand_sapin Posté(e) le 3 mars 2011 Posté(e) le 3 mars 2011 Bonjour, est-ce normal que pour les commandes VPAOFF et VPAON, j'ai la réponse : ERREUR AUTOMATION PAS DANS L'ESPACE PAPIERque je sois dans l'espace objet ou papier, toujours le même message. Ca me désactive tout de même l'onglet courant, mais pas les autres. Sapin (ACAD 2008 complet)
lili2006 Posté(e) le 3 mars 2011 Posté(e) le 3 mars 2011 Bonjour à toutes et tous, En ce qui concerne mes tests, Pour Civil 3D 2011 : VPST ,je n'ai pas trouvé l'option "tous les onglets" Si je choisi "Désactiver tout", cela fonctionne que dans l'onglet courant (pas de différence avec "Désactiver courant") Par contre pas de pb pour VPAON et VPAOFF,.. Pour AutoCAD 2008 : Idem ! Commande: vpaon Commande:Commande: vpaoff Je n'ai pas de message d'erreur et tout fonctionne. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
bryce Posté(e) le 3 mars 2011 Posté(e) le 3 mars 2011 Bonjour, Lili,Avec VPST, il suffit de faire Entrée pour désactiver dans tous les onglets, c'est l'option par défaut (ou DT). Grand Sapin,Apparemment l'erreur Automation a lieu quand tous les onglets n'ont pas été activés au moins une fois depuis l'ouverture du fichier.Essaie d'activer toutes tes présentations au moins une fois, et les fonctions devraient ensuite marcher normalement. Je ne sais pas s'il y a une parade à ça, à part faire en sorte que le lisp active les onglets un par un (plus lent donc).C'est ce que faisait le 1er lisp que j'avais posté (réponse n°3). Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
grand_sapin Posté(e) le 3 mars 2011 Posté(e) le 3 mars 2011 Exact Bryce tout fonctionne, il faut juste prendre le temps au début de les faire un par un pour gagner du temps plus tard très bon lisp en tout les cas. Merci à tous les concepteurs Sapin
lili2006 Posté(e) le 3 mars 2011 Posté(e) le 3 mars 2011 Re, Vu ! Merci Brice, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
bryce Posté(e) le 3 mars 2011 Posté(e) le 3 mars 2011 il faut juste prendre le temps au début de les faire un par un pour gagner du temps plus tard Voici un petit lisp qui permet de parcourir toutes les présentations une après l'autre.A utiliser une fois après l'ouverture du fichier. :) (defun c:aclay (/ obj acdoc layouts clayout lay) ; Active tous les onglets de présentation du dessin un après l'autre. (vl-load-com) (setq layouts (vla-get-layouts (setq acdoc (vla-get-ActiveDocument (setq obj (vlax-get-acad-object))))) ) (setq clayout (vla-get-activelayout acdoc)) (vlax-for lay layouts (if (and (eq :vlax-false (vla-get-modeltype lay)) (/= lay clayout) ) (vla-put-activelayout acdoc lay) ) ) (vla-put-activelayout acdoc clayout) (princ) ) (princ "\nCommande à utiliser: ACLAY") (princ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
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