hi !
thanks for this very great example - but my problem is to recode this in my source.
here my whole code:
''' <summary>
''' Zeichnen einer Polylinie nach den Definitionen eines LineString mit der Option auch eine Flächenfüllung zu erzeugen
''' </summary>
''' <param name="PolyFID">FID der Polylinie</param>
''' <param name="LineScale">optional Objektlinienfaktor (default: 1)</param>
''' <param name="RealDimension">optional maßstäbliche Darstellung der Rohrbreite (default: false)</param>
''' <param name="LineWidth">optional Linienbreite (default: 0)</param>
''' <param name="HatchColor">optional AcadIndexFarbe (default: 256 ... vonLayer)</param>
''' <param name="HatchPatternName">optional Schraffurmustername (default: Solid)</param>
''' <param name="HatchAssociative">optional Assoziativität (default: true)</param>
''' <param name="PatternScale">optional SchraffurMaszstab (default: 1.0)</param>
''' <param name="PatternAngle">optional SchraffurAusrichtungswinkel im ARC (default: 0.0)</param>
''' <returns>Status 0 ... OK / 1 ... Fehler / 2... Polylinie mit einem Punkt</returns>
Public Function DrawTBLineStringHatch_Work(ByVal PolyFID As Long, _
ByVal TbDoc As Autodesk.Map.IM.Forms.Document, _
Optional LineScale As Double = 1.0, _
Optional RealDimension As Boolean = False, _
Optional LineWidth As Double = 0.0, _
Optional HatchColor As Integer = 256, _
Optional HatchPatternName As String = "SOLID", _
Optional HatchAssociative As Boolean = True, _
Optional PatternScale As Double = 1.0, _
Optional PatternAngle As Double = 0.0) As Integer
Dim GeoCal As New EBL.MapService.Geometrie()
Dim MapData As New EBL.MapService.MapData(TbDoc)
Dim Delimeter As Integer = 0
Dim LineStringPoint As Autodesk.Map.IM.Graphic.LinePoint = Nothing
Dim LineStringPointStart As Autodesk.Map.IM.Graphic.LinePoint = Nothing
Dim LinesStringFeature As Autodesk.Map.IM.Data.Feature
Dim LinesStringTabelle As Autodesk.Map.IM.Data.FeatureClass
' Fehlerabfragen
If HatchColor < 1 Or HatchColor > 256 Then HatchColor = 256
If LineWidth < 0 Then LineWidth = 0
If HatchPatternName.Length = 0 Then HatchPatternName = "SOLID"
If PatternScale < 0 Then PatternScale = 1
If RealDimension = True Then
Delimeter = CInt(MapData.GetFeatureAttribut(PolyFID, "DIMENSION_2", "0", MapService.MapData.Genauigkeit.Meter))
LineWidth = Delimeter / 1000
End If
LinesStringTabelle = TbDoc.Connection.FeatureClasses.GetFeatureClassWithFID(PolyFID)
LinesStringFeature = LinesStringTabelle.GetFeature(PolyFID)
Dim LineStringGeom As Autodesk.Map.IM.Graphic.Geometry
Dim LineStringLine As Autodesk.Map.IM.Graphic.LineString
LineStringGeom = LinesStringFeature.Geometry
LineStringLine = CType(LineStringGeom, Autodesk.Map.IM.Graphic.LineString)
If LineStringLine.Count = 1 Then
Return 2
End If
LineStringPointStart = LineStringLine.Item(0)
'' Get the current document and database
Dim acDoc As Autodesk.AutoCAD.ApplicationServices.Document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim acCurDb As Database = acDoc.Database
Dim ErrDetail As String = ""
Try
ErrDetail = "Start a transaction"
Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
ErrDetail = "Open the Block table for read"
Dim acBlkTbl As BlockTable
ErrDetail = "lock document"
Using acDoc.LockDocument
acBlkTbl = CType(acTrans.GetObject(acCurDb.BlockTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead), BlockTable)
ErrDetail = "Open the Block table record Model space for write"
Dim acBlkTblRec As BlockTableRecord
acBlkTblRec = CType(acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite), BlockTableRecord)
ErrDetail = "Create a PolyLine"
Using acPoly As Polyline = New Polyline()
acPoly.LinetypeScale = LineScale
acPoly.ConstantWidth = LineWidth
For i As Integer = 0 To LineStringLine.Count - 1
LineStringPoint = LineStringLine.Item(i)
' handelt es sich um eine geschlossene Polylinie ?
If i = LineStringLine.Count - 1 Then
' Endpunkt = Startpunkt
If GeoCal.GeomCalculation(LineStringPoint.X, LineStringPoint.Y, LineStringPointStart.X, LineStringPointStart.Y, MapService.Geometrie.WhatToCalculate.Länge2D) <= 0.001 Then
' geschlossene Polylinie
acPoly.Closed = vbYes
Else
' offene Polylinie
acPoly.AddVertexAt(0, New Point2d(LineStringPoint.X, LineStringPoint.Y), 0, 0, 0)
End If
Else
'normaler Stützpunkt
acPoly.AddVertexAt(0, New Point2d(LineStringPoint.X, LineStringPoint.Y), 0, 0, 0)
End If
Next i
Dim pLineId As ObjectId
pLineId = acBlkTblRec.AppendEntity(acPoly)
acTrans.AddNewlyCreatedDBObject(acPoly, True)
' ------------------------------- erstellen einer Schraffur -------------------
ErrDetail = "Create Hatch-Object"
Dim ObjIds As New ObjectIdCollection()
ObjIds.Add(pLineId)
Dim oHatch As New Hatch()
Dim normal As Vector3d = Vector3d.ZAxis
ErrDetail = "Create Hatch-Object - Set HatchPatterName"
oHatch.SetHatchPattern(HatchPatternType.PreDefined, HatchPatternName)
oHatch.Normal = normal
oHatch.Elevation = 0.0
ErrDetail = "Create Hatch-Object - Set PatternScale"
oHatch.PatternScale = PatternScale
ErrDetail = "Create Hatch-Object - Set PatternAngle"
'oHatch.PatternAngle = PatternAngle
oHatch.PatternAngle = 2.0
ErrDetail = "Create Hatch-Object - Set HatchColor"
oHatch.ColorIndex = HatchColor
ErrDetail = "Create Hatch-Object - Set Associative"
oHatch.Associative = HatchAssociative
ErrDetail = "Create Hatch-Object - Append Loop"
oHatch.AppendLoop(HatchLoopTypes.Default, ObjIds)
ErrDetail = "Create Hatch-Object - Create"
acBlkTblRec.AppendEntity(oHatch)
acTrans.AddNewlyCreatedDBObject(oHatch, True)
oHatch.EvaluateHatch(True)
End Using 'Polyline
End Using 'acDoc.LockDocument
ErrDetail = "Save the changes and dispose of the transaction"
acTrans.Commit()
End Using 'acTrans
Catch ex As Exception
_TryReport.Show("unerwarteter Fehler in EBL.MapService > cls_Acad > DrawTBLineStringHatch_Work", "ErrDetail: " & ErrDetail & vbCrLf & vbCrLf & _
"PolyFID: " & PolyFID.ToString & vbCrLf & _
"LineWidth: " & LineWidth.ToString & vbCrLf & _
"HatchColor: " & HatchColor.ToString & vbCrLf & _
"HatchPatternName: " & HatchPatternName & vbCrLf & _
"HatchAssociative: " & HatchAssociative.ToString & vbCrLf & _
"PatternScale: " & PatternScale.ToString & vbCrLf & _
"PatternAngle: " & PatternAngle.ToString & vbCrLf & ex.ToString
)
Return 1
End Try
Return 0
End Function
In this current version the error-function will start in the line
dim HatchAssociative as boolean = true
....
oHatch.Associative = HatchAssociative
could you look again ?
the source to create the border-polyline will work!!
regards Jan 🙂