Aller au contenu

David64

Membres
  • Compteur de contenus

    4
  • Inscription

  • Dernière visite

Tout ce qui a été posté par David64

  1. Bonjour à tous et merci par avance aux personnes qui prendront le temps de me répondre, Je souhaitais récupéré les valeurs de textes dans autocad pour les intégrer dans excel et je suis tombé (encore) sur un lisp développé par le regretté Patrick. Le lisp fonctionne parfaitement mais je souhaitais l'adapter, actuellement le lisp récupère les valeurs dans un classeur vierge qu'il ouvre lui même, j'aurai souhaité qu'elles soient intégrées dans un fichier bien défini, dans une feuille bien définie et dans une cellule bien définie. J'ai bien tenté de réadapter le code mais mes connaissances en lisp sont beaucoup trop limitées... c'est pourquoi je m'en remets au forum. Je vous joins ci-dessous le lisp, merci par avance. (defun c:dwgxls(/ cla cel feu lig sel wks xl MsgBox UnFormat) ;------------------------------------------------------------------------- ; Afficher un message via une boite de dialogue ;------------------------------------------------------------------------- (defun MsgBox (Titre Bouttons Message / Reponse WshShell) (acad-push-dbmod) (setq WshShell (vlax-create-object "WScript.Shell")) (setq Reponse (vlax-invoke WshShell 'Popup Message 0 Titre (itoa Bouttons))) (vlax-release-object WshShell) (acad-pop-dbmod) Reponse ) ;------------------------------------------------------------------------- ; Récuperer la valeur String d'un Mtext ; Extrait du lisp de Custom Stuff StripMtext v3.07 ; http://www.users.qwest.net/~sdoman/ ; Modifié par Patrick_35 pour correction d'un bug+formattage des caractères spéciaux ;------------------------------------------------------------------------- (defun UnFormat (Mtext Formats / All Format1 Format2 Format3 Pos Text Str) (and Mtext Formats (= (type Mtext) 'STR) (= (type Formats) 'STR) (setq Formats (strcase Formats)) (setq Text "") (setq All T) (if (= Formats "*") (setq Formats "S" Format1 "\\[LO`~]" Format2 "\\[ACFHQTW]" Format3 "\\P" ) (progn (setq Format1 "" Format2 "" Format3 "") (foreach item '("L" "O" "~") (if (vl-string-search item Formats) (setq Format1 (strcat Format1 "`" item)) (setq All nil) ) ) (if (= Format1 "") (setq Format1 nil) (setq Format1 (strcat "\\[" Format1 "]")) ) (foreach item '("A" "C" "F" "H" "Q" "T" "W") (if (vl-string-search item Formats) (setq Format2 (strcat Format2 item)) (setq All nil) ) ) (if (= Format2 "") (setq Format2 nil) (setq Format2 (strcat "\\[" Format2 "]")) ) (if (vl-string-search "P" Formats) (setq Format3 "\\P") (setq Format3 nil All nil) ) T ) ) (while (/= Mtext "") (cond ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\{}]") (setq Mtext (substr Mtext 3) Text (strcat Text Str) ) ) ((and All (wcmatch (substr Mtext 1 1) "[{}]")) (setq Mtext (substr Mtext 2)) ) ((and Format1 (wcmatch (strcase (substr Mtext 1 2)) Format1)) (setq Mtext (substr Mtext 3)) ) ((and Format2 (wcmatch (strcase (substr Mtext 1 2)) Format2)) (setq Mtext (substr Mtext (+ 2 (if (vl-string-search ";" Mtext)(vl-string-search ";" Mtext) 0)))) ) ((and Format3 (wcmatch (strcase (substr Mtext 1 2)) Format3)) (if (or (= " " (substr Text (if (zerop (strlen Text)) 1 (strlen Text)))) (= " " (substr Mtext 3 1)) ) (setq Mtext (substr Mtext 3)) (setq Mtext (substr Mtext 3) Text (strcat Text " ")) ) ) ((and (vl-string-search "S" Formats)(wcmatch (strcase (substr Mtext 1 2)) "\\S")) (setq Str (substr Mtext 3 (- (vl-string-search ";" Mtext) 2)) Text (strcat Text (vl-string-translate "#^\\" "/^\\" Str)) Mtext (substr Mtext (+ 4 (strlen Str))) ) ) (1 (setq Text (strcat Text (substr Mtext 1 1)) Mtext (substr Mtext 2) ) ) ) ) ) (while (setq Pos (vl-string-search "\\U+" Text)) (setq Str (substr Text (1+ pos) 7) Text (vl-string-subst (chr (hexdec (substr Str 4))) Str Text) ) ) (vl-string-trim " " Text) ) (if (setq xl (vlax-get-or-create-object "Excel.Application")) (if (ssget (list (cons 0 "TEXT,MTEXT"))) (progn (setq wks (vlax-get xl 'Workbooks) cla (vlax-invoke wks 'add) feu (vlax-get cla 'activesheet) lig 1 ) (vla-put-visible xl :vlax-true) (princ) (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (setq cel (vlax-get-property feu 'range (strcat "A" (itoa lig))) lig (1+ lig) ) (vlax-put cel 'value2 (unformat (vla-get-textstring ent) "*")) ) (vla-delete sel) (foreach sel (list xl wks cla feu cel) (vlax-release-object sel) ) (setq xl nil wks nil cal nil feu nil cel nil) (gc)(gc) ) ) (msgbox "TXL" 16 "Excel n'a pas été installé.") ) (princ) ) DWGXLS.lsp
  2. Merci Luna ! J'ai un peu revu le code mais du coup grâce à ton aide, je suis parvenu ,à faire le lisp qui me change la vie! Bon maintenant je vais plancher sur la deuxième partie, je risque donc d'être bientôt de retour! :P Pour info ci-dessous le lisp opérationnel, il me permet de récupérer les ferraillages de poutres issus de Graitec, de les mettre à l'échelle 1=1m dans AutoCAD et de les retravailler pour avoir un rendu plus léché : ;;;Test Insérer DXF (defun c:test (/ Echelle) ;;Définit la valeur des unités de contenu sources en cm (setvar "INSUNITSDEFSOURCE" 5) ;;Définit la valeur des unités de dessin cible en m (setvar "INSUNITSDEFTARGET" 6) (command (getcname "ECHLTP") 7 (getcname "inserclassique") (getcname "decompos") (ssget "_A") (getcname "-purger") "ca" "" "n" (getcname "-epurer") (ssget "_A") "" "Terminé" (initdia) (getcname "sauvenom")) (setvar "INSUNITSDEFSOURCE" 0) (progn (initget 1 "10 20 25 33 40 50") (if (= "33" (setq Echelle (getkword "\nChoisissez l'échelle de la coupe [10/20/25/33/40/50]:"))) (setq Echelle 33.33333) (setq Echelle (* 1 (atof Echelle))) ) ) (alert "Sélectionner la(es) coupe(s)") (command (getcname "_scale") (ssget) "" "0,0.18587899" Echelle) (progn (initget 1 "10 20 25 33 40 50 75 100") (if (= "33" (setq Echelle (getkword "\nChoisissez l'échelle de l'élévation [10/20/25/33/40/50/75/100]:"))) (setq Echelle 33.33333) (setq Echelle (* 1 (atof Echelle))) ) ) (command (getcname "_scale") (ssget "_W" '(1.3 1.3) '(-0.5 -0.5)) "" "0,0" Echelle) (command (getcname "zoom") "et") (command (getcname "sauverap") (princ) ) )
  3. Bonjour et merci à tous les deux pour votre réactivité! J'ai essayé d'intégrer dans mon lisp vos commandes, mais comme je vous le disais précédemment, c'est mon premier lisp et je loupe forcément quelque chose. Je me permets de vous joindre le lisp que j'essaye de réaliser, il est fonctionnel pour moi à quelques détails prés... Au lancement de Autocad, aprés chargement du lisp, je dois lancer une fois manuellement les commandes "inserclassique" et "-purger" un message "commande inconnue" apparait. Je ne sais pas du tout où je dois insérer les lignes de commandes que vous m'avez indiquées (aprés plusieurs test rien de fonctionnel...) Dans la liste, est-il possible d'afficher 33 et que la valeur appliquée soit 33.33333? je n'ai pas trouvé la commande atof dans le guide "Introduction à Autolisp", à quoi correspond-elle? J'en profite pour saluer tout ton travail (gile), je ne compte plus le nombre où je t'ai lu. Ci-dessous mon lisp je suis bien sûr preneur de toutes améliorations de fonction ou de structure du code: ;;;Test Insérer DXF (defun c:test (/ option echelle) ;;Définit la valeur des unités de contenu sources en cm (setvar "INSUNITSDEFSOURCE" 5) ;;Définit la valeur des unités de dessin cible en m (setvar "INSUNITSDEFTARGET" 6) (command (getcname "ECHLTP") 7 (getcname "inserclassique") (getcname "decompos") (ssget "_A") (getcname "-purger") "ca" "" "n" (getcname "-epurer") (ssget "_A") "" "Terminé" (initdia) (getcname "sauvenom")) (setvar "INSUNITSDEFSOURCE" 0) (alert "Sélectionner la(es) coupe(s)") ;;comment accéder à la liste d'échelle plutot que la saisie manuelle durant les pauses qui suivent? (command (getcname "_scale") (ssget) "" "0,0.18587899" pause) (command (getcname "_scale") (ssget "_W" '(1.3 1.3) '(-0.5 -0.5)) "" "0,0" pause) (princ) )
  4. Bonjour à tous, Aprés 15ans d'utilisation d' AutoCAD, pour finalement basculer sur Revit, je me retrouve aujourd'hui à créer mon premier lisp (enfin j'espère...). Le but de ce lisp est d'automatiser une succession de commande, j'avance pas trop mal mais je me heurte à un problème. Dans le lisp, je suis amené à lancer la commande "Echelle", je reprends la main pour la saisie, je définis le point de base qui est le toujours le même, et arrivé à l'étape du facteur d'échelle je souhaiterai laissé le choix entre des échelles prédéfinies '(5 10 15 20 25 33.33333 40 50 75 100). Est-il possible de faire affiché cette liste dans la ligne de commande (ou en saisie dynamique) de façon à ce qu'il n'y ait plus qu'à cliquer l'échelle voulue? Merci par avance.
×
×
  • 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é