Thomas,
You need to change the logic in the DrawCore function so that the perpenticular reference lines are drawn at a constant length in screen coordinates. And for that you need to use the ExtentHelper.GetWorldDistanceBetweenTwoScreenPoints which is going to give you the world distance for a given screen width. The world distance is going to change at each new zoom level but the line length (5 pixels in this case) is going to remain constant as you can see in the screen shots:
This is the code for your cCustomStyleStationInfo.vb that I modified:
Imports ThinkGeo.MapSuite.Core
Public Class cCustomStyleStationInfo
Inherits ThinkGeo.MapSuite.Core.LineStyle
Protected Overrides Sub DrawCore(ByVal features As System.Collections.Generic.IEnumerable(Of ThinkGeo.MapSuite.Core.Feature), ByVal canvas As ThinkGeo.MapSuite.Core.GeoCanvas, ByVal labelsInThisLayer As System.Collections.ObjectModel.Collection(Of ThinkGeo.MapSuite.Core.SimpleCandidate), ByVal labelsInAllLayers As System.Collections.ObjectModel.Collection(Of ThinkGeo.MapSuite.Core.SimpleCandidate))
MyBase.DrawCore(features, canvas, labelsInThisLayer, labelsInAllLayers)
Dim oDrawingLineShape As ThinkGeo.MapSuite.Core.LineShape
Dim oLinePoint As ThinkGeo.MapSuite.Core.PointShape
Dim oLineShape As ThinkGeo.MapSuite.Core.LineBaseShape
Dim oLineStyle As ThinkGeo.MapSuite.Core.LineStyle = ThinkGeo.MapSuite.Core.LineStyles.CreateSimpleLineStyle(ThinkGeo.MapSuite.Core.GeoColor.SimpleColors.Black, 1.0F, False)
Dim oTangente As ThinkGeo.MapSuite.Core.LineShape
Dim oScreenPointF As ThinkGeo.MapSuite.Core.ScreenPointF
Dim dblWinkel As Double
Dim decDistance As Decimal = 0D
Dim dblOffset As Double
oDrawingLineShape = DirectCast(features(0).GetShape, ThinkGeo.MapSuite.Core.LineShape)
Do Until decDistance > oDrawingLineShape.GetLength(ThinkGeo.MapSuite.Core.GeographyUnit.Meter, ThinkGeo.MapSuite.Core.DistanceUnit.Kilometer)
oLinePoint = oDrawingLineShape.GetPointOnALine(ThinkGeo.MapSuite.Core.StartingPoint.FirstPoint, Convert.ToSingle(decDistance), ThinkGeo.MapSuite.Core.GeographyUnit.Meter, ThinkGeo.MapSuite.Core.DistanceUnit.Kilometer)
oTangente = cGISHelper.ermittleTangenteFuerLinienposition(oDrawingLineShape, decDistance)
dblWinkel = cGISHelper.GetAngleFromTwoVertices(oTangente.Vertices(0), oTangente.Vertices(1))
dblWinkel += 90.0
If dblWinkel >= 360.0 Then
dblWinkel = dblWinkel - 180
End If
oScreenPointF = ThinkGeo.MapSuite.Core.ExtentHelper.ToScreenCoordinate(canvas.CurrentWorldExtent, oLinePoint, canvas.Width, canvas.Height)
canvas.DrawText(" " + decDistance.ToString, New ThinkGeo.MapSuite.Core.GeoFont("Arial", 12, ThinkGeo.MapSuite.Core.DrawingFontStyles.Bold), _
New ThinkGeo.MapSuite.Core.GeoSolidBrush(ThinkGeo.MapSuite.Core.GeoColor.StandardColors.Black), _
New ThinkGeo.MapSuite.Core.GeoPen(ThinkGeo.MapSuite.Core.GeoColor.StandardColors.White), _
New ThinkGeo.MapSuite.Core.ScreenPointF() {oScreenPointF}, ThinkGeo.MapSuite.Core.DrawingLevel.LabelLevel, _
0.0F, 0.0F, Convert.ToSingle(dblWinkel))
If decDistance = 0D Then
dblOffset = 0.0
Else
dblOffset = 0.001
End If
'oLineShape = oDrawingLineShape.GetLineOnALine(ThinkGeo.MapSuite.Core.StartingPoint.FirstPoint, decDistance - dblOffset, 0.002, ThinkGeo.MapSuite.Core.GeographyUnit.Meter, ThinkGeo.MapSuite.Core.DistanceUnit.Kilometer)
Dim dblTranslateAngle = cGISHelper.ermittleOrthogonalWinkelZuVertex(oTangente.Vertices(0), oTangente.Vertices(1), cGISHelper.EGleislage.Links)
'------YOUR OLD CODE-----------------------------------------
'Dim oPoint2 As ThinkGeo.MapSuite.Core.PointShape = DirectCast(ThinkGeo.MapSuite.Core.BaseShape.TranslateByDegree(oLinePoint, 20.0, dblTranslateAngle, ThinkGeo.MapSuite.Core.GeographyUnit.Meter, ThinkGeo.MapSuite.Core.DistanceUnit.Meter), ThinkGeo.MapSuite.Core.PointShape)
'oLineShape = New ThinkGeo.MapSuite.Core.LineShape(New ThinkGeo.MapSuite.Core.Vertex() {New ThinkGeo.MapSuite.Core.Vertex(oLinePoint), New ThinkGeo.MapSuite.Core.Vertex(oPoint2)})
'oLineStyle.Draw(New ThinkGeo.MapSuite.Core.BaseShape() {oLineShape}, canvas, labelsInThisLayer, labelsInAllLayers)
'-----MY NEW CODE--------------------------------------------------------------------------------------------------------------------------------
Dim worldDist As Double = ExtentHelper.GetWorldDistanceBetweenTwoScreenPoints(canvas.CurrentWorldExtent, 0, 0, 5, 0, canvas.Width, canvas.Height, GeographyUnit.Meter, DistanceUnit.Meter)
Dim oPoint2 As PointShape = DirectCast(BaseShape.TranslateByDegree(oLinePoint, worldDist, dblTranslateAngle, ThinkGeo.MapSuite.Core.GeographyUnit.Meter, ThinkGeo.MapSuite.Core.DistanceUnit.Meter), ThinkGeo.MapSuite.Core.PointShape)
oLineShape = New ThinkGeo.MapSuite.Core.LineShape(New ThinkGeo.MapSuite.Core.Vertex() {New ThinkGeo.MapSuite.Core.Vertex(oLinePoint), New ThinkGeo.MapSuite.Core.Vertex(oPoint2)})
oLineStyle.Draw(New ThinkGeo.MapSuite.Core.BaseShape() {oLineShape}, canvas, labelsInThisLayer, labelsInAllLayers)
decDistance += 0.1D
Loop
End Sub
End Class