Aller au contenu

Messages recommandés

Posté(e)

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.jpg

Pour 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.

 

Posté(e)

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...

Posté(e)

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.

Posté(e)

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

Posté(e)

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: NUMTUBE

Erreur: type d'argument incorrect: stringp nil

 

Merci d'éclairer ma lanterne.

Posté(e)

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;Y20

N2;X50;Y63

tout devrait très bien se passer.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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.

 

 

Posté(e)

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.

Posté(e)

Ç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

Posté(e)

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 rien

3- Je remplace les espaces par des points virgules

4- 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

Posté(e)

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

Posté(e)

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

  • 2 semaines après...
  • 2 semaines après...
Posté(e)

Une autre méthode qui fonctionne sur AutoCAD LT

Regarde 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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é