Aller au contenu

desactiver toutes les fenetres des espaces papiers


Messages recommandés

Posté(e)

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.

 

 

Posté(e)

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

Posté(e)

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]

Posté(e)

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:

Posté(e)

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

Posté(e)

 

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

Posté(e)

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.

Posté(e)

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

Posté(e)

 

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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)

Posté(e)

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/

Posté(e)

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

Posté(e)

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

Posté(e)
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)

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é