fabcad Posté(e) le 10 novembre 2011 Posté(e) le 10 novembre 2011 Afin d'écrire des Textuels (mtextes ou textes) en récupérant les chaines de caractères issues des tables de données d'objets d'AutoCAD MAP par une case de dialogue. Cdc de la case de dialogue :Barre de titreMessage1ère liste : Nom de la ou des tables associées.2ème liste : afficher les champs disponibles en fonction du nom de la table choisi en 1ère liste. Résultat sous forme de liste- 1er élément : nom de la table.- 2ème élément : Nom du champ. Bien sur, si vous voyez d'autres types de listes utilisant le même système liste/sous-liste (filtres de calques et la liste de calques, etc.), je suis preneur pour avancer dans la routine finale. Merci aux pros des fichiers DCL. Fabcad
Patrick_35 Posté(e) le 10 novembre 2011 Posté(e) le 10 novembre 2011 Salut Avec MAT par exemple qui affiche les attributs en fonction de bloc choisit (dans la liste)Encore avec GEF qui affiche les calques en fonction des fenêtres choisit et des filtresOu encore avec LXL qui affiche les feuilles Excel en fonction du fichier et les liaisons en fonction de la feuille Bon courage ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabcad Posté(e) le 15 novembre 2011 Auteur Posté(e) le 15 novembre 2011 Bonjour, Merci Patrick_35, En regardant les 3 solutions, mat.lsp serait la fonction qui se rapprocherait de l'utilitaire que je veux créer. Le plus difficile c'est de remplacer tes sous-fonctions par les sous-fonctions de traitement des Données d'Objets. Dans ta case de dialogue la 1ere liste c'est la liste des tables crées dans le dessin ou alors la liste des tables associées à un objet.La deuxième liste contient les champs de la table choisie dans la liste des tables. A suivre,
Patrick_35 Posté(e) le 15 novembre 2011 Posté(e) le 15 novembre 2011 Salut Tout dépend comment tu constitues tes listes et de la rapidité de traitement souhaitée pour afficher les listes Par exemple, avec MAT, je sélectionne d'abord le bloc et ensuite je crée une liste des attributs du bloc sélectionné.Si je faisais une liste de tous les blocs avec tous les attributs, le traitement risque de prendre un certain temps. Un autre exemple, tu peux faire une liste dans ce style(setq liste '(("choix1" "a" "b" "c" "d") ("choix2" "e" "f" "g") ("choix23" "gg" "toto")))Un (mapcar 'car liste) pour afficher la première listeUn (action_tile "Ma_liste_1" "(setq position_liste_1_dcl $value)") pour avoir la position sélectionnée dans le choix de la première listeUn (cdr (nth (atoi position_liste_1_dcl) liste)) pour trouver la seconde liste et ensuite l'afficher ps : tu peux aussi utiliser par exemple un (cdr (assoc "choix2" liste)) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabcad Posté(e) le 17 novembre 2011 Auteur Posté(e) le 17 novembre 2011 Bonjour, Merci pour les infos mais je sèche complètement. Je voudrais comprendre ou doit-on créer les listes avant ou pendant les action_tile ? Pour un peu d'aide voici, ci-joint mon fichier Lisp et le fichier DCL (merci Patrick_35)gestionnaire_od.lspgestionnaire_od.dcl
Patrick_35 Posté(e) le 17 novembre 2011 Posté(e) le 17 novembre 2011 Salut Il y a certaines fonctions que je n'ai pas comme (ade_odtabledefn nom_tbl) Donc, voici deux exemples Le 1er qui gère deux listes(defun c:ex1(/ affiche chx dcl lst pos tbl) (defun affiche(pos) (start_list "liste_fields") (mapcar 'add_list (nth (atoi pos) lst)) (end_list) (setq chx "0") ) (and (setq dcl (findfile "gestionnaire_od.dcl")) (setq dcl (load_dialog dcl)) (new_dialog "gestionnaire_od" dcl) (progn (setq tbl '("Choix 1" "Choix 2" "Choix 3" "Choix 4" "Choix 5") lst '(("Choix 1.1" "Choix 1.2" "Choix 1.3" "Choix 1.4") ("Choix 2.1" "Choix 2.2" "Choix 2.3" "Choix 2.4") ("Choix 3.1" "Choix 3.2" "Choix 3.3" "Choix 3.4") ("Choix 4.1" "Choix 4.2" "Choix 4.3" "Choix 4.4") ("Choix 5.1" "Choix 5.2" "Choix 5.3" "Choix 5.4") ) ) (setq pos "0") (start_list "liste_tbl") (mapcar 'add_list tbl) (end_list) (affiche pos) (action_tile "liste_tbl" "(setq pos $value)(affiche pos)") (action_tile "liste_fields" "(setq chx $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (and (eq (start_dialog) 1) (princ (strcat "\nLe choix est " (nth (atoi chx) (nth (atoi pos) lst)))) ) (unload_dialog dcl) ) ) (princ) ) Le second qui gère une liste(defun c:ex2(/ affiche chx dcl lst pos tbl) (defun affiche(pos) (start_list "liste_fields") (mapcar 'add_list (cdr (nth (atoi pos) lst))) (end_list) (setq chx "0") ) (and (setq dcl (findfile "gestionnaire_od.dcl")) (setq dcl (load_dialog dcl)) (new_dialog "gestionnaire_od" dcl) (progn (setq lst '(("Choix 1" "Choix 1.1" "Choix 1.2" "Choix 1.3" "Choix 1.4") ("Choix 2" "Choix 2.1" "Choix 2.2" "Choix 2.3" "Choix 2.4") ("Choix 3" "Choix 3.1" "Choix 3.2" "Choix 3.3" "Choix 3.4") ("Choix 4" "Choix 4.1" "Choix 4.2" "Choix 4.3" "Choix 4.4") ("Choix 5" "Choix 5.1" "Choix 5.2" "Choix 5.3" "Choix 5.4") ) ) (setq pos "0") (start_list "liste_tbl") (mapcar '(lambda(x) (add_list (car x))) lst) (end_list) (affiche pos) (action_tile "liste_tbl" "(setq pos $value)(affiche pos)") (action_tile "liste_fields" "(setq chx $value)") (action_tile "accept" "(done_dialog 1)") (action_tile "cancel" "(done_dialog 0)") (and (eq (start_dialog) 1) (princ (strcat "\nLe choix est " (nth (1+ (atoi chx)) (nth (atoi pos) lst)))) ) (unload_dialog dcl) ) ) (princ) ) Le résultat est le même avec le deux exemples. Seul la gestion des listes diffère @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
fabcad Posté(e) le 17 novembre 2011 Auteur Posté(e) le 17 novembre 2011 Merci Patrick_35, En relisant ton MAT.lsp, j'ai compris par ton raisonnement et enfin ca boucle dans le bon sens. Soulagé : je suis :-) Je n'ai plus qu'a continuer dans ce gestionnaire OD. Bonne journée, Fabcadgestionnaire_od.lsp
fabcad Posté(e) le 18 novembre 2011 Auteur Posté(e) le 18 novembre 2011 Bonjour à tous, Après des heures passées à corriger des parenthèses, voici le résultat : un gestionnaire de Données d'Objets incluant l'option d'étiquetage. Je ne suis pas un spécialiste pour les améliorations ou les contrôles. Je le met à disposition, Fabcadgestionnaire_od.dclgestionnaire_od.lsp
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