-
Compteur de contenus
4 029 -
Inscription
-
Dernière visite
-
Jours gagnés
21
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par DenisHen
-
[Résolu] Petit lisp qui fait correspondre une liste de calques
DenisHen a répondu à un(e) sujet de DenisHen dans Routines LISP
Merci de ton aide Patrick_35. Effectivement, je ne sais pas quand ma fenêtre se remplie... Mais je trouverais... ;) Par contre, "set_tile_list" n'apparait pas en bleu dans ma fenêtre Lisp... Ce qui sous-entend qu'il ne connait pas cette commande... -
[Résolu] Petit lisp qui fait correspondre une liste de calques
DenisHen a répondu à un(e) sujet de DenisHen dans Routines LISP
Re, Je relève le "défi"... Bon, pour faire une sélection de calque, je me suis inspiré de MyMultiLists... Et mon DCL donne ça : SelectCalque.dcl //--------------------------------------------------------------------------------------------------------- // SelectCalque //--------------------------------------------------------------------------------------------------------- SelectCalque : dialog { key = "Title"; label = ""; : boxed_column { label = "Sélection multiple"; : list_box { multiple_select = true; key = "List1";//Value1$ from lsp file height = 40; fixed_height = true; width = 50; fixed_width = true; } spacer; } spacer; ok_only;}//SelectCalque Et mon code est ceci : (defun c:SelectCalque (/ Dcl_Id% List1@ Return# Value1$) (princ "\nSelectCalque") (princ) ; Set Default Variables (if (not *SelectCalque@) ;Unique global variable name to store dialog info (setq *SelectCalque@ (list nil "" "")) ) ;if (setq Value1$ "") (while (setq lay (tblnext "LAYER" (not lay))) (if (not (wcmatch (cdr (assoc 2 lay)) "*|*")) (setq List1@ (cons (cdr (assoc 2 lay)) List1@)) ) ;_ Fin de if ) ;_ Fin de while (setq List1@ (vl-sort List1@ '<)) (setq Dcl_Id% (load_dialog "SelectCalque.dcl")) (new_dialog "SelectCalque" Dcl_Id%) ; Set Dialog Initial Settings (set_tile "Title" "Sélection de calques") (set_tile_list "List1" List1@ Value1$) ;*Included ; Dialog Actions (action_tile "List1" "(set_list_value \"List1@\" \"Value1$\")") ;*Included (setq Return# (start_dialog)) ; Unload Dialog (unload_dialog Dcl_Id%) (setq *SelectCalque@ (list nil Value1$)) (princ) ) ;_ Fin de defun Le code s'arrête avant de remplir la fenêtre dans le DCL... Je n'arrive pas à savoir pourquoi... Mais comme tout est en anglais sur le site, je ne saisi pas tout... :unsure: -
[Résolu] Petit lisp qui fait correspondre une liste de calques
DenisHen a répondu à un(e) sujet de DenisHen dans Routines LISP
Pas nécessairement, une sélection des calques dans le gestionnaire, puis, coller cette liste dans un tableur et sauvegarde avec ";" comme séparateur... Mais ça ne donne qu'une liste, anciens ou nouveaux calques... Il faut de toutes façons "bidouiller" dans le fichier .lst... Je pense que tu me surestimes... Je prend ça pour un compliment... ;) Mais je vais tout de même faire un tour sur MyMultiLists... Denis... -
[Résolu] Petit lisp qui fait correspondre une liste de calques
DenisHen a répondu à un(e) sujet de DenisHen dans Routines LISP
Salut Patrick_35 J'y ai pensé, mais vu qu'un simple copier/coller peut le faire... Et que c'est plus compliquer que ça en a l'air, surtout pour moi. J'avais pensé à la commande "GetLayers" de (gile) mais elle ne veut pas d'un trop grand nombre de calques... -
[Résolu] Petit lisp qui fait correspondre une liste de calques
DenisHen a posté un sujet dans Routines LISP
Bonjour à tous, Voilà, j'ai développé aujourd'hui, un petit LISP qui lit dans un fichier (.lst) et fusionne les calques décrits dans ce fichier. Voici le contenu du fichier .lst : AncienCalque ; NouveauCalque ; Commentaire (sans espace autour des ";") Au lancement du LISP (commande "ImpLstCalque"), il demande le fichier .lst, ensuite, il fucionne "AncienCalque" vers "NouveauCalque". Il ignore le commentaire. Si quelqu'un a des questions... Fichier LISP : (defun c:ImpLstCalque ( / Fichier File Lign LignList) (princ "\n***** Importation des calques d'un fichier LST *****") (setq Fichier (getfiled "Sélectionner un fichier de correspondance des calques" "" "Lst;*" 0)) (if (/= (findfile Fichier) "") (progn (setq File (open Fichier "r")) (while (setq Lign (read-line File)) (cond ((/= (vl-string-search ";" Lign) nil) (setq LignList (str2lst Lign ";")) (if (tblsearch "layer" (nth 0 LignList)) (progn (command "-calque" "n" (nth 1 LignList) "") (command "fuscalques" "n" (nth 0 LignList) "" "n" (nth 1 LignList) "o") ) ;_ Fin de progn ) ;_ Fin de if ) ) ;_ Fin de cond ) ;_ Fin de while ) ;_ Fin de progn ) ;_ Fin de if ) ;_ Fin de defun Le fichier ZIP comporte un exemple de fichier .lst... Denis... ImpLstCalque.zip -
Hotfix 3 (et 2 et 1) pour les versions 2017
DenisHen a répondu à un(e) sujet de lecrabe dans AutoCAD 2017
Salut le Décapode, et merci pour ces infos... Je vais "bientôt" avoir cette version en MAP, je télécharge donc ces HotFix pour être paré... -
Milles mercis bonuscad, j'avais effectivement mal lu... Au temps pour moi...
-
Si je ne dis pas une ânerie, (setq hach1 (strcat "BOIS2")) est la même chose que (setq hach1 "BOIS2")strcat compile les textes, comme dans (setq phrase (strcat "(gile) t'expliquera " "mieux que" " " "moi"))
-
Bonjour à tous, (gile), j'ai juste une petite question, je ne comprend pas pourquoi (setq hach1 (strcase "BOIS2")) et non (setq hach1 "BOIS2") Ou alors, j'ai raté quelque-chose... Et est-ce vraiment nécessaire une échelle pour la hachure "SOLID" ?
-
PhilPhil, non, je n'ai qu'un seul calque de ce nom dans cette Xref... Sans espaces... @+
-
[Résolu] Personnalisation de SOMPOLY de (gile)
DenisHen a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Merci VDH-Bruno, c'était (410 . "Model") qu'il fallait ajouter au filtre et que j'ai eu grâce à toi... Merci encore de ton aide... -
Bon, comme je l'avais commencé, je l'ai fini et te le poste : ;;; **************************************************************************************** ;;; Répartition du nom du fichier dans des variables Lisppour La Lozère de CadXP * ;;; **************************************************************************************** (defun c:LaLozere (/) (setq NomFichier (str2lst (getvar "dwgname") "_")) (setq Phase (nth 0 NomFichier)) (setq Zone (nth 1 NomFichier)) (setq PK (nth 2 NomFichier)) (setq Discipline (nth 3 NomFichier)) (setq TypeOuvrage (nth 4 NomFichier)) (setq Emetteur (nth 5 NomFichier)) (setq TypeDoc (nth 6 NomFichier)) (setq Numero (nth 7 NomFichier)) (setq Indice (substr (nth 8 NomFichier) 1 (vl-string-search " " (nth 8 NomFichier)))) (princ) ) ;_ Fin de defun ;; 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) ) ;_ Fin de cons (list str) ) ;_ Fin de if ) ;_ Fin de defun Il suffit de le charger et de taper "LaLozere" et les variables lisp sont créées. Reste plus qu'à les insérer en tant que champs, je te joins le bloc que j'ai utiliser pour mes testes... Denis... toto_titi_tutu_tata_tete_fifi_fofo_123456_A1 - 01.zip
-
Pfff... J'avais fais un petit lisp qui créait des "VariablesLisp" que tu pouvais insérer en tant que champs. L'avantage, c'est que ça fonctionne même s'il y a des longueurs différentes dans le nom du fichier, exemple tatata_ti_tutu_blablabla_EncoreUnAutre_..... Mais comme Goldorak44 est tombé juste... Oui, j'ai un peu de temps devant moi... Denis...
-
Salut, Je pense à un petit lisp qui remplirait les attributs de ce cartouche grâce au nom du fichier... Peut-être aussi en utilisant les variables "champs lisp"... Mais mes deux solutions imposent de lancer au moins une fois un lisp... Mais d'autres auront peut-être la solution...
-
[Résolu] Personnalisation de SOMPOLY de (gile)
DenisHen a répondu à un(e) sujet de DenisHen dans Pour aller plus loin en LISP
Merci VDH-Bruno de m'aider... Tu veux parler de (eq (getvar "CVPORT") 1) Mais avec le (cons 67, je ne sais pas trop quoi faire avec... Mais je trouverais... Et comme le dit si bien x_all, je jardinnerais... ;) Je testerais demain, j'ai du temps à "perdre"... Encore merci... -
Je pense que le lien n'est plus valable...
-
[Résolu] Personnalisation de SOMPOLY de (gile)
DenisHen a posté un sujet dans Pour aller plus loin en LISP
Bonjour à tous, Voilà, j'ai "personnalisé" l'excellent "SomPoly" de (gile) qui fait la somme de toutes les polylignes du calque courant. (defun c:SomPoly () (princ (strcat "\nLongueur cummulée des polylignes sur le calque '" (getvar 'clayer) "' : " (rtos (polyLengthByLayer (getvar 'clayer))) ) ;_ Fin de strcat ) ;_ Fin de princ (princ) ) ;_ Fin de defun ;;;******************************** (defun polyLengthByLayer (layer / len ss) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) ;_ Fin de or (setq len 0) (if (ssget "_X" (list '(0 . "lwpolyline") (cons 8 layer))) (progn (vlax-for pl (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq len (+ len (vla-get-Length pl))) ) ;_ Fin de vlax-for (vla-Delete ss) ) ;_ Fin de progn ) ;_ Fin de if len ) ;_ Fin de defun Voici ce que j'ai écrit : ;;;Utilise "getlayers" de (gile) contenu dans Dialog.lsp (defun c:DHSomPoly () (setq ListCalq (getlayers "Choisir les calques..." nil nil) Som 0 ) ;_ Fin de setq (foreach calque ListCalq (princ (strcat "\nLe calque '" calque "' contient " (rtos (polyLengthByLayer calque)) "m" ) ;_ Fin de strcat ) ;_ Fin de if (setq Som (+ Som (polyLengthByLayer calque))) ) ;_ Fin de foreach (princ (strcat "\nPour un total de : " (rtos Som) "m")) (princ) ) ;_ Fin de defun Mon problème est que cette somme de polylignes comptabilisent aussi les polylignes de l'espace papier, comme celles contenues dans les légendes... Comment ne comptabiliser uniquement que les polylignes de l'espace objet ? Su quelqu'un a une idée, un conseil ou une astuce, je suis preneur... -
Ce n'est pas grave (gile), je m'en doutais un peu... Je pensais à un traitement multiselection dans une fenêtre comme dans ton lisp "ListBox". Bien que ListBoc n'autorise qu'une seule sélection. Merci tout de même pour ton aide. Effectivement, ça fonctionne beaucoup mieux avec la variable "layers". Par contre, un truc "bizarre"... Cette fenêtre est le message affiché avant l'affichage de la liste des calques. Ce calque ne sera pas dans la liste qui suivra. Voici la fenêtre de la liste des calques, . On remarque que le dernier calque de la colonne 3 est aussi en premier dans la colonne 4...
-
Salut (gile) et merci de me répondre. Mais je pense que tu confonds de Lisp, voici celui dont je parlais : (defun getlayers (titre lst1 lst2 / toggle_column tmp file lay layers len dcl_id lst) (defun toggle_column (lst) (apply 'strcat (mapcar (function (lambda (x) (strcat ":toggle{key=" (vl-prin1-to-string x) ";label=" (vl-prin1-to-string x) ";}") ) ;_ Fin de lambda ) ;_ Fin de function lst ) ;_ Fin de mapcar ) ;_ Fin de apply ) ;_ Fin de defun (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) ;_ Fin de setq (while (setq lay (tblnext "LAYER" (not lay))) (setq layers (cons (cdr (assoc 2 lay)) layers))) (setq layers (vl-sort layers '<) len (length layers) ) ;_ Fin de setq (write-line (strcat "GetLayers:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir les calques\"") ) ;_ Fin de cond ";:boxed_row{:column{" (cond ((< len 12) (toggle_column layers)) ((< len 24) (strcat (toggle_column (sublist layers 0 (/ len 2))) "}:column{" (toggle_column (sublist layers (/ len 2) nil)) ) ;_ Fin de strcat ) ((< len 45) (strcat (toggle_column (sublist layers 0 (/ len 3))) "}:column{" (toggle_column (sublist layers (/ len 3) (/ len 3))) "}:column{" (toggle_column (sublist layers (* (/ len 3) 2) nil)) ) ;_ Fin de strcat ) (T (strcat (toggle_column (sublist layers 0 (/ len 4))) "}:column{" (toggle_column (sublist layers (/ len 4) (/ len 4))) "}:column{" (toggle_column (sublist layers (/ len 2) (/ len 4))) "}:column{" (toggle_column (sublist layers (* (/ len 4) 3) nil)) ) ;_ Fin de strcat ) ) ;_ Fin de cond "}}spacer;ok_cancel;}" ) ;_ Fin de strcat file ) ;_ Fin de write-line (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "GetLayers" dcl_id)) (exit) ) ;_ Fin de if (foreach n lst1 (set_tile n "1")) (foreach n lst2 (mode_tile n 1)) (action_tile "accept" "(setq lst nil) (foreach n layers (if (= (get_tile n) \"1\") (setq lst (cons n lst)))) (done_dialog)" ) ;_ Fin de action_tile (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) lst ) ;_ Fin de defun Mais je n'ai trouvé que le code que tu donne en exemple, je n'ai ni trouvé popup_list ni edit_width. Ou bien il me faut d'urgence des lunettes... ;) En remplaçant le while comme tu me l'as conseillé, la liste est vide dans la fenêtre (image jointe). Encore merci pour te pencher sur mon problème...
-
Bonjours à tous... (gile), j'ai un petit souci avec ta commande "getlayers". En effet, le liste des calques est assez importante et AutoCAD veut créer une fenêtre trop grande, donc, il m'affiche ce message : deuxième image. Saurais-tu comment y palier s'il te plait ? J'ai aussi une deuxième erreur avec un calque d'une XRef : première image. De plus, ce Lisp ajoute à la liste les calques des Xref, comment ne pas les ajouter. Denis...
-
[Résolu] Comment changer le style de texte d'un texte ?
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Aucun problème... Pour une fois q'un de mes codes peu servir, ça fait plaisir... -
[Résolu] Comment changer le style de texte d'un texte ?
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Au temps pour moi, voici le code à coller dans un LiSP : ;;;Changement du style de texte, hauteur et compression***** (defun c:RemplStylTxt ( / n Ent elst Select) (setq Select (ssget "_X" (list (cons 0 "TEXT,MTEXT") (cons 7 "MONOTXT")))) (setq n 0) (while (setq Ent (ssname Select n)) (setq elst (entget ent) n (+ 1 n) elst (subst (cons 7 "Arial") (assoc 7 elst) elst) ;nouveau style de texte = ARIAL elst (subst (cons 40 0.6) (assoc 40 elst) elst) ;nouvelle hauteur du texte = 0.6 elst (subst (cons 41 1) (assoc 41 elst) elst) ;nouvelle compression du texte = 1 ) ;_ Fin de setq (entmod elst) ) ;_ Fin de while ) "(cons 7 "MONOTXT")" est le nom de l'ancien style de texte inclu dans le sélection. On peut le changer ou simplement l'enlever pour agir sur tous les textes... Il n'y a plus qu'à taper "RemplStylTxt " en ligne de commande après avoir charger le LiSP. Voilà qui est mieux... J'avais omis le defun car ce code fait parti d'un autre beaucoup plus long... Denis... -
[Résolu] Comment changer le style de texte d'un texte ?
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Ben en fait, c'était tout bête... : ;;;Changement du style de texte, hauteur et compression***** (setq Select (ssget "_X" (list (cons 0 "TEXT,MTEXT") (cons 7 "MONOTXT")))) (setq n 0) (while (setq Ent (ssname Select n)) (setq elst (entget ent) n (+ 1 n) elst (subst (cons 7 "Arial") (assoc 7 elst) elst) ;Style de texte elst (subst (cons 40 0.6) (assoc 40 elst) elst) ;Hauteur du texte elst (subst (cons 41 1) (assoc 41 elst) elst) ;Compression du texte ) ;_ Fin de setq (entmod elst) ) ;_ Fin de while Encore merci à tous... Denis... -
[Résolu] Comment changer le style de texte d'un texte ?
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Salut. J'ai bossé ça hier soir chez moi, et j'ai fini par trouvé, si ça intéresse quelqu'un : ;;;Changement du style de texte des textes et MTextes en ARIAL***** (setq Select (ssget "_X" (list (cons 0 "TEXT,MTEXT") (cons 7 "MONOTXT")))) (setq n 0) (while (setq Ent (ssname Select n)) (setq elst (entget ent) n (+ 1 n) elst (subst (cons 7 "Arial") (assoc 7 elst) elst) ) ;_ Fin de setq (entmod elst) ) ;_ Fin de while Encore merci à vous, mais j'ai voulu pousser le vice à changer la hauteur du texte, mais là, rien ne fonctionne. Peut-on faire un entmod sur deux subst en même temps ? Car dans le code qui suit, seule la hauteur change : (setq Select (ssget "_X" (list (cons 0 "TEXT,MTEXT") (cons 7 "MONOTXT")))) (setq n 0) (while (setq Ent (ssname Select n)) (setq elst (entget ent) n (+ 1 n) elstSt (subst (cons 7 "Arial") (assoc 7 elst) elst) ) ;_ Fin de setq (entmod elstSt) (setq elstHt (subst (cons 40 0.6) (assoc 40 elst) elst)) (entmod elstHt) ) ;_ Fin de while Denis... -
[Résolu] Comment changer le style de texte d'un texte ?
DenisHen a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Patrick_35 : merci, je vais pouvoir avancer... didier : merci, retaper un code est un meilleur apprentissage qu'un copier/coller, c'est vrai... Et ZUT ! ! Un gros dossier vient de tomber sur mon bureau... Je vais devoir mettre ce code en souffrance quelque temps... Merci encore à vous... Denis...
