lili2006 Posté(e) le 6 novembre 2010 Posté(e) le 6 novembre 2010 Bonjour à toutes et tous, Suite à cette demande concernant le lisp "RECH V1.10" de Patrick_35 existe t-il un lisp qui permettent de décompter les textes sélectionnées ? Il faudrait pouvoir cumuler la fonction de recherche de texte ainsi que le nombre. Il serait intéressant également de pouvoir les sélectionner ("gripper"), est-ce possible ? Merci d'avance Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 6 novembre 2010 Posté(e) le 6 novembre 2010 Salut, J'ai essayé quelque chose qui ne fait que compter et sélectionner dans l'espace courant les textes correspondants aux critères spécifiés dans la boite de dialogue.Dans le cas d'attributs ou de textes dans des tableaux, c'est le bloc ou le tableau qui est 'grippé'. http://img.ahst.fr/data/images/seltxt.png ;; SELTXT (gile) ;; Sélectionne dans l'espace courant les textes suivant les critères spécifiés (defun c:SELTXT (/ TextCountBox SelectText TextMatch massoc lst ss) (vl-load-com) (defun TextCountBox (/ tmp file dcl_id typ opt pat stat) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line "TextCountBox:dialog{label=\"Sélection de textes\";initial_focus=\"pat\"; :edit_box{label=\"Rechercher\";key=\"pat\";allow_accept=true;} :row{ :boxed_column{label=\"Type de texte\"; :toggle{label=\"Textes\";key=\"txt\";} :toggle{label=\"Attributs\";key=\"att\";} :toggle{label=\"Tableaux\";key=\"tbl\";} } :boxed_column{label=\"Options de sélection\"; :toggle{label=\"Respecter la casse\";key=\"case\";} :toggle{label=\"Utiliser les caractères génériques\";key=\"regex\";} :toggle{label=\"Chercher dans les blocs\";key=\"blks\";} } } spacer; ok_cancel; }" file ) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "TextCountBox" dcl_id)) (exit) ) (setq typ (cond ((vlax-ldata-get "gile_TextCount" "type")) ((vlax-ldata-put "gile_TextCount" "type" 1)) ) ) (setq opt (cond ((vlax-ldata-get "gile_TextCount" "option")) ((vlax-ldata-put "gile_TextCount" "option" 2)) ) ) (mapcar (function (lambda (k v) (set_tile k (if (= (Boole 1 typ v) v) "1" "0" ) ) ) ) '("txt" "att" "tbl") '(1 2 4) ) (mapcar (function (lambda (k v) (set_tile k (if (= (Boole 1 opt v) v) "1" "0" ) ) ) ) '("case" "regex" "blks") '(1 2 4) ) (action_tile "accept" "(setq pat (get_tile \"pat\")) (mapcar (function (lambda (k v) (if (= \"1\" (get_tile k)) (setq typ (Boole 7 typ v)) (setq typ (Boole 2 typ v)) ) ) ) '(\"txt\" \"att\" \"tbl\") '(1 2 4) ) (mapcar (function (lambda (k v) (if (= \"1\" (get_tile k)) (setq opt (Boole 7 opt v)) (setq opt (Boole 2 opt v)) ) ) ) '(\"case\" \"regex\" \"blks\") '(1 2 4) ) (vlax-ldata-put \"gile_TextCount\" \"type\" typ) (vlax-ldata-put \"gile_TextCount\" \"option\" opt) (done_dialog 1)" ) (setq stat (start_dialog)) (unload_dialog dcl_id) (vl-file-delete tmp) (if (= 1 stat) (list pat typ opt) ) ) (defun SelectText (lst / cnt ss filter n sel ent elst att valid blk) (setq cnt 0 ss (ssadd) filter "" ) (mapcar (function (lambda (v s) (if (= v (Boole 1 (cadr lst) v)) (setq filter (strcat filter s)) ) ) ) '(1 2 4) '("TEXT,MTEXT," "INSERT," "ACAD_TABLE,") ) (if (setq n -1 sel (ssget "_X" (list (cons 0 filter) (cons 410 (getvar 'ctab)))) ) (while (setq ent (ssname sel (setq n (1+ n)))) (setq elst (entget ent)) (cond ((= "INSERT" (cdr (assoc 0 elst))) (setq att (entnext ent) valid nil ) (while (and att (= "ATTRIB" (cdr (assoc 0 (setq elst (entget att)))))) (if (TextMatch (cdr (assoc 1 elst)) (car lst) (caddr lst)) (setq valid T cnt (1+ cnt) ) ) (setq att (entnext att)) ) (and valid (ssadd ent ss)) ) ((= "ACAD_TABLE" (cdr (assoc 0 elst))) (setq valid nil) (foreach s (massoc 1 elst) (if (TextMatch s (car lst) (caddr lst)) (setq valid T cnt (1+ cnt) ) ) ) (and valid (ssadd ent ss)) ) (T (and (TextMatch (cdr (assoc 1 elst)) (car lst) (caddr lst)) (setq cnt (1+ cnt)) (ssadd ent ss) ) ) ) ) ) (if (= 4 (Boole 1 (caddr lst) 4)) (while (setq blk (tblnext "BLOCK" (not blk))) (setq valid 0 ent (cdr (assoc -2 blk)) ) (while ent (setq elst (entget ent) ent (entnext ent) ) (if (and (member (cdr (assoc 0 elst)) '("TEXT" "MTEXT")) (TextMatch (cdr (assoc 1 elst)) (car lst) (caddr lst)) ) (setq valid (1+ valid)) ) ) (if (and ( (setq sel (ssget "_X" (list '(0 . "INSERT") (cons 410 (getvar 'ctab)) (assoc 2 blk)))) ) (repeat (setq n (sslength sel)) (ssadd (ssname sel (setq n (1- n))) ss) (setq cnt (+ valid cnt)) ) ) ) ) (list ss cnt) ) (defun TextMatch (str pat flag) (apply (if (= 2 (Boole 1 flag 2)) 'wcmatch '= ) (if (= 1 (Boole 1 flag 1)) (list str pat) (mapcar 'strcase (list str pat)) ) ) ) (defun massoc (code alst / pair) (if (setq alst (member (assoc code alst) alst)) (cons (cdar alst) (massoc code (cdr alst))) ) ) (if (and (setq lst (TextCountBox)) (setq ss (SelectText lst)) ) (progn (princ (strcat "\n" (itoa (cadr ss)) " texte(s) trouvé(s)")) (sssetfirst nil (car ss)) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 6 novembre 2010 Auteur Posté(e) le 6 novembre 2010 Re, Que dire ? Tu est tout simplement génial (gile), :exclam: En plus, je viens de me rendre compte que certains voiles (murs) sont repérés avec des blocs "attributs", donc "SELTXT" est également efficace dans ce cas ! :D Un grand merci car cet outil est lui aussi formidable,.. :P Question subsidiaire => Il serait intéressant par la suite de pouvoir garder le texte "grippé" au lancement d'une autre fonction "par exemple "TotalPerim" en ce qui me concerne afin de pouvoir métré à suivre le linéaire correspondant aux textes sélectionnés (ceux-ci correspondant au repérage d'un Voile). Est-ce possible d'enchainer ces deux lisps ? En image => Depuis "SELTXT" => "Grippage" des textes correspondant aux Voiles V1 (donc, ayant les même caractéristiques en terme de ferraillage) http://img.ahst.fr/data/images/grip1.jpg Enchainement de TotalPerim afin de pouvoir métré le linéaire correspondant aux Voiles numérotés V1 (en cyan sur l'image ci-dessous)=> http://img.ahst.fr/data/images/grip2.jpg A moins qu'une autre idée soit possible,...?!! C'est bête ce truc, je me rend compte que je ne suis pas capable de métré "simplement" un linéaire correspondant à un repérage, De toute façon, déjà un énorme merci car on peut toujours faire ça en plusieurs étapes => "SELTXT" filtre puis, grace au grip, changement de calques.Ensuite isolement des calques "Voile" et repérage de voiles depuis le filtrage précédent). Mais je pense que cela risque d'être fastidieux,...Voici un aperçu (bâtiment à métré entièrement en ferraillage de 150m x 100m sur 5 niveaux,...) http://img.ahst.fr/data/images/grip3.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 7 novembre 2010 Posté(e) le 7 novembre 2010 Salut, Je ne comprends pas la demande : SELTEXT sélectionne des textes et/ou des blocs/ et/ou des tabeaux et TotalPerim demande une sélection d'entités curvilignes... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 7 novembre 2010 Auteur Posté(e) le 7 novembre 2010 Re, Je ne comprends pas la demande : Une fois que j'ai localisé mes différents Voiles (V1, par exemple) avec SELTEXT sur mon plan, je dois ensuite calculer la longueur totale des Voiles repérés V1 avec TotalPerim. Hors, si je lance TotalPerim après le "grippage" des repères V1, ceux-si se "dégrippent" et je ne sais plus ou sont mes Voiles V1 sélectionnés auparavant,... Mais, j'arrive à me débrouiller via plusieurs manips => "SELTXT" filtre puis, grace au grip, changement de calques.Ensuite isolement des calques "Voile" et repérage de voiles depuis le filtrage précédent) (Sur l'exemple ci-dessous, j'ai "grippé" moi-même ces 4 entités) http://img.ahst.fr/data/images/grip4.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 7 novembre 2010 Auteur Posté(e) le 7 novembre 2010 Re, La problématique en vidéo Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 7 novembre 2010 Auteur Posté(e) le 7 novembre 2010 Re, Pour certains textes, j'ai besoin de filtrer par zone en sélectionnant un contour fermé type polyligne, est-ce "facile" de rajouter cette option dans "SELTXT" ? Pour le moment, MAJ + fenêtre de capture pour désélectionner fonctionne bien, sauf qu'il faut vraiment zoomer par endroit et je refais 2 fois (voire plus) la manip pour m'assurer que je n'ai rien oublié,... Merci d'avance, http://img.ahst.fr/data/images/grip5.jpg Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 7 novembre 2010 Posté(e) le 7 novembre 2010 Salut, Une nouvelle version.Après la fermeture de la boite, tu fais une sélection classique ou tu fais Entrée, Espace ou clic droit pour tout l'espace courant. ;; SELTXT (gile) ;; Sélectionne dans l'espace courant les textes suivant les critères spécifiés (defun c:SELTXT (/ TextCountBox SelectText TextMatch massoc lst ss) (vl-load-com) (defun TextCountBox (/ tmp file dcl_id typ opt pat stat) (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w") ) (write-line "TextCountBox:dialog{label=\"Sélection de textes\";initial_focus=\"pat\"; :edit_box{label=\"Rechercher\";key=\"pat\";allow_accept=true;} :row{ :boxed_column{label=\"Type de texte\"; :toggle{label=\"Textes\";key=\"txt\";} :toggle{label=\"Attributs\";key=\"att\";} :toggle{label=\"Tableaux\";key=\"tbl\";} } :boxed_column{label=\"Options de sélection\"; :toggle{label=\"Respecter la casse\";key=\"case\";} :toggle{label=\"Utiliser les caractères génériques\";key=\"regex\";} :toggle{label=\"Chercher dans les blocs\";key=\"blks\";} } } spacer; ok_cancel; }" file ) (close file) (setq dcl_id (load_dialog tmp)) (if (not (new_dialog "TextCountBox" dcl_id)) (exit) ) (setq typ (cond ((vlax-ldata-get "gile_TextCount" "type")) ((vlax-ldata-put "gile_TextCount" "type" 1)) ) ) (setq opt (cond ((vlax-ldata-get "gile_TextCount" "option")) ((vlax-ldata-put "gile_TextCount" "option" 2)) ) ) (mapcar (function (lambda (k v) (set_tile k (if (= (Boole 1 typ v) v) "1" "0" ) ) ) ) '("txt" "att" "tbl") '(1 2 4) ) (mapcar (function (lambda (k v) (set_tile k (if (= (Boole 1 opt v) v) "1" "0" ) ) ) ) '("case" "regex" "blks") '(1 2 4) ) (action_tile "accept" "(setq pat (get_tile \"pat\")) (mapcar (function (lambda (k v) (if (= \"1\" (get_tile k)) (setq typ (Boole 7 typ v)) (setq typ (Boole 2 typ v)) ) ) ) '(\"txt\" \"att\" \"tbl\") '(1 2 4) ) (mapcar (function (lambda (k v) (if (= \"1\" (get_tile k)) (setq opt (Boole 7 opt v)) (setq opt (Boole 2 opt v)) ) ) ) '(\"case\" \"regex\" \"blks\") '(1 2 4) ) (vlax-ldata-put \"gile_TextCount\" \"type\" typ) (vlax-ldata-put \"gile_TextCount\" \"option\" opt) (done_dialog 1)" ) (setq stat (start_dialog)) (unload_dialog dcl_id) (vl-file-delete tmp) (if (= 1 stat) (list pat typ opt) ) ) (defun SelectText (lst / cnt ss filter n sel ent elst att valid blk) (setq cnt 0 ss (ssadd) filter "" n -1 ) (mapcar (function (lambda (v s) (if (= v (Boole 1 (cadr lst) v)) (setq filter (strcat filter s)) ) ) ) '(1 2 4) '("TEXT,MTEXT," "INSERT," "ACAD_TABLE,") ) (princ "\Sélectionnez les objets ou valider pour tous.") (if (or (setq sel (ssget (list (cons 0 filter)))) (setq sel (ssget "_X" (list (cons 0 filter) (cons 410 (getvar 'ctab))))) ) (while (setq ent (ssname sel (setq n (1+ n)))) (setq elst (entget ent)) (cond ((= "INSERT" (cdr (assoc 0 elst))) (setq att (entnext ent) valid nil ) (while (and att (= "ATTRIB" (cdr (assoc 0 (setq elst (entget att)))))) (if (TextMatch (cdr (assoc 1 elst)) (car lst) (caddr lst)) (setq valid T cnt (1+ cnt) ) ) (setq att (entnext att)) ) (and valid (ssadd ent ss)) ) ((= "ACAD_TABLE" (cdr (assoc 0 elst))) (setq valid nil) (foreach s (massoc 1 elst) (if (TextMatch s (car lst) (caddr lst)) (setq valid T cnt (1+ cnt) ) ) ) (and valid (ssadd ent ss)) ) (T (and (TextMatch (cdr (assoc 1 elst)) (car lst) (caddr lst)) (setq cnt (1+ cnt)) (ssadd ent ss) ) ) ) ) ) (if (= 4 (Boole 1 (caddr lst) 4)) (while (setq blk (tblnext "BLOCK" (not blk))) (setq valid 0 ent (cdr (assoc -2 blk)) ) (while ent (setq elst (entget ent) ent (entnext ent) ) (if (and (member (cdr (assoc 0 elst)) '("TEXT" "MTEXT")) (TextMatch (cdr (assoc 1 elst)) (car lst) (caddr lst)) ) (setq valid (1+ valid)) ) ) (if (and ( (setq sel (ssget "_X" (list '(0 . "INSERT") (cons 410 (getvar 'ctab)) (assoc 2 blk)))) ) (repeat (setq n (sslength sel)) (ssadd (ssname sel (setq n (1- n))) ss) (setq cnt (+ valid cnt)) ) ) ) ) (list ss cnt) ) (defun TextMatch (str pat flag) (apply (if (= 2 (Boole 1 flag 2)) 'wcmatch '= ) (if (= 1 (Boole 1 flag 1)) (list str pat) (mapcar 'strcase (list str pat)) ) ) ) (defun massoc (code alst / pair) (if (setq alst (member (assoc code alst) alst)) (cons (cdar alst) (massoc code (cdr alst))) ) ) (if (and (setq lst (TextCountBox)) (setq ss (SelectText lst)) ) (progn (princ (strcat "\n" (itoa (cadr ss)) " texte(s) trouvé(s)")) (sssetfirst nil (car ss)) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 7 novembre 2010 Auteur Posté(e) le 7 novembre 2010 Re, Du grand art ! :D Encore merci Gilles, le métré sous AutoCAD va sembler plus "facile",... Quelle galère ce truc,... Je viens de comparer avec ce que j'avais déjà fait, ça marche super,.. :P Et en plus, on peut faire une sélection "multi-zone" ! Vraiment TIP TOP ! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 8 novembre 2010 Auteur Posté(e) le 8 novembre 2010 Re, De mieux en mieux ! :D C'est suite à ce besoin (Filtrer les "<acronym class=dict title=") que j'ai remarqué que le "*" fonctionne aussi dans "SELTXT" http://img.ahst.fr/data/images/grip6.jpg Trop excellent,.. Merci encore Gilles, :P Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 8 novembre 2010 Posté(e) le 8 novembre 2010 Hello TOP Nickel Chrome le Gilles comme d'habitude ! :D Et je me vote un microscopique & minuscule "Merci" pour avoir suggere un petite amelioration sur le bon vieux et neanmoins efficace RECH ! :P Merci aussi a Lili pour ces exemples particulierement demonstratifs ! :) Encore Merci, Le Decapode Autodesk Expert Elite Team
lili2006 Posté(e) le 8 novembre 2010 Auteur Posté(e) le 8 novembre 2010 Re, TOP Nickel Chrome le Gilles comme d'habitude ! C'est pas moi qui te contredirai Patrice,... ;) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 8 novembre 2010 Posté(e) le 8 novembre 2010 Salut, Merci à vous. j'ai remarqué que le "*" fonctionne aussi dans "SELTXT" C'est parce que la case "Utiliser les caractère génériques" est cochée.On peut utiliser tous les caractères génériques définis dans l'Aide > Manuel d'utilisation > Hachures, notes, tableaux et cotes > Notes et étiquettes > Modification du texte > Modification du texte multiligne Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 8 novembre 2010 Auteur Posté(e) le 8 novembre 2010 Re, Vu, l'Aide > Manuel d'utilisation > Hachures, notes, tableaux et cotes > Notes et étiquettes > Modification du texte > Modification du texte multiligne (J'étais en train de faire une recherche justement sur ces caractères mais j'étais loin de me douter que cette info se cachait là !!! :o Merci à vous. Merci à toi plutôt,... (Je dépanne un ami, gérant d'un BE Structure, qui est plus que super charrette, et là, on peut oublier la vieille méthode "papier" avec les risques que l'on connait,...(Je parle des oublis en tout genre,... ) Et je me vote un microscopique & minuscule "Merci" pour avoir suggere un petite amelioration sur le bon vieux et neanmoins efficace RECH ! Absolument d'accord, car au départ ma demande n'était pas tout à fait aussi "affiné", donc merci également à toi, :P ) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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