Maintenant
que l’on sait comment modifier le rayon d’un cercle à partir d’une
textbox, nous allons voir comment on peut récupérer des données à partir
du curseur sur un dessin ZWCAD.
Pour notre exemple, nous allons récupérer les coordonnées du curseur afin que l’on puisse définir le centre de notre cercle.
Tout d’abord on va rajouter à notre boîte de dialogue 3 textbox: TextX, TextY, TextZ; et un bouton ( qui va nous permettre de quitter la boîte de dialogue, afin de sélectionner les coordonnées du cercle). Le tout doit ressembler à cela:
Cette fois-ci nous allons modifier le code de la boîte de dialogue.
' Coordonnees point du curseur
Public Sub Position_Click(ByVal
sender As System.Object,
ByVal e As
System.EventArgs) Handles
Button_Position.Click
Dim ed
As ZwSoft.ZwCAD.EditorInput.Editor = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim ppr As PromptPointResult
= ed.GetPoint(vbCr + "Specifiez le centre de
votre cercle :")
If
ppr.Status = PromptStatus.OK Then
Me.TextX.Text
= ppr.Value.X.ToString
Me.TextY.Text
= ppr.Value.Y.ToString
Me.TextZ.Text
= ppr.Value.Z.ToString
End If
Me.Show()
End Sub
Nous
allons faire en sorte de pouvoir accéder à l’interpréteur de commande
de ZWCAD et d’y inscrire “Specifiez le centre de votre cercle :”. Pour
cela, on va utiliser la classe EditorInput qui permet d’envoyer des
paramètres en entré à l’interpréteur de commande. Ainsi c’est grâce à
lui que l’on peut afficher ce que l’on souhaite dans l’interpréteur de
commande.
Dim ed
As ZwSoft.ZwCAD.EditorInput.Editor = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
- nous allons modifier les paramètres d'entrée de la classe ‘Cercle’.
Ensuite on rentre un rayon et notre cercle s'afficher alors à l'écran.
Dim ppr As PromptPointResult
= ed.GetPoint(vbCr + "Specifiez le centre de
votre cercle :")
PromptPointResult
permet d’afficher le curseur afin que l’on puisse sélectionner les
données qui nous intéresse. Ici notre variable ‘ppr’ va sélectionner un
point car on a affecté ‘ed.GetPoint’ à notre variable, c’est ainsi
qu’elle sait ce qu’elle doit retourner.
Ensuite on vérifie qu’il y a eu une réponse avec la ligne:
If
ppr.Status = PromptStatus.OK Then
Ainsi
s’il y a eu une réponse (si on a bien cliqué pour sélectionner un
centre au cercle), alors on renvoie les coordonnées du point sélectionné
aux textbox.
Me.TextX.Text
= ppr.Value.X.ToString
Me.TextY.Text
= ppr.Value.Y.ToString
Me.TextZ.Text
= ppr.Value.Z.ToString
On
enregistre donc l’abscisse du point dans la textbox ‘TextX’, l’ordonnée
du point dans la textbox ‘TextY’ et la profondeur du point dans la
textbox ‘TextZ’.
Pour la suite nous allons procéder comme lors de la modification du rayon du cercle:
- nous allons modifier les paramètres d'entrée de la classe ‘Cercle’.
- nous allons redéfinir les coordonnées attendues par le cercle
Namespace Cercle
Public Class
Cercle
Public Sub Circle(ByVal tb As TextBox, ByVal tbX As TextBox, ByVal tbY
As TextBox, ByVal tbZ As TextBox)
Dim zcDoc As Document = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim
zcDB As Database
= zcDoc.Database
Using
zcTran As Transaction
= zcDB.TransactionManager.StartTransaction
Dim
zcBLT As BlockTable
zcBLT = zcTran.GetObject(zcDB.BlockTableId, OpenMode.ForRead)
Dim
zcBLTR As BlockTableRecord
zcBLTR =
zcTran.GetObject(zcBLT(BlockTableRecord.ModelSpace),
OpenMode.ForWrite)
Dim
zcCircle As Circle
= New Circle
zcCircle.Center = New Point3d(tbX.Text,
tbY.Text, tbZ.Text)
zcCircle.Radius = tb.Text
zcCircle.ColorIndex = 1
zcBLTR.AppendEntity(zcCircle)
zcTran.AddNewlyCreatedDBObject(zcCircle,
True)
zcTran.Commit()
End
Using
Dim doc As Document
doc = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
doc.SendStringToExecute("_ZOOM _E ", False,
False, False)
End Sub
End Class
End Namespace
On modifie donc les paramètres d’entrée:
Public Sub Circle(ByVal tb As TextBox, ByVal tbX As TextBox, ByVal tbY
As TextBox, ByVal tbZ As TextBox)
On rajoute les paramètres liés aux textbox contenant les coordonnées et le rayon.
Dim
zcCircle As Circle
= New Circle
zcCircle.Center = New Point3d(tbX.Text,
tbY.Text, tbZ.Text)
zcCircle.Radius = tb.Text
On
créer un nouveau point en 3D qui prend en abscisse la valeur contenu
dans TextX, en ordonnée la valeur contenu dans TextY, en profondeur la
valeur contenu dans TextZ.
Enfin il faut modifier les paramètres rentrés lors de l'instance de cercle dans la classe 'Class1':
Dim c As Cercle.Cercle =
New Cercle.Cercle()
c.Circle(dlg.TextBox1, dlg.TextX, dlg.TextY, dlg.TextZ)
Désormais nous pouvons tester notre programme. Pour bien se rendre compte si le choix des coordonnées au curseur fonctionne, il faut tester en créant 2 cercles et vérifier si leur position correspond bien à l'emplacement voulu.
On charge notre dll et on lance notre commande. Notre boîte de dialogue s'affiche. Lorsque l'on clique sur le bouton '>>', on accède au dessin ZWCAD et on peut sélectionner le point qui servira de centre à notre cercle.
Après avoir cliqué, notre boite de dialogue est censé afficher :
Ensuite on rentre un rayon et notre cercle s'afficher alors à l'écran.
Ensuite on refait la même opération de manière à vérifier que la position du cercle dépend bien de la sélection faites au curseur.
Dans mon cas, j'essaie de faire chevaucher les cercles de même rayon:

On peut alors récupérer tout type de données concernant les figures sélectionnées et les sauvegarder dans des objets différents, au sein d'une boite de dialogue: dans une textbox, un combobox, etc...
''' BoxRayon, BoxDiametre, BoxX, BoxY, BoxZ, BoxAire sont des textbox
'Enregistrement des
donnés dans les textbox
dlg.BoxRayon.Text =
cir.Radius.ToString
dlg.BoxDiametre.Text = (cir.Radius
* 2).ToString
dlg.BoxX.Text =
cir.Center.X.ToString
dlg.BoxY.Text =
cir.Center.Y.ToString
dlg.BoxZ.Text =
cir.Center.Z.ToString
dlg.BoxAire.Text = cir.Area.ToString
Ici on enregistre donc les données liées à un cercle dans des textbox. On peut, par exemple,
enregistrer la couleur du cercle dans un combobox (il s'agit en fait d'un liste dépliable).
''' ListCouleur est un Combobox
'Enregistrement des couleurs dans un Combobox
dlg.ListCouleur.Items.Add(cir.Color)
Il faut également définir une valeur par défaut dans notre ComboBox:
' on definit cette
couleur par defaut de notre liste
dlg.ListCouleur.SelectedItem
= cir.Color
En fait, on indique l'élément sélectionné dans le comboBox: ainsi s'il l'on souhaite réutiliser l'élément utilisé dans notre comboBox, on pourra alors le faire grâce à cette ligne de code.
Aucun commentaire:
Enregistrer un commentaire