metacilla Posté(e) le 12 octobre 2017 Posté(e) le 12 octobre 2017 Bonjour à tous, j'ai pas mal cherché sur la toile , mais malheureusement je n'ai pas trouvé mon bonheur.... qqun aurait-il sous la main un lisp avec lequel on pourrait extraire les coordonnées de départ, fin et noeud d'une polyligne tout en précisant son calque? D'avance merci Thomas
didier Posté(e) le 12 octobre 2017 Posté(e) le 12 octobre 2017 Coucou Alors là ! pas trouvé ça !Tu as mal cherché c'est certain... Je repasse plus tard pour voir et si tu n'as toujours pas trouvé je te guideraiÇa doit être LE lisp qu'on trouve sur tous les sites Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
metacilla Posté(e) le 12 octobre 2017 Auteur Posté(e) le 12 octobre 2017 j'en ai bien trouvé quelques un, mais pas qui correspondent à mon besoin... j'ai plusieurs centaines de fichier à scanner via scrit + lisp le script m'ouvrira les fichiers que je lui demanderais, le lisp lui devra m'extraire les coordonnées de début , noeuds et fin de LA polyligne qui est dans tel claque (le même pour chaque dessin) de chacun des fichiers. sachant bien sure que les fichier sont tous sur une présentation, et que la fameuse polyligne elle se trouve en Objet!! :D Sinon ca serait trop simple!! :D Thomas
didier Posté(e) le 12 octobre 2017 Posté(e) le 12 octobre 2017 Coucou Et ces données devront-elles se trouver dans un fichier unique avec une ligne par fichier ou autant de fichier que des fichiers AutoCAD ?Je ne suis pas dans mon domaine de compétence pour le script par contre je pense pouvoir faire quelque chose pour le lisp Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 12 octobre 2017 Posté(e) le 12 octobre 2017 Coucou Pour commencer tu peux déposer un fichier avec la polyligne dans le bon calque On va s'y mettre Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
metacilla Posté(e) le 12 octobre 2017 Auteur Posté(e) le 12 octobre 2017 Alors si on a le choix, le top se serait que tout se trouve dans un seul et même fichier!!:D avec une ligne par fichier bien sure. pour le reste j'ai pas bien compris le déposer un fichier tu veux (je me permet de te tutoyer....) que je te fournisse un de me fichier type? sinon le calque s'appel: _JCD_Rsx_ERDF Sinon dans mes souvenirs, il existait un programme qui fonctionnait avec ou "sous" Autocad dans lequel on pouvait "insérer" des lisp et lui dire de le faire fonctionner sur tel ou tel fichier Autocad sans avoir besoin des les ouvrir!? ca dit qqch à qqun? mille merci d'avanceThomas
DenisHen Posté(e) le 12 octobre 2017 Posté(e) le 12 octobre 2017 Salut à tous.Sinon dans mes souvenirs, il existait un programme qui fonctionnait avec ou "sous" Autocad dans lequel on pouvait "insérer" des lisp et lui dire de le faire fonctionner sur tel ou tel fichier Autocad sans avoir besoin des les ouvrir!? ca dit qqch à qqun? Je pense que tu parles de SuperAutoScript, qui ouvre successivement plusieurs DWG dans AutoCAD et qui , un fichier après l'autre, lance, soit un (des) scripte(s), soit un (des) Lisp... Mais il lui faut un AutoCAD.Alors si on a le choix, le top se serait que tout se trouve dans un seul et même fichier!!:D avec une ligne par fichier bien sure. Une ligne par fichier ? Donc, toute une suite de coordonnées les unes après les autres sur une seule ligne pour un fichier ? Combien y-a-t'il de polyligne par fichier ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
metacilla Posté(e) le 12 octobre 2017 Auteur Posté(e) le 12 octobre 2017 Effectivement c'est ca!! super Auto Script! merci Du coup dans le meilleur des mondes, 1 ligne par fichier,1er colonne nom du fichier, 2eime X premier point, 3eime Y 1 er point, 4eime X 2eime point etc etc... y a surement plein de polyligne, mais normalement sauf erreur de ma part, 1 seul dans le fameux calque _JCD_Rsx_ERDF
bonuscad Posté(e) le 12 octobre 2017 Posté(e) le 12 octobre 2017 Effectivement c'est ca!! super Auto Script! merci Du coup dans le meilleur des mondes, 1 ligne par fichier,1er colonne nom du fichier, 2eime X premier point, 3eime Y 1 er point, 4eime X 2eime point etc etc... y a surement plein de polyligne, mais normalement sauf erreur de ma part, 1 seul dans le fameux calque _JCD_Rsx_ERDF Tu peux tenter ce qui suit:Ouvrir un nouveau dessin vierge (tes fichier à traiter doivent êtres tous fermés)Tu copie-colle ce qui suit directement en ligne de commande ((lambda ( / prefix file_scr tmp_file) (setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier dessin TEMOIN" "" "dwg" 16)) "\\") file_scr (open (strcat prefix "traiter_dossier.scr") "w") tmp_file (strcat (vl-list->string (subst 47 92 (vl-string->list prefix))) "tmp.csv") ) (foreach dwg (vl-directory-files prefix "*.dwg" 1) (write-line "_.open" file_scr) (write-line (strcat "\"" prefix dwg "\"") file_scr) ;; ;;debut partie personnalisable ;; (write-line "((lambda ( / js n lay l_coor tmp drawing f_open)" file_scr) (write-line "(setq js (ssget \"_X\" '((0 . \"LWPOLYLINE\") (8 . \"_JCD_Rsx_ERDF\") (410 . \"Model\"))))" file_scr) (write-line "(cond" file_scr) (write-line "(js" file_scr) (write-line "(repeat (setq n (sslength js))" file_scr) (write-line "(setq" file_scr) (write-line "lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)" file_scr) (write-line "l_coor (vlax-get obj 'Coordinates)" file_scr) (write-line (strcat "tmp \"" tmp_file "\"") file_scr) (write-line (strcat "drawing \"" dwg "\"") file_scr) (write-line "f_open (open tmp \"a\")" file_scr) (write-line ")" file_scr) (write-line "(write-line (strcat drawing \";\" lay \";\" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) \";\")) l_coor))) f_open)" file_scr) (write-line "(close f_open)" file_scr) (write-line ")" file_scr) (write-line ")" file_scr) (write-line ")" file_scr) (write-line "))" file_scr) ;; ;;fin partie personnalisable ;; (write-line "_.close" file_scr) (write-line "_yes" file_scr) ) (close file_scr) (princ (strcat "\Vous pouvez lancer le SCRIPT :" prefix "traiter_dossier.scr")) (prin1) )) Une boite de dialogue d'ouverture de fichier va s'ouvrir, tu en sélectionne un au hasard dans ton dossier à traiterATTENTION tous les DWG du dossier seront traités et pas seulement celui sélectionné. (s'il y a des intrus, les déplacer avant) A la fin du traitement tu auras une indication comme quoi tu peux exécuter le script.Donc toujours dans le dessin vierge tu vas exécuter la commande SCRIPT et sélectionner le fichier .scr créé. Le script va alors s’exécuter et ouvrir tous tes dessins un par un et placer les données voulues dans un fichier "tmp.csv" qui sera dans le même dossier que le script généré. A toi d'ouvrir ce fichier avec ce que tu désire (bloc-note, libre-office, excel) sachant que le séparateur de champs est le ";" Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
metacilla Posté(e) le 13 octobre 2017 Auteur Posté(e) le 13 octobre 2017 Merci Bonus!!:D tu me vends du rèves. Malheureusement ca aurait été trop beau que ca marche du premier coup.... alors dans l'ordre la création du script à l'air de bien se passer , je lance le script il ouvre le premier fichier, il me créé le fichier excel les coordonnées sont bonne sur une ligne tout va bien, il referme le fichier autocad, lance la commande _.open et là rien ne se passe.... il ne suit pas, n'ouvre pas le fichier suivant... pour tant le script à l'air bon... ci-dessous un extrait du script généré: _.open"C:\Users\XXX\Documents\XXX\XXX.XX.00001.dwg"((lambda ( / js n lay l_coor tmp drawing f_open)(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))(cond(js(repeat (setq n (sslength js))(setqlay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)l_coor (vlax-get obj 'Coordinates)tmp "C:/Users/XXXX/Documents/XXX/tmp.csv"drawing "XXX.XX.00001.dwg"f_open (open tmp "a"))(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)(close f_open))))))_.close_yes_.open"C:\Users\XXX\Documents\XXX\XXX.XX.00002.dwg"((lambda ( / js n lay l_coor tmp drawing f_open)(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))(cond(js(repeat (setq n (sslength js))(setqlay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)l_coor (vlax-get obj 'Coordinates)tmp "C:/Users/XXX/Documents/XXX/tmp.csv"drawing "XXX.XX.00002.dwg"f_open (open tmp "a"))(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)(close f_open))))))_.close_yes. Thomas
bonuscad Posté(e) le 13 octobre 2017 Posté(e) le 13 octobre 2017 Désolé je ne vois pas trop ce qui peut coincer. A part me répéter...Il ne faudrait pas que par exemple:"C:\Users\XXX\Documents\XXX\XXX.XX.00002.dwg"soit déjà ouvert (par toi ou quelqu'un d'autre), car à ce moment là la commande _OPEN va demander une option supplémentaire d'ouverture (ouverture du fichier en lecture seule: oui/non) J'ai mis _CLOSE _yes, c'est peut être une erreur de ma part d'enregistrer les modifications.Mettre _CLOSE _no serait peut être plus approprié, surtout que le dessin n'a subit aucun modification. Mais je pense pas que ce soit la raison du problème. Par acquis de conscience, j'ai vérifié que cela fonctionne avec le calque inactif, gelé et verrouillé, mais pas de souci (ssget "_x") fonctionne: la sélection se fait. J'ai pas d'autre éléments à apporter. Testé sous une 2014, qu'elle version a tu?Je passe la main. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 13 octobre 2017 Posté(e) le 13 octobre 2017 Hello Juste une idée "bête" en passant ?! Ne faut il pas: FILEDIA = 0 Bye, lecrabe Autodesk Expert Elite Team
metacilla Posté(e) le 13 octobre 2017 Auteur Posté(e) le 13 octobre 2017 dans les lignes de commande j'ai ca. Commande:Commande:Commande: SCRIPTCommande: _.openCommande: rien d'autre pourtant le fichier se ferme bien.. serait-il possible d'avoir un "Générique" à insérer dans super auto script? ((lambda ( / js n lay l_coor tmp drawing f_open)(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))(cond(js(repeat (setq n (sslength js))(setqlay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)l_coor (vlax-get obj 'Coordinates)tmp "C:/Users/XXXX/Documents/XXX/tmp.csv"drawing "NOM DU FICHIER OUVERT"f_open (open tmp "a"))(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)(close f_open))))))_.close_no Il est surement truffé d'erreur... mais c'est une idée, est ce possible?
metacilla Posté(e) le 13 octobre 2017 Auteur Posté(e) le 13 octobre 2017 Donc je revient par dessusmon précédent mail, j'ai reussi sur 1 fichier via SAS il me manque la"commande" nom du fichier ouvert. ((lambda ( / js n lay l_coor tmp drawing f_open)(setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model"))))(cond(js(repeat (setq n (sslength js))(setqlay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer)l_coor (vlax-get obj 'Coordinates)tmp "C:/Users/XXX/Documents/XXX/tmp.csv"drawing "NOM DU FICHIER OUVERT"f_open (open tmp "a"))(write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open)(close f_open))))))
metacilla Posté(e) le 13 octobre 2017 Auteur Posté(e) le 13 octobre 2017 Hello Juste une idée "bête" en passant ?! Ne faut il pas: FILEDIA = 0 Bye, lecrabe Malheureusement ca ne change rien :-(
bonuscad Posté(e) le 13 octobre 2017 Posté(e) le 13 octobre 2017 Une autre suggestion, utiliser ACCORECONSOLE.EXE (faire une recherche sur le site (gile) en a parlé) Accoreconsole ne supportant pas les fonction (vlax), il faut réajuster Dans par exemple un fichier test.bat, ceci: echo off :: Chemin de la console AutoCAD (à modifier suivant la version utilisée) set accoreexe="C:\Program Files\Autodesk\Autodesk AutoCAD Map 3D 2014\accoreconsole.exe" :: Chemin du répertoire contentant les fichiers à traiter (à modifier) set source="C:\Users\XXX\Documents\XXX" :: Chemin du script à exécuter (à modifier) set script="C:\Users\XXX\Documents\XXX\test.scr" FOR /f "delims=" %%f IN ('dir /b "%source%\*.dwg"') DO %accoreexe% /i "%source%\%%f" /s %script% :: Mettre en commentaire pour fermer automatiquement la console à la fin du traitement pause et un fichier test.scr, avec ceci: ((lambda ( / js n ent lay l_coor tmp drawing f_open) (setq js (ssget "_X" '((0 . "LWPOLYLINE") (410 . "Model")))) (cond (js (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) lay (cdr (assoc 8 (entget ent))) l_coor (apply 'append (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent)))) tmp "C:/Users/XXX/Documents/XXX/tmp.csv" drawing (getvar "DWGNAME") f_open (open tmp "a") ) (write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open) (close f_open) ) ) ) )) Avantage: n'utilise pas l'interface graphique d'autocad, donc plus rapide, autocad n'a même pas besoin d'être lancé.A tester et à ajuster selon nécessité. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
metacilla Posté(e) le 16 octobre 2017 Auteur Posté(e) le 16 octobre 2017 Bonjour et merci pour votre aide, j'ai testé ACCORECONSOLE.EXE malheureusement j'ai pas réussi à m'en servir... bon mais dans les bonne nouvelle c'est bon ca marche!! :D j'ai donc fini par utilisé SuperAutoScript, ((lambda ( / js n lay l_coor tmp drawing f_open) (setq js (ssget "_X" '((0 . "LWPOLYLINE") (8 . "_JCD_Rsx_ERDF") (410 . "Model")))) (cond (js (repeat (setq n (sslength js)) (setq lay (vlax-get (setq obj (vlax-ename->vla-object (ssname js (setq n (1- n))))) 'Layer) l_coor (vlax-get obj 'Coordinates) tmp "C:/Users/XXX/Documents/XXX/tmp.csv" drawing (getvar "DWGNAME") f_open (open tmp "a") ) (write-line (strcat drawing ";" lay ";" (apply 'strcat (mapcar '(lambda (x) (strcat (rtos x 2 3) ";")) l_coor))) f_open) (close f_open) ) ) ) )) pour mes 1200 Fichiers ca à pris environ 30 minutes, sur des fichiers qui sont léger.... 1Mo de moyenne tous purgé contrôlé... Encore merci à tous. Thomas
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