In our last exercise, we learned about getting the alignment objects from our objectId collection through a transaction. Well, now that we have our alignment objects how do we display data about the alignment object?? Let’s add a form to our Visual Studio Project.
Go to the Project menu and select Add New Item. This will open up a dialog box containing a default list of different items we can add to our project. We want to add a dialog (which is really a form with a few settings already setup for us). Name it “frmAlin” and click Add.
This will add a new windows form called frmAlin. A windows form is pretty much the base for any GUI. The main application (like Internet Explorer or AutoCAD) is a form. Each child of a MDI application is a form (like each drawing in AutoCAD). Also, each dialog box is a form. Thus we use forms extensively when building software applications.
In our Properties window, we want to change the text for our form. We want the text to read, “Alignment Data”.
Now we are going to add from our Toolbox (if you don’t have Toolbox available go to the View menu), we are going to add a TreeView.
With our new TreeView object, we are going to set the following properties:
- Name: treMain
- Dock: Top
Okay, so now we have our form setup let’s go back to our Sub routine and call this form and add data to it.
First, above our “Using db as Database” statement, we want to place the following:
Dim frm As New frmAlin
Dim tN As Windows.Forms.TreeNode
Dim profIds As ObjectIdCollection
The first line will create a new frmAlin form and will assign it to the variable “frm”. The next two variables we are going to use in our loop. Now in our For Each loop, we want to add the following right after assigning the “alin” variable.
tN = frm.treMain.Nodes.Add(alin.Name)
tN.Nodes.Add(“Description: “ & alin.Description)
tN.Nodes.Add(“Alignment Type: “ & alin.AlignmentType.ToString)
tN.Nodes.Add(“Alignment Starting Station: “ & alin.GetStationStringWithEquations(alin.StartingStation))
tN.Nodes.Add(“Alignment Ending Station: “ & alin.GetStationStringWithEquations(alin.EndingStation))
profIds = alin.GetProfileIds
If profIds Is Nothing Then
tN.Nodes.Add(“Total Profiles: 0”)
ElseIf profIds.Count = 0 Then
tN.Nodes.Add(“Total Profiles: 0”)
Else
tN.Nodes.Add(“Total Profiles: “ & profIds.Count)
End If
tN.Nodes.Add(“Is Referenced?: “ & alin.IsReferenceObject.ToString)
tN.Nodes.Add(“Site: “ & alin.SiteName)
tN.Nodes.Add(“Style: “ & alin.StyleName)
This creates a new node in our treeview in our form with the alignment name and then stores all the properties of the alignment as subnodes to the main node.
The last thing we want to add is to show our form. We want to do this AFTER our transaction. So at the very end of our code, we want to add the following line:
Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(frm)
This line shows the form we just created and makes sure that it is connected to the AutoCAD application.
So we have our coding done! Great! Now how do we check it or run it?? Check in tomorrow for our last part to this series.
By the end of today you should have the following stored in your class:
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.Civil.Land.DatabaseServices
Public Class Class1
<CommandMethod(“AlignmentInfo”)> _
Public Sub cmdAlignInfo()
Dim alinIds As ObjectIdCollection
alinIds = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument.GetAlignmentIds
If alinIds Is Nothing Then Exit Sub
If alinIds.Count = 0 Then Exit Sub
Dim frm As New frmAlin
Dim tN As Windows.Forms.TreeNode
Dim profIds As ObjectIdCollection
Using db As Database = HostApplicationServices.WorkingDatabase
Using trans As Transaction = db.TransactionManager.StartTransaction
Dim alin As Alignment
For Each objId As ObjectId In alinIds
alin = trans.GetObject(objId, OpenMode.ForRead)
tN = frm.treMain.Nodes.Add(alin.Name)
tN.Nodes.Add(“Description: “ & alin.Description)
tN.Nodes.Add(“Alignment Type: “ & alin.AlignmentType.ToString)
tN.Nodes.Add(“Alignment Starting Station: “ & alin.GetStationStringWithEquations(alin.StartingStation))
tN.Nodes.Add(“Alignment Ending Station: “ & alin.GetStationStringWithEquations(alin.EndingStation))
profIds = alin.GetProfileIds
If profIds Is Nothing Then
tN.Nodes.Add(“Total Profiles: 0”)
ElseIf profIds.Count = 0 Then
tN.Nodes.Add(“Total Profiles: 0”)
Else
tN.Nodes.Add(“Total Profiles: “ & profIds.Count)
End If
tN.Nodes.Add(“Is Referenced?: “ & alin.IsReferenceObject.ToString)
tN.Nodes.Add(“Site: “ & alin.SiteName)
tN.Nodes.Add(“Style: “ & alin.StyleName)
Next
End Using
End Using
Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog(frm)
End Sub
End Class
[…] Working with Civil3D 2010 Managed .Net API 101 – 4 […]