Code: Select all
Public Function SelecionarVigasSemOrdenar(poly As Point3dCollection) As ObjectIdCollection
Dim doc As Document = Intellicad.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim db As Teigha.DatabaseServices.Database = doc.Database
Dim ed As Editor = doc.Editor
Dim tr As Transaction = db.TransactionManager.StartTransaction()
Dim acLock As DocumentLock = doc.LockDocument()
Dim u As New Utilidade
Dim ret As New ObjectIdCollection
Try
Dim acTypValAr(1) As TypedValue
acTypValAr.SetValue(New TypedValue(DxfCode.Start, "MLINE"), 0)
'acTypValAr.SetValue(New TypedValue(DxfCode.LinetypeName, Linhas.Center), 1)
acTypValAr.SetValue(New TypedValue(DxfCode.ExtendedDataRegAppName, Aplicativos.Grelha.Perfil), 1)
Dim acSelFtr As New SelectionFilter(acTypValAr)
Dim ptMin As Point3d = Intellicad.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.Extmin
Dim ptMax As Point3d = Intellicad.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.Extmax
Dim view As New ViewTableRecord
Dim min2d As Point2d = New Point2d(poly(0).X, poly(0).Y)
Dim max2d As Point2d = New Point2d(poly(1).X, poly(1).Y)
view.CenterPoint = min2d + ((max2d - min2d) / 2.0)
view.Height = Math.Abs(max2d.Y - min2d.Y)
view.Width = Math.Abs(max2d.X - min2d.X)
ed.SetCurrentView(view)
Dim acSSPrompt As PromptSelectionResult = ed.SelectCrossingPolygon(poly, acSelFtr)
view = New ViewTableRecord
min2d = New Point2d(ptMin.X, ptMin.Y)
max2d = New Point2d(ptMax.X, ptMax.Y)
view.CenterPoint = min2d + ((max2d - min2d) / 2.0)
view.Height = max2d.Y - min2d.Y
view.Width = max2d.X - min2d.X
ed.SetCurrentView(view)
' Show()
If acSSPrompt.Status = PromptStatus.OK Then
#Region "novo"
_Pts = New Point3dCollection
Dim acLinha As New Line(poly(0), poly(poly.Count - 1))
Dim Distancias As New DoubleCollection
For Each obj As SelectedObject In acSSPrompt.Value
Dim o As ObjectId = obj.ObjectId
If Not o = ObjectId.Null Then
Dim Ent As Entity = tr.GetObject(o, Teigha.DatabaseServices.OpenMode.ForRead)
ret.Add(o)
Dim ThisGR As New IntPtr
Dim OtherGR As New IntPtr
Dim PtsLocal As New Point3dCollection
Try
acLinha.IntersectWith(Ent, Intersect.OnBothOperands, PtsLocal, ThisGR, OtherGR)
Catch ex As teigha.Runtime.Exception
MsgBox(String.Format("{0} {1} {2}", ex.Source, ex.StackTrace, ex.Message), vbCritical)
End Try
If Not IsNothing(PtsLocal) AndAlso PtsLocal.Count > 0 Then
Distancias.Add(poly(0).DistanceTo(PtsLocal(2)))
_Pts.Add(PtsLocal(2))
End If
'End If
End If
Next
#End Region
For Each p As Point3d In _Pts
'Distancias.Add(poly(0).DistanceTo(p))
Next
Dim distancia As Double = Distancias(0)
End If
Catch ex As System.Exception
tr.Abort()
MsgBox(String.Format("{0} {1} {2}", ex.Source, ex.StackTrace, ex.Message), vbCritical)
Finally
tr.Dispose()
'_Pts.Dispose()
End Try
Return ret
End Function