Sub Class_Globals
' Class global variables
Type ModelClass (cncDuanBan As Double, cncJiaGongMian As Double, cncZuanTou As Double, cncPoints As List)
Type cPoint (x As Double, y As Double)
End Sub
Public Sub Initialize
' Initialization method
End Sub
'Create DXF file
Public Sub CreateDxf(model As ModelClass)
Dim writer As TextWriter
writer.Initialize(File.OpenOutput( File.DirApp, "cnc.dxf", False))
WriteHerader(writer)
' Add outlines
AddCircle(writer, 0, 0, model.cncDuanBan/2) ' End plate outer diameter
AddCircle(writer, 0, 0, model.cncJiaGongMian/2) ' Machinable surface circle
'Add small circles
For Each p As cPoint In model.cncPoints
AddCircle(writer, p.x, p.y, model.cncZuanTou/2) ' Center circle
Next
WriteFooter(writer)
'Close file writer
writer.Close
Log(File.Combine(File.DirApp, "cnc.dxf"))
End Sub
'Write file header
Private Sub WriteHerader(writer As TextWriter)
' File header
writer.WriteLine("0")
writer.WriteLine("SECTION")
writer.WriteLine("2")
writer.WriteLine("ENTITIES")
End Sub
'Write file footer
Private Sub WriteFooter(writer As TextWriter)
' File footer
writer.WriteLine("0")
writer.WriteLine("ENDSEC")
writer.WriteLine("0")
writer.WriteLine("EOF")
End Sub
Public Sub GenerateSampleDXF
Dim writer As TextWriter
writer.Initialize(File.OpenOutput( File.DirApp, "sample.dxf", False))
' File header
writer.WriteLine("0")
writer.WriteLine("SECTION")
writer.WriteLine("2")
writer.WriteLine("ENTITIES")
' Add graphics - lines
AddLine(writer, 0, 0, 100, 0) ' Bottom horizontal line
AddLine(writer, 100, 0, 100, 50) ' Right vertical line
AddLine(writer, 100, 50, 0, 50) ' Top horizontal line
AddLine(writer, 0, 50, 0, 0) ' Left vertical line
AddCircle(writer, 50, 25, 20) ' Center circle
Dim polyPoints() As Double =Array As Double (10,10, 90,10, 90,40, 10,40) ' Inner rectangle
AddPolyline(writer, polyPoints)
' File footer
writer.WriteLine("0")
writer.WriteLine("ENDSEC")
writer.WriteLine("0")
writer.WriteLine("EOF")
writer.Close
End Sub
Sub AddLine(writer As TextWriter, x1 As Double, y1 As Double, x2 As Double, y2 As Double)
writer.WriteLine("0")
writer.WriteLine("LINE")
writer.WriteLine("8") ' Layer group code
writer.WriteLine("0") ' Layer name (0 is default)
writer.WriteLine("10") ' Start point X
writer.WriteLine(x1)
writer.WriteLine("20") ' Start point Y
writer.WriteLine(y1)
writer.WriteLine("11") ' End point X
writer.WriteLine(x2)
writer.WriteLine("21") ' End point Y
writer.WriteLine(y2)
End Sub
Sub AddCircle(writer As TextWriter, cx As Double, cy As Double, radius As Double)
writer.WriteLine("0")
writer.WriteLine("CIRCLE")
writer.WriteLine("8")
writer.WriteLine("0")
writer.WriteLine("10") ' Center X
writer.WriteLine(cx)
writer.WriteLine("20") ' Center Y
writer.WriteLine(cy)
writer.WriteLine("40") ' Radius
writer.WriteLine(radius)
End Sub
Sub AddPolyline(writer As TextWriter, points() As Double)
' points array format: [x1,y1, x2,y2, ...]
writer.WriteLine("0")
writer.WriteLine("LWPOLYLINE")
writer.WriteLine("8")
writer.WriteLine("0")
writer.WriteLine("90") ' Vertex count
writer.WriteLine(points.Length / 2)
writer.WriteLine("70") ' Flag (1=closed)
writer.WriteLine("1")
For i = 0 To points.Length - 1 Step 2
writer.WriteLine("10") ' X coordinate
writer.WriteLine(points(i))
writer.WriteLine("20") ' Y coordinate
writer.WriteLine(points(i+1))
Next
End Sub