Create laydient.py

This commit is contained in:
James 2021-12-08 17:05:47 +11:00 committed by GitHub
parent 37f23dbc23
commit 8e1ed4d877
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 123 additions and 0 deletions

123
laydient.py Normal file
View File

@ -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!')