Public Class clsMarkerLine
Private Shared plStart As Polyline
Private Shared plEind As Polyline
Private Shared m_markers As DBObjectCollection = New DBObjectCollection()
Private Shared collectints As IntegerCollection = New IntegerCollection()
Public Shared Sub StartMarker(ByVal polyStart As Polyline, ByVal polyEind As Polyline)
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
AddHandler ed.PointMonitor, New PointMonitorEventHandler(AddressOf ed_PointMonitor)
plStart = polyStart
plEind = polyEind
End Sub
Public Shared Sub StopMarker()
Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
ed.TurnForcedPickOn()
RemoveHandler ed.PointMonitor, New PointMonitorEventHandler(AddressOf ed_PointMonitor)
ClearMarkers()
End Sub
Private Shared Sub ed_PointMonitor(ByVal sender As Object, ByVal e As PointMonitorEventArgs)
showLine(e.Context.RawPoint)
End Sub
Private Shared Sub showLine(ByVal pt As Point3d)
ClearMarkers()
'marker line
Dim myLine As Line = dynLine(pt)
m_markers.Add(myLine)
aGi.TransientManager.CurrentTransientManager.AddTransient(myLine, aGi.TransientDrawingMode.DirectShortTerm, 128, collectints)
'marker text
Dim myText As DBText = dynLineLengthText(pt, myLine)
m_markers.Add(myText)
aGi.TransientManager.CurrentTransientManager.AddTransient(myText, aGi.TransientDrawingMode.DirectShortTerm, 128, collectints)
End Sub
Public Shared Function dynLine(pt As Point3d, Optional sLayer As String = "0") As Line
Dim myLine As Line = New Line()
myLine.StartPoint = pt
myLine.EndPoint = plStart.GetClosestPointTo(pt, True)
Dim pts As New Point3dCollection()
myLine.IntersectWith(plEind, Intersect.ExtendThis, pts, New IntPtr(0), New IntPtr(0))
If pts.Count > 0 Then
myLine.StartPoint = pts(0)
End If
myLine.Layer = sLayer
myLine.ColorIndex = 10
dynLine = myLine
End Function
Public Shared Function dynLineLengthText(pt As Point3d, ln As Line, Optional sLayer As String = "0") As DBText
Dim acText As DBText = New DBText()
Dim dStart As Double = (ln.StartPoint.X + ln.EndPoint.X) / 2
Dim dEind As Double = (ln.StartPoint.Y + ln.EndPoint.Y) / 2
Dim ptCenter As Point3d = New Point3d(dStart, dEind, 0)
Dim CustomLineParmameters As CustomLineParam = getCustomLineParam(ln, ptCenter, True, False, 0.0, 0.5)
Dim newAngle As Double = CustomLineParmameters.Angle
acText.Rotation = newAngle * Math.PI / 180
acText.TextString = Math.Round(CustomLineParmameters.LineLength, 2).ToString & " m"
acText.Position = CustomLineParmameters.Point
acText.Layer = sLayer
acText.ColorIndex = 10
dynLineLengthText = acText
End Function
End Class