bonuscad Posté(e) le 29 mars 2010 Posté(e) le 29 mars 2010 Bonjour, J'ai attaché des OD a des Mpolygon par une routine (environ 350) Mon problème est de savoir si tous les Mpolygon ont été traités et qu'ils aient tous des OD, mais je ne vois pas comment ont peut faire un filtre de sélection. Cela est-il possible? Faut-il procéder d'une autre manière pour pouvoir les recenser? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 29 mars 2010 Posté(e) le 29 mars 2010 Salut Bonus A part une routine qui créée un jeu de sélection avec une boucle qui regarde les xdatas (mais tu sais faire) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 29 mars 2010 Auteur Posté(e) le 29 mars 2010 Merci Patrick_35. Ce ne sont pas pas des XData mais des Object Data d'Autocad Map.Comme je ne connais pas bien ce dernier, je me demandais si Map n'avait pas un outil dédié. Bien sur, je pourrais me faire quelque lignes de code, mais avant de réinventer la roue.... :P Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lovecraft Posté(e) le 29 mars 2010 Posté(e) le 29 mars 2010 bonjour Bonuscad Les object data sont visible dans la fenêtre des propriétés (si tu as map) @plus Laurent http://www.youtube.com/user/CADMINATOR?feature=mhee
fabcad Posté(e) le 29 mars 2010 Posté(e) le 29 mars 2010 Il y a des moyens pour filtrer les objets liés avec des données d'objets ou Object Data in english spoken. 1 - Soit avec un projet et comme dessin associé ton dwg qui contient tes mpolygones et par une requête extraire les mpolygones qui correspond à tes critères de champs de table de données d'objet. 2 - Ou dans le gestionnaire d'affichage de la palette tâches d'AutoCAD MAP, faire une requête sur le dessin courant (ton dwg ouvert avec les mpolygones) qui correspond à tes critères de champs de table de données d'objet et décocher la ligne Base du dessin. Voilà, A+ [Edité le 30/3/2010 par fabcad]
bonuscad Posté(e) le 29 mars 2010 Auteur Posté(e) le 29 mars 2010 Merci bien Fabcad :) Je crois que tes explications vont bien me servir. Je verrais ça après demain... Je suis un complet néophyte sur Map et en SIG, mais cela ne me fait pas peur, je risque seulement de vous embêter avec des notions de base tant que je n'aurais pas fais une formation (Cela ne saurait trop tarder) A+ Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
GEGEMATIC Posté(e) le 12 mai 2010 Posté(e) le 12 mai 2010 Map n'a aucun outil pour traiter par lot les données d'objet dans le dessin courant, à part la programmationPour faire ce que tu souhaite, sans programer, il faut que tu ouvre un dessin viergeDans ce dessin, tu associe et active le dessin que tu veux testertu fait un requête sur la valeur de DO que tu veux filtrer, en mode dessiner, avec transforamtion, par exemple colorier en jaunetu enregistre vers le desin source, tu ferme ton dessin vierge, et tu rouvre celui qui contient les entités, et tu verra les entités filtrée en jaune. Plus merdique, tu meurt, mais c'est comme ça. ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
bonuscad Posté(e) le 5 mars 2012 Auteur Posté(e) le 5 mars 2012 (modifié) Bonjour, Je reviens sur ce sujet car à ce jour j'avais besoin d'un outil. N'étant jamais mieux servi que par soi-même, je me suis pencher sur un code de filtrage sur OD. Je le livre en version bêta si cela intéresse d'autre personnes pour effectuer des tests (defun c:Sel_By_OD ( / js dxf_model all_fldnamelist all_fldtypelist all_vallist tbllist tbldef tblstr fldnamelist fldtypelist fldnme fldtyp numrec ct cttemp vallist typ val tmp_file dcl_file dcl_id indx Id_tbl Id_nam Id_val what_next js_sel n) (princ "\nSelection d'un objet modèle: ") (while (null (setq js (ssget "_+.:E:S:L:N" (list (cons 0 "*") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) ) ) ) ) ) (setq dxf_model (entget (ssname js 0)) all_fldnamelist () all_fldtypelist () all_vallist ()) (if (null (setq tbllist (ade_odgettables (cdar dxf_model)))) (princ "\nL'objet séléctionné ne contient pas de données d'objet.") (foreach tbl (reverse tbllist) (setq tbldef (ade_odtabledefn tbl) tblstr (cdr (nth 2 tbldef)) fldnamelist () fldtypelist () ) (foreach fld tblstr (setq fldnme (cdr (nth 0 fld)) fldtyp (cdr (nth 2 fld)) fldnamelist (append fldnamelist (list fldnme)) fldtypelist (append fldtypelist (list fldtyp)) ) ) (setq numrec (ade_odrecordqty (cdar dxf_model) tbl) ct 0 all_fldnamelist (cons fldnamelist all_fldnamelist) all_fldtypelist (cons fldtypelist all_fldtypelist) ) (while (< ct numrec) (setq cttemp 0 vallist ()) (foreach fld fldnamelist (setq typ (nth cttemp fldtypelist) cttemp (+ cttemp 1) val (ade_odgetfield (cdar dxf_model) tbl fld ct) ) (if (= typ "Integer")(setq val (fix val))) (setq vallist (append vallist (list val))) ) (setq ct (+ ct 1)) ) (setq all_vallist (cons vallist all_vallist)) ) ) (cond ((and tbllist all_fldnamelist all_fldtypelist all_vallist) (setq tmp_file (vl-filename-mktemp "sel_by_od.dcl") dcl_file (open tmp_file "w") ) (write-line "Sel_By_OD : dialog { label = \"Choix des champs à filtrer\"; :column { label = \"Application\"; :popup_list {key=\"tbl\";edit_width=25;} } :column { label = \"Données d'objets\"; :popup_list {key=\"nam\";edit_width=25;} :edit_box { label = \"Valeur du champ:\"; mnemonic = \"V\"; key = \"val\"; edit_width = 15; edit_limit = 31; } } ok_cancel_err; }" dcl_file ) (close dcl_file) (setq dcl_id (load_dialog tmp_file) indx (1- (length tbllist)) Id_tbl (nth indx tbllist) Id_nam (car (nth indx all_fldnamelist)) Id_val (car (nth indx all_vallist))) (setq what_next 2) (while (< 1 what_next) (if (not (new_dialog "Sel_By_OD" dcl_id)) (exit)) (start_list "tbl") (mapcar 'add_list tbllist) (end_list) (set_tile "tbl" (itoa indx)) (start_list "nam") (mapcar 'add_list (nth indx all_fldnamelist)) (end_list) (set_tile "nam" (itoa (- (length (nth indx all_fldnamelist)) (length (member (car (nth indx all_fldnamelist)) (nth indx all_fldnamelist)))))) (set_tile "val" (setq Id_val (car (mapcar '(lambda (x) (cond ((eq (type x) 'REAL) (rtos x)) ((eq (type x) 'INT) (itoa x)) (T x) ) ) (nth indx all_vallist) ) ) ) ) (set_tile "error" "") (action_tile "tbl" "(setq Id_tbl (nth (setq indx (fix (atof (get_tile \"tbl\")))) tbllist)) (start_list \"nam\") (mapcar 'add_list (nth indx all_fldnamelist)) (end_list) (set_tile \"nam\" (setq Id_nam (nth (- (length (nth indx all_fldnamelist)) (length (member (car (nth indx all_fldnamelist)) (nth indx all_fldnamelist)))) (nth indx all_fldnamelist)))) (set_tile \"val\" (setq Id_val (car (mapcar '(lambda (x) (cond ((eq (type x) 'REAL) (rtos x)) ((eq (type x) 'INT) (itoa x)) (T x) ) ) (nth indx all_vallist) ) ) ) ) ") (action_tile "nam" "(setq Id_nam (nth (fix (atof (get_tile \"nam\"))) (nth indx all_fldnamelist))) (set_tile \"val\" (setq Id_val (nth (vl-position Id_nam (nth indx all_fldnamelist)) (mapcar '(lambda (x) (cond ((eq (type x) 'REAL) (rtos x)) ((eq (type x) 'INT) (itoa x)) (T x) ) ) (nth indx all_vallist) ) ) ) ) ") (action_tile "val" "(setq Id_val $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (setq what_next (start_dialog)) ) (unload_dialog dcl_id) (vl-file-delete tmp_file) (setq typ (nth (- (length (nth indx all_fldnamelist)) (length (member id_nam (nth indx all_fldnamelist)))) (nth indx all_fldtypelist))) (cond ((eq typ "Real") (setq Id_val (atof Id_val))) ((eq typ "Integer") (setq Id_val (atoi Id_val))) ) (setq js (ssget "_X" (list (assoc 0 dxf_model) (assoc 8 dxf_model) (if (assoc 6 dxf_model) (assoc 6 dxf_model) '(6 . "BYLAYER")) (if (assoc 62 dxf_model) (assoc 62 dxf_model) '(62 . 256)) (if (assoc 48 dxf_model) (assoc 48 dxf_model) '(48 . 1)) (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) js_sel (ssadd) ) (cond (js (repeat (setq n (sslength js)) (if (not (null (setq tbllist (ade_odgettables (setq ent (ssname js (setq n (1- n)))))))) (foreach tbl tbllist (setq tbldef (ade_odtabledefn tbl) tblstr (cdr (nth 2 tbldef)) fldnamelist () fldtypelist () ) (foreach fld tblstr (setq fldnme (cdr (nth 0 fld)) fldtyp (cdr (nth 2 fld)) fldnamelist (append fldnamelist (list fldnme)) fldtypelist (append fldtypelist (list fldtyp)) ) ) (setq numrec (ade_odrecordqty ent tbl) ct 0) (while (< ct numrec) (setq cttemp 0) (foreach fld fldnamelist (setq typ (nth cttemp fldtypelist) cttemp (+ cttemp 1) val (ade_odgetfield ent tbl fld ct) ) (if (= typ "Integer")(setq val (fix val))) (if (and (eq tbl Id_tbl) (eq fld Id_nam) (equal val Id_val 0.00000001)) (setq js_sel (ssadd ent js_sel)) ) ) (setq ct (+ ct 1)) ) ) ) ) ) ) ) ) (princ (strcat "\n" (itoa (sslength js_sel)) " trouvé(s)")) (sssetfirst nil js_sel) (prin1) ) Modifié le 8 mars 2012 par bonuscad Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 5 mars 2012 Posté(e) le 5 mars 2012 Hello Youpee j'attendais depuis longtemps ce genre de routine Cela semble bien marcher et je suggere qq petites ameliorations : 1) Pouvoir faire une selection classique ou bien TOUS les objets ayant la table OD choisie (ce que fait aujourd'hui le programme) 2) Pour les champs de type caractere : une COCHE Minuscule/Majuscule et aussi pouvoir faire DIFFERENT et non pas seulement EGAL et voire meme le reve : utilisation possible des caracteres magiques * ? 3) Pour les champs de type Integer ou Real, svp qq options supplementaires du genre : = et non pas seulement EGAL Encore merci pour tes efforts Je continue les tests ... Le Decapode (lecrabe) Autodesk Expert Elite Team
lecrabe Posté(e) le 5 mars 2012 Posté(e) le 5 mars 2012 Hello --- 1er bug --- Sur un DWG avec de multiples tables OD par objet graphique, je peux changer de table OD dans le 1er ascenseur MAIS apres avoir selectionne une autre table ODle 2eme ascenseur ne me presente pas les champs de la nouvelle table OD selectionnee ! Probleme de rafraichissement ? Snif, snif Desires tu un DWG exemple ? Le Decapode (lecrabe) PS: je te previens, je suis un redoutable chasseur de bug ! Autodesk Expert Elite Team
bonuscad Posté(e) le 5 mars 2012 Auteur Posté(e) le 5 mars 2012 Hello --- 1er bug --- Sur un DWG avec de multiples tables OD par objet graphique, je peux changer de table OD dans le 1er ascenseur MAIS apres avoir selectionne une autre table ODle 2eme ascenseur ne me presente pas les champs de la nouvelle table OD selectionnee ! Probleme de rafraichissement ? Snif, snif Desires tu un DWG exemple ? Le Decapode (lecrabe) PS: je te previens, je suis un redoutable chasseur de bug ! Salut, Un DWG exemple ne serait pas de refus pour corriger le bug car je n'ai que peu (pour l'instant) de fichiers ayant des OD. J'ai le sentiment d'avoir mis le doigt dans un engrenage, donc pour les améliorations cela peut être demain comme 2 ans (comme mon lancement du sujet en 2010), mais tes suggestions sont intéressantes et m'y pencherai peut être dessus...L'ennui est qu'il y a peu de lispeur sous map, en tout cas je trouve très peu de code source sur le Net, donc j'avance très doucement. On avancerai tellement plus vite à plusieurs... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 5 mars 2012 Posté(e) le 5 mars 2012 Hello Bruno Voici un bon DWG MAP avec 3 tables OD par objet graphique En esperant que tu puisses corriger ce petit bug et implementer qq ameliorations !? Encore MERCI pour ton boulot sur MAP car ces truffes d'Autodesk n'envisagent pas d'ameliorer quoique ce soit du cote des ODs ! C Triste !! Le Decapode (lecrabe) Autodesk Expert Elite Team
bonuscad Posté(e) le 8 mars 2012 Auteur Posté(e) le 8 mars 2012 Hello Bruno Voici un bon DWG MAP avec 3 tables OD par objet graphique En esperant que tu puisses corriger ce petit bug et implementer qq ameliorations !? Encore MERCI pour ton boulot sur MAP car ces truffes d'Autodesk n'envisagent pas d'ameliorer quoique ce soit du cote des ODs !C Triste !! Le Decapode (lecrabe) Bonjour Patrice, Bon, j'ai pas mal galéré avec la gestion des listes en DCL, je pense que mon code est encore un peu brouillon mais il à l'air de fonctionner.J'ai éditer mon code précédent (bug vu par tes soins) et t'invite donc à tester de nouveau cette nouvelle mouture. Pour les autres demandes, j'attends d'abord de voir que le code actuel fasse ses preuves. Si dans mon esprit les opérateurs semblent pouvoir être intégrés, ce n'est pas le cas (en tout cas d'une manière simple) pour l'utilisation des jokers. (il faut avoir à l'esprit que les données d'objet peuvent être des chaînes, entiers ou réels, donc difficile d'employer des jokers pour des substitutions) Bon tests Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 9 mars 2012 Posté(e) le 9 mars 2012 Hello Bruno Merci, merci je vais essayer de tester aujourd'hui ... Neanmoins SVP il y a une micro-amelioration qui serait fort sympa, c'est d'avoir le test EGAL (ce que tu fais aujourd'hui) OU le test DIFFERENT () Les tests = ne concernent pour moi que les champs de type Integer et Real/Float L'option Uppercase/Lowercase et la prise en compte des caracteres magiques * ? ne concernent QUE les champs de type caractere !Je croyais que la fonction WCMATCH (ou qq chose de ce genre) faisait presque tout au niveau de * ? ~ !! Merci, Le Decapode (lecrabe) Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 9 mars 2012 Posté(e) le 9 mars 2012 Bonjour, La commande proposée par bonuscad est intéressante, elle ressemble assez à la sélection similaire. N'y connaissant rien en DCL, je suis parti en .Net pour développer une fonction plus proche dans l'idée de la Sélection Rapide d'AutoCAD Il est possible de sélectionner des objets avant de lancer la commande (sélection manuelle ou sélection rapide AutoCAD), sinon le test se fera sur tout le dessin.Le dialogue affiche toutes les tables dispo, on peut en sélectionner une ou plusieurs (si plusieurs, seuls les champs communs apparaissent). Ensuite on choisit le champ, l'opérateur et on tape la valeur, ou bien on clique sur Obtenir une valeur (bouton qui scrute le dessin et propose toutes les valeurs dispo)Ensuite on clique Ajouter Condition, puis sur Exécuter. Normalement la DLL doit fonctionner sur toutes les versions depuis la 2007. Si quelqu'un veut la tester, et me remonter les commentaires. OlivierObjectDataCS.zip
lecrabe Posté(e) le 10 mars 2012 Posté(e) le 10 mars 2012 Hello Olivier Un seul mot : ENORME ! Le truc qu'Autodesk aurait du inclure dans MAP depuis longtemps ! Je te previens que je vais tester "a fond" ta DLL sur MAP 2009-2012et des dessins varies avec de multiples tables OD parfois meme multiples tables OD par objet graphique j'en ai des "tonnes" ... surtout avec la topologie ... Ca me laisse un peu reveur que la meme DLL puisse fonctionner sur tout MAP depuis la 2007 car il y a des subtilites DOTNET v2/3/3.5/4 suivant les versions d'AutoCAD !?Mais je te crois bien volontiers ! C'est l'arrivee en Ile de France, qui t'a booste ! MERCI, le Decapode (lecrabe) Autodesk Expert Elite Team
lecrabe Posté(e) le 10 mars 2012 Posté(e) le 10 mars 2012 Hello Olivier Au secours, apres le NetLoad c quoi la commande clavier pour lancer ??? Le Decapode (lecrabe) PS: j'ai essaye plein de choses : selectbyod, objectdatacs, etc Autodesk Expert Elite Team
fabcad Posté(e) le 10 mars 2012 Posté(e) le 10 mars 2012 Bonjour les amis Mappiens, Magnifique et merci pour l’intérêt que vous portez à développer les Données d'Objets car AutoDESK défend leur produit FDO mais les Données d'Objets sont plus faciles à traiter pour préparer justement des données géographiques. Ceci étant dit, comment se nomme la fonction à écrire derrière la ligne de commande pour le dinosaure comme moi, car comme Lecrabe j'ai tout essayé mais rien, et c'est si facile dans les films de trouver la combinaison du coffre :-) . Merci d'avance, Cordialement, Fabcad Lecrabe m'a devancé quelle rapidité.
Olivier Eckmann Posté(e) le 10 mars 2012 Posté(e) le 10 mars 2012 excusez pour la commande, c'est MQSELECT ( pour MapQuickSelect) Olivier
fabcad Posté(e) le 10 mars 2012 Posté(e) le 10 mars 2012 Re-bonjour, En premier lieu merci pour le nom et voici le résultat : Sur un map 2011, la boite de dialogue s'affiche mais rien ne se passe. Pas de sélection possible et pas de contenu qui s'affiche. Fabcad ci-joint une copie d'écran.
Olivier Eckmann Posté(e) le 10 mars 2012 Posté(e) le 10 mars 2012 Bonsoir, C'est surprenant, j'avais testé sur un MAP 2008, je vais voir sur une version plus récente. Normalement, les opérateurs AND OR et NOT devrait être grisés.Pour info, le MAP 2011 c'est un 32 ou 64 bits? Olivier OK, j'ai trouvé, je ne l'avais pas compilé correctement en version Release.Voilà la nouvelle DLLObjectDataCS.zip
lecrabe Posté(e) le 11 mars 2012 Posté(e) le 11 mars 2012 Hello Olivier C SUR que cette nouvelle compil marche mieux ! Je suis en train de tester sur MAP 2010 32 bits sous Win Seven ... Cela me parait TIP-TOP ! Le Decapode (lecrabe) Autodesk Expert Elite Team
lecrabe Posté(e) le 11 mars 2012 Posté(e) le 11 mars 2012 Hello En effet les operateurs AND OR NOT sont grises avec MAP 2010 ou MAP 2012 en version 32 bits sous Windows Seven ! Pourquoi sont ils grises ? SNIF j'aurais bien aime faire au moins 2 tests avec MQSELECT ! Par exemple sur des Topologies de type Reseau :SELECT * FROM 'Dessin Entier' (ou 'Selection Courante') WHERE START_NODE@TPMLINK_DEMO_RUES = 4 OR END_NODE@TPMLINK_DEMO_RUES = 4 Ce qui me permet de trouver tous les "fils/liens" (ou canalisations) qui sont connectes sur le Noeud (Tampon-Regard) Numero 4 Le Decapode (lecrabe) PS: tu peux recuperer mon DWG de test - Msg du 05 Mars 2012 15h08 Autodesk Expert Elite Team
fabcad Posté(e) le 11 mars 2012 Posté(e) le 11 mars 2012 Hello Sur un MAP 2011 en version 32 bits sous Windows XP, MQSELECT fonctionne à merveille :-). Comment supprime t'on une requête erronée ? Sinon j'essaierai sur un map 2007 au travail lundi. Joli travail M. Olivier Eckmann. Cordialement, Fabcad
lecrabe Posté(e) le 11 mars 2012 Posté(e) le 11 mars 2012 Hello Mes tests rapides sur mon DWG de test, montrent que cela fonctionne bien sous Windows Seven 32 bits avec MAP 2010 / 2011 / 2012 et aussi avec CIVIL 2011 ! Qq micro-corrections :- Le titre de la case de dialogue : Slection ...- Si possible avoir acces (au moins une fois) a : AND OR NOT- Case pour re-initialiser la requete en cas d'erreur ou supprimer la ligne courante (un peu comme dans la gestion du groupe de dessins et les requetes associees) Un seul mot : MAGNIFIQUE La semaine prochaine, je vais tester avec des DWGs contenant des dizaines de milliers d'objets et OD de MAP pour voir si ca tient la charge ! D'autre part je vais tester aussi avec MAP 201x en version 64 bits ! MERCI le Francilien (ex Brestois), Le Decapode de la Loire (lecrabe) Autodesk Expert Elite Team
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