mardi 7 mai 2013

Exemple 3: Récupérer données d'un dessin ZWCAD

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