好吧,我更进一步。。。不确定我是否应该为此创建新线程。。。如果我需要。。。无论如何
该代码允许用户使用交叉窗口选择对象。然后,它将获取所有对象ID,并将其与管网对象集合中的对象ID进行比较。如果他们匹配,这是一个管道。然后,它将在屏幕上显示每个管道的流量方法。
我想做的是将一个变量设为“ForWrite”,将方法更改为3。我尝试过这样做,但它给了我一个错误,关于实体的名称太宽,我不知道如何修复它:
- Imports Autodesk.AutoCAD.Runtime
- Imports Autodesk.AutoCAD.ApplicationServices
- Imports Autodesk.AutoCAD.DatabaseServices
- Imports Autodesk.AutoCAD.EditorInput
- Imports Autodesk.Civil.ApplicationServices
- Imports Autodesk.Civil.DatabaseServices
- Public Class DisplayPipeInfoSingleSelection
- <CommandMethod("DisplayPipeInfo")>
- Public Sub cmdDisplayPipeInfo()
- Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
- Dim civilDOC As CivilDocument = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument
- Dim cadDOC As Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
- Dim cadDB As Database = cadDOC.Database
- Dim pipeNetIDs As ObjectIdCollection = civilDOC.GetPipeNetworkIds
- '// Open the DB query
- Using cadTrans As Transaction = cadDB.TransactionManager.StartTransaction()
- Dim cadSSPrompt As PromptSelectionResult = cadDOC.Editor.GetSelection()
- '// If user pressed enter after prompt
- If cadSSPrompt.Status = PromptStatus.OK Then
- Dim cadSSet As SelectionSet = cadSSPrompt.Value
- For Each item As SelectedObject In cadSSet
- ed.WriteMessage(vbCrLf & "Object in CAD DB: " & item.ObjectId.ToString)
- '// Check if the item is in the DB
- If Not IsDBNull(item) Then
- '// Loop through the networks and see if the object ID is a pipe
- For Each netID As ObjectId In pipeNetIDs
- Dim net As Network = cadTrans.GetObject(netID, OpenMode.ForRead)
- Dim pipeIDs As ObjectIdCollection = net.GetPipeIds
- Using cadTrans2 As Transaction = cadDB.TransactionManager.StartTransaction
- For Each pipeID As ObjectId In pipeIDs
- Dim pipeOBJ As Pipe = cadTrans2.GetObject(pipeID, OpenMode.ForRead)
- If pipeID = item.ObjectId Then
- Select Case pipeOBJ.FlowDirectionMethod
- Case 0
- ed.WriteMessage(vbCrLf & pipeOBJ.Name & " flow method: Bi-Directional")
- Case 1
- ed.WriteMessage(vbCrLf & pipeOBJ.Name & " flow method: Start to End")
- Case 2
- ed.WriteMessage(vbCrLf & pipeOBJ.Name & " flow method: End to Start")
- Case 3
- ed.WriteMessage(vbCrLf & pipeOBJ.Name & " flow method: By Slope")
- End Select
- '// This is where the "Entity" error is
- Dim pipeOBJwrite As Entity = cadTrans2.GetObject(pipeID, OpenMode.ForWrite)
- End If
- Next
- End Using
- Next
- End If
- Next
- End If
- End Using
- End Sub
- End Class
|