Solmenie Posté(e) le 4 juillet 2008 Posté(e) le 4 juillet 2008 Je cherche un moyen d'importer à partir d'un fichier texte Nom X Y Z Un point avec les attribut Nom et Z Merci ;) C'est au pied du mur que l'on voit le mieux le mur
didier Posté(e) le 4 juillet 2008 Posté(e) le 4 juillet 2008 bonjour, Bienvenue sur CadXp, en haut à gauche, tu as des champs à renseigner pour la recherche cette question a reçu une réponse des dizaines et des dizaines de fois si, tu ne t'en sors toujours pas, reviens à la charge. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Solmenie Posté(e) le 4 juillet 2008 Auteur Posté(e) le 4 juillet 2008 Mes recherches cadxp sont infructueuses pour ces point topo.Je reviens à la charge Merci de me répondre C'est au pied du mur que l'on voit le mieux le mur
(gile) Posté(e) le 5 juillet 2008 Posté(e) le 5 juillet 2008 Salut, Pour pouvoir te répondre précisément il faudrait que tu postes un extrait de ton fichier texte. Le programme ne peut être fait qu'en fonction de la manière dont celui-ci est organisé (lignes, séparateurs ...). En attendant je te propose un LISP que j'ai essayé de faire polyvalent (je ne suis pas de la partie). Le bloc à insérer doit exister dans la collection du dessin ou en tant que fichier dwg et avoir 2 attributs : nom ou matricule et altitude. ;;; TOPO (gile) 05/07/08 ;;; Insère un bloc en fonction d'un fichier de points topo ;;; L'utilisateur spécifie le bloc (2 attributs), le fichier et le séparateur. (defun c:topo (/ bloc file sep) (and (setq bloc (getblock nil)) (setq file (getfiled "Choisir le fichier" "" "txt" 0)) (setq sep (choosebox "Séparateur" '(("," . "Virgule") (";" . "Point-virgule") (" " . "Espace") ) ) ) (FileToIns bloc file sep) ) (princ) ) ;;; FileToIns ;;; Lit un fichier texte contenant des points topo et insère ;;; un bloc par point avec les attributs nom (matricule) et altitude. ;;; ;;; Arguments ;;; bloc : le nom du bloc à insérer ;;; file : le fichier à lire ;;; sep : le séparateur de données dans le fichier (defun FileToIns (bloc file sep / acDoc Space str mat alt ins) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) file (open file "r") ) (while (setq str (read-line file)) (setq str (vl-string-right-trim sep str) mat (substr str 1 (vl-string-position (ascii sep) str)) str (substr str (+ 2 (vl-string-position (ascii sep) str)) ) alt (rtos (atof (substr str (+ 2 (vl-string-position (ascii sep) str 1 T)) ) ) ) ins nil [surligneur]ins (cons (atof alt) ins) [/surligneur] str (substr str 1 (vl-string-position (ascii sep) str 1 T) ) ins (cons (atof (substr str (+ 2 (vl-string-position (ascii sep) str 1 T)) ) ) ins ) str (substr str 1 (vl-string-position (ascii sep) 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) ) ) (close file) ) ;; ChooseBox (gile) ;; Boite de dialogue permettant de choisir une option ;; ;; Arguments ;; title : le titre de la boite de dialogue (chaîne) ;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...) ;; ;; Retour : la clé de l'option choisie (chaîne) ;; ;; Exemple d'utilisation ;; (choosebox "Type de fichier" '(("lin" . "Type de ligne") ("pat" . "Motif de hachure"))) (defun ChooseBox (title keylab / tmp file dcl_id choice) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line (strcat "ChooseBox:dialog{label=\"" title "\";:radio_column{key=\"choice\";" ) file ) (mapcar (function (lambda (p) (write-line (strcat ":radio_button{key=\"" (car p) "\";label=\"" (cdr p) "\";}" ) file ) ) ) keylab ) (write-line "}spacer;ok_cancel;}" file) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "ChooseBox" dcl_id)) (exit) ) (set_tile "choice" (caar keylab)) (action_tile "accept" "(setq choice (get_tile \"choice\")) (done_dialog)" ) (start_dialog) (unload_dialog dcl_id) (vl-file-delete tmp) choice ) ;;; Getblock (gile) 03/11/07 ;;; Retourne le nom du bloc entré ou choisi par l'utilisateur ;;; dans une liste déroulante de la boite de dialogue ou depuis la boite ;;; de dialogue standard d'AutoCAD ;;; Argument : le titre (string) ou nil (défaut : "Choisir un bloc") (defun getblock (titre / bloc n lst tmp file what_next dcl_id nom) (while (setq bloc (tblnext "BLOCK" (not bloc))) (setq lst (cons (cdr (assoc 2 bloc)) lst) ) ) (setq lst (acad_strlsort (vl-remove-if (function (lambda (n) (= (substr n 1 1) "*"))) lst ) ) tmp (vl-filename-mktemp "Tmp.dcl") file (open tmp "w") ) (write-line (strcat "getblock:dialog{label=" (cond (titre (vl-prin1-to-string titre)) ("\"Choisir un bloc\"") ) ";initial_focus=\"bl\";:boxed_column{ :row{:text{label=\"Sélectionner\";alignment=left;} :button{label=\">>\";key=\"sel\";alignment=right;fixed_width=true;}} spacer; :column{:button{label=\"Parcourir...\";key=\"wbl\"; alignment=right;fixed_width=true;}} :column{:text{label=\"Nom :\";alignment=left;}} :edit_box{key=\"tp\";edit_width=25;} :popup_list{key=\"bl\";edit_width=25;}spacer;} spacer; ok_cancel;}" ) file ) (close file) (setq dcl_id (load_dialog tmp)) (setq what_next 2) (while (>= what_next 2) (if (not (new_dialog "getblock" dcl_id)) (exit) ) (start_list "bl") (mapcar 'add_list lst) (end_list) (if (setq n (vl-position (strcase (getvar "INSNAME")) (mapcar 'strcase lst) ) ) (setq nom (nth n lst)) (setq nom (car lst) n 0 ) ) (set_tile "bl" (itoa n)) (action_tile "sel" "(done_dialog 5)") (action_tile "bl" "(setq nom (nth (atoi $value) lst))") (action_tile "wbl" "(done_dialog 3)") (action_tile "tp" "(setq nom $value) (done_dialog 4)") (action_tile "accept" "(setq nom (nth (atoi (get_tile \"bl\")) lst)) (done_dialog 1)" ) (setq what_next (start_dialog)) (cond ((= what_next 3) (if (setq nom (getfiled "Sélectionner un fichier" "" "dwg" 0)) (setq what_next 1) (setq what_next 2) ) ) ((= what_next 4) (cond ((not (read nom)) (setq what_next 2) ) ((tblsearch "BLOCK" nom) (setq what_next 1) ) ((findfile (setq nom (strcat nom ".dwg"))) (setq what_next 1) ) (T (alert (strcat "Le fichier \"" nom "\" est introuvable.")) (setq nom nil what_next 2 ) ) ) ) ((= what_next 5) (if (and (setq ent (car (entsel))) (= "INSERT" (cdr (assoc 0 (entget ent)))) ) (setq nom (cdr (assoc 2 (entget ent))) what_next 1 ) (setq what_next 2) ) ) ((= what_next 0) (setq nom nil) ) ) ) (unload_dialog dcl_id) (vl-file-delete tmp) nom ) [Edité le 6/7/2008 par (gile)] [Edité le 20/8/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 Bonjour à toutes et tous, (gile), as-tu les éléments qu'il faut pour tester ? J'avoue avoir la flegmme de me créer le fichier et le bloc,... Si ce n'est pas le cas, je le ferai,.. (Je me permet car j'ai vu que tu étais en ligne !) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 (gile), as-tu les éléments qu'il faut pour tester ? J'avoue avoir la flegmme de me créer le fichier et le bloc,... Créer un bloc contenant 2 atribut et un point (ou un cercle minuscule pour éviter la gestion de PDSIZE) c'est vraiment très rapide...Quant au fichier, je n'en ai pas. comme je disais, ce n'est pas ma partie (la topographie) mais j'imagine que ça doit ressembler à ça: matricule1 x1 y1 z1matricule2 x2 y2 z2matricule3 x3 y3 z3etc... avec le séparateur qui peut être une virgule, un point-virgule ou un espace, mais tu as sûrement plus souvent que moi eu affaire avec ce type de fichier... [Edité le 6/7/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 Re, Au lancement du Lisp => http://images4.hiboox.com/images/2708/600916de29ff355fb12cfa240265929b.jpg Le message d'erreur s'affiche deux fois ! (Même réaction sur une V2008 ou 2009 !) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 6 juillet 2008 Posté(e) le 6 juillet 2008 C'était un problème d'affichage dans CADxp qui met des sauts de ligne là où il n'y en avait pas.Ça devrait fonctionner maintenant. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Solmenie Posté(e) le 7 juillet 2008 Auteur Posté(e) le 7 juillet 2008 Voici le fichier texte généré par le programme d'export de l'outil topo 1A 913794.270 229570.634 777.7111B 913792.367 229569.916 777.8172B 913214.821 229171.904 779.2742A 913216.221 229175.466 779.2423A 911525.049 227206.477 784.3213B 911523.015 227203.799 784.3254A 910630.887 226353.765 788.1484B 910631.233 226352.561 787.1655A 910831.994 226412.707 787.0485B 910832.896 226411.786 787.0906A 910762.877 226329.543 786.9986B 910764.005 226329.737 786.9607 912651.795 228382.936 782.5518A 914906.809 230837.942 775.2038B 914909.038 230838.910 775.167 C'est au pied du mur que l'on voit le mieux le mur
(gile) Posté(e) le 7 juillet 2008 Posté(e) le 7 juillet 2008 Salut, Le LISP proposé plus haut devrait fonctionner, il suffit de:- créer un bloc à ta convenance contenant 2 attributs : nom et altitude (dans cet ordre)- charger et lancer le LISP (si besoin, voir ici)- 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
lili2006 Posté(e) le 7 juillet 2008 Posté(e) le 7 juillet 2008 Bonjour à toutes et tous, Marche ! l]impeccable ! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Solmenie Posté(e) le 7 juillet 2008 Auteur Posté(e) le 7 juillet 2008 Merci pour le coup de main, Gile. J'essaie le programme cet après-midi ;) C'est au pied du mur que l'on voit le mieux le mur
Solmenie Posté(e) le 7 juillet 2008 Auteur Posté(e) le 7 juillet 2008 Bonjour, Ca fonctionne. Ce lisp va me permettre de travailler directement, sans intermédiaire. Merci à tous :) C'est au pied du mur que l'on voit le mieux le mur
fabdo Posté(e) le 20 août 2008 Posté(e) le 20 août 2008 Salut Merci à tous, je n'avais pas encore cette routine (gile) elle fonctionne super!Juste pour faire une petite variante au cas ou, quelle modif pour insérer sans le Z? Biensur si cela ne prend pas trop de temps. Et encore merci!!
(gile) Posté(e) le 20 août 2008 Posté(e) le 20 août 2008 quelle modif pour insérer sans le Z? Si tu veux dire insérer en 2d (Z = 0), il suffit de supprimer la ligne : [surligneur]ins (cons (atof alt) ins) [/surligneur]ou de mettre un point virgule devant : [surligneur]; ins (cons (atof alt) ins) [/surligneur] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 20 août 2008 Posté(e) le 20 août 2008 Bonsoir à toutes et tous, Si je peux me permettre, (gile), le mieux c'est encore le "point virgule", comme cela, si il a besoin du "Z", il suffit de retirer le point virgule, non ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
jalna Posté(e) le 27 janvier 2009 Posté(e) le 27 janvier 2009 Bonjour,Je viens de voir ce post et j'ai essayé le lisp avec le bloc contenant 1 point et 2 attributs: nom et altitude J'ai une erreur du type : TOPO ; erreur: type d'argument incorrect: numberp: nil Ou est ce que c'est vide?? :casstet: "Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."J-C Van DammeMon forum : http://plexus.forumactif.org/
zkouba Posté(e) le 15 avril 2009 Posté(e) le 15 avril 2009 bonjour j'ai le meme pbm que jalana message d'erreur "Utilisation: (acad_strlsort ); erreur: type d'argument incorrect: numberp: nil"j'ai cree un bloc avec un seul attribut et mon fichier texte c'est bien ca..NOM x y1 595703.74692 126945.130913 595726.00000 126956.000003 595672.17154 127011.645565 595647.15966 127021.409092 595676.33500 126978.102343 595655.96057 126957.916422 595678.75167 126958.641244 595657.92924 126943.714915 595659.62022 126930.83844 je n'arrive toujours pas a inserer mes points.salutation
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