bonuscad Posté(e) le 29 novembre 2012 Posté(e) le 29 novembre 2012 Bonjour, Je pense que c'est un bug! Je viens de m'apercevoir que lorsque ma requête contient dans une condition (AND NOT donnée < nombre négatif), elle ne fonctionne pas (alors qu'elle devrait, enfin il me semble: j'ai des données positives ET négatives...) Le problème est seulement avec NOT, car avec AND seul je n'ai pas de problème avec les nombre négatif. Si ma requête est (AND NOT donnée < nombre positif), la requête fonctionne. Bon même si cela peut paraître étrange de faire des requêtes sur des nombres négatifs, ce dysfonctionnement me mets dans l'embarras, surtout que je ne vois pas comment le contourner. A moins que quelqu'un ai déjà réalisé des requêtes complexe sur des nombres négatifs sans problèmes.NB: MAP 2011 Version 3 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 29 novembre 2012 Posté(e) le 29 novembre 2012 Hello Je viens de faire des tests (en version 32 bits) avec MAP 2012 et 2013 sans trouver de bugs !Et ce a la fois sur un champ OD ENTIER et sur un champ OD REEL ... Cependant je ne suis pas sur de refaire exactement la meme requete que toi ?C une requete sur 2 lignes/conditionsJe combine un emplacement geographique (Type fenetre) avec un AND NOT Donnees: TEST.NBR_REEL mais je n'ai rien groupe avec des parentheses ... D'autre part je ne suis pas sur un MAP 2010 ou 2011, donc ... lecrabe Autodesk Expert Elite Team
bonuscad Posté(e) le 29 novembre 2012 Auteur Posté(e) le 29 novembre 2012 Hello lecrabe, Ben j'y comprends rien du tout... Je me suis fait un petit fichier de données test.Et avec la requête suivante:http://pix.toile-libre.org/upload/img/1354201838.pngcela fonctionne parfaitement, cela me retourne tous les objets dans l'intervalle d'index 0;-1 inclus (sur un ensemble de 5 à -5 avec des valeurs tous les 0.5 Dans mon cas concret, avec exactement la même requête sur un ensemble de (4.250 à -1.509) avec des intermédiaires à valeur rondes (4 3 2 1 0 -1) et bien 0 et -1 me sont renvoyés (normal) MAIS aussi -1.509 ??? Le champ index étant en réel dans les 2 fichiers... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 29 novembre 2012 Posté(e) le 29 novembre 2012 Hello SVP tu m'envoies en MP ton DWG de Test (DWG associe en fait) et le DWG de depart avec deja ta requete (avec 3 lignes/conditions) sur le DWG de Test toute prete + qq cercles/rectangles rouges indiquant ce qui doit s'afficher ou pas ... Ainsi j'essaye sur MAP 2012/2013 pour voir ... lecrabe Autodesk Expert Elite Team
lecrabe Posté(e) le 29 novembre 2012 Posté(e) le 29 novembre 2012 Hello Merci pour les fichiers ... J'ai le MEME probleme que toi avec MAP 2012 et MAP 2013 ... Je pense que MAP (dans les requetes sur le groupe) teste MAL les valeurs negatives sur les REELs - A verifier avec les entiers ? Ou alors on ne sait pas faire la requete correcte ! *** 1 ***Mais j'ai trouve un truc encore plus desesperant !Tu fais seulement INDEX_PR = 0 comme critere de selection ...Et ce CRETIN de MAP dessine TOUS les PRs alors que certains sont negatifs, d'autres sont positifs, et un PR = 0 En plus avec INDEX_PR 0 (Zero) il dessine bien TOUS les PRs sauf le PR = 0 *** 2 ***Avec simplement INDEX_PR >= 0 ou =alors que avec > ou > , c OK !! Il y a un sacre probleme avec le ZERO et aussi avec = ?et SURTOUT des qu'il y a des tests sur valeurs negatives ! lecrabe Autodesk Expert Elite Team
bonuscad Posté(e) le 30 novembre 2012 Auteur Posté(e) le 30 novembre 2012 Merci de tes tests, Si on ne peut plus faire confiance à des requêtes basiques et qu'on obtient des valeurs erronées, il faut qu'on m'explique l'utilité de Map... Pourtant avec le fichier de test (ou est issue l'image de mon post précédent) tout se passe correctement. J'ai donc pensé à l'ordre de création des entités (test effacer dernier, effacer dernier ....), mais que nenni, malgré une remise en ordre avec ceci:((lambda ( / ) (while (setq ent (entsel)) (cond (ent (setq dxf_cod (entget (setq source_obj (car ent)))) (foreach m (foreach n dxf_cod (if (not (member (car n) '(0 100 67 410 8 100 10 210 50))) (setq lremov (cons (car n) lremov)))) (setq dxf_cod (vl-remove (assoc m dxf_cod) dxf_cod)) ) (entmake dxf_cod) (setq target_obj (entlast)) (COPY_DATA source_obj target_obj "All") (entdel source_obj) ) ) ) ))(NB : copy_od.lsp chargé au préalable)j'ai essayé dans les 2 sens (croissant et décroissant), toujours pareil. J'ai essayé aussi de supprimer les caractères spéciaux "_" de mon nom de champ INDEX, pas mieux.Je ne vois vraiment pas pourquoi ça ne fonctionne pas avec mon fichier. Il doit bien y avoir une raison, mais laquelle? En tout cas Map n'est pas à la hauteur, pour moi il y a un bug sérieux. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Olivier Eckmann Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 Bonjour, je suis preneur de tes fichiers (en MP), je peux essayer de voir si on peut contourner le problème. Merci Olivier
lecrabe Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 Hello Olivier C parti ! Je me suis bien arrache les cheveux hier soir ... Bon WE, lecrabe Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 Bonsoir, A priori c'est un souci dans le DWG. D'ailleurs quand on le sauvegarde, on a un message en ligne de commande : "Mise à jour de l'index dans le block *Model_Space" J'ai fait un MAPEXPORT en SDF (classe Point) avec tous les champs, puis un MAPIMPORT du SDF. J'obtiens les même données, par contre les champ ont été classés par ordre alphabétique. Avec ce nouveau fichier, pas de souci, les requêtes positives et négatives avec ou sans NOT fonctionnent parfaitement. Par contre je n'ai pas trouvé la cause du dysfonctionnement dans le dessin d'origine. Olivier
Olivier Eckmann Posté(e) le 30 novembre 2012 Posté(e) le 30 novembre 2012 C'est bon j'ai trouvé, chaque point possédait 4 enregistrements de la table, 1 rempli comme on le voit dans les propriétés d'AutoCAD et 3 enregistrement avec les valeurs par défaut et comme la valeur par défaut de INDEX_PR est 0, les 3 autres enregistrements ont 0 comme valeur d'INDEX_PR. Donc le test de condition avec 0 donnait toujours un résultat logique bien que surprenant. Olivier
lecrabe Posté(e) le 1 décembre 2012 Posté(e) le 1 décembre 2012 Hello Olivier Je suis NUL NUL car je n'ai pas pense a regarder le nombre de records OD sur chaque entite, c pourtant un piege ULTRA-CLASSIQUE Et en effet un MAPEXPORT puis MAPIMPORT filtre tout ca ... en ne gardant que le 1er Record ! Je m'etais focalise dans les noms de tables et noms de champs OD en changeant tout car il y avait un TIRET (signe moins) qui aurait peut etre pu generer un bug !! En resume Olivier, you are the best ! BRAVO, lecrabe Autodesk Expert Elite Team
Olivier Eckmann Posté(e) le 1 décembre 2012 Posté(e) le 1 décembre 2012 Hello Patrice, c'est un peu grâce à toi que j'ai trouvé. J'ai lancé la commande MQSELECT et comme tu m'as fait rajouté le nombre d'enregistrement par table, il m'indiquait 24 pour seulement 6 objets, ça a fait tilt. Olivier
bonuscad Posté(e) le 3 décembre 2012 Auteur Posté(e) le 3 décembre 2012 Merci beaucoup Olivier de ton éclairage. Comme Patrice je suis nul, car j'ai été déjà confronté à ce problème de nombre d'enregistrement, mais je n'ai pas fais le lien. D'ailleurs j'avais écrit ceci à la volée pour m'éviter l'export puis le ré-import. (defun c:del_record_other0 ( / js n obj tbllist numrec ct) (setq js (ssget "_X" (list '(0 . "POINT") '(8 . "PR") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) (cond (js (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (setq tbllist (ade_odgettables obj)) (foreach tbl tbllist (cond ((eq tbl "POINTS-ROUTIERS") (setq numrec (ade_odrecordqty obj tbl)) (setq ct (1- numrec)) (while (not (zerop ct)) (ade_oddelrecord obj tbl ct) (setq ct (- ct 1)) ) ) ) ) ) ) ) ) En tout cas, en effet, cela fonctionne beaucoup mieux maintenant.Dommage que dans les requêtes il ne soit pas possible de faire un distinguo sur des tables multiples, car à priori on ne sait pas sur quel niveau d'enregistrement AutocadMap va faire sa requête.Il ne sont plus à une variable près chez AutoDesk, il pourrait en implémenter une qui verrouille / déverrouille l'enregistrement multiple. Encore Merci à tous les deux de votre temps passé. Il faudra que je vérifie quand même les routines que j'ai faites à la volée pour renseigner mes OD, car je pense que le problème de départ vient de là. (j'ai du faire une erreur de conception qui cumule mes données au lieu de les écraser...) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 5 décembre 2012 Auteur Posté(e) le 5 décembre 2012 Je reviens juste sur le sujet pour vous proposer le code si dessus remanié pour un traitement plus généraliste. Donc celui-ci va vous permettre de nettoyer les tables de données d'objets qui auraient plusieurs enregistrements. Seul tous les objets de l'espace courant seront traités.Cette routine vous évitera l'export et le ré-import qui était la solution pour se débarrasser des ces multiples enregistrements en trop. (defun c:del_record_other0 ( / js n obj tbllist numrec ct lst) (setq js (ssget "_X" (list (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) lst nil ) (cond (js (repeat (setq n (sslength js)) (setq obj (ssname js (setq n (1- n)))) (setq tbllist (ade_odgettables obj)) (cond (tbllist (foreach tbl tbllist (setq numrec (ade_odrecordqty obj tbl)) (cond ((> numrec 1) (setq ct (1- numrec)) (while (not (zerop ct)) (ade_oddelrecord obj tbl ct) (setq ct (- ct 1)) ) (if (not (member tbl lst)) (setq lst (cons tbl lst)) ) ) ) ) ) ) ) ) ) (if lst (mapcar '(lambda (x) (princ (strcat "\nLa table " x " à été nettoyée"))) lst) (princ "\nAucune table à nettoyer.") ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
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