Aller au contenu

Messages recommandés

Posté(e)

Bonsoir,

 

travaillant souvent sur deux ecrans et ayant souvent plusieurs dessins ouvert dans la même session d'autocad, j'aimerais pouvoir lors de l'affichage des dessins sélectionner les dessins que je veux mettre lors d'une mosaîque verticale ou horizontale.

 

Je connais la commande fensyst, mais via cette commande si j'ai 6 fichiers ouvert et que je choisi mosaique verticale, il me mets les 6 fichies les uns à coté des autres. ce que j'aimerais, c'est de pouvoir choisir uniquement 2 fichiers par exemple.

 

Merci de me guider dans cette tâche.

 

@plus

 

LB

  • 1 mois après...
Posté(e)

Bonsoir,

 

Voici le code permettant de réaliser la demande ci-dessus:

 

Elle a été réaliser par T.Willey

 

(defun c:TileSelect (/ AcObj ActDoc DocCol DocList DiaRtn RtnLen HorOpt tempDoc cDocSel oWinStList)
   ; Tile selected drawings.
   (vl-load-com)
   (setq AcObj (vlax-get-Acad-Object))
   (setq ActDoc (vla-get-ActiveDocument AcObj))
   (setq DocCol (vla-get-Documents AcObj))
   (vlax-for i DocCol
       (setq DocList (cons (cons (vla-get-Name i) i) DocList))
       (setq oWinStList (cons (cons (vla-get-WindowState i) i) oWinStList))
       (while (not (equal (vlax-get i 'WindowState) 2))
           (vlax-put i 'WindowState 2)
       )
   )
   (setq DocList (vl-sort DocList '(lambda (a b) (    (if
       (and
           (> (length DocList) 1)
           (setq DiaRtn (MultiSelect (mapcar 'car DocList) "Check to tile horizontal." T))
           (if (equal (type (car DiaRtn)) 'INT)
               (> (setq RtnLen (length DiaRtn)) 1)
               (progn
                   (setq HorOpt T)
                   (setq DiaRtn (cdr DiaRtn))
                   (> (setq RtnLen (length DiaRtn)) 1)
               )
           )
       )
       (progn
           (setq HorOpt
               (if HorOpt
                   "_Horizontal"
                   "_Vertical"
               )
           )
           (foreach i DiaRtn
               (setq tempDoc (cdr (nth i DocList)))
               (if (equal tempDoc ActDoc)
                   (setq cDocSel T)
               )
               (vlax-put tempDoc 'WindowState 1)
           )
           (vlax-put ActDoc 'WindowState 1)
           (if (not cDocSel)
               (vlax-put ActDoc 'WindowState 2)
           )
           (vla-Activate ActDoc)
           (command "_.syswindows" HorOpt)
       )
       (foreach i oWinStList
           (while (not (equal (vla-get-WindowState (cdr i)) (car i)))
               (vla-put-WindowState (cdr i) (car i))
           )
       )
   )
   (princ)
)



(defun MultiSelect (Listof Message Toggle / DiaLoad tmpStr tmpTog tmpList)

(setq DiaLoad (load_dialog "MyDialogs.dcl"))
(if (new_dialog "MultiSelect" DiaLOad)
	(progn
		(start_list "listbox" 3)
		(mapcar 'add_list Listof)
		(end_list)
		(if Message
		(set_tile "text1" Message)
		)
		(if (not Toggle)
			(mode_tile "toggle1" 1)
		)
		(mode_tile "listbox" 2)
		(action_tile "accept"
			"(progn
				(setq tmpStr (get_tile \"listbox\"))
				(if Toggle
					(setq tmpTog (get_tile \"toggle1\"))
				)
				(done_dialog 1)
			)"
		)
		(action_tile "cancel" "(done_dialog 0)")
		(if (= (start_dialog) 1)
			(progn
				(if tmpStr
					(setq tmpList (read (strcat "(" tmpStr ")")))
				)
				(if (= tmpTog "1")
					(cons T tmpList)
					tmpList
				)
			)
		)
	)
)
)

 

Voici la boite de dialogue .dcl (ne pas oublier de mettre le fichier dans le repertoire de recherche de fichier support)

 

MultiSelect : dialog{ label = "Select Item";
: list_box { key = "listbox"; width = 55; height = 25; multiple_select = true; }
: toggle { key = "toggle1"; }
: text { key = "text1"; }
: row {
: spacer { width = 1; }
: button { label = "OK"; is_default = true; allow_accept = true; key = "accept"; width = 8; fixed_width = true; }
: button { label = "Cancel"; is_cancel = true; key = "cancel"; width = 8; fixed_width = true; }
: spacer { width = 1;}
}
}
//-------------------------------------------------------------------------------------------


 

@plus

 

LB

Posté(e)

lovecraft,

 

tu peux ne garder que le code DCL de MultiSelect dans le fichier DCL, les autres codes sont des définitions de boite de dialogue qui ne servent pas ici.

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

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é