﻿B4J=true
Group=Default Group
ModulesStructureVersion=1
Type=Class
Version=10.2
@EndOfDesignText@
Sub Class_Globals
' Class global variables
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.DirInternal, "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
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.DirInternal, "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