PHILPHIL Posté(e) le 24 juillet 2023 Posté(e) le 24 juillet 2023 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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Vincent P. Posté(e) le 24 juillet 2023 Posté(e) le 24 juillet 2023 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 éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
bonuscad Posté(e) le 24 juillet 2023 Posté(e) le 24 juillet 2023 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
PHILPHIL Posté(e) le 28 juillet 2023 Auteur Posté(e) le 28 juillet 2023 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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant