speedy Posté(e) le 31 mars 2008 Posté(e) le 31 mars 2008 Bonsoirj'ai récupéré un fichier assainissement avec tous les blocs au points d'insertion 0,0, j'ai utiliser Rins.lsp de Patrick35, j'arrive à changer le point d'insertion un par un mais mon problème je n'ai pas d'attribut à ces blocs, j'aimerais les extraire... y'aurait il un moyen de convertir les texte qui sont dans ces blocs en attribut avec ses infos, j'ai quatre étiquettes, Num, tampon, Fe et prof. genre text-to-tag merci de votre aide @+Michel a
speedy Posté(e) le 1 avril 2008 Auteur Posté(e) le 1 avril 2008 Bonjour à tousj'utilise ce lisp pour transformer mes texte en attribut et ensuite je dois créer un bloc un par un, avec des noms différents.... ;;;transformer les textes en attribut(defun c:TXT2ATT (/ PRIVE_SEL PRIVE_ENT)(setq PRIVE_SEL nil)(while (or (not PRIVE_SEL)(and (/= (cdr (assoc 0 (entget (car PRIVE_SEL)))) "TEXT")(/= (cdr (assoc 0 (entget (car PRIVE_SEL)))) "MTEXT")))(setq PRIVE_SEL (entsel "\nSelect Text to Change")))(setq PRIVE_ENT (entget (car PRIVE_SEL)))(entmake (list '(0 . "ATTDEF")'(100 . "AcDbEntity")(assoc 410 PRIVE_ENT)(assoc 8 PRIVE_ENT)'(100 . "AcDbText")(assoc 10 PRIVE_ENT)(assoc 40 PRIVE_ENT)(assoc 1 PRIVE_ENT)(assoc 50 PRIVE_ENT)'(41 . 1.0)'(51 . 0.0)(assoc 7 PRIVE_ENT)'(71 . 1)(if (= (cdr (assoc 0 PRIVE_ENT)) "MTEXT")(cons 72 (cdr (assoc 71 PRIVE_ENT)))(assoc 72 PRIVE_ENT))(cons 11 (list 0.0 0.0 0.0))(cons 210 (list 0.0 0.0 1.0))'(100 . "AcDbAttributeDefinition")'(3 . "Invite")'(2 . "ETIQ")'(70 . 0)'(73 . 0)'(74 . 0)))(entdel (car PRIVE_SEL))) chaque bloc a un nom différent, j'aimerais pouvoir leur donner :1- un attribut2- un nom bloc unique pour tous voici mon premier souci.... @+ Michel a j'aimerais au lieu que j'explose mes blocs avec texte c'est de
Arcasdk Posté(e) le 1 avril 2008 Posté(e) le 1 avril 2008 Coucou, je ne comprend pas bien ce que tu veux???:casstet: Tu veux faire quoi avec quoi? Ta routine fonctionne?? Elle créé des attributs et toi tu veux créer des blocs avec ces attributs et leur donner un nom....? Quel genre de nom.. Bloc001, bloc002..... <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
speedy Posté(e) le 1 avril 2008 Auteur Posté(e) le 1 avril 2008 Bonjourçà a l'air compliqué, en réalité j'ai en plan tout le renseignement du réseau en texte (bloc sans attribut), et chacun avec un nom de bloc différent ( ce sont des blocs incrémentés).... ce que j'aimerais c'est de pouvoir tout exporter dans un tableau excel ensuite ce n'est plus un souci pour les réinsérer proprement..... je suis obligé de saisir tous les textes un par un dans mon fichier excel.. Merci Michel a
speedy Posté(e) le 2 avril 2008 Auteur Posté(e) le 2 avril 2008 Bonjour à tousje galère, j'en ai trop de texte voici un exemple de mon soucis.... http://www.cijoint.fr/cjlink.php?file=cj200804/cijI0OQXp6.zip merci de votre aide... Michel a
Arcasdk Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Coucou, ton lien ne fonctionne pas (c'est ptet moi qui ne va pas mais bon) Je peux essayer de te faire une routine qui copie dans un fichier texte tous les textes de ton plan.... Tu n'aurai juste qu'à faire des copier / coller..... Celà t'irai??? J'ai pas encore un grand niveau en lisp mais ca je devrait savoir le faire... As you wish.. <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
(gile) Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Salut, Je bute sur quelques truc pour transformer les textes dans les blocs en attributs, en attendant, si ça te suffit, un LISP qui extrait tout les textes des blocs dans un fichier Excel. (defun c:exttxt (/ ss path file name) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if (ssget "_X" '((0 . "INSERT"))) (if (setq path (getfiled "Créer un fichier" (getvar "DWGPREFIX") "xls" 1)) (progn (setq file (open path "w")) (vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (if (numberp (read (setq name (vla-get-Name b)))) (progn (setq row "") (vlax-for e (vla-item (vla-get-Blocks *acdoc*) name) (if (= (vla-get-ObjectName e) "AcDbText") (setq row (strcat row (vla-get-TextString e) "\t")) ) ) (write-line row file) ) ) ) (close file) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Hello Gilles Sympa ce petit programme ! :) SVP serait il possible d'avoir une version qui utilise la sélection "classique" d'AutoCAD ainsi on peut traiter TOUT le dessin ou une partie du DWG ! Merci d'avance, Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Re, Voilà, pour transformer les textes en attributs (visibles, prédéfinis) Version corrigée (defun c:test (/ att) (vl-load-com) (vlax-for b (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object) ) ) (if (not (wcmatch (setq name (vla-get-name b)) "`**")) (progn (vlax-for e b (if (= (vla-get-ObjectName e) "AcDbText") (progn (setq att (vla-addAttribute b (vla-get-Height e) acAttributeModePreset (cond ((wcmatch (vla-get-TextString e) "R*") "Num ?") ((wcmatch (vla-get-TextString e) "T :*") "Tampon ?") ((wcmatch (vla-get-TextString e) "Fe :*") "Fe ?") ((wcmatch (vla-get-TextString e) "Prof :*") "Prof ?") ) (vla-get-InsertionPoint e) (cond ((wcmatch (vla-get-TextString e) "R*") "NUM") ((wcmatch (vla-get-TextString e) "T :*") "TAMPON") ((wcmatch (vla-get-TextString e) "Fe :*") "FE") ((wcmatch (vla-get-TextString e) "Prof :*") "PROF") ) [surligneur](vla-get-TextString e)[/surligneur] ) ) (vla-put-Color att 1) (vla-delete e) ) ) ) (vl-cmdf "_attsync" "_name" (vla-get-name b)) ) ) ) (princ) ) Si tu veux supprimer les préfixes des textes("T :", "Fe :", "Prof :") dans les attributs, remplace :[surligneur](vla-get-TextString e)[/surligneur]par(vl-string-left-trim "TFeProf :" (vla-get-TextString e))[Edité le 2/4/2008 par (gile)] [Edité le 2/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Salut lecrabe, Voilà une version qui fait ce que tu demandes.J'ai aussi ajouté une première colonne avec le nom des blocs (defun c:exttxt (/ ss path file name) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (princ "\nSélectionnez les blocs ou [b]") (if (or (ssget '((0 . "INSERT"))) (ssget "_X" '((0 . "INSERT")))) (if (setq path (getfiled "Créer un fichier" (getvar "DWGPREFIX") "xls" 1)) (progn (setq file (open path "w")) (vlax-for b (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq name (vla-get-Name b)) (setq row "") (vlax-for e (vla-item (vla-get-Blocks *acdoc*) name) (if (= (vla-get-ObjectName e) "AcDbText") (setq row (strcat row "\t" (vla-get-TextString e) ) ) ) ) (if (/= row "") (write-line (strcat name row) file) ) ) (close file) ) ) ) (princ) ) [Edité le 2/4/2008 par (gile)] [Edité le 2/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
speedy Posté(e) le 2 avril 2008 Auteur Posté(e) le 2 avril 2008 Bonjour à tousmerci Gile trop fort !!!, tes codes fonctionnent super.....je vais opter pour la version qui transforme les textes en attributs en attendant... @+ Michel a
(gile) Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Re, Une version plus subtile, le préfixe est conservé comme texte, la valeur seule est transformée en attribut. Version corrigée (defun c:test (/ doc ins txt) (vl-load-com) (setq doc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-StartUndoMark doc) (vlax-for b (vla-get-Blocks doc) (if (not (wcmatch (setq name (vla-get-name b)) "`**")) (progn (vlax-for e b (if (= (vla-get-ObjectName e) "AcDbText") (progn (setq ins (vlax-get e 'InsertionPoint) txt (vla-get-TextString e) ) (cond ((wcmatch txt "R*") (vla-put-Color (vla-addAttribute b (vla-get-Height e) acAttributeModePreset "Num ?" (vlax-3d-point ins) "NUM" (vl-string-left-trim "TFeProf :" txt) ) 1 ) (vla-delete e) ) ((wcmatch txt "T :*") (vla-put-Color (vla-addAttribute b (vla-get-Height e) acAttributeModePreset "Tampon ?" (vlax-3d-point (list (+ (car ins) 0.9) (cadr ins) (caddr ins)) ) "TAMPON" (vl-string-left-trim "TFeProf :" txt) ) 1 ) (vla-put-TextString e "T :") ) ((wcmatch txt "Fe :*") (vla-put-Color (vla-addAttribute b (vla-get-Height e) acAttributeModePreset "Fe ?" (vlax-3d-point (list (+ (car ins) 1.3) (cadr ins) (caddr ins)) ) "FE" (vl-string-left-trim "TFeProf :" txt) ) 1 ) (vla-put-TextString e "Fe :") ) ((wcmatch txt "Prof :*") (vla-put-Color (vla-addAttribute b (vla-get-Height e) acAttributeModePreset "Prof ?" (vlax-3d-point (list (+ (car ins) 1.75) (cadr ins) (caddr ins)) ) "PROF" (vl-string-left-trim "TFeProf :" txt) ) 1 ) (vla-put-TextString e "Prof :") ) ) ) ) ) (setvar "CMDECHO" 0) (vl-cmdf "_attsync" "_name" (vla-get-name b)) (setvar "CMDECHO" 1) ) ) ) (vla-EndUndoMark doc) (princ) ) [Edité le 2/4/2008 par (gile)] [Edité le 2/4/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
speedy Posté(e) le 2 avril 2008 Auteur Posté(e) le 2 avril 2008 Bonjourmerci pour la nouvelle version, mais j'ai un bugg, concernant les noms des blocs, il ne reconnait que des blocs ayant leur nom type numérique (0 à x) si j'ai des noms de blocs commençant par une lettre (m100) ça ne marche plus............ mon fichier exemple était déjà tout nettoyé mais les nouveau fichier les noms des blocs (avec des noms à rallonge....).... par contre comment faire de même pour les textes (diametre)....y aurait il un moyen des les exporter avec leur x,y,z... merci énormément de ton aide. @+ Michel a
(gile) Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Re, j'ai un bugg, concernant les noms des blocs, il ne reconnait que des blocs ayant leur nom type numérique (0 à x) si j'ai des noms de blocs commençant par une lettre (m100) ça ne marche plus............ Ce n'est pas un bug, j'ai fait ce LISP à partir du bout de fichier que tu avais posté, et, je filtrais volontairement les blocs dont les noms sont des nombres.Je modifie les 2 versions pour traiter tous les blocs du dessin (si d'autres blocs contiennent aussi du texte et que le texte commence par les mêmes lettres, il seront aussi traités). par contre comment faire de même pour les textes (diametre)....y aurait il un moyen des les exporter avec leur x,y,z... Il y a certainement un moyen, mais pour faire quelque chose de cohérent, il faudrait que j'ai les fichiers pour pouvoir déterminer les critères permettant une automatisation et ça commencerait à ressembler à "je ferais le boulot à ta place". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Faut croire que je suis dans un bon jour... ... et que tu as de la chance. (defun c:extdiam (/ ss path file name) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (if (ssget "_X" '((0 . "TEXT") (1 . "Ø*"))) (if (setq path (getfiled "Créer un fichier" (getvar "DWGPREFIX") "xls" 1)) (progn (setq file (open path "w")) (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (setq ins (vlax-get o 'InsertionPoint)) (write-line (strcat (rtos (car ins)) "\t" (rtos (cadr ins)) "\t" (rtos (caddr ins)) "\t" (vl-string-translate " " "\t" (vla-get-TextString o)) ) file ) ) (close file) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Arcasdk Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Le père Noël n'a jamais été aussi généreux.... :P <IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG> <a href=www.formu-lan.net>www.FormuLan.net</a>
lili2006 Posté(e) le 2 avril 2008 Posté(e) le 2 avril 2008 Bonsoir à toutes et tous, speedy, ce plan à été habillé après calculs du module VRD de Covadis. Il suffit de demander à celui qui t'as envoyé le plan, le quantitatif généré par covadis. C'est un clic et tu récupères en fichier Excel l'ensemble des métrés ainsi que les quantités "réelles" à commander ou unitaires. Le père Noël n'a jamais été aussi généreux.... Faux ! C'est tous les jours Noêl avec (gile),... J'm'en vais tester ça moi,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
speedy Posté(e) le 7 avril 2008 Auteur Posté(e) le 7 avril 2008 Bonjour à tousEtrange j'avais donné une réponse la semaine dernière !!! elle ny est !!! , bon c'était juste pour dire un grand merci à tous et plus fortement à Gile ou au pere noel (un peu en avance...)....c'est une routine que je cherchais depuis longtemps...et elle fonctionne trés bien.. bonne continuation à tous Michel a
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