Cura yazılımı 3D yazıcılar için kullanılan, açık kaynaklı bir dilimleme yazılımıdır.
Cura yazılımının çıktısı bilindiği üzere .gcode uzantısındadır.

Diğer taraftan Zaxe 3D Printing Technologies şirketinin geliştirmiş olduğu Zaxe 3D yazıcılar ise başka bir formattaki .zaxe_code uzantısını kullanır.

Elinizdeki .gcode dosyasını zaxe_code dosyasına çevirmek mümkün ve bunun için aşağıdaki bizim yazdığımız VBS dosyasını kullanabilirsiniz.

Dim md5obj
set md5obj = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")

md5obj.Initialize()

Set fso = CreateObject("Scripting.FileSystemObject")

Const adTypeBinary = 1
Set objStream = CreateObject("ADODB.Stream")

Function bytesToHex(aBytes)
Dim hexStr, x
For x=1 To lenb(aBytes)
hexStr= LCase(hex(ascb(midb( (aBytes) ,x,1))))
if len(hexStr)=1 then hexStr="0" & hexStr
bytesToHex=bytesToHex & hexStr
Next
end Function

' read bytes from fileName
Function LoadFile(fileName)
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile( fileName )
LoadFile = objStream.Read
objStream.Close
End Function

' returns hex value of md5 hash from content of fileName
Function HashOfFile(fileName)
fileBytes = LoadFile(fileName)
' Do NOT omit braces around fileBytes - it will not work...
md5hashBytes = md5obj.ComputeHash_2( (fileBytes) )
HashOfFile = bytesToHex(md5hashBytes)
End Function

Function BrowseForFile()
'@description: Browse for file dialog.
'@author: Jeremy England (SimplyCoded)
BrowseForFile = CreateObject("WScript.Shell").Exec( _
"mshta.exe ""about:<input type=file id=f>" & _
"<script>resizeTo(0,0);f.click();new ActiveXObject('Scripting.FileSystemObject')" & _
".GetStandardStream(1).WriteLine(f.value);close();</script>""" _
).StdOut.ReadLine()
End Function

' open dialog ile dosya seçimi
filePath = BrowseForFile()

' seçilen dosyanın md5 hashini hesapla
hash=HashOfFile(filepath)

'json dosyasına yazılacak içerik. aynı zamanda hesaplanan hash dosyasını da bu dosyaya yaz
json_content="{""filament_used"": 3640.0, ""sub_material"": ""zaxe_pla"", ""nozzle_diameter"": 0.4, ""bed_temperature"": 60, ""checksum"": """ & hash & """, ""material"": ""zaxe_pla"", ""name"": ""astm_d638_type1_3.2mm"", ""model"": ""Z1PLUS"", ""version"": ""1.0.2"", ""extruder_temperature"": 200, ""duration"": ""00:30:22""}"
Set objFSO=CreateObject("Scripting.FileSystemObject")

'json dosyasını kaydet
Set objFile = objFSO.CreateTextFile("info.json",True)
objFile.Write json_content & vbCrLf
objFile.Close

Set oShell = WScript.CreateObject ("WScript.Shell")
' dosyanın sadece adını al (path bilgisinden arındır)
ShortFileName = Mid(filePath, InStrRev(filePath, "\") + 1)

'7za ile gcode dosyasını, info.json dosyasını ve snapshot.png dosyasını sıkıştır
oShell.run "7za a -tzip " & ShortFileName & ".zaxe " & filePath & " info.json snapshot.png"

'1 saniye bekle
WScript.Sleep 1000

'kayıt edilen zip dosyası içindeki gcode dosyasının ismini data.zaxe_code olarak değiştir
oShell.run "7za rn " & ShortFileName & ".zaxe " & ShortFileName & " data.zaxe_code"

Kodda gördüğünüz üzere işlemler bittikten sonra bir de sıkıştırma işlemi yapılmaktadır ve bunun için ilgili klasörde 7ZIP dos komut satırı programının bulunması gerekmektedir. Ayrıca bu script’in bulunduğu klasörde snapshot.png dosyasının da bulunması gerekir.

Bunun yanında kodda göreceğiniz üzere bazı şifrelemeler yapmak için MD5 Crypto Servisi kullanılmaktadır ve bu da .NET Framework 3.5 içerisinde bulunan bir servistir. Dolayısı ile bu script’in çalışacağı bilgisayarda .NET Framework 3.5′in kurulu olması gerekir.

Detayları geçelim derseniz bu script’in kullanımı oldukça basit 🙂
Buradan şu dosyayı indirin ve içerisindeki ZAXE_CONVERT.vbs dosyasını çalıştırın.
Dosyanın içerisinde gerekli her şey var. (.NET Framework 3.5 dışında)
Dosyayı çalıştırdıktan sonra gcode dosyanızı seçin ve saniyeler içerisinde zaxe_code dosyanıza kavuşun.

Notlar :

* Zaxe Z1 Plus modelinde denenmiştir. Diğer modellerde çalışmıyorsa iletişim için yorum bırakabilirsiniz. Bunun için kod üzerinde düzenleme yapılması gerekebilir.
* Dosyanın kullanımı ve diğer konularda sorumluluk kullanıcının kendisine aittir.