Aller au contenu

Sélection d\'objet et ouverture d\'une boite de dialogue


Messages recommandés

Posté(e)

Bonjour à tous,

 

Je commence tout juste la programmation VBA et j'aurai besoin d'un peu d'aide.

Je vous explique mon programme:

 

Je crée une icône avec AutoCAD

Lorsque l'on clique dessus, une message box s'ouvre et nous demande de " sélectionner un bassin" qui est un objet sur le plan.

 

PS: nous ne nous occuperons que du nom du calque du bassin et non de savoir si le bassin est une polyligne,..

 

Boule 1:

SI je clique sur rien: une message box s'ouvre pour dire "Aucune sélection, sélectionner un bassin"

On re-sélectionne un objet.

 

Boule 2:

SI je clique sur un objet qui n'a pas le calque "BASSIN", une message box s'ouvre pour dire "Sélectionner un bassin"

On re-sélectionne un objet.

 

Boule 3:

Si je clique sur un bassin qui a pour calque "BASSIN", alors on continu et on ouvre une boite de dialogue.

 

Mes questions:

Lorsque je sélectionne mon bassin, je ne veux pouvoir sélectionner qu'un seul objet contrairement à mon programme dont voici le début:

 

Sub ProgSIG()

 

MsgBox "Sélectionner un bassin"

 

Dim SelectionObj1 As AcadSelectionSet

Dim FilterType(0) As Integer

Dim FilterData(0) As Variant

Set SelectionObj1 = ThisDrawing.SelectionSets.Add("SO1")

FilterType(0) = 8

FilterData(0) = "BASSIN"

SelectionObj1.SelectOnScreen FilterType, FilterData

 

MsgBox "Vous avez sélectionner un bassin"

 

End Sub

 

 

De plus, je ne sais pas comment faire pour qu'une fois ma sélection faite, je puisse ouvrir ma boite de dialogue.

 

J'espère que je n'ai pas trop mal expliquer.

Merci

Posté(e)

Salut,

 

Tout d'abord, je ne suis pas sûr que ce soit une bonne idée de commencer à apprendre VBA aujourd'hui.

Ce langage ne devrait plus être supporté par les prochaines versions d'AutoCAD (de même pour les applications Microsoft).

Si c'est juste pour programmer AutoCAD, le LISP reste une valeur sure, relativement simple d'accès et complètement intégré à AutoCAD.

Si tu ne veux pas te limiter à AutoCAD, regarde du côté de .NET qui semble avoir un avenir prometteur, mais l'apprentissage sera plus long et plus ardu.

 

Dans tout les cas, il y a en gros deux modes de sélection des entités AutoCAD :

 

- la sélection classique qui permet, quelque soit le langage d'utiliser un filtre, mais la méthode VBA SelectOnScreen ne permet pas, à ma connaissance, de forcer la sélection d'une entité unique (ce que permettent la fonction LISP ssget et la méthode .NET GetSelection avec PromptSelectionOptions.SingleOnly).

 

- la sélection d'une entité unique avec la méthode Utility.GetEntity ne permet pas, quant à elle, de filtrer la sélection (la fonction LISP entget ne le permet pas non plus, seule la méthode .NET GetEntiy permet de filtrer sur le type d'entité avec PromptEntityOptions.AddAllowedClass).

Dans ce cas c'est au programme d'évaluer si le type d'entité et ses propriétés correspondent à ceux recherchés et d'agir en conséquence.

 

Personnellement, dans ton cas, j'utiliserais la seconde méthode pour sélectionner l'entité et vérifierais ensuite si les propriétés ObjectName et Layer sont bien celles recherchées.

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

Posté(e)

J'ai bien compris que le VBA n'est pas le meilleur langage surtout pour commencer.

Le problème c'est que je réalise un projet (pas compliqué à ce qu'il paraît mais je galère) pour lancer des PDF, des fichier Excel et des photos par la création de boite de dialogue (qui seront nombreuses dans mon programme).

 

Ceci est le tout premier programme que j'essaie et donc je n'est pas tous compris ce qu'il fallais que je rajoute à mon programme pour qu'il ne séletionne qu'un éléments.

 

Sub ProgSIG()

 

MsgBox "Sélectionner un bassin"

 

Dim SelectionObj1 As AcadSelectionSet

Dim FilterType(0) As Integer

Dim FilterData(0) As Variant

Set SelectionObj1 = ThisDrawing.SelectionSets.Add("SO1")

FilterType(0) = 8

FilterData(0) = "BASSIN"

SelectionObj1.SelectOnScreen FilterType, FilterData

 

MsgBox "Vous avez sélectionner un bassin"

 

End Sub

 

Merci de ton explication sinon

 

Posté(e)

Re,

 

Je ne suis vraiment pas un spécialiste du VBA (il manque certainement une gestion des erreurs), mais ça peut-être un truc de ce genre :

 

Sub ProgSIG()
   Dim obj As AcadObject
   Dim pt As Variant

   ThisDrawing.Utility.GetEntity obj, pt, "Sélectionnez un bassin: "

   If obj.objectName  0 "AcDbPolyline"
       MsgBox "L'objet sélectionné n'est pas une polyligne"
       Exit Sub
   End If

   If obj.Layer  "Bassin"
       MsgBox "L'objet sélectionné n'est pas sur le calque BASSIN'"
       Exit Sub
   End If

   MsgBox "Vous avez sélectionner un bassin"
End sub

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

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é