Pour
cet exemple, j’ai décidé de faire en sorte que l’on manipule des
polylignes. Tout d’abord nous allons rechercher les calques présent dans
le dessin ZWCAD.
Lorsque
l’on appuie sur le bouton “Choisir Objet”, on récupère tout d’abord la
liste des calques présent sur le dessin dans un tableau, pour ensuite
les ajouter à notre ComboBox.
Ainsi notre boite de dialogue devra ressembler, à celle présentée ci-dessous:
On créer une classe “Calque” qui recherchera les calques:
Public Class Calque
Public Function SearchLayer(ByRef TabCal() As String)
Dim zcDoc As Document = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim zcDB As Database = zcDoc.Database
Dim ed As Editor = zcDoc.Editor
Dim i As Integer = 0
Using zcTran As Transaction = zcDB.TransactionManager.StartTransaction
Dim lt As LayerTable
lt = zcTran.GetObject(zcDB.LayerTableId, OpenMode.ForRead)
For Each l As ObjectId In lt
Dim zxlt As LayerTableRecord
zxlt = zcTran.GetObject(l, OpenMode.ForRead)
If i <= TabCal.Length Then
TabCal(i) = zxlt.Name
End If
i = i + 1
Next
End Using
Return TabCal
End Function
End Class
Ici
on définit une variable ‘lt’ de sorte que l’on puisse accéder aux ID
des calques du dessin, que l’on stocke dans un tableau (on y enregistre
le nom de chaque calques). Ensuite on retourne ce tableau. Une fois ce
tableau retourné, on parcourt ce tableau afin de d’ajouter des éléments à
la ComboBox en fonction des calques présent dans le tableau.
Ensuite, on donne la possibilité de sélectionner des objets dans un dessin ZWCAD.
On créer alors une classe “Polyligne”, où on va réutiliser le même principe que celui utilisé avec la classe “Calque”.
Public Class Polyligne
Public Shared Function SearchPolyline(ByRef psr As SelectionSet, ByVal aire As Array)
Dim zcDoc As Document = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim zcDB As Database = zcDoc.Database
Dim ed As Editor = zcDoc.Editor
Dim comp As Integer = 0
Using zcTran As Transaction = zcDB.TransactionManager.StartTransaction
For Each zcObj As SelectedObject In psr
Dim item As Polyline = zcTran.GetObject(zcObj.ObjectId, OpenMode.ForRead)
'dlg.ListBoxName.Items.Add(item.Name.ToString))
aire(comp, 0) = item.Area.ToString
aire(comp, 1) = item.ZcadObject.length.ToString
aire(comp, 2) = item.Layer.ToString
comp = comp + 1
Next
End Using
Return aire
' Return comp
End Function
End Class
On
définit une variable ‘item’ de sorte que l’on accède aux polylignes
présentes dans le dessin ZWCAD. On enregistre l’aire, la longueur et le
calque de chaque polylignes trouvé dans le dessin, dans un tableau à 2
dimensions. On retourne ce tableau.
Dans notre boite dialogue, nous devons avoir un code similaire à celui-ci pour notre bouton “Choisir Objets”:
Public Sub Position_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonObj.Click
Dim c As Calque = New Calque
'initialisation du tableau
Dim TabCal As String() = New String(25) {}
For i As Integer = 0 To TabCal.Length - 1
TabCal(i) = ""
Next
c.SearchLayer(TabCal)
'On complete les textbox de notre boite de dialogue par les noms des claques du dessin
For i As Integer = 0 To TabCal.Length - 1
If TabCal(i) <> "" Then
Me.ComboBoxCalque.Items.Add(TabCal(i))
End If
Next
Dim ed As ZwSoft.ZwCAD.EditorInput.Editor = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim psr As PromptSelectionResult = ed.GetSelection()
If psr.Status = PromptStatus.OK Then
Dim acSSet As SelectionSet = psr.Value
Polyligne.SearchPolyline(acSSet, test)
End If
Me.Show()
End Sub
Il faut néanmoins déclarer un tableau dans la classe de notre boite de dialogue.
Dim test(10, 2) As String
Ensuite,
on va créer un tableau au sein de ZWCAD, contenant les polylignes en
fonction du calque choisit dans le ComboBox. Dans la classe dela boite
de dialogue, nous allons rajouter un évènement lors du clic sur le
bouton “Generer un tableau”:
Public Sub Position_Click_Tab(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonTab.Click
Dim ed As ZwSoft.ZwCAD.EditorInput.Editor = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor
Dim pr As PromptPointResult = ed.GetPoint(vbLf & "Entre le point d insertion du tableau: ")
If pr.Status = PromptStatus.OK Then
Dim cb As String = Me.ComboBoxCalque.SelectedItem
Tableau.CreateTable(test, pr, cb)
End If
End Sub
On donne accès au dessin de manière à ce que l’on puisse rentrer un point d’insertion pour notre tableau.
Pour
pouvoir créer un tableau sous ZWCAD, nous allons créer une classe
“Tableau”. Dans cette classe ‘Tableau’, il faut utiliser un tableau de
‘String’ et utiliser la classe ‘Table’.
Dans les déclarations, j'ai utilisés les variables suivantes:
Dim doc As Document = Application.DocumentManager.MdiActiveDocument
Dim db As Database =
doc.Database
Dim ed
As Editor =
doc.Editor
Dim d As Integer = 0
Dim r As Double = 0.0
Dim c As Double = 0.0
Dim TotalAire As Double = 0
Dim TotalSH As Double = 0.0
Dim
TotalSNH As Double
= 0.0
Dim pco As PromptCornerOptions = New
PromptCornerOptions("Specifiez
le premier point :", pr.Value)
Dim pcr As PromptPointResult
= ed.GetCorner(pco)
Nous allons utiliser la classe ‘Table’ de la manière suivante:
Dim tb As New Table()
tb.TableStyle = db.Tablestyle
tb.NumRows = 4
tb.NumColumns = 2
tb.SetRowHeight((pr.Value.Y - pcr.Value.Y) / tb.NumRows)
r = (pr.Value.Y - pcr.Value.Y) / tb.NumRows
tb.SetColumnWidth((pcr.Value.X - pr.Value.X) / tb.NumColumns)
c = (pcr.Value.X - pr.Value.X) / tb.NumColumns
tb.Position = pr.Value
On
y définit le nombre de colonnes, le nombre de lignes, la hauteur des
lignes et la largeur des colonnes. Pour ce qui concerne la hauteur des
lignes et la largeur des colonnes, j’ai essayé de faire en sorte que
celle-ci s’adapte en fonction de la taille de notre tableau.
Pour notre tableau de ‘String’, nous allons procéder de la manière suivante:
Tout d’abord, on filtre les calques de notre tableau passé en paramètre, de manière à calculer les aires SH et SNH:
'initialisation du tableau
For i As Integer = 0 To Aire.Length / 10
If Aire(i, 2) = "SH" Then
TotalSH = TotalSH + Aire(i, 0)
End If
If Aire(i, 2) = "SNH" Then
TotalSNH = TotalSNH + Aire(i, 0)
End If
Next
Ensuite, nous allons créer un tableau de sorte qu’il contienne toutes
les données que l’on souhaite faire apparaitre dans notre tableau ZWCAD.
Dim str As String(,) = New String(3, 1) {}
str(0, 0) = ""
str(0, 1) = "Aire"
str(1, 0) = "Total SH"
str(1, 1) = FormatNumber(Convert.ToDouble(TotalSH), 2)
str(2, 0) = "Total SNH"
str(2, 1) = FormatNumber(Convert.ToDouble(TotalSNH), 2)
TotalAire = TotalSH + TotalSNH
str(3, 0) = "Total :"
str(3, 1) = FormatNumber(Convert.ToDouble(TotalAire), 2)
Maintenant, il ne nous reste plus qu’à ajouter les éléments de tableau à 2 dimensions à notre ‘Table’.
For i As Integer = 0 To 3
For j As Integer = 0 To 1
tb.SetTextHeight(i, j, (r / 2))
tb.SetTextString(i, j, str(i, j))
tb.SetAlignment(i, j, CellAlignment.MiddleCenter)
Next
Next
tb.GenerateLayout()Enfin, on n'oublie d'ajouter le tableau à la base de donnée du dessin:
Dim tr As Transaction =
doc.TransactionManager.StartTransaction()
Using tr
Dim bt As BlockTable = DirectCast(tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead), BlockTable)
Dim
btr As BlockTableRecord
= DirectCast(tr.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
btr.AppendEntity(tb)
tr.AddNewlyCreatedDBObject(tb, True)
tr.Commit()
End Using
Désormais on va essayer de créer un dessin ressemblant à celui-ci, où on a créer 2 calques SH et SNH, et générer un tableau:
Ensuite on clique sur générer notre tableau, et lorsque l'on insert le tableau, on devrait avoir un tableau sous la forme suivante:
Aucun commentaire:
Enregistrer un commentaire