mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
Update ColorMix.py
Updated colorMix to latest
This commit is contained in:
parent
d65380779e
commit
1b976ca636
1 changed files with 76 additions and 50 deletions
|
@ -6,14 +6,22 @@
|
||||||
#Authors of the 2-1 ColorMix plug-in / script:
|
#Authors of the 2-1 ColorMix plug-in / script:
|
||||||
# Written by John Hryb - john.hryb.4@gmail.com
|
# Written by John Hryb - john.hryb.4@gmail.com
|
||||||
|
|
||||||
##history / change-log:
|
#history / change-log:
|
||||||
##V1.0.0
|
#V1.0.0 - Initial
|
||||||
|
#V1.1.0 -
|
||||||
## Uses -
|
# additions:
|
||||||
## M163 - Set Mix Factor
|
#Object number - To select individual models or all when using "one at a time" print sequence
|
||||||
## M164 - Save Mix - saves to T3 as a unique mix
|
#V1.2.0
|
||||||
|
# fixed layer heights Cura starts at 1 while G-code starts at 0
|
||||||
import re #To perform the search and replace.
|
# removed notes
|
||||||
|
# changed Units of measurement to Units
|
||||||
|
#V1.2.1
|
||||||
|
# Fixed mm bug when not in multiples of layer height
|
||||||
|
# Uses -
|
||||||
|
# M163 - Set Mix Factor
|
||||||
|
# M164 - Save Mix - saves to T2 as a unique mix
|
||||||
|
|
||||||
|
import re #To perform the search and replace.
|
||||||
from ..Script import Script
|
from ..Script import Script
|
||||||
|
|
||||||
class ColorMix(Script):
|
class ColorMix(Script):
|
||||||
|
@ -22,20 +30,28 @@ class ColorMix(Script):
|
||||||
|
|
||||||
def getSettingDataString(self):
|
def getSettingDataString(self):
|
||||||
return """{
|
return """{
|
||||||
"name":"ColorMix 2-1",
|
"name":"ColorMix 2-1 V1.2.1",
|
||||||
"key":"ColorMix 2-1",
|
"key":"ColorMix 2-1",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"version": 2,
|
"version": 2,
|
||||||
"settings":
|
"settings":
|
||||||
{
|
{
|
||||||
"measurement_units":
|
"unitsOfMeasurement":
|
||||||
{
|
{
|
||||||
"label": "Units of measurement",
|
"label": "Units",
|
||||||
"description": "Input value as mm or layer number.",
|
"description": "Input value as mm or layer number.",
|
||||||
"type": "enum",
|
"type": "enum",
|
||||||
"options": {"mm":"mm","layer":"Layer"},
|
"options": {"mm":"mm","layer":"Layer"},
|
||||||
"default_value": "layer"
|
"default_value": "layer"
|
||||||
},
|
},
|
||||||
|
"objectNumber":
|
||||||
|
{
|
||||||
|
"label": "Object Number",
|
||||||
|
"description": "Select model to apply to for print one at a time print sequence. 0 = everything",
|
||||||
|
"type": "int",
|
||||||
|
"default_value": 0,
|
||||||
|
"minimum_value": "0"
|
||||||
|
},
|
||||||
"start_height":
|
"start_height":
|
||||||
{
|
{
|
||||||
"label": "Start Height",
|
"label": "Start Height",
|
||||||
|
@ -60,9 +76,9 @@ class ColorMix(Script):
|
||||||
"default_value": 0,
|
"default_value": 0,
|
||||||
"minimum_value": "0",
|
"minimum_value": "0",
|
||||||
"minimum_value_warning": "0.1",
|
"minimum_value_warning": "0.1",
|
||||||
"enabled": "c_behavior == 'blend_value'"
|
"enabled": "behavior == 'blend_value'"
|
||||||
},
|
},
|
||||||
"mix_start_ratio":
|
"mix_start":
|
||||||
{
|
{
|
||||||
"label": "Start mix ratio",
|
"label": "Start mix ratio",
|
||||||
"description": "First extruder percentage 0-100",
|
"description": "First extruder percentage 0-100",
|
||||||
|
@ -72,7 +88,7 @@ class ColorMix(Script):
|
||||||
"minimum_value_warning": "0",
|
"minimum_value_warning": "0",
|
||||||
"maximum_value_warning": "100"
|
"maximum_value_warning": "100"
|
||||||
},
|
},
|
||||||
"mix_finish_ratio":
|
"mix_finish":
|
||||||
{
|
{
|
||||||
"label": "End mix ratio",
|
"label": "End mix ratio",
|
||||||
"description": "First extruder percentage 0-100 to finish blend",
|
"description": "First extruder percentage 0-100 to finish blend",
|
||||||
|
@ -81,14 +97,7 @@ class ColorMix(Script):
|
||||||
"minimum_value": "0",
|
"minimum_value": "0",
|
||||||
"minimum_value_warning": "0",
|
"minimum_value_warning": "0",
|
||||||
"maximum_value_warning": "100",
|
"maximum_value_warning": "100",
|
||||||
"enabled": "c_behavior == 'blend_value'"
|
"enabled": "behavior == 'blend_value'"
|
||||||
},
|
|
||||||
"notes":
|
|
||||||
{
|
|
||||||
"label": "Notes",
|
|
||||||
"description": "A spot to put a note",
|
|
||||||
"type": "str",
|
|
||||||
"default_value": ""
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}"""
|
}"""
|
||||||
|
@ -117,38 +126,44 @@ class ColorMix(Script):
|
||||||
secondHeight = 0.0
|
secondHeight = 0.0
|
||||||
firstMix = 0.0
|
firstMix = 0.0
|
||||||
SecondMix = 0.0
|
SecondMix = 0.0
|
||||||
|
modelNumber = 0
|
||||||
|
|
||||||
firstHeight = self.getSettingValueByKey("start_height")
|
firstHeight = self.getSettingValueByKey("start_height")
|
||||||
secondHeight = self.getSettingValueByKey("finish_height")
|
secondHeight = self.getSettingValueByKey("finish_height")
|
||||||
firstMix = self.getSettingValueByKey("mix_start_ratio")
|
firstMix = self.getSettingValueByKey("mix_start")
|
||||||
SecondMix = self.getSettingValueByKey("mix_finish_ratio")
|
SecondMix = self.getSettingValueByKey("mix_finish")
|
||||||
|
modelOfInterest = self.getSettingValueByKey("objectNumber")
|
||||||
#locals
|
|
||||||
layer = 0
|
|
||||||
|
|
||||||
#get layer height
|
#get layer height
|
||||||
layerHeight = .2
|
layerHeight = 0
|
||||||
for active_layer in data:
|
for active_layer in data:
|
||||||
lines = active_layer.split("\n")
|
lines = active_layer.split("\n")
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if ";Layer height: " in line:
|
if ";Layer height: " in line:
|
||||||
layerHeight = self.getValue(line, ";Layer height: ", layerHeight)
|
layerHeight = self.getValue(line, ";Layer height: ", layerHeight)
|
||||||
break
|
break
|
||||||
|
if layerHeight != 0:
|
||||||
|
break
|
||||||
|
|
||||||
#get layers to use
|
#get layers to use
|
||||||
startLayer = 0
|
startLayer = 0
|
||||||
endLayer = 0
|
endLayer = 0
|
||||||
if self.getSettingValueByKey("measurement_units") == "mm":
|
if self.getSettingValueByKey("unitsOfMeasurement") == "mm":
|
||||||
if firstHeight == 0:
|
if firstHeight == 0:
|
||||||
startLayer = 0
|
startLayer = 0
|
||||||
else:
|
else:
|
||||||
startLayer = firstHeight / layerHeight
|
startLayer = round(firstHeight / layerHeight)
|
||||||
if secondHeight == 0:
|
if secondHeight == 0:
|
||||||
endLayer = 0
|
endLayer = 0
|
||||||
else:
|
else:
|
||||||
endLayer = secondHeight / layerHeight
|
endLayer = round(secondHeight / layerHeight)
|
||||||
else: #layer height
|
else: #layer height
|
||||||
startLayer = firstHeight
|
if firstHeight <= 0:
|
||||||
endLayer = secondHeight
|
firstHeight = 1
|
||||||
|
if secondHeight <= 0:
|
||||||
|
secondHeight = 1
|
||||||
|
startLayer = firstHeight - 1
|
||||||
|
endLayer = secondHeight - 1
|
||||||
#see if one-shot
|
#see if one-shot
|
||||||
if self.getSettingValueByKey("behavior") == "fixed_value":
|
if self.getSettingValueByKey("behavior") == "fixed_value":
|
||||||
endLayer = startLayer
|
endLayer = startLayer
|
||||||
|
@ -157,7 +172,10 @@ class ColorMix(Script):
|
||||||
firstExtruderIncrements = (SecondMix - firstMix) / (endLayer - startLayer)
|
firstExtruderIncrements = (SecondMix - firstMix) / (endLayer - startLayer)
|
||||||
firstExtruderValue = 0
|
firstExtruderValue = 0
|
||||||
index = 0
|
index = 0
|
||||||
|
|
||||||
#start scanning
|
#start scanning
|
||||||
|
layer = -1
|
||||||
|
modelNumber = 0
|
||||||
for active_layer in data:
|
for active_layer in data:
|
||||||
modified_gcode = ""
|
modified_gcode = ""
|
||||||
lineIndex = 0;
|
lineIndex = 0;
|
||||||
|
@ -169,22 +187,30 @@ class ColorMix(Script):
|
||||||
# find current layer
|
# find current layer
|
||||||
if ";LAYER:" in line:
|
if ";LAYER:" in line:
|
||||||
layer = self.getValue(line, ";LAYER:", layer)
|
layer = self.getValue(line, ";LAYER:", layer)
|
||||||
if (layer >= startLayer) and (layer <= endLayer): #find layers of interest
|
#get model number by layer 0 repeats
|
||||||
if lines[lineIndex + 4] == "T2": #check if needing to delete old data
|
if(layer == 0):
|
||||||
del lines[(lineIndex + 1):(lineIndex + 5)]
|
modelNumber = modelNumber + 1
|
||||||
firstExtruderValue = int(((layer - startLayer) * firstExtruderIncrements) + firstMix)
|
#search for layers to manipulate
|
||||||
if firstExtruderValue == 100:
|
if (layer >= startLayer) and (layer <= endLayer):
|
||||||
modified_gcode += "M163 S0 P1\n"
|
#make sure correct model is selected
|
||||||
modified_gcode += "M163 S1 P0\n"
|
if (modelOfInterest == 0) or (modelOfInterest == modelNumber):
|
||||||
elif firstExtruderValue == 0:
|
#Delete old data if required
|
||||||
modified_gcode += "M163 S0 P0\n"
|
if lines[lineIndex + 4] == "T2":
|
||||||
modified_gcode += "M163 S1 P1\n"
|
del lines[(lineIndex + 1):(lineIndex + 5)]
|
||||||
else:
|
#add mixing commands
|
||||||
modified_gcode += "M163 S0 P0.{:02d}\n".format(firstExtruderValue)
|
firstExtruderValue = int(((layer - startLayer) * firstExtruderIncrements) + firstMix)
|
||||||
modified_gcode += "M163 S1 P0.{:02d}\n".format(100 - firstExtruderValue)
|
if firstExtruderValue == 100:
|
||||||
modified_gcode += "M164 S2\n"
|
modified_gcode += "M163 S0 P1\n"
|
||||||
modified_gcode += "T2\n"
|
modified_gcode += "M163 S1 P0\n"
|
||||||
|
elif firstExtruderValue == 0:
|
||||||
|
modified_gcode += "M163 S0 P0\n"
|
||||||
|
modified_gcode += "M163 S1 P1\n"
|
||||||
|
else:
|
||||||
|
modified_gcode += "M163 S0 P0.{:02d}\n".format(firstExtruderValue)
|
||||||
|
modified_gcode += "M163 S1 P0.{:02d}\n".format(100 - firstExtruderValue)
|
||||||
|
modified_gcode += "M164 S2\n"
|
||||||
|
modified_gcode += "T2\n"
|
||||||
lineIndex += 1 #for deleting index
|
lineIndex += 1 #for deleting index
|
||||||
data[index] = modified_gcode
|
data[index] = modified_gcode
|
||||||
index += 1
|
index += 1
|
||||||
return data
|
return data
|
Loading…
Add table
Add a link
Reference in a new issue