fabdo Posté(e) le 19 août 2008 Posté(e) le 19 août 2008 Bonjour Dans le lisp de (gile) suivant : (defun c:PointFile (/ AcDoc Space bloc file str mat alt ins ref)(vl-load-com)(and(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))Space (if (= (getvar "CVPORT") 1)(vla-get-PaperSpace AcDoc)(vla-get-ModelSpace AcDoc)))(or(tblsearch "BLOCK" (setq bloc "PointFile"))(findfile (setq bloc "PointFile.dwg")))(setq file (getfiled "Choisir le fichier" "" "txt" 0))(setq file (open file "r"))(while (setq str (read-line file))(setq str (vl-string-right-trim "," str)mat (substr str 1 (vl-string-position (ascii ",") str))str (substr str (+ 2 (vl-string-position (ascii ",") str)))alt(rtos (atof (substr str (+ 2 (vl-string-position (ascii ",") str 1 T)))) 2 2)ins nilins (cons (atof alt) ins)str (substr str 1 (vl-string-position (ascii ",") str 1 T))ins(cons(atof (substr str(+ 2 (vl-string-position (ascii ",") str 1 T))))ins)str (substr str 1 (vl-string-position (ascii ",") str 1 T))ins (cons (atof str) ins)ref (vla-InsertBlockSpace(vlax-3d-point ins)bloc1.01.01.00.0))(mapcar '(lambda (x y) (vla-put-TextString x y))(vlax-invoke ref 'GetAttributes)(list mat alt))))(princ)) Quelles sont les modifs nécessaires pour que la routine fonctionne avec ce format de point 1 5000.0000 1000.0000 0.000 2 4956.6620 909.1830 0.000 3 4980.1440 993.8660 0.000 4 4990.5320 989.4800 0.000 5 4997.1450 986.7050 0.000 en sachant que l'ancien format était : 1,5000,0000,1000.0000,0.0000, merci de vos réponses.
Serge Posté(e) le 20 août 2008 Posté(e) le 20 août 2008 fabdo, Désolé mais j'ai un peu de difficulté à suivre. Il y a eu quelques fils à ce sujets par le passé (juin) et je pensais que le besoin éatit comblé. a) Le plus simple est de remplacer la virgule dans (ascii ",") par un espace (comme gile l'avais déjà suggéré)b) Dans l'exemple de ce que ça faisait en sachant que l'ancien format était :1,5000,0000,1000.0000,0.0000, il y a un peu trop de virgules selon moi. Si le texte est exact, alors je n'ai rien dit, sinon c'est difficile pour les autres de deviner la bonne syntaxe.c) Lorsqu'on commence un nouveau fil, il ne faut pas supposer que les autres devineront que celui-ci constitue la suite d'un autre.d) Si le nouveau texte est "1 5000.0000 1000.0000 0.000" et que le premier chiffre représente l'attribut alors que les 3 autres, les x,y,z, on aura (while (setq str (read-line file)) ; "1 5000.0000 1000.0000 0.000" (setq str (eval (read (strcat "(list " str ")")))) ; (list 1 5000.0 1000.0 0.0) (setq mat (car str)) ; 1 (setq ins (cdr str)) ; (list 5000.0 1000.0 0.0) (setq ref (vla-InsertBlock Space (vlax-3d-point ins) bloc 1.0 1.0 1.0 0.0)) (mapcar '(lambda (x y) (vla-put-TextString x y)) etc e) Dans les autres fils, il était question d'afficher des nombres avec une certaine précision. Est-ce que ça tient encore. Le problème est que je ne commais pas le bloc qui va recevoir les attributs, je ne suis pas certain de la syntaxe des lignes du fichiers, etc. Serge
(gile) Posté(e) le 20 août 2008 Posté(e) le 20 août 2008 Salut, Tout d'abord, merci Serge pour avoir répondu à ce sujet que je n'avais pas vu passer. fabdo, Comme dit Serge, il me semble avoir déjà répondu à cette demande ici.Sinon, tu trouveras une routine plus polyvalente dans ce sujet.Pour l'utiliser :- créer un bloc à ta convenance contenant 2 attributs : nom et altitude (dans cet ordre)- charger et lancer le LISP (saisie de commande = TOPO)- choisir le bloc dans la première boite de dialogue- choisir le fichier dans la seconde- spécifier le séparateur (Espace) dans la troisième 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