Aller au contenu

Echelle personnalisee des Fenetres (VIEWPORT)


lecrabe

Messages recommandés

 

Hello

 

N'ayant pas trouvé "chaussure à mon pied", SVP je sollicite "encore" la communauté

des super-développeurs de ce forum pour le besoin suivant :

 

Sur l'ensemble des Présentations / Mise en Pages (Espaces Papier)

(ou peut être MIEUX avec un choix des Présentations à traiter),

 

1) Poser la question : Quel Facteur d'Echelle personnalisé (Défaut=1) : xx.xx

 

2) Traitement de la plus Grande Fenêtre ou de la plus Petite Fenêtre

(en terme de surface Papier de la Fenêtre)

Choix Grande ou Petite (Défaut = Grande) :

 

Traitement : Appliquer le facteur d'Echelle Personnalisée sur la Fenêtre choisie (Grande ou Petite) et CE sur toutes les Présentations choisies

 

Cas particuliers :

 

SI il y a UNE SEULE Fenêtre dans la Présentation, on traite ! :)

 

Si il y a DEUX Fenêtres par Présentation, on traite soit la plus Grande, soit la plus Petite !

En fonction de la question 2 ... :D

 

Si il y a TROIS Fenêtres ou plus, on traite soit la Grande, soit la Petite !

 

Merci d'avance de votre aide !

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

EDIT : j'avais encore oublié (vl-load-com) et *acdoc* :P

 

;;; SVP (gile)
;;; Attribue une échelle aux plus grandes (ou aux plus petites) fenêtres
;;; des présentations sélectionnées

(defun c:SVP (/ *error* VportsSortedList rgnctl layouts scale size viewport)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (setq rgnctl (getvar "LAYOUTREGENCTL"))
 (setvar "LAYOUTREGENCTL" 0)

 (defun *error* (msg)
   (or (= msg "Fonction annulée")
(princ (strcat "Erreur: " msg))
)
   (setvar "LAYOUTREGENCTL" rgnctl)
   (princ)
 )

 (defun VportsSortedList (layout / ss lst)
   (if
     (ssget "_X"
     (list '(0 . "VIEWPORT")
	   (cons 410 layout)
	   '(-4 . "!=")
	   '(69 . 1)
     )
     )
      (progn
 (vlax-for vp (setq ss (vla-get-ActiveSelectionSet *acdoc*))
   (setq lst (cons vp lst))
 )
 (vla-delete ss)
 (vl-sort lst
	  '(lambda (x1 x2)
	     (>	(* (vla-get-Height x1) (vla-get-Width x1))
		(* (vla-get-Height x2) (vla-get-Width x2))
	     )
	   )
 )
      )
   )
 )

 (if
   (and
     (setq layouts (getLayouts nil T))
     (not (initget 6))
     (or
(setq scale (getdist "\nFacteur d'échelle [b]: "))
(setq scale 1.0)
     )
     (not (initget "Grandes Petites"))
     (or (= (setq size
	    (getkword
	      "\Fenêtres à traiter ? [plus Grandes/plus Petites] [b]: "
	    )
     )
     "Petites"
  )
  (setq size "Grandes")
     )
   )
    (foreach layout layouts
      (setq viewport ((if (= size "Grandes")
		 car
		 last
	       )
		(VportsSortedList layout)
	      )
      )
      (vla-put-CustomScale viewport scale)
    )
 )
 (setvar "LAYOUTREGENCTL" rgnctl)
 (princ)
)

;; GETLAYOUTS (gile) 03/12/07
;; Retourne la liste des présentations choisies dans la boite de dialogue
;;
;; arguments
;; titre : titre de la boite de dialogue ou nil, défauts = Choisir la (ou les) présentation(s)
;; mult : T ou nil (pour choix multiple ou unique)

(defun GetLayouts (titre mult / lay tmp file ret)
 (setq	lay  (vl-sort (layoutlist)
	      (function
		(lambda	(x1 x2)
		  (			     (TabOrder x2)
		  )
		)
	      )
     )
tmp  (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
 )
 (write-line
   (strcat
     "GetLayouts:dialog{label="
     (if titre
(vl-prin1-to-string titre)
(if mult
  "\"Choisir les présentations\""
  "\"Choisir une présentation\""
)
     )
     ";:list_box{key=\"lst\";multiple_select="
     (if mult
"true;}:row{:retirement_button{label=\"Toutes\";key=\"all\";}
ok_button;cancel_button;}}"
"false;}ok_cancel;}"
     )
   )
   file
 )
 (close file)
 (setq dcl_id (load_dialog tmp))
 (if (not (new_dialog "GetLayouts" dcl_id))
   (exit)
 )
 (start_list "lst")
 (mapcar 'add_list lay)
 (end_list)
 (action_tile "all" "(setq ret (reverse lay)) (done_dialog)")
 (action_tile
   "accept"
   "(or (= (get_tile \"lst\") \"\")
(foreach n (str2lst (get_tile \"lst\") \" \")
(setq ret (cons (nth (atoi n) lay) ret))))
(done_dialog)"
 )
 (start_dialog)
 (unload_dialog dcl_id)
 (vl-file-delete tmp)
 (reverse ret)
)

;; TabOrder
;; Retourne le numéro d'ordre de la présentation
;;
;; Argument : le nom de la présentation (chaîne)
;;
;; Retour : le numéro d'ordre de la présentation (entier)

(defun TabOrder	(name / dict lay)
 (setq dict (dictsearch (namedobjdict) "ACAD_LAYOUT"))
 (if (setq lay (cdr (assoc 350 (member (cons 3 name) dict))))
   (cdr (assoc 71 (entget lay)))
 )
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)

(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

 

Hello Gilles

 

Merci beaucoup ! :)

 

J'explique le pourquoi du comment :

 

J'ai des DWGs de SIG/Cartographie/Bâtiments/etc

avec pour la plupart d'entre eux 2 Fenêtres :)

 

- une Grande (Fenêtre principale) Carto de "détail" sur une zone précise

- une Petite (Fenêtre de "situation") Carto générale ...

 

et parfois une 3eme Fenêtre "moyenne" qui zoome en fait sur la Légende

 

Après coup, on change parfois "un peu" l'echelle de ces Fenêtres ...

et de dans des dizaines de présentations, donc c quand même pénible de faire ça à la main !

 

Je vais tester des que possible !

Je pense que cela peut intéresser d'autres personnes !

 

Bien le bonjour dans le Sud, Le Decapode "sous la pluie/neige"

 

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello Lecrabe et Gile,

Il y aura vraiment Un logiciel SIG nommé LecrabeSIG sur AutoCAD.

 

J'ai testé votre fonction mais voici le message retourné sur MAP 2008 :

[surligneur] svp ; erreur: no function definition: TABORDER [/surligneur]

 

Je pense qu'une sous-fonction manque à l'appel.

 

Voilà,

 

Salutations à vous deux,

 

Fabcad

 

 

[Edité le 12/12/2008 par fabcad]

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é