Генерация gcode из Corel Draw
Работает с dev-версией gcodetools от 27.05.2014
https://github.com/cnc-club/gcodetools/ ... ols-dev.py
Corel X4
Файл svg-normalizer.py (модифицирует созданный экспортом Corel'а svg-файл так, чтобы inkscape его адекватно воспринимал)
Код: Выделить всё
#!/usr/env python
#svg files from corel draw export normalizer
print "svg from corel normalizing .........."
import sys
filename = sys.argv[1].strip()
f = open(filename, 'r')
lines = f.readlines()
lines = map(lambda x: x.strip() ,lines)
f = open(filename, 'w')
#modify
i = 0
while i < len(lines):
if lines[i] in ['\n', '\r', '\r\n', '']:
lines.pop(i)
else:
i += 1
#layer
for i in xrange(len(lines)-1, -1, -1):
if lines[i] == "</svg>":
lines.insert(i, '<svg:g inkscape:groupmode="layer" id="layer42" inkscape:label="Layer 42"/>')
break
#xmlns
for i in xrange(len(lines)):
if lines[i][:7] == "viewBox":
lines.insert(i, 'xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"')
lines.insert(i, 'xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"')
lines.insert(i, 'xmlns:dc="http://purl.org/dc/elements/1.1/"')
lines.insert(i, 'xmlns:cc="http://creativecommons.org/ns#"')
lines.insert(i, 'xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"')
lines.insert(i, 'xmlns:svg="http://www.w3.org/2000/svg"')
break
#namedview with units
for i in xrange(len(lines)):
if lines[i][:9] == "<metadata" or lines[i][:2] == "<g":
lines.insert(i, '<sodipodi:namedview inkscape:document-units="mm"/>')
break
#width+height
if False:
for i in xrange(len(lines)):
if 'width="' in lines[i] and 'height="' in lines[i]:
lines[i] = lines[i].replace('mm"', '"')
break
for line in lines:
if False:
f.write(line+'\n')
else:
f.write(line + " ")
print line
f.close()
#print filename
#print sys.argv[0]
#import os
#print os.getcwd()
#sys.stdin.readline()
Файл cnc_club_ngc_export.bas - создать глобальный модуль Corel Draw с таким содержимым.
Код: Выделить всё
Option Explicit
Const gcodepyFile = "D:\Program Files\Inkscape-dev\share\extensions\gcodetools-dev.py"
Const svgNormalizerPyFile = "D:\Program Files\inkscape-dev\share\extensions\svg-normalizer.py"
Function genCmd(fileName, dest, _
Optional depth = 0.35, Optional opXOffset = "50mm", Optional opYOffset = "50mm", _
Optional Zsafe = 2, Optional postPr = "")
Dim cmd As String
cmd = """" & gcodepyFile & """"
'cmd = addParam(cmd, "h")
cmd = addParam(cmd, "f", fileName)
cmd = addParam(cmd, "active-tab", "path-to-gcode")
cmd = addParam(cmd, "path-to-gcode-depth-function", "d")
cmd = addParam(cmd, "d", dest)
cmd = addParam(cmd, "op-x-offset", opXOffset)
cmd = addParam(cmd, "op-y-offset", opYOffset)
cmd = addParam(cmd, "s", Zsafe)
cmd = addParam(cmd, "c", -depth) 'z depth
cmd = addParam(cmd, "comment-gcode", "Generated by tandem.CorelDraw script")
'cmd = addParam(cmd, "min-arc-radius", 0)
cmd = addParam(cmd, "min-arc-radius", 0.01)
cmd = addParam(cmd, "biarc-tolerance", 0.01)
cmd = addParam(cmd, "biarc-max-split-dept", 6)
cmd = addParam(cmd, "feed", 100) 'feed (do not works)
cmd = addParam(cmd, "postprocessor", postPr)
'-auto_select_paths
' --engraving-draw-calculation-paths=ENGRAVING_DRAW_CALCULATION_PATHS
'Draw additional graphics to debug engraving path
' and more and more
genCmd = cmd & " " & """" & "temp.svg" & """"
'genCmd = cmd & " " & """" & "temp.svg" & """>nul"
End Function
Function addParam(txt, key, Optional val = "")
Dim res As String
res = txt
If Len(key) = 1 Then
res = res & " -" & key
Else
res = res & " --" & key
End If
If Not val = "" Then
If IsNumeric(val) Then val = Replace(Str(val), ",", ".")
res = res & " """ & val & """"
End If
addParam = res
End Function
Function getFileName(fileName, Optional number = 0)
Dim x As Integer
x = InStr(fileName, ".")
If x = 0 Then
getFileName = fileName & "_" & addZeros(number, 3) & ".ngc"
Else
getFileName = Left(fileName, x - 1) & "_" & addZeros(number, 3) & ".ngc"
End If
End Function
Function getGCodetoolsFileName(fileName)
'filename of gcodetools-file generated
Dim x As Integer
x = InStr(fileName, ".")
If x = 0 Then
getGCodetoolsFileName = fileName + "_0001."
Else
getGCodetoolsFileName = Left(fileName, x - 1) + "_0001." + Right(fileName, Len(fileName) - x)
End If
End Function
Sub cdr_to_ngc()
Dim Zsafe As Double
Dim dest As String
Dim opXOffset As String
Dim opYOffset As String
Dim depth As Double
Dim tempFolder As String
Dim postPr As String
Zsafe = 1
depth = 0.35
dest = "C:\grav\files-test"
tempFolder = "C:\Temp\cdrToSvgTest"
opXOffset = "50mm"
opYOffset = "50mm"
postPr = "round(3);remap('(Penetrate)'->'(penet)', 'ololo'->'bo-bo-bo');"
Dim waitOnReturn As Boolean: waitOnReturn = True
Dim expopt As StructExportOptions
Set expopt = CreateStructExportOptions
expopt.UseColorProfile = False
Dim expflt As ExportFilter
Dim page As cdrExportRange
Dim fileName As String
Dim kilk As Integer
fileName = ActiveDocument.fileName
If fileName = "" Then fileName = "Empty"
kilk = ActiveDocument.Pages.Count
If MsgBox("Создать " & kilk & " NGC-файлов (" & fileName & ")?", _
vbYesNo, "Подтверждение генерации файлов") = vbNo Then
End
End If
Dim ind As Integer
Dim curpageindex As Integer
curpageindex = ActiveDocument.ActivePage.index
Dim cmd As String
Dim myShell As Object
Set myShell = VBA.CreateObject("WScript.Shell")
Dim genedFilename As String
Dim newFileName As String
'need to remove old file if exists
genedFilename = getGCodetoolsFileName(fileName)
myShell.run "cmd /c del " & tempFolder & "\" & genedFilename
For ind = 1 To kilk
'svg gen
ActiveDocument.Pages(ind).Activate
Set expflt = ActiveDocument.ExportEx("temp.svg", cdrSVG, , expopt)
expflt.Finish
'modify svg
cmd = """" & svgNormalizerPyFile & """ " & "temp.svg"
myShell.run cmd, , waitOnReturn
'cnc gen
cmd = genCmd(fileName, tempFolder, depth, opXOffset, opYOffset, Zsafe, postPr)
myShell.run cmd, , waitOnReturn
'moving result file
newFileName = getFileName(fileName, ind)
cmd = "cmd /c move " & tempFolder & "\" & genedFilename
cmd = cmd & " " & dest & "\" & newFileName
'MsgBox cmd
myShell.run cmd, , waitOnReturn
Next ind
'svg del
myShell.run "cmd /c del temp.svg"
'del "temp.svg"
ActiveDocument.Pages(curpageindex).Activate
MsgBox "Готово ;)"
End Sub
Вписать настройки под себя
Const gcodepyFile = "D:\Program Files\Inkscape-dev\share\extensions\gcodetools-dev.py"
Const svgNormalizerPyFile = "D:\Program Files\inkscape-dev\share\extensions\svg-normalizer.py"
Подставить свои пути к файлам
Zsafe = 1
depth = 0.35
dest = "C:\grav\files"
Глубина, высота безопасного перехода, директория назначения.
tempFolder = "C:\Temp\cdrToSvg"
Рабочая директория, куда будут попадать файлы сгенерированные gcodetools'ом. Тут же должны размещаться файлы footer и header.
opXOffset = "50mm"
opYOffset = "50mm"
Координаты, где будет находиться начало осей.
postPr = "round(3);remap('(Penetrate)'->'(penet)', 'ololo'->'bo-bo-bo');"
Постпроцессор.
Процедура cdr_to_ngc проходится по всем листам и создаёт соответствующее количество ngc-файлов.