Aller au contenu

boite de dialogue, selectionner plusieurs fichiers dwg


PHILPHIL

Messages recommandés

hello

comment faire pour sélectionner plusieurs fichier dans une boite de dialogue ?

la commande "XA"  ouvre une boite de dialogue permettant de sélectionner plusieurs fichiers *.dwg.

la commande "inserclassique" "sélectionner" ouvre une boite de dialogue permettant de ne sélectionner qu'un seul fichier.

hors ca a l'air d'etre a peut pres la meme boite de dialogue avec un paramétrage de sélection différents.

 

pourrait on dans un LISP appeler cette boite de dialogue avec l'un ou l'autre de ce paramétrage ? un fichier a la fois, plusieurs a la fois.

 

je cherche a creer un lisp pour charge plusieurs fichiers *.dwg  en tant que bloc, ou de les mettre a jour.

en gros a créer une liste de fichier selectionner dans un sous répertoire.

 

Merci

 

Phil

 

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Salut @PHILPHIL

J'ai fait une commande qui importe en masse des DXF.

Un .lsp

;;-----------------------------------------------------------------------------------;;
;;--------------------------------- Par Vincent P. ----------------------------------;;
;; Insérer massivement des DXF sous la forme de blocs, et dans un calque spécifique  ;;
;;------------------- !! Nécessité l'utilisation de IGIR.DCL !! ---------------------;;
;;-Les DXF doivent être dans le même répertoir que le DWG où est exécuté la commande-;;
;;-----------------------------------------------------------------------------------;;

(vl-load-com)

;;-
;; Routine indxf
;;-
(defun insdxf ( chem / nom ssb n)
  (setq nom (vl-filename-base chem)
	n 0)
  (if (= nil (tblsearch "layer" nom))
    (command "FCALQUE" "Nouv" nom ""))
  (if (setq ssb (ssget "_X" (list (cons 2 nom))))
    (repeat (sslength ssb)
      (entdel (ssname ssb n))
      (setq n (1+ n))
      ))
  (if (tblobjname "BLOCK" nom)
    (command "-PURGER" "BLOCS" nom "NON")
    )
  (setvar "clayer" nom)
  (command "-INSERER" chem '(0 0 0) 1 "" 0)
  (princ)
  ); /defun

;;-
;; Fonction principale
;; IGIR
;;-
(defun c:IGIR (/ chem ddiag index start-lst dcl_id i n lst-nom lst lay)
  ;;;création de la liste qui sera affichée
  (setq chem (getvar "dwgprefix")
	start-lst (ACAD_STRLSORT (vl-directory-files chem "*.dxf" 1))
	lay (getvar "clayer")
	n 0)
  ;;;chargement du fichier DCL
  (if (not (setq dcl_id (load_dialog "IGIR.dcl")))
    (progn ;Si DCL non chargé
      (alert "Le fichier DCL n'a pas été trouvé !")
      (exit)
      )
    (progn ;Si DCL chargé
      (if (not (new_dialog "IGIR" dcl_id))
	(progn ;Si dialogue non présent
	  (alert "la définition n'a pas été trouvée dans le fichier DCL !")
	  (exit)
	  )
	(progn ;Si dialogue présent
	  (start_list "LST")
	  (mapcar 'add_list start-lst)
	  (end_list)
	  (action_tile "cancel" "(done_dialog 1)")
	  (action_tile "accept" "(done_dialog 2)")
	  (action_tile "LST" "(setq index $value)")
	  ;;;Affichage de la case
	  (setq ddiag (start_dialog))
	  (unload_dialog dcl_id)
	  (if (= ddiag 1);; Si bouton annulé choisi :
	    (alert "\n Vous êtes sorti sans rien choisir !")
	    )
	  (if (= ddiag 2);;;Si bouton OK choisi :
	    (progn
	      (setq index (read (strcat "(" index ")")))
	      (foreach i index
		(insdxf (strcat chem (nth i start-lst)))
		(setq n (+ 1 n))
		)
	      (alert (strcat "\n" (itoa n) " DXF ont étés importés\nsous la forme de blocs!"))
	      )
	    )
	  )
	)
      )
    )
  (setvar "clayer" lay)
  (princ)
  );/defun

(setq nom_lisp "IGIR")
(if (/= app nil)
  (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp)
    (princ (strcat "..." nom_lisp " chargé."))
    (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter.")))
  (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter.")))
(setq nom_lisp nil)
(princ)

et un DCL

IGIR : dialog {
   label = "IGIR Multy";
   // Titre de la case
   : column {
         : row {
         : boxed_column {label ="Choisissez les DXF";
         : list_box {
            key = "LST";
            height = 15;
            width = 50;
            multiple_select = true;
            fixed_width = false;
            }
         }
      }
 ok_cancel;
 }
}

C'est asse simple, mais ca marche super bien.

mon explication de la commande au collègues :

Citation

IGIR est une commande d’import de DXF en blocs. Utile pour importer massivement les DXF issus de Giration dans un fichier DWG.
IGIR requière son fichier DCL pour fonctionner.

La commande va importer chaque DXF sous la forme de bloc (nommé comme le DXF), dans un calque spécifique (nommé comme le DXF).

Donc :
 1 DXF -> 1 calque -> 1 bloc
 10 DXF -> 10 calques -> 10 blocs

Les DXF sont choisis par l’utilisateur, parmi les DXF contenu dans le dossier dans lequel est enregistré le DWG où vous exécutez la commande.

Il faut donc créer au préalable un fichier DWG dans le même dossier utilisé pour ranger les DXF des girations, et dans ce DWG utiliser la commande IGIR.

 

Lispeur débutant!
Autocad Map3D 2023
Covadis-Autopist 18.0C

Lien vers le commentaire
Partager sur d’autres sites

Citation

en gros a créer une liste de fichier selectionner dans un sous répertoire

On pourrait utiliser (ListBox) de (gile).

A affiner si cela ne convient pas

; 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")
(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)
  )
)
;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;; 1 = liste choix unique
;; 2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)
(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
  (setq
    tmp (vl-filename-mktemp "tmp.dcl")
    file (open tmp "w")
  )
  (write-line
    (strcat "ListBox:dialog{label=\"" title "\";")
    file
  )
  (if (and msg (/= msg ""))
    (write-line (strcat ":text{label=\"" msg "\";}") file)
  )
  (write-line
    (cond
      ((= 0 flag) "spacer;:popup_list{key=\"lst\";")
      ((= 1 flag) "spacer;:list_box{key=\"lst\";")
      (T "spacer;:list_box{key=\"lst\";multiple_select=true;")
    )
    file
  )
  (write-line "}spacer;ok_cancel;}" file)
  (close file)
  (setq dcl_id (load_dialog tmp))
  (if (not (new_dialog "ListBox" dcl_id))
    (exit)
  )
  (start_list "lst")
  (mapcar 'add_list (mapcar 'cdr keylab))
  (end_list)
  (action_tile
    "accept"
    "(or (= (get_tile \"lst\") \"\")
      (if (= 2 flag)
        (progn
          (foreach n (str2lst (get_tile \"lst\") \" \")
            (setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice))
          )
          (setq choice (reverse choice))
        )
        (setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))
      )
    )
    (done_dialog)"
  )
  (start_dialog)
  (unload_dialog dcl_id)
  (vl-file-delete tmp)
  choice
)
(vl-load-com)
(defun c:my_insert ( / ShlObj Folder FldObj Out_Fld lst_dwg)
  (setq
    ShlObj (vla-getinterfaceobject (vlax-get-acad-object) "Shell.Application")
    Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0)
  )
  (vlax-release-object ShlObj)
  (if Folder
    (progn
      (setq
        FldObj (vlax-get-property Folder 'Self)
        Out_Fld (vlax-get-property FldObj 'Path)
      )
      (vlax-release-object Folder)
      (vlax-release-object FldObj)
    )
  )
  (foreach dwg (vl-directory-files Out_Fld "*.dwg" 1)
    (setq lst_dwg (cons dwg lst_dwg))
  )
  (setq lst_dwg (listbox "Dessins dans le dossier" "Choisir un/des dessin" (mapcar 'cons lst_dwg lst_dwg) 2))
  (setvar "CMDECHO" 0)
  (command "_.ucs" "_world")
  (foreach dwg lst_dwg
    (command "_.-insert" (strcat Out_Fld "\\" dwg) "_none" '(0.0 0.0 0.0) 1.0 1.0 0.0)
  )
  (command "_.ucs" "_previous")
  (setvar "CMDECHO" 1)
  (prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

hello

il faut le lisp de LEE_MAC  getfiles

GetFilesV1-6.lsp

 

changer "C:\\PERSO\\BIBLIOTHEQUE" soit par "" soit par un nom de sousrepertoire a vous  "C:\\toto"

 

(defun c:import_plusieurs_blocs (/ listefich)
  (setvar "cmdecho" 0)
  (setq listefich (lm:getfiles "SELECTIONNER DES FICHIERS" "C:\\PERSO\\BIBLIOTHEQUE" "dwg"))
  (setq poi nil)
  (while (null poi) (setq poi (getpoint "\nPOINT D'INSERTION DES BLOCS :")))
  (foreach ibloc listefich (vl-cmdf "_-insert" ibloc poi "1" "1" ""))
  (princ)
)

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é