CADxp: desactiver toutes les fenetres des espaces papiers - CADxp

Aller au contenu

  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

desactiver toutes les fenetres des espaces papiers

#1 L'utilisateur est hors-ligne   chrisbric 

  • ceinture verte
  • Groupe : Membres
  • Messages : 56
  • Inscrit(e) : 07-août 07

Posté 28 février 2011 - 17:23

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.


0

#2 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2160
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 28 février 2011 - 17:42

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

#3 L'utilisateur est hors-ligne   chrisbric 

  • ceinture verte
  • Groupe : Membres
  • Messages : 56
  • Inscrit(e) : 07-août 07

Posté 28 février 2011 - 17:59

Nous avons bien des versions complètes (ADT 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...
0

#4 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2160
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 01 mars 2011 - 00:16

Bonsoir,

Je te propose ceci :

http://www.creao.fr/...s/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]
0

#5 L'utilisateur est hors-ligne   Fraid 

  • ceinture noire 3em dan
  • Groupe : Membres
  • Messages : 1814
  • Inscrit(e) : 08-août 05
  • LocationST Malo 35

Posté 01 mars 2011 - 00:25

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:
...plus je sais où je suis, moin je sais où je vais.... Extrait d''une double interview simultanée d'une particule élémentaire.
0

#6 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2160
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 01 mars 2011 - 00:32

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:
0

#7 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11021
  • Inscrit(e) : 02-septembre 05

Posté 01 mars 2011 - 08:49

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
Image IPB
0

#8 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7963
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 01 mars 2011 - 09:41


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

0

#9 L'utilisateur est hors-ligne   chrisbric 

  • ceinture verte
  • Groupe : Membres
  • Messages : 56
  • Inscrit(e) : 07-août 07

Posté 01 mars 2011 - 09:47

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

#10 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11021
  • Inscrit(e) : 02-septembre 05

Posté 01 mars 2011 - 10:02

Citation

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
Image IPB
0

#11 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 7963
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 01 mars 2011 - 11:28


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

0

#12 L'utilisateur est hors-ligne   grand_sapin 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 694
  • Inscrit(e) : 30-juin 05
  • LocationRennes

Posté 01 mars 2011 - 11:33

Bonjour,

Pour ce que ça vaut, j'adore l'idée de notre ami octo-membré à pinces.

Sapin
Enregistrer
0

#13 L'utilisateur est hors-ligne   chrisbric 

  • ceinture verte
  • Groupe : Membres
  • Messages : 56
  • Inscrit(e) : 07-août 07

Posté 01 mars 2011 - 12:11

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
0

#14 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2160
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 01 mars 2011 - 12:23

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

#15 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11021
  • Inscrit(e) : 02-septembre 05

Posté 01 mars 2011 - 14:07

Citation

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
Image IPB
0

#16 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2160
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 01 mars 2011 - 16:04

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/...s/lisp/vpst.lsp
0

#17 L'utilisateur est hors-ligne   chrisbric 

  • ceinture verte
  • Groupe : Membres
  • Messages : 56
  • Inscrit(e) : 07-août 07

Posté 01 mars 2011 - 16:52

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
0

#18 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2160
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 01 mars 2011 - 18:19

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/...lisp/vplock.lsp
0

#19 L'utilisateur est hors-ligne   chrisbric 

  • ceinture verte
  • Groupe : Membres
  • Messages : 56
  • Inscrit(e) : 07-août 07

Posté 01 mars 2011 - 19:03

Salut Bryce,

Merci pour ta petite lisp supplémentaire, on en demandais pas tant mais peut-être très utile.

@+
0

#20 L'utilisateur est hors-ligne   grand_sapin 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 694
  • Inscrit(e) : 30-juin 05
  • LocationRennes

Posté 03 mars 2011 - 10:36

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)
Enregistrer
0

Partager ce sujet :


  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)