lili2006 Posté(e) le 12 avril 2008 Posté(e) le 12 avril 2008 Bonjour à toutes et tous, Je voulais tester ce Lisp et voici ce que me retourne AutoCAD => Commande: EXPORT-TEXTSélectionner les textes (ou Entrée pour "Tout").Choix des objets: 1 trouvé(s)Choix des objets:; erreur: type d'argument incorrect: stringp nilCommande: Le Lisp => (defun c:export-text (/ ss path sep file n elst lst typ jus vert ins) (and (princ "\nSélectionner les textes (ou Entrée pour \"Tout\")." ) (or (setq ss (ssget '((0 . "*TEXT,INSERT")))) (setq ss (ssget "_X" '((0 . "*TEXT,INSERT")))) ) (setq path (getfiled "Fichier d'exportation des textes" (getvar "DWGPREFIX") "*" 1 ) ) (or (and (= (strcase (vl-filename-extension path) T) ".xls") (setq sep "\t") ) (and (member (strcase (vl-filename-extension path) T) '(".txt" ".csv") ) (setq sep (getstring "\Entrez le séparateur: ")) ) ) (setq file (open path "w")) ;; En-tête =======================================;; (write-line (strcat "Compteur" sep "Type" sep "Calque" sep "Style" sep "X" sep "Y" sep "Z" sep "Justification" sep "Hauteur" sep "Rotation" sep "Valeur" ) file ) ;;================================================;; (repeat (setq n (sslength ss)) (setq elst (entget (ssname ss (setq n (1- n))))) (if (= (cdr (assoc 0 elst)) "INSERT") (if (and (= (cdr (assoc 66 elst)) 1) (setq att (entnext (cdr (assoc -1 elst)))) ) (while (= (cdr (assoc 0 (entget att))) "ATTRIB") (setq lst (cons (entget att) lst) att (entnext att) ) ) ) (setq lst (cons elst lst)) ) ) (mapcar (function (lambda (elst) (setq typ (cdr (assoc 0 elst)) vert (cond ((= typ "TEXT") 73) ((= typ "ATTRIB") 74) ) ) (cond ((member typ '("TEXT" "ATTRIB")) (setq jus (cond ((= (cdr (assoc vert elst)) 3) "H") ((= (cdr (assoc vert elst)) 2) "M") ((= (cdr (assoc vert elst)) 1) "B") (T "") ) jus (cond ((= (cdr (assoc 72 elst)) 0) (strcat jus "G")) ((= (cdr (assoc 72 elst)) 1) (strcat jus "C")) ((= (cdr (assoc 72 elst)) 2) (strcat jus "D")) ((= (cdr (assoc 72 elst)) 3) (strcat jus "A")) ((= (cdr (assoc 72 elst)) 4) (strcat jus "M")) (T (strcat jus "P")) ) ins (if (= jus "G") (trans (cdr (assoc 10 elst)) (cdr (assoc 210 elst)) 0) (trans (cdr (assoc 11 elst)) (cdr (assoc 210 elst)) 0) ) ) ) ((= typ "MTEXT") (setq jus (cond (((((T "B") ) jus (cond ((member (cdr (assoc 71 elst)) '(1 4 7)) (strcat jus "G")) ((member (cdr (assoc 71 elst)) '(2 5 8)) (strcat jus "C")) (T (strcat jus "D")) ) ins (cdr (assoc 10 elst)) ) ) (T (setq jus "G" ins (cdr (assoc 10 elst)) ) ) ) (write-line (strcat (itoa (setq n (1+ n))) sep (cdr (assoc 0 elst)) sep (cdr (assoc 8 elst)) sep (cdr (assoc 7 elst)) sep (rtos (car ins)) sep (rtos (cadr ins)) sep (rtos (caddr ins)) sep jus sep (rtos (cdr (assoc 40 elst))) sep (angtos (cdr (assoc 50 elst))) sep (cdr (assoc 1 elst)) ) file ) ) ) lst ) (close file) ) (princ) ) Désolé, là non plus je ne sais pas qui est l'auteur,... Une idée ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 12 avril 2008 Posté(e) le 12 avril 2008 Ça fonctionne très bien chez moi. Après le choix des objets, tu devrais avoir une boite de dialogue pour choisir le fichier, puis une invite pour saisir le séparateur. PS : pour connaître l'auteur, une recherche dans les forums... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 12 avril 2008 Auteur Posté(e) le 12 avril 2008 Re, Merci encore,... En fait, cela n'a pas l'air de marcher avec une V2007 de Office. J'ai enregistrer un fichier vierge au format 2003, j'ai retesté, alors là, plus de problème ! puis une invite pour saisir le séparateur. , Tiens, je n'ai pas accès à cette invite, moi ?? PS : pour connaître l'auteur, une recherche dans les forums... Oui ! J'ai réussit à retrouver des Auteurs, mais pas tous,... C'est vrai que c'est pratique quand l'auteur l'indique dans le Lisp.(tu en fais parti!) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 12 avril 2008 Posté(e) le 12 avril 2008 En fait, cela n'a pas l'air de marcher avec une V2007 de Office. J'ai enregistrer un fichier vierge au format 2003, j'ai retesté, alors là, plus de problème ! Je n'ai pas Office2007, je ne peux donc pas voir d'où ça vient (un problème de séparateur ?). Tiens, je n'ai pas accès à cette invite, moi ?? J'avais relu le LISP trop vite, il n'est demandé de spécifier le séparateur que si l'extension du fichier est txt ou csv. Pour les fichiers xls, le séparateur est d'office une tabulation (peut-être que le problème avec Excel2007 vient de là ?...) C'est vrai que c'est pratique quand l'auteur l'indique dans le Lisp.([surligneur]tu en fais parti![/surligneur]) La preuve que non, je n'avais pas "signé" celui-ci.Tu peux toujours rajouter des lignes de commentaire au début du code, chacune précédée d'un point-virgule (voir ici) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 12 avril 2008 Auteur Posté(e) le 12 avril 2008 Re, Ah, celui-ci aussi est de toi ?! Merci également pour le rappel du lien. Je profite de ce post (plutot qu'en relancer encore un) pour te demander encore un renseignement (un de plus !). Pourquoi lorsque je lance ins-pts, PNT2BLK ,ou encore ins-vtx , AutoCAD me retourne => Choix de l'objet: ; erreur: nombre d'arguments insuffisants , ou bien Choix de l'objet: ; erreur: type d'argument incorrect: stringp nil . On en avait déjà parlé mais aujourd'hui, j'ai un mal de chien avec l'internet, alors... Si tu peux me raffraichir la mémoire,... Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 12 avril 2008 Posté(e) le 12 avril 2008 Une petite recherche dabs les forums:on en parle ici et [/url] et encore là et encore encore là... Je te laisse continuer à chercher... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 12 avril 2008 Auteur Posté(e) le 12 avril 2008 Re, Merci encore (gile). J'sais pas c'qui s'passe mais je connecte très mal mais pas que sur cadxp, sur l'internet en général, Des travaux dans le coin, p't'etre,... Bonne soirée,. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 12 avril 2008 Auteur Posté(e) le 12 avril 2008 Re, A priori, après avoir repris ma config précédente, c'était le lisp "Getname" qui posait pb. Merci encore de ton soutien. J'commence à y voir plus clair. Bonne nuit. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 A priori, après avoir repris ma config précédente, c'était le lisp "Getname" qui posait pb. :casstet: Aucun des LISP cités (ins-vtx, ins-pts ou pnt2blk) n'utilise "getname" (il me semble que dans les LISP que j'ai publié seul Pline_Block utilise getname). Je pense plutôt que le problème vient (encore une fois) d'un conflit entre plusieurs définitions de GetBlock (avec ou sans DCL séparé). Quand on publie un LISP, on y adjoint les routines nécessaire à son fonctionnement de manière à ce qu'il fonctionne de manière "autonome".Plusieurs LISP peuvent faire appel à la même routine qu'on retrouve donc dans plusieurs fichiers.Si les routines ont eu des versions différentes, cela peut générer des conflits. Une meilleure organisation des fichiers permet d'éviter ceci et d'alléger quelque peu la bibliothèque de LISP.Il s'agit de mettre les routines utilisées par plusieurs programmes dans un ou plusieurs fichiers et de les charger systématiquement à chaque démarrage d'un nouveau dessin pour qu'elles soient toujours disponibles ; par exemple, ajouter (load "dialog") au fichier acaddoc.lsp pour que les boites de dialogues (getblock, getlayer, getlayers, inputbox, doubleinputbox et getlayout) soient systématiquement chargées. On supprime ensuite toutes les autres définitions de ces routines des fichiers qui les contiennent. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Bonjour à toutes et tous, Aucun des LISP cités (ins-vtx, ins-pts ou pnt2blk) n'utilise "getname" Intéresant,... Fait du hasard, alors ?? (load "dialog") au fichier acaddoc.lsp Je vais le faire de suite, On supprime ensuite toutes les autres définitions de ces routines des fichiers qui les contiennent. Et comment fais-ton STP ? Je me rapelle qu'il y avait des conflits quand je faisait des test. Il était grand temps, que je fasse du tri,... Je continu et te remercie encore de tes conseils,.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 Pour supprimer les définitions de sous routines dans les fichiers, il suffit de les effacer et d'enregistrer le fichier. Pour une meilleure lisibilité, tu ouvres le fichier dans l'éditeur Visual LISP (VLIDE), tu le formates (CTRL+ALT+F) puis tu cherches le defun de la routine (parfois précédé d'un commentaire), par exemple (defun getblock ...). Tu double cliques juste devant la parenthèse avant defun et toute la routine est sélectionnée, tu l'effaces (le commentaire aussi), tu enregistres (CTRL+S) et tu fermes la fenêtre. ceci pour tous les fichier faisant appel à des boites de dialogue définies dans Dialog.lsp. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Merci (gile), je vais faire le tour des routines. Autre chose, il y a t-il un nombre maximum de lisp que l'on peut charger dans un .CUI partiel ?Rien trouver dans l'aide AutoCAD,... Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 il y a t-il un nombre maximum de lisp que l'on peut charger dans un .CUI partiel ? Pas à ma connaissance, de plus un LISP peut contenir plusieurs routines (je charge une bibliothèque de plus de 100 routines dans un seul fichier LISP avec mon fichier mNL) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Merci encore. Je continu alors mon grand menage de printemps. Si tu as le temps, peux-tu développer la démarche STP ? 100 routines dans un seul fichier LISP avec mon fichier mNL) Moi, pour le moment, je charge les lisp avec mon fichier .CUI partiel, est-ce la bonne méthode ? Merci d'avance. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 Si tu as un fichier CUI partiel nommé lili.CUI par exemple, tu peux créer un fichier MNL du même nom : lili.mnl. Ce fichier (un peu comme acaddoc.lsp) est un fichier de chargement automatique de routines LISP, il sera chargé en même temps que le CUI et il doit contenir des expressions LISP.Dans ce fichier, soit tu colles le contenu les LISP nécessaires à ton CUI, soit, mieux, des appels au chargement de ceux-ci. Cette deuxième méthode permet une meilleure gestion (mises à jour) des LISP qui doivent être dans un répertoire dont le chemin est ajouté aux chemins de recherche. Par exemple;(load "Dialog") pour charger 6 routines (getblock, getlayer, getlayers, getlayouts, inputbox et doubleinputbox), on peut faire ainsi pour tous les fichier contenant des sous routines. Pour les "commandes" définies en LISP, on peut utiliser la même méthode (load "increment") ou, pour éviter de trop "gonfler" le chargement, utiliser la fonction autoload. Avec cette fonction, le fichier LISP n'est pas chargé à l'ouverture de chaque nouveau dessin mais seulement à l'appel d'une des commandes qui y sont définies.La syntaxe est (autoload "NomDuFichier" '("commande1" "commande2" ...))par exemple pour incrément :(autoload "increment" '("incsuf" incsel" "incatt" "inctxt" "incadd" "incr")) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Merci encore pour ces riches conseils ! Je vais sérieusement me pencher sur le problème dans les semaines qui arrivent,... Je risque donc de revenir,.. Merci également des exemples très représentatif, je devrai pouvoir m'en sortir à présent. Merci encore (gile) et bonne fin de WE. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Voici un extrait de mon fichier "acaddoc.lsp" et cela ne fonctionne pas !J'ai donc raté une étape,.. (setvar "SHORTCUTMENU" 27) (vl-load-com)(load "Dialog") (autoload "increment" '("incsuf" incsel" "incatt" "inctxt" "incadd" "incr"))(load "lxl")(load "ssatt") Je continu de chercher,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 Si tu utilises la fonction load, l'argument doit être le nom du fichier si le fichier est dans un répertoire du chemin de recherche sinon le chemin complet du fichier. Donc (load "lxl") fonctionne si le fichier lxl.lsp est enregistré dans un répertoire du chemin de recherche. Si ssatt est défini dans le fichier Special_selections.lsp, lui même enregistré dans un répertoire du chemin de recherche, il faut faire (load "Special_selections") et pas (load "ssatt). Mais tu peux aussi utiliser autoload:(autoload "Special_selections" '("ssc" "ssl" "sse" "sstl" "ssatt" "sscu" "ssof" "ssoc" "inv_sel"))ainsi, le fichier Special_selection.lsp ne sera chargé que lors du premier appel de l'unse de ces commandes. [Edité le 13/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Pour utilser cette technique => Mais tu peux aussi utiliser appload: , Est-ce que je peux écrire ? => (appload "lxl" ) l'argument doit être le nom du fichier Ok ! Je pensais que c'était le nom de lancement de la routine,... Je repart de zéro et teste. Merci encore,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 Soit tu fais (load "lxl") et le LISP est systématiquement à chaque ouverture de nouveau dessin.Soit tu fais (appload "lxl" '("lxl")) et il faut 2 arguments : le nom du fichier et une liste contenant le (ou les) nom(s) de(s) commande(s) dont le lancement génèrera le chargement du fichier. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Le fichier "acaddoc.lsp". Les chemins de recherche sont ok et pourtant rien ne fonctionne ?!! Là, j'vois plus,.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, J'ai aussi testé cela, toujours sans succés. On dirait que le chemin de recherche des fichiers support n'est pas reconnu.Je vais tester sur un chemin plus court pour voir ! Merci. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 Le deuxième devrait fonctionner si les fichiers acaddoc.lsp, Dialog.lsp, Special_selection.lsp, increment.lsp et lxl.lsp sont bien dans un répertoire du chemin de recherche des fichier de support. Sinon, on peut faire plus simple en chargeant systématiquement tous les fichiers .lsp du répertoire spécifié, en mettant l'expression suivante dans le fichier acaddoc.lsp (ou AutoCAD.mnl) après avoir remplacé "C:\\Personnalisation AutoCAD\\LISP" par le chemin complet dudit répertoire. (foreach f (vl-directory-files "C:\\Personnalisation AutoCAD\\LISP" "*.lsp" 1) (load f)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 13 avril 2008 Auteur Posté(e) le 13 avril 2008 Re, Le deuxième devrait fonctionner si les fichiers acaddoc.lsp, Dialog.lsp, Special_selection.lsp, increment.lsp et lxl.lsp sont bien dans un répertoire du chemin de recherche des fichier de support. Pourtant, rien y fait ! Pour moi, ça serait donc => (foreach f (vl-directory-files "D:\\AUTOCAD -PERSONNALISATION\\PROGRAMMES\\LISP" "*.lsp" 1) (load f)) ,puisque => <!--url{0}--> Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 13 avril 2008 Posté(e) le 13 avril 2008 Pour moi, ça serait donc => (foreach f (vl-directory-files "D:\\AUTOCAD -PERSONNALISATION\\PROGRAMMES\\LISP" "*.lsp" 1) (load f)) Exact. Mais c'est curieux que l'autre méthode ne fonctionne pas. Essaye d'ajouter à la fin de ton fichier acaddoc.lsp l'expression:(alert "OK") Tu devrais avoir une petite boite de dialogue qui s'ouvre à l'ouverture de chaque nouveau dessin.Si ce n'est pas le cas c'est que le problème vient de ce que ce fichier n'est pas chargé. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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