nicolas2 Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 Bonjour à vous.J'ai un plan AUTOCAD d'une part et un fichier EXCEL d'autre part.Le but serait de numéroter automatiquement sous AUTOCAD (à l'intérieur des cercles 1-2-3.... sans le N) mes tubes en fonction des coordonnés EXCEL.http://img243.imageshack.us/img243/2092/essainumrotation.jpgPour l'instant je le fais à la main, sur une configuration telle que celle-ci (108 Tubes) cela se fait assez rapidement, mais il m'arrive d'avoir des configurations avec plus de 1000 tubes.... :( Merci pour votre aide.
x_all Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 je ne suis pas asseé codeur pour répondre a ta demande, mais en arrangean un poil l'ordre des colonne dans ton fichier tu devrai pouvoir te servir des lisp qui traine ici et là pour insérer des point topo... en effet les points topo sont des bloc avec attribut 1 pour le Z et 1 matricule il faudra juste rajouter une colonne avec un z=0 et créer un bloc avec ton cercle et son numéro en attribut ou tu utilisera l'atribut MAT (pour matricule) des points topo fait une recherche sur le forum avec insertion de point topo c'est une demande récurrente ici... quelques trucs sur autocad
nicolas2 Posté(e) le 8 avril 2010 Auteur Posté(e) le 8 avril 2010 Merci x-all de t'être penché sur mon problème.Je n'utilise pas les blocs et les attributs. Une solution par le LISP me semble plus appropriée, plus direct.Merci.
(gile) Posté(e) le 8 avril 2010 Posté(e) le 8 avril 2010 Salut, Je te propose un petit LISP qui fonctionne avec un fichier CSV parce que c'est beaucoup plus simple, rapide et sur à utiliser qu'un fichier XLS(X) (il suffit d'enregistrer ton fichier Excel au format CSV). Le texte est inséré avec les propriétés courantes (hauteur et style de texte, calque etc..), justifié MilieuCentre. EDIT : le séparateur de données courant est récupéré dans la base de registre (defun c:numtube (/ *error* filename file sep line lst) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and file (close file)) (princ) ) (if (setq filename (getfiled "choisir le fichie CSV" (getvar 'dwgprefix) "csv" 0 ) ) (progn (setq file (open filename "r") sep (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList" ) ) (while (setq line (read-line file)) (setq lst (str2lst line sep)) (entmake (list '(0 . "TEXT") '(10 0. 0. 0.) (cons 40 (getvar 'textsize)) (cons 1 (substr (car lst) 2)) '(72 . 1) (cons 11 (list (atof (substr (cadr lst) 2)) (atof (substr (caddr lst) 2)) 0. ) ) '(73 . 2) ) ) ) (close file) ) ) (princ) ) ;; str2lst (gile) ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur (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) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
nicolas2 Posté(e) le 9 avril 2010 Auteur Posté(e) le 9 avril 2010 Salut Gile et merci pour ton aide. Lorsque je veux enregistrer mon fichier EXCEL en .CSV, j'ai 3 propositions:- CSV (séparateur : point-virgule)(*.csv)- CSV (Macintosh)(*.csv)- CSV (DOS)(*.csv) J'ai essayé les 3. D'abord je tombe sur ceci (j'ai mis OUI - après avoir supprimé la Feuil2 et 3 du classeur, puisqu'une seule Feuille doit être présente semble t'il) http://img215.imageshack.us/img215/1976/classeur3.jpg puis au lancement du LISP, je donne le chemin d'accès du coup (quand je clique sur situer)http://img37.imageshack.us/img37/6328/classeur4.jpg Et donc ce qui devait arriver, arriva.... Commande: NUMTUBEErreur: type d'argument incorrect: stringp nil Merci d'éclairer ma lanterne.
(gile) Posté(e) le 9 avril 2010 Posté(e) le 9 avril 2010 salut, il faut choisir CSV (séparateur point-virgule) Le bouton "Situer" de la boite de dialogue sert à chercher le fichier dans les chemins de recherche d'AutoCAD. Une fois le fichier trouvé (manuellement ou avec l'aide de "Situer" ou "Rechercher") il faut cliquer sur "Ouvrir". Si ton fichier CSV contient bien les données au format :N1;X12;Y20N2;X50;Y63tout devrait très bien se passer. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
nicolas2 Posté(e) le 9 avril 2010 Auteur Posté(e) le 9 avril 2010 Merci Gile.je pensais que le fait de passer de .xls à .csv (séparateur point-virgule) donnait ceci: N1 X12 Y23 => N1;X12.Y23 mais lorsque j'ouvre mon fichier .csv, j'ai toujours les espaces sans les ;Pour palier à cela, j'ai juste (sous EXCEL) fait "Remplacer" "espace" par ";".Le fichier .csv ressemble maintenant à ce que tu me dis et ton LISP fonctionne.Y'a t'il quelque chose qui m'échappe...?Une dernière modification:Pourrais-tu ajouter une question dans le LISP: "Ø du Tube" (en mm), ce qui permettrait d'écrire le N° du tube à une hauteur inscrite dans ce Ø. (visibilité) et aussi supprimer le "N" dans l'écriture. ;) Merci encore à toi.
nicolas2 Posté(e) le 9 avril 2010 Auteur Posté(e) le 9 avril 2010 Excuse moi encore Gile.Pour l'écriture du N° sans le "N" j'ai fait remplacer (sous EXCEL) le "N" par rien.Donc ignore ma deuxiéme demande (je vais faire une macro)Par contre, pour la grosseur de l'écriture, si tu peux le faire...Merci à toi.
(gile) Posté(e) le 9 avril 2010 Posté(e) le 9 avril 2010 Ça y est, on est en plein dans la situation dans laquelle il est plus difficile d'interpréter une demande non clairement formulée que de coder la réponse... je pensais que le fait de passer de .xls à .csv (séparateur point-virgule) donnait ceci: N1 X12 Y23 => N1;X12;Y23 C'est exactement ça à condition que N1 soit dans la colonne A, X12 dans la colonne B et Y23 dans la colonne C.Dois-je comprendre que toutes les données sont dans la même colonne ?Si c'est le cas, personnellement, je ne vois absolument pas l'intérêt d'utiliser un tableau Excel dans lequel toutes les données sont regroupées dans une seule colonne... et aussi supprimer le "N" dans l'écriture Le "N" est supprimé à condition que ce soit bien le premier caractère... Par contre, pour la grosseur de l'écriture, si tu peux le faire... Faire quoi ?...Comme spécifié dans mon premier message la hauteur de texte est la hauteur courante. toi de modifier la valeur de TEXTSIZE en conséquence avant de lancer le LISP. En conclusion, pour ne pas avoir à refaire 10 fois un code qui ne correspondrait pas exactement à tes besoins, je ne réécrirai rien avant d'avoir des données et une demande claire :- format exact du fichier (csv ou xls) à traiter- exemple de résultat souhaité (dwg)Tu peux utiliser un hébergeur pour mettre des exemples de fichier en téléchargement. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
nicolas2 Posté(e) le 9 avril 2010 Auteur Posté(e) le 9 avril 2010 Merci Gile et milles excuses pour ne pas avoir été clair."De chacun selon ses moyens,......" De mon programme machine, je récupère systématiquement ceci : ;Date :09/04/2010 ;Job N.: ;Drawing N.: ;Notes : GOTOF "N"<N1 X0 Y0 N2 X40 Y0 N3 X80 Y0 N4 X280 Y0 N5 X320 Y0 N6 X360 Y0 N7 X360 Y40 N8 X360 Y80 N9 X360 Y120 N10 X280 Y200 .......... N107 X320 Y-160 N108 X320 Y-200 M17 1- Je supprime les 5 premières lignes et la dernière (ici j'ai 108 Tubes, mais ce nombre change).2- Je remplace le "N" par rien3- Je remplace les espaces par des points virgules4- Je lance ta routine Je passe par EXCEL pour faire ceci, mais si une autre solution est préférable....(toutes les données sont dans la même colonne).En modifiant le TEXTSIZE tout est OK. Je ne voulais aucunement te mettre dans cet état. A l'avenir je serais plus clair dès le départ.Merci à toi pour ton aide
(gile) Posté(e) le 9 avril 2010 Posté(e) le 9 avril 2010 Ne t'inquiètes pas, je ne suis pas dans un état particulier. Si je comprends bien, le fichier est généré automatiquement par un "programme machine". Si tu veux bien mettre en ligne (ou m'envoyer à : chanteau point gilles arobase orange point fr)un fichier tel que généré par ton programme, il est fort probable qu'il soit possible de traiter (lire) directement ce fichier sans que tu aies à y faire des modification avec Excel ou autre. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 9 avril 2010 Posté(e) le 9 avril 2010 Re, Voilà, le LISP traite directement un fichier .mpf tel que celui que tu m'as envoyé. (defun c:numtube (/ *error* filename file sep line lst) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "\nErreur: " msg)) ) (and file (close file)) (princ) ) (if (setq filename (getfiled "choisir le fichier MPF" (getvar 'dwgprefix) "mpf" 0 ) ) (progn (setq file (open filename "r")) (while (setq line (read-line file)) (if (= (substr line 1 1) "N") (progn (setq lst (str2lst line " ")) (entmake (list '(0 . "TEXT") '(10 0. 0. 0.) (cons 40 (getvar 'textsize)) (cons 1 (substr (car lst) 2)) '(72 . 1) (cons 11 (list (atof (substr (cadr lst) 2)) (atof (substr (caddr lst) 2)) 0. ) ) '(73 . 2) ) ) ) ) ) (close file) ) ) (princ) ) ;; str2lst (gile) ;; Transforme un chaine avec séparateur en liste de chaines ;; ;; Arguments ;; str : la chaine à transformer en liste ;; sep : le séparateur (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) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
nicolas2 Posté(e) le 9 avril 2010 Auteur Posté(e) le 9 avril 2010 Merci Gile.Je retourne au bureau jeudi prochain (vacances).Je regarde ça à mon retour.
nicolas2 Posté(e) le 19 avril 2010 Auteur Posté(e) le 19 avril 2010 Merci Gile.Ta routine est au poil.Merci pour ta rapidité et tes compétences.
DidierLOURDELLE Posté(e) le 27 avril 2010 Posté(e) le 27 avril 2010 Une autre méthode qui fonctionne sur AutoCAD LTRegarde cette page sur mon nouveau site web pour le principe Création d'un nuage de points depuis un fichier Excel http://www.acadprof-eformation.com/index.php/traitement-par-lot/exemple-de-script/item/266-creation-dun-nuage-de-points-depuis-un-fichier-excel Avec un peu de modification et une de feuille de calcul ca rend possible la chose sur AutoCAD LT ! Formateur: ZW CAD, AutoCAD LT, AutoCAD Electrical, AutoCAD Architecture Développeur: AutoCAD, AutoCAD Electrical, AutoCAD Architecture
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