Aller au contenu

desactiver toutes les fenetres des espaces papiers


chrisbric

Messages recommandés

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.

 

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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:

Lien vers le commentaire
Partager sur d’autres sites

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:

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

 

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

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

 

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 = O

serait 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

Lien vers le commentaire
Partager sur d’autres sites

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 autres

Précision, nous sommes sur ADT2011 avec W7-64b

L'idée de "lecrabe" serrait très intéressante. :)

 

Chrisbric

Lien vers le commentaire
Partager sur d’autres sites

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. ;)

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Merci Gile et Bryce

Le 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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

est-ce normal que pour les commandes VPAOFF et VPAON, j'ai la réponse :

 

ERREUR AUTOMATION PAS DANS L'ESPACE PAPIER

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

Lien vers le commentaire
Partager sur d’autres sites

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 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

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é