return lambda setting: int(profile.getProfileSettingFloat(name))
def storedPreference(name):
return lambda setting: profile.getPreference(name)
+def storedPreferenceFloat(name):
+ return lambda setting: profile.getPreferenceFloat(name)
def storedSettingInvertBoolean(name):
return lambda setting: profile.getProfileSetting(name) == "False"
'Support_Material_Choice_': storedSetting('support'),
'Support_Minimum_Angle_degrees': DEFSET,
'Support_Margin_mm': '3.0',
+ 'Support_Offset_X_mm': lambda setting: -profile.getPreferenceFloat('extruder_offset_x1') if profile.getProfileSetting('support_dual_extrusion') == 'True' and int(profile.getPreference('extruder_amount')) > 1 else '0',
+ 'Support_Offset_Y_mm': lambda setting: -profile.getPreferenceFloat('extruder_offset_y1') if profile.getProfileSetting('support_dual_extrusion') == 'True' and int(profile.getPreference('extruder_amount')) > 1 else '0',
},'skirt': {
'Skirt_line_count': storedSetting("skirt_line_count"),
'Convex': "True",
self.executeTitle = 'Raft'
self.supportMargin = settings.FloatSpin().getFromValue(
1.0, 'Support Margin (mm):', self, 5.0, 3.0)
+ self.supportOffsetX = settings.FloatSpin().getFromValue(0.0, 'Support Offset X (mm):', self, 100.0, 0.0)
+ self.supportOffsetY = settings.FloatSpin().getFromValue(0.0, 'Support Offset Y (mm):', self, 100.0, 0.0)
def execute(self):
'Raft button has been clicked.'
def addSupportLayerTemperature(self, endpoints, z):
'Add support layer and temperature before the object layer.'
- self.distanceFeedRate.addLine('(<supportLayer>)')
self.distanceFeedRate.addLinesSetAbsoluteDistanceMode(self.supportStartLines)
+ self.distanceFeedRate.addLine('(<supportLayer>)')
self.addTemperatureOrbits(endpoints, self.supportedLayersTemperature, z)
aroundPixelTable = {}
aroundWidth = 0.34321 * self.interfaceStep
supportFlowRateMultiplied = self.operatingFlowRate * self.objectFirstLayerFlowRateInfillMultiplier
self.addFlowRate(supportFlowRateMultiplied)
for path in paths:
+ path = map(lambda p: p + complex(self.supportOffsetX, self.supportOffsetY), path)
self.distanceFeedRate.addGcodeFromFeedRateThreadZ(feedRateMinuteMultiplied, path, self.travelFeedRateMinute, z)
self.addFlowRate(self.oldFlowRate)
self.addTemperatureOrbits(endpoints, self.supportLayersTemperature, z)
self.minimumSupportRatio = math.tan( math.radians( repository.supportMinimumAngle.value ) )
self.supportEndLines = settings.getAlterationFileLines(repository.nameOfSupportEndFile.value)
self.supportStartLines = settings.getAlterationFileLines(repository.nameOfSupportStartFile.value)
+ self.supportOffsetX = repository.supportOffsetX.value
+ self.supportOffsetY = repository.supportOffsetY.value
self.lines = archive.getTextLines(gcodeText)
self.parseInitialization()
self.temperatureChangeTimeBeforeRaft = 0.0
def __init__(self, parent):\r
wx.Panel.__init__(self, parent,-1)\r
\r
- self.alterationFileList = ['start.gcode', 'end.gcode', 'support_start.gcode', 'support_end.gcode', 'nextobject.gcode', 'replace.csv']\r
+ self.alterationFileList = ['start.gcode', 'end.gcode', 'nextobject.gcode', 'replace.csv']\r
if int(profile.getPreference('extruder_amount')) > 1:\r
self.alterationFileList.append('switchExtruder.gcode')\r
self.currentFile = None\r
"Main user interface window"
def __init__(self):
super(mainWindow, self).__init__(title='Cura - ' + version.getVersion())
+
+ extruderCount = int(profile.getPreference('extruder_amount'))
wx.EVT_CLOSE(self, self.OnClose)
#self.SetIcon(icon.getMainIcon())
configBase.TitleRow(right, "Support")
c = configBase.SettingRow(right, "Support type", 'support', ['None', 'Exterior Only', 'Everywhere', 'Empty Layers Only'], 'Type of support structure build.\n"Exterior only" is the most commonly used support setting.\n\nNone does not do any support.\nExterior only only creates support on the outside.\nEverywhere creates support even on the insides of the model.\nOnly on empty layers is for stacked objects.')
c = configBase.SettingRow(right, "Add raft", 'enable_raft', False, 'A raft is a few layers of lines below the bottom of the object. It prevents warping. Full raft settings can be found in the expert settings.\nFor PLA this is usually not required. But if you print with ABS it is almost required.')
+ if extruderCount > 1:
+ c = configBase.SettingRow(right, "Support dual extrusion", 'support_dual_extrusion', False, 'Print the support material with the 2nd extruder in a dual extrusion setup. The primary extruder will be used for normal material, while the second extruder is used to print support material.')
configBase.TitleRow(right, "Filament")
c = configBase.SettingRow(right, "Diameter (mm)", 'filament_diameter', '2.89', 'Diameter of your filament, as accurately as possible.\nIf you cannot measure this value you will have to callibrate it, a higher number means less extrusion, a smaller number generates more extrusion.')
self.Bind(wx.EVT_BUTTON, self.OnSlice, sliceButton)
self.Bind(wx.EVT_BUTTON, self.OnPrint, printButton)
- extruderCount = int(profile.getPreference('extruder_amount'))
if extruderCount > 1:
loadButton2 = wx.Button(self, -1, 'Load Dual')
self.Bind(wx.EVT_BUTTON, lambda e: self._showModelLoadDialog(2), loadButton2)
'fill_overlap': '15',\r
'support_rate': '50',\r
'support_distance': '0.5',\r
+ 'support_dual_extrusion': 'False',\r
'joris': 'False',\r
'enable_skin': 'False',\r
'enable_raft': 'False',\r
tempOverride = {}\r
def setTempOverride(name, value):\r
tempOverride[name] = unicode(value).encode("utf-8")\r
+def clearTempOverride(name):\r
+ del tempOverride[name]\r
def resetTempOverride():\r
tempOverride.clear()\r
\r
prefix += 'M109 S%f\n' % (temp)\r
if bedTemp > 0 and not '{print_bed_temperature}' in alterationContents:\r
prefix += 'M190 S%f\n' % (bedTemp)\r
- \r
elif filename == 'end.gcode':\r
#Append the profile string to the end of the GCode, so we can load it from the GCode file later.\r
postfix = ';CURA_PROFILE_STRING:%s\n' % (getGlobalProfileString())\r
elif filename == 'replace.csv':\r
#Always remove the extruder on/off M codes. These are no longer needed in 5D printing.\r
prefix = 'M101\nM103\n'\r
- \r
+ elif filename == 'support_start.gcode' or filename == 'support_end.gcode':\r
+ #Add support start/end code \r
+ if getProfileSetting('support_dual_extrusion') == 'True' and int(getPreference('extruder_amount')) > 1:\r
+ if filename == 'support_start.gcode':\r
+ setTempOverride('extruder', '1')\r
+ else:\r
+ setTempOverride('extruder', '0')\r
+ alterationContents = getAlterationFileContents('switchExtruder.gcode')\r
+ clearTempOverride('extruder')\r
+ else:\r
+ alterationContents = ''\r
return unicode(prefix + re.sub("(.)\{([^\}]*)\}", replaceTagMatch, alterationContents).rstrip() + '\n' + postfix).encode('utf-8')\r
\r