Aller au contenu

Comment savoir quelle variable désigne une entité


Messages recommandés

Posté(e)

Bonjour,

 

Existe-t-il un moyen de savoir si une entité appartient à un jeux de sélection MAIS sans connaitre le nom du jeux.

Pour essayer d’être clair, je vais donner un exemple :

 

(setq js (ssadd))

(vl-cmdf "_line" (list 0 0) (list 10 10) "")

(setq ent (entlast))

(ssadd ent js)

 

Puis ensuite, je lance une commande qui me permet de sélectionner une entité, je sélectionne ma ligne et la commande me renvoie :

 

(ent js)

 

Merci

Posté(e)

Merci Fraid, mais c'est pas ça que je cherche.

 

J'aimerai savoir si une entité à été ou non intégré dans un jeux de sélection.

et si oui, comment se nomme t'il ?

 

Dans mon exemple, la réponse est oui et le jeux de sélection se nomme "js"

 

(Gile), je ne sais pas si je suis plus clair ...

Posté(e)

Pour savour si une entité (ENAME) appartient à un jeu de sélection, il y a la fonction ssmemb.

 

Après, "comment se nomme t'il ?" dépend entièrement de la façon dont tu gères tes variables. Il faudrait que tu maintiennes à jour une liste des variables contenant des jeux de sélection pour pouvoir la parcourir et rechercher avec ssmemb si l'entité appartient à une ou plusieurs sélections.

Mais si tout ça ne se passe pas dans la même fonction LISP, ça suppose des variables globales pour les jeux de sélection et la liste et ça c'est, à mon avis, à éviter absolument.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

J'ai trouvé une méthode

Je liste les variables faisant référence au ENAME avec

(vl-remove-if-not '(lambda ( symbol ) (eq 'ename (type (eval symbol)))) (atoms-family 0))

 

Meme chose pour les jeux de sélection

(vl-remove-if-not '(lambda ( symbol ) (eq 'pickset (type (eval symbol)))) (atoms-family 0))

 

Puis je teste si mon entité appartient à la liste.

 

Merci pour votre aide

L56

Posté(e)

Je persiste à penser que si tu es obligé de passer par là (atoms-family), c'est que tu joues avec des variables (symboles) mal contrôlées et probablement globales.

Si c'est le cas, tu es sur une mauvaise pente et que tu vas immanquablement au devant de problèmes (bugs) difficiles à résoudre.

À ta place je reverrais complètement l'architecture du programme pour faire quelque chose de plus robuste sans utiliser de variables globales.

De plus, le nombre de jeux de sélection actifs dans un dessin est limité, en LISP il suffit de les remettre à nil pour libérer les ressources (ce qui est automatique avec les variables locales).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci pour ton commentaire (Gile).

Je sais bien que tu as raison, la rigueur n'est pas une option dans le développement.

Je vais faire au mieux ...

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é