Create laydient.py
This commit is contained in:
parent
37f23dbc23
commit
8e1ed4d877
|
@ -0,0 +1,123 @@
|
||||||
|
#! python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import math
|
||||||
|
|
||||||
|
inputFilename = sys.argv[1]
|
||||||
|
outputFilename = os.path.splitext(inputFilename)[0] + "-Gradient" + os.path.splitext(inputFilename)[1]
|
||||||
|
|
||||||
|
toolsToUse=[0,1]
|
||||||
|
|
||||||
|
dithering = [
|
||||||
|
[0,0,0,0,0,0,0,0],
|
||||||
|
[0,0,0,0,1,0,0,0],
|
||||||
|
[1,0,0,0,1,0,0,0],
|
||||||
|
[1,0,0,1,0,0,1,0],
|
||||||
|
[1,0,1,0,1,0,1,0],
|
||||||
|
[1,0,1,0,1,0,1,1],
|
||||||
|
[0,1,1,1,0,1,1,1],
|
||||||
|
[1,1,1,1,0,1,1,1],
|
||||||
|
[1,1,1,1,1,1,1,1]
|
||||||
|
]
|
||||||
|
|
||||||
|
weighting = 0
|
||||||
|
|
||||||
|
def openFiles():
|
||||||
|
print('Reading input gcode… ', end='')
|
||||||
|
global inputFile
|
||||||
|
inputFile = open(inputFilename, "r")
|
||||||
|
print('done.')
|
||||||
|
|
||||||
|
|
||||||
|
def countLayers():
|
||||||
|
totalLayers = 0
|
||||||
|
print('Finding layer changes… ', end='')
|
||||||
|
for line in inputFile:
|
||||||
|
if 'LAYER_CHANGE' in line:
|
||||||
|
totalLayers+=1
|
||||||
|
print(totalLayers, "found.")
|
||||||
|
return totalLayers
|
||||||
|
|
||||||
|
|
||||||
|
# def generateGradient(totalLayers): # TABLED
|
||||||
|
# layerGroups = totalLayers / len(dithering[0])
|
||||||
|
# layerGroupsFloor = math.floor(layerGroups)
|
||||||
|
# print('Generating gradient… ', end='')
|
||||||
|
# gradientColour = []
|
||||||
|
# for layerGroup in range(layerGroupsFloor):
|
||||||
|
# chanceOfSecondary = layerGroup / layerGroups
|
||||||
|
# ditheredIndex = math.floor(chanceOfSecondary * len(dithering))
|
||||||
|
# for bit in dithering[ditheredIndex]:
|
||||||
|
# gradientColour.append(bit)
|
||||||
|
# print(len(gradientColour), 'gradient steps generated.')
|
||||||
|
# return gradientColour
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# def generateGradient(totalLayers): # RANDOMISED
|
||||||
|
# weighting = 0
|
||||||
|
# gradientColour = []
|
||||||
|
# for layer in range(totalLayers):
|
||||||
|
# chanceOfSecondary = layer / totalLayers
|
||||||
|
# if random.random() > chanceOfSecondary:
|
||||||
|
# gradientColour.append(0)
|
||||||
|
# else:
|
||||||
|
# gradientColour.append(1)
|
||||||
|
# return gradientColour
|
||||||
|
|
||||||
|
|
||||||
|
def generateGradient(totalLayers): # WEIGHTED
|
||||||
|
print('Generating gradient steps… ', end='')
|
||||||
|
global weighting
|
||||||
|
changeThreshold = 1
|
||||||
|
gradientColour = []
|
||||||
|
for layer in range(totalLayers):
|
||||||
|
chanceOfSecondary = layer / totalLayers
|
||||||
|
weighting += chanceOfSecondary
|
||||||
|
if weighting >= changeThreshold:
|
||||||
|
gradientColour.append(1)
|
||||||
|
weighting -= changeThreshold
|
||||||
|
else:
|
||||||
|
gradientColour.append(0)
|
||||||
|
print(len(gradientColour), 'generated.')
|
||||||
|
return gradientColour
|
||||||
|
|
||||||
|
|
||||||
|
def previewGradient(gradient, totalLayers):
|
||||||
|
print('Gradient Preview:')
|
||||||
|
for bit in gradient:
|
||||||
|
if bit:
|
||||||
|
print('◻︎', end='')
|
||||||
|
else:
|
||||||
|
print('◼︎', end='')
|
||||||
|
print('')
|
||||||
|
|
||||||
|
|
||||||
|
def generateGcode(gradient):
|
||||||
|
toolchangeCount = 0
|
||||||
|
outputFile = open(outputFilename, "wb")
|
||||||
|
inputFile.seek(0)
|
||||||
|
print('Writing', outputFilename, '…')
|
||||||
|
for line in inputFile:
|
||||||
|
outputFile.write(line.encode('utf-8'))
|
||||||
|
if 'Layer: ' in line:
|
||||||
|
if toolchangeCount < len(gradient):
|
||||||
|
toolchange = "G10 ; retract\nT{0} ; toolchange\nG11 ; unretract\n".format(toolsToUse[gradient[toolchangeCount]])
|
||||||
|
outputFile.write(toolchange.encode('utf-8'))
|
||||||
|
toolchangeCount +=1
|
||||||
|
outputFile.close()
|
||||||
|
|
||||||
|
|
||||||
|
def closeFiles():
|
||||||
|
inputFile.close()
|
||||||
|
|
||||||
|
print('\n\n=======================\n LAYDIENT!\n=======================')
|
||||||
|
openFiles()
|
||||||
|
totalLayers = countLayers()
|
||||||
|
gradient = generateGradient(totalLayers)
|
||||||
|
previewGradient(gradient, totalLayers)
|
||||||
|
generateGcode(gradient)
|
||||||
|
closeFiles()
|
||||||
|
print('Done!')
|
Loading…
Reference in New Issue