fabdo Posté(e) le 20 juin 2007 Posté(e) le 20 juin 2007 Bonjour, Quelqu'un a-t-il une solution pour charger une liste .txt dans autocad, sous forme d'un bloc point avec symbole, matricule et altitude. Je voudrais que ces blocs soient chargés en 3D. Un lisp est -il déjà créé ou c'est tout simplement pas possible car trop de boulot ou autre? Merci d'avance!
(gile) Posté(e) le 20 juin 2007 Posté(e) le 20 juin 2007 Salut, poste un extrait du fichier .txt, le LISP dépendra de la forme de ce fichier (séparateurs ou saut de ligne etc... ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabdo Posté(e) le 20 juin 2007 Auteur Posté(e) le 20 juin 2007 bonjour Gile Ci-joint un extrait du fichier .txt:197,1058.160666,2006.715163,102.364630,196,1057.396245,2003.647364,100.158909,195,1057.376926,2003.589929,102.359773,194,1058.161465,2006.718699,103.547583,193,1057.376013,2003.602305,103.554242,Le premier nbre représente le numero, le second X, le troisième Y et enfin le dernier le Z @ bientôt.
(gile) Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 Personnellement, je n'aurais pas le temps de faire ça avant ce soir. Mais peut-être que d'ici là un autre le fera... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
speedy Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 Bonjourpour les fichier il y a Mensura et covadis qui importe bien ces fichiers en script voilà ce que ça peut donner je le faisais sous excel. attreq 1inserer bloc 1058.160666,2006.715163,102.36463 1 1 0197102.36463 inserer bloc 1057.396245,2003.647364,100.158909 1 1 0196100.158909 inserer bloc 1057.376926,2003.589929,102.359773 1 1 0195102.359773 inserer bloc 1058.161465,2006.718699,103.547583 1 1 0194103.547583 inserer bloc 1057.376013,2003.602305,103.554242 1 1 0193103.554242 zoom et mais si Gile nous trouve une routine plus simlple ça serait super.... @+ Michel a :)
speedy Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 il y a aussi topo.lsp de Bonuscad, il récupère tes semis de points et les insère en format texte dans autocad, déjà un pas .... http://bruno.valsecchi.neuf.fr/index.html @+Michel a
Patrick_35 Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 Salut Un lisp vite faitle numéro n'apparaitra que sur le premier attribut d'un bloc @+ (defun c:topo(/ bl data doc ent esp fic file lst_pt) (defun lst_pt(str / lst) (while (/= str "") (setq lst (cons (substr str 1 (vl-string-search "," str)) lst) str (substr str (+ (vl-string-search "," str) 2)) ) ) lst ) (vl-load-com) (if (setq fic (getfiled "Veuillez choisir votre fichier de points" (getvar "dwgprefix") "txt" 16)) (if (setq bl (getstring T "\nNom du bloc à insérer : ")) (if (or (tblsearch "block" bl) (findfile (strcat bl ".dwg"))) (progn (setq doc (vla-get-activedocument (vlax-get-acad-object)) file (open fic "r") ) (if (eq (getvar "cvport") 1) (setq esp (vla-get-paperspace doc)) (setq esp (vla-get-modelspace doc)) ) (vla-startundomark doc) (or (tblsearch "block" bl) (vla-delete (vla-insertblock esp (vlax-3d-point '(0.0 0.0 0.0)) (findfile (strcat bl ".dwg")) 1 1 1 0)) ) (while (setq data (read-line file)) (setq data (lst_pt data)) (if (setq ent (vlax-invoke (vla-insertblock esp (vlax-3d-point (list (read (caddr data)) (read (cadr data)) (read (car data)) ) ) bl 1 1 1 0 ) 'getattributes ) ) (progn (vla-put-textstring (car ent) (cadddr data)) (vla-put-textstring (cadr ent) (car data)) ) ) ) (close file) (vla-endundomark doc) ) (princ (strcat "\nLe bloc " bl " est introuvable.")) ) ) ) (princ) ) [Edité le 21/6/2007 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabdo Posté(e) le 21 juin 2007 Auteur Posté(e) le 21 juin 2007 C'est presque merveilleux, Patrick j'ai juste une question car je crée un bloc avec une étiquette MAT et une autre ALT mais après création des blocs je n'ai plus qu'une étiquette sur les deux. Est-il possible de conserver les deux attributs après traitement? Sinon ta routine fonctionne super, MERCI.
(gile) Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 Salut, Un autre, vite fait aussi. le bloc (nommé "PointFile") doit être présent dans le dessin ou en tant que fichier (wbloc) dans un répertoire du chemin de recherche et contenir deux attributs, dans l'ordre : le matricule et l'altitude. (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) ) [Edité le 21/6/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 Je n'avais pas compris que tu avais besoin du z dans un attribut. C'est le lisp de (gile) qui me l'a indiqué ;) Donc, c'est corrigé. Maintenant, tu en as deux pour le prix d'un seul :D @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabdo Posté(e) le 21 juin 2007 Auteur Posté(e) le 21 juin 2007 Re, Je m'écarte un peu du sujet principal mais je dois construire des facades avec ces points, je les insère donc en 3D en faisant différentes vues je peux faire mes constructions le soucis est que par exemple sur une vue de face mes blocs sont représentés pas des petits bout de lignes, comment rendre lisible ces blocs? Possible?
fabdo Posté(e) le 21 juin 2007 Auteur Posté(e) le 21 juin 2007 Encore! J'ai cherché mais pas trouvé, c'est vrai que mes connaissances sont encore plus que limitées, Gile peux-tu m'indiquer la modification pour passer de 6 à 2 décimales pour les altitudes?
(gile) Posté(e) le 21 juin 2007 Posté(e) le 21 juin 2007 Salut, J'ai remplacé : (substr str (+ 2 (vl-string-position (ascii ",") str 1 T))) par (rtos (atof (substr str (+ 2 (vl-string-position (ascii ",") str 1 T)))) 2 2) dans le code. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabdo Posté(e) le 22 juin 2007 Auteur Posté(e) le 22 juin 2007 Merci Gile, Question peut-on modifier la routine afin que je puisse non plus insérer mes point en SCG mais plutôt une première fois par exemple en vue de face puis sur les trois autes cotés (je selectionnerai chaque point concerné dans un .txt à part), le but est que je puisse monté des façades correctes. Possible ou pas?Merci d'avance!
fabdo Posté(e) le 22 juin 2007 Auteur Posté(e) le 22 juin 2007 Bonjour à tous, Ce n'est pas "un appel au secours" mais j'ai vraiment besoin d'un coup de main pour la question énoncé ci-dessus!!!
(gile) Posté(e) le 22 juin 2007 Posté(e) le 22 juin 2007 Salut, Je te propose une autre solution, j'avais fait un LISP pour pivoter les textes et blocs sélectionnés du SCG à la vue courante. Tu te palce en vue de face, par exemple, tu fais wcs2view et tu sélectionne les blocs que tu veux afficher dans cette vue. Tu truveras le LISP ici, ainsi que le LISP inverse VIEW2WCS. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabdo Posté(e) le 22 juin 2007 Auteur Posté(e) le 22 juin 2007 Gile, Je me suis mis en vue de face je lance la routine, je sélectionne mes points mais je reçois a la ligne de commande ;error :no function definition; MXM
(gile) Posté(e) le 22 juin 2007 Posté(e) le 22 juin 2007 Au temps pour moi, les routines mxm et mxv appelées par Wcs2View sont données plus haut dans le même sujet. Charge les avec le LISP ;; mxv Apply a transformation matrix to a vector by Vladimir Nesterovsky (defun mxv (m v) (mapcar '(lambda (row) (apply '+ (mapcar '* row v))) m) ) ;; mxm Multiply two matrices by Vladimir Nesterovsky (defun mxm (m q / qt) (setq qt (apply 'mapcar (cons 'list q))) (mapcar '(lambda (mrow) (mxv qt mrow)) m) ) [Edité le 22/6/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 23 juin 2007 Posté(e) le 23 juin 2007 En voici un autre, peut-être plus pratique d'utilisation. Les références de bloc et textes sélectionnés sont pivotés dans le plan de la vue courante par rapport à leur point d'insertion quelques soient leurs positions initiales. PS : cette fois ci, les routines mxm et mxv sont bien jointes au code. EDIT : code modifié suite aux tests de Bred ici. ;; Pivote les textes et blocs dans le plan de la vue courante (defun c:r2v (/ doc nor ins dir mat) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-StartUndoMark doc) (if (ssget '((0 . "INSERT,*TEXT"))) (vlax-for obj (vla-get-ActiveSelectionSet doc) (setq nor (vlax-get obj 'Normal) ins (vlax-get obj 'InsertionPoint) dir (mapcar '- (trans (getvar "viewdir") 1 0) (trans '(0 0 0) 1 0) ) mat (mxm (mapcar '(lambda (x) (trans x 0 dir T)) '((1 0 0) (0 1 0) (0 0 1)) ) (mapcar '(lambda (x) (trans x nor 0 T)) '((1 0 0) (0 1 0) (0 0 1)) ) ) ) (vla-TransformBy obj (vlax-tmatrix (append (mapcar '(lambda (v1 v2) (append v1 (list v2)) ) mat (mapcar '- ins (mxv mat ins)) ) (list '(0 0 0 1)) ) ) ) ) ) (vla-EndUndoMark doc) (princ) ) ;; Retourne le produit scalaire (réel) de deux vecteurs (defun vxv (v1 v2) (apply '+ (mapcar '* v1 v2)) ) ;; Transpose une matrice Doug Wilson (defun trp (m) (apply 'mapcar (cons 'list m)) ) ;; Applique une matrice de transformation à un vecteur Vladimir Nesterovsky (defun mxv (m v) (mapcar '(lambda (r) (vxv r v)) m) ) ;; Multiplie deux matrices Vladimir Nesterovsky (defun mxm (m q) (mapcar '(lambda (r) (mxv (trp q) r)) m) ) [Edité le 23/6/2007 par (gile)] [Edité le 24/6/2007 par (gile)] 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