Aller au contenu

Messages recommandés

Posté(e)

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 titre

Message

1è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

Posté(e)

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 filtres

Ou 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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,

Posté(e)

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 liste

Un (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 liste

Un (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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité