Aller au contenu

Messages recommandés

Posté(e)

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 nil

ins (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-InsertBlock

Space

(vlax-3d-point ins)

bloc

1.0

1.0

1.0

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

 

 

 

 

 

 

 

Posté(e)

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

 

Posté(e)

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

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é