GEGEMATIC Posté(e) le 5 octobre 2015 Partager Posté(e) le 5 octobre 2015 (modifié) salut à tous,je crée un nouveau sujet car celui d'origine à légèrement dévié. Je propose en version ultra-beta une dll qui permet de filtrer les entité par leur table,à partir d'une commande avec une case de dialogue:ODSELECT puis, et c'est je pense plus intéressant, deux commandes lisp,qui permettent de sélectionner, sans dialogue, par table ou par table, champ et valces deux commandes sont SelParTablelsp et SelParODVal , elle retournent un liste contenant un jeu de sélection 'Sélection par table 'exemple: (SelParTablelsp "MATABLE" ) -> (<Selection set: 74>) ' 'Sélection par table, champ et valeur, la valeur doit toujours être une chaine 'exemple: (SelParODValLsp "MATABLE" "MONCHAMP" "myValAlwaysAsStr") -> (<Selection set: 74>) 'concret: (SelParODValLsp "E-TRONCO" "DIAMETRE" "100") -> (<Selection set: 74>) Il faut charger les 2 dll, puis ouvrir un autre dessin pour pouvoir les tester (l’initialisation des commandes ne se fait pas correctement au chargement, très bien sur une ouverture de fichier) Ces commandes sont rugueuses, on est loin de l'excellent Mqselect, il n'y pas possibilité d'ajouter des opérateurs aux requêtes, la casse doit être strictement respectée, et les valeurs doivent toujours être présentées sous forme de chaine.mais je pense qu'en partant d'une sélection par table, on peut affiner son traitement en lisp sur un jeu réduit, on gagnera quand même beaucoup de temps : un exemple de benchmark: 5.2 s pour sélectionner 992 objets parmis les 42785 entité d'un dessin, toutes les entités ayant des OD ... Merci de tester avec 2013 à 2016, car ça marche très bien chez moi, mais pas chez Bonuscad !Gégé la pièce jointe est supprimée, voir dans les messages suivants. Modifié le 7 octobre 2015 par GEGEMATIC ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 7 octobre 2015 Partager Posté(e) le 7 octobre 2015 Salut, Donc sur AutoCad Map 2014 (OS: Windows 7 64bits) Pas de souci avec ODSELECT. Avec SelParTablelsp et SelParODVal par contre...Bien qu'ils me retournent bien un nombre d'objets placés dans un "Selection set", pas moyen d'obtenir cette sélection effective.Il n'y a aucune sélection dans la fenêtre de propriété.Si je fais un "SELECT" "_previous" seul ma dernière sélection est retournée, qui n'a rien à voir avec la sélection faite par SelParTablelsp ou par SelParODVal.... Soit je m'en sert mal (c'est possible) ou soit ton jeu de sélection n'est pas valide pour être reconnu comme une sélection. Ce qui me fait dire ceci est que j'ai essayé en lisp la fonction suivante:(sssetfirst nil (SelParTablelsp "RD_METADATA"))et en retour j'ai:21416 objects in the drawingSélection des objets de la table RD_METADATA dans l'espace objet1843 objects selected with data; erreur: type d'argument incorrect: lselsetp (<Selection set: 517>) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
GEGEMATIC Posté(e) le 7 octobre 2015 Auteur Partager Posté(e) le 7 octobre 2015 Salut et merci du test, je me posais beaucoup de question sur la manière dont j'utilisais les références Salut,Donc sur AutoCad Map 2014 (OS: Windows 7 64bits)Pas de souci avec ODSELECT.Avec SelParTablelsp et SelParODVal par contre...Bien qu'ils me retournent bien un nombre d'objets placés dans un "Selection set", pas moyen d'obtenir cette sélection effective.je suis donc déjà content qu'odselect marche chez toi,pour les fonctions lisp, d'après ce que j'ai compris, on ne peut que retourner nil (liste vide finalement) ou une liste de résultatdonc les fonctions lisp retournent '(<sset>)pour avoir le le js, il faut faire (car (SelParTablelsp "RD_METADATA"))et (sssetfirst nil (car (SelParTablelsp "RD_METADATA")))si ça marche c'est bien !Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 7 octobre 2015 Partager Posté(e) le 7 octobre 2015 Soit je m'en sert mal (c'est possible) C'est confirmé, car avec ta suggestion: (sssetfirst nil (car (SelParTablelsp "RD_METADATA"))), ça fonctionne!Je n'avais pas fais attention que le retour était une liste. Donc c'est OK pour l'instant avec des tests rapides. Le temps de traitement reste correct, pas de latence exagérée, c'est bien. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
GEGEMATIC Posté(e) le 7 octobre 2015 Auteur Partager Posté(e) le 7 octobre 2015 merci encore,donc je reposte une version plus rationnelle, plus simple, pour que l'on puisse l'utiliser largement en lisp.Il faut que le framework 4.5 soit installé. il n'y a plus qu'une dll, j'ai supprimé les fonctionnalités d'échange lisp/netil reste donc : une commande autocad, odselect, avec case de dialogue, qui grippe les entités 2 commandes lisp : Lisp command SelParTablelsp : (SelParTablelsp "TABLE" ) -> (<Selection set: 74>)Lisp command SelParODValLsp : (SelParODValLsp "TABLE" "CHAMP" "myVal") -> (<Selection set: 74>) ces 2 commandes retournent soit une liste contenant un jeu de sélection, soit nil GégéODselect.zip ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 7 octobre 2015 Partager Posté(e) le 7 octobre 2015 Hello Maitre Gege Lisp command SelParODValLsp : (SelParODValLsp "TABLE" "CHAMP" "myVal") -> () SVP ca fonctionne sur les 4 types de champ OD : Integer, Real, String & Point (que je n'utilise jamais) ?? Bye, lecrabe Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
GEGEMATIC Posté(e) le 7 octobre 2015 Auteur Partager Posté(e) le 7 octobre 2015 Aïe ! ça pince !SVP ca fonctionne sur les 4 types de champ OD : Integer, Real, String & Point (que je n'utilise jamais) ?? Bye, lecrabe Oui ça marche mais c'est vraiment pas terrible: l'argument doit être obligatoirement une chaine, (sauf pour les integer, ou la conversion est automatique)donc pour les chaines et les integer, aucun problèmepour les réels et les points, ça se complique:il faut que la chaine représente le réel retourné en fonction de la variable LUPRECsi LUPREC = 3, la valeur réele 1.2555 est affichée 1.256donc :(SelParODValLsp "E-TRONCO" "ZAMONT" "1.256") marche très bien, mais pas (SelParODValLsp "E-TRONCO" "ZAMONT" "1.2555")Pour les points, c'est pareil avec Luprec = 3pour chopper les points 0,0,0(SelParODValLsp "POINT" "PNT" "0.000,0.000,0.000") Je sais que ce n'est pas un fonctionnement convenable, mais ça peut rendre service quand même.le problème c'est que les informations sur une valeur et la valeur elle même ne sont pas au même endroit, il faut donc que je reprenne un peu mon code pour pouvoir anticiper le type de valeur que j'attends, car je pensais le faire en partant de ce que l'utilisateur demande, mais ça marche pas, car si je demande 100, je veux avoir aussi 100.0000 Voilà, j'espère améliorer les choses bientôt !Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 7 octobre 2015 Partager Posté(e) le 7 octobre 2015 Hello Integer, Real, String : c OK pour moi ! 1) Est ce que l'on peut passer un Integer normal directement, ca serait bien !? En fait c quoi ta syntaxe correcte ?(SelParODValLsp "E-TRONCON" "NO_CANA" "123") ou(SelParODValLsp "E-TRONCON" "NO_CANA" 123) 2) Pour les reels, l'ideal serait de passer un parametre supplementaire de precision : 1 / 0.1 / 0.01 / 0.001 ( FUZZ parameter ) 3) Et les points, on (Votre serviteur en fait) s'en fout ! Car dans ce cas, j'ai toujours 3 champs reels/flottants: X , Y , Z SORRY, je suis un peu enquiquineur, Bye, lecrabe Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
GEGEMATIC Posté(e) le 7 octobre 2015 Auteur Partager Posté(e) le 7 octobre 2015 Hello Integer, Real, String : c OK pour moi ! 1) Est ce que l'on peut passer un Integer normal directement, ca serait bien !? En fait c quoi ta syntaxe correcte ? (SelParODValLsp "E-TRONCON" "NO_CANA" 123) ça ça marche, c'est bon ! 2) Pour les reels, l'ideal serait de passer un parametre supplementaire de precision : 1 / 0.1 / 0.01 / 0.001 ( FUZZ parameter )dans ce cas, il faut rappeler qu'il s'agit d'une commande lisp, utilisée dans un cadre lisp (car sinon MQSELECT d'Olivier en fait beaucoup plus ) donc on peut trsè bien précéder son instruction d'un (Setvar "LUPREC" 2)ça équivaut a un un fuzz = 0.013) Et les points, on (Votre serviteur en fait) s'en fout ! Car dans ce cas, j'ai toujours 3 champs reels/flottants: X , Y , Z Pareil pour moi, je n'ai jamais utilisé ce format ...SORRY, je suis un peu enquiquineur, Bye, lecrabeMais non !ces commandes évolueront, et c'est bien d'avoir différents avis ...Je me suis décidé car ces problèmes de recherche me font perdre beaucoup de temps à cause du temps de traitement en lisp, du coup j'ai pensé que ça valait le coup de perdre un peu de temps la dessus ...gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com Lien vers le commentaire Partager sur d’autres sites More sharing options...
GEGEMATIC Posté(e) le 14 octobre 2015 Auteur Partager Posté(e) le 14 octobre 2015 Salut à tous,j'ai finalement terminé une version assez propre d'Odselect, et j'ai fini par accéder aux demandes ducrabe, avec des argument précision, case sensitive et tout le toutim. j'ai fait un article sur mon blog ici Je fais un doublon de ce message sur Géorezo j'espère que ça fonctionnera bien chez vous ! Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com Lien vers le commentaire Partager sur d’autres sites More sharing options...
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