self.alterationFileList += ['start3.gcode', 'end3.gcode']
if int(profile.getMachineSetting('extruder_amount')) > 3:
self.alterationFileList += ['start4.gcode', 'end4.gcode']
+ if int(profile.getMachineSetting('extruder_amount')) > 4:
+ self.alterationFileList += ['start5.gcode', 'end5.gcode']
self.currentFile = None
self.textArea = gcodeTextArea.GcodeTextArea(self)
self.Ultimaker2Radio = self.AddRadioButton("Ultimaker2", style=wx.RB_GROUP)
self.Ultimaker2Radio.SetValue(True)
self.Ultimaker2Radio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimaker2Select)
+ self.Ultimaker2ExtRadio = self.AddRadioButton("Ultimaker2extended")
+ self.Ultimaker2ExtRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimaker2Select)
+ self.Ultimaker2GoRadio = self.AddRadioButton("Ultimaker2go")
+ self.Ultimaker2GoRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimaker2Select)
self.UltimakerRadio = self.AddRadioButton("Ultimaker Original")
self.UltimakerRadio.Bind(wx.EVT_RADIOBUTTON, self.OnUltimakerSelect)
self.UltimakerOPRadio = self.AddRadioButton("Ultimaker Original+")
def StoreData(self):
profile.putProfileSetting('retraction_enable', 'True')
- if self.Ultimaker2Radio.GetValue():
- profile.putMachineSetting('machine_width', '230')
- profile.putMachineSetting('machine_depth', '225')
- profile.putMachineSetting('machine_height', '205')
- profile.putMachineSetting('machine_name', 'ultimaker2')
- profile.putMachineSetting('machine_type', 'ultimaker2')
+ if self.Ultimaker2Radio.GetValue() or self.Ultimaker2GoRadio.GetValue() or self.Ultimaker2ExtRadio.GetValue():
+ if self.Ultimaker2Radio.GetValue():
+ profile.putMachineSetting('machine_width', '230')
+ profile.putMachineSetting('machine_depth', '225')
+ profile.putMachineSetting('machine_height', '205')
+ profile.putMachineSetting('machine_name', 'ultimaker2')
+ profile.putMachineSetting('machine_type', 'ultimaker2')
+ profile.putMachineSetting('has_heated_bed', 'True')
+ if self.Ultimaker2GoRadio.GetValue():
+ profile.putMachineSetting('machine_width', '120')
+ profile.putMachineSetting('machine_depth', '120')
+ profile.putMachineSetting('machine_height', '115')
+ profile.putMachineSetting('machine_name', 'ultimaker2go')
+ profile.putMachineSetting('machine_type', 'ultimaker2go')
+ profile.putMachineSetting('has_heated_bed', 'False')
+ if self.Ultimaker2ExtRadio.GetValue():
+ profile.putMachineSetting('machine_width', '230')
+ profile.putMachineSetting('machine_depth', '225')
+ profile.putMachineSetting('machine_height', '305')
+ profile.putMachineSetting('machine_name', 'ultimaker2extended')
+ profile.putMachineSetting('machine_type', 'ultimaker2extended')
+ profile.putMachineSetting('has_heated_bed', 'False')
profile.putMachineSetting('machine_center_is_zero', 'False')
- profile.putMachineSetting('has_heated_bed', 'True')
profile.putMachineSetting('gcode_flavor', 'UltiGCode')
profile.putMachineSetting('extruder_head_size_min_x', '40.0')
profile.putMachineSetting('extruder_head_size_min_y', '10.0')
from Cura.util import resources
def getDefaultFirmware(machineIndex = None):
- if profile.getMachineSetting('machine_type', machineIndex) == 'ultimaker':
+ machine_type = profile.getMachineSetting('machine_type', machineIndex)
+ extruders = profile.getMachineSettingFloat('extruder_amount', machineIndex)
+ heated_bed = profile.getMachineSetting('has_heated_bed', machineIndex) == 'True'
+ baudrate = 250000
+ if sys.platform.startswith('linux'):
+ baudrate = 115200
+ if machine_type == 'ultimaker':
name = 'MarlinUltimaker'
- if profile.getMachineSettingFloat('extruder_amount', machineIndex) > 2:
+ if extruders > 2:
return None
- if profile.getMachineSetting('has_heated_bed', machineIndex) == 'True':
+ if heated_bed:
name += '-HBK'
- if sys.platform.startswith('linux'):
- name += '-115200'
- else:
- name += '-250000'
- if profile.getMachineSettingFloat('extruder_amount', machineIndex) > 1:
+ name += '-%d' % (baudrate)
+ if extruders > 1:
name += '-dual'
return resources.getPathForFirmware(name + '.hex')
- if profile.getMachineSetting('machine_type', machineIndex) == 'ultimaker_plus':
- name = 'MarlinUltimaker-UMOP'
- if profile.getMachineSettingFloat('extruder_amount', machineIndex) > 2:
+ if machine_type == 'ultimaker_plus':
+ name = 'MarlinUltimaker-UMOP-%d' % (baudrate)
+ if extruders > 2:
return None
- if sys.platform.startswith('linux'):
- name += '-115200'
- else:
- name += '-250000'
- if profile.getMachineSettingFloat('extruder_amount', machineIndex) > 1:
+ if extruders > 1:
name += '-dual'
return resources.getPathForFirmware(name + '.hex')
- if profile.getMachineSetting('machine_type', machineIndex) == 'ultimaker2':
- if profile.getMachineSettingFloat('extruder_amount', machineIndex) > 2:
+ if machine_type == 'ultimaker2':
+ if extruders > 2:
return None
- if profile.getMachineSettingFloat('extruder_amount', machineIndex) == 2:
+ if extruders > 1:
return resources.getPathForFirmware("MarlinUltimaker2-dual.hex")
return resources.getPathForFirmware("MarlinUltimaker2.hex")
- if profile.getMachineSetting('machine_type', machineIndex) == 'Witbox':
+ if machine_type == 'ultimaker2go':
+ return resources.getPathForFirmware("MarlinUltimaker2go.hex")
+ if machine_type == 'ultimaker2extended':
+ if extruders > 2:
+ return None
+ if extruders > 1:
+ return resources.getPathForFirmware("MarlinUltimaker2extended-dual.hex")
+ return resources.getPathForFirmware("MarlinUltimaker2extended.hex")
+ if machine_type == 'Witbox':
return resources.getPathForFirmware("MarlinWitbox.hex")
return None
# Enabled sash
self.splitter.SetSashSize(4)
self.defaultFirmwareInstallMenuItem.Enable(firmwareInstall.getDefaultFirmware() is not None)
- if profile.getMachineSetting('machine_type') == 'ultimaker2':
+ if profile.getMachineSetting('machine_type').startswith('ultimaker2'):
self.bedLevelWizardMenuItem.Enable(False)
self.headOffsetWizardMenuItem.Enable(False)
if int(profile.getMachineSetting('extruder_amount')) < 2:
#configBase.TitleRow(right, 'Slicer settings')
#configBase.SettingRow(right, 'save_profile')
- #configBase.TitleRow(right, 'SD Card settings')
-
- configBase.TitleRow(right, _("Cura settings"))
+ configBase.TitleRow(right, 'SD Card settings')
configBase.SettingRow(right, 'auto_detect_sd')
+ configBase.SettingRow(right, 'sdcard_rootfolder')
+
+ configBase.TitleRow(right, _("Cura settings"))
configBase.SettingRow(right, 'check_for_updates')
configBase.SettingRow(right, 'submit_slice_information')
self._viewTarget = numpy.array([0,0,0], numpy.float32)
self._animView = None
self._animZoom = None
+ self._lastObjectSink = None
self._platformMesh = {}
self._platformTexture = None
self._isSimpleMode = True
else:
drive = drives[0]
filename = self._scene._objectList[0].getName() + profile.getGCodeExtension()
+
+ #check if the file is part of the root folder. If so, create folders on sd card to get the same folder hierarchy.
+ repDir = profile.getPreference("sdcard_rootfolder")
+ if os.path.exists(repDir) and os.path.isdir(repDir):
+ repDir = os.path.abspath(repDir)
+ originFilename = os.path.abspath( self._scene._objectList[0].getOriginFilename() )
+ if os.path.dirname(originFilename).startswith(repDir):
+ filename = os.path.splitext(originFilename[len(repDir):])[0] + profile.getGCodeExtension()
+ sdPath = os.path.dirname(os.path.join( drive[1], filename))
+ if not os.path.exists(sdPath):
+ print "Creating replication directory:", sdPath
+ os.makedirs(sdPath)
+
threading.Thread(target=self._saveGCode,args=(drive[1] + filename, drive[1])).start()
elif connectionGroup is not None:
connections = connectionGroup.getAvailableConnections()
self.sceneUpdated()
def sceneUpdated(self):
+
+ objectSink = profile.getProfileSettingFloat("object_sink")
+ if self._lastObjectSink != objectSink:
+ self._lastObjectSink = objectSink
+ self._scene.updateHeadSize()
+
wx.CallAfter(self._sceneUpdateTimer.Start, 500, True)
self._engine.abortEngine()
self._scene.updateSizeOffsets()
self._objColors[2] = profile.getPreferenceColour('model_colour3')
self._objColors[3] = profile.getPreferenceColour('model_colour4')
self._scene.updateMachineDimensions()
+ if self._zoom > numpy.max(self._machineSize) * 3:
+ self._animZoom = openglGui.animation(self, self._zoom, numpy.max(self._machineSize) * 3, 0.5)
self.updateModelSettingsToControls()
def updateModelSettingsToControls(self):
size = [profile.getMachineSettingFloat('machine_width'), profile.getMachineSettingFloat('machine_depth'), profile.getMachineSettingFloat('machine_height')]
- machine = profile.getMachineSetting('machine_type')
- if machine.startswith('ultimaker'):
- if machine not in self._platformMesh:
- meshes = meshLoader.loadMeshes(resources.getPathForMesh(machine + '_platform.stl'))
+ machine_type = profile.getMachineSetting('machine_type')
+ if machine_type not in self._platformMesh:
+ self._platformMesh[machine_type] = None
+
+ filename = None
+ texture_name = None
+ offset = [0,0,0]
+ texture_offset = [0,0,0]
+ texture_scale = 1.0
+ if machine_type == 'ultimaker2' or machine_type == 'ultimaker2extended':
+ filename = resources.getPathForMesh('ultimaker2_platform.stl')
+ offset = [0,-37,145]
+ texture_name = 'Ultimaker2backplate.png'
+ texture_offset = [0,150,-5]
+ elif machine_type == 'ultimaker2go':
+ filename = resources.getPathForMesh('ultimaker2go_platform.stl')
+ offset = [0,-42,145]
+ texture_offset = [0,105,-5]
+ texture_name = 'Ultimaker2backplate.png'
+ texture_scale = 0.9
+ elif machine_type == 'ultimaker_plus':
+ filename = resources.getPathForMesh('ultimaker2_platform.stl')
+ offset = [0,-37,145]
+ texture_offset = [0,150,-5]
+ texture_name = 'UltimakerPlusbackplate.png'
+ elif machine_type == 'ultimaker':
+ filename = resources.getPathForMesh('ultimaker_platform.stl')
+ offset = [0,0,2.5]
+ elif machine_type == 'Witbox':
+ filename = resources.getPathForMesh('Witbox_platform.stl')
+ offset = [0,-37,145]
+
+ if filename is not None:
+ meshes = meshLoader.loadMeshes(filename)
if len(meshes) > 0:
- self._platformMesh[machine] = meshes[0]
- else:
- self._platformMesh[machine] = None
- if machine == 'ultimaker2' or machine == 'ultimaker_plus':
- self._platformMesh[machine]._drawOffset = numpy.array([0,-37,145], numpy.float32)
- else:
- self._platformMesh[machine]._drawOffset = numpy.array([0,0,2.5], numpy.float32)
+ self._platformMesh[machine_type] = meshes[0]
+ self._platformMesh[machine_type]._drawOffset = numpy.array(offset, numpy.float32)
+ self._platformMesh[machine_type].texture = None
+ if texture_name is not None:
+ self._platformMesh[machine_type].texture = openglHelpers.loadGLTexture(texture_name)
+ self._platformMesh[machine_type].texture_offset = texture_offset
+ self._platformMesh[machine_type].texture_scale = texture_scale
+ if self._platformMesh[machine_type] is not None:
+ mesh = self._platformMesh[machine_type]
glColor4f(1,1,1,0.5)
self._objectShader.bind()
- self._renderObject(self._platformMesh[machine], False, False)
+ self._renderObject(mesh, False, False)
self._objectShader.unbind()
#For the Ultimaker 2 render the texture on the back plate to show the Ultimaker2 text.
- if machine == 'ultimaker2' or machine == 'ultimaker_plus':
- if not hasattr(self._platformMesh[machine], 'texture'):
- if machine == 'ultimaker2':
- self._platformMesh[machine].texture = openglHelpers.loadGLTexture('Ultimaker2backplate.png')
- else:
- self._platformMesh[machine].texture = openglHelpers.loadGLTexture('UltimakerPlusbackplate.png')
- glBindTexture(GL_TEXTURE_2D, self._platformMesh[machine].texture)
+ if mesh.texture is not None:
+ glBindTexture(GL_TEXTURE_2D, mesh.texture)
glEnable(GL_TEXTURE_2D)
glPushMatrix()
glColor4f(1,1,1,1)
- glTranslate(0,150,-5)
+ glTranslate(mesh.texture_offset[0], mesh.texture_offset[1], mesh.texture_offset[2])
+ glScalef(mesh.texture_scale, mesh.texture_scale, mesh.texture_scale)
h = 50
d = 8
w = 100
glEnable(GL_BLEND)
- glBlendFunc(GL_DST_COLOR, GL_ZERO)
+ glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)
+ glEnable(GL_ALPHA_TEST)
+ glAlphaFunc(GL_GREATER, 0.0)
glBegin(GL_QUADS)
glTexCoord2f(1, 0)
glVertex3f( w, 0, h)
glDisable(GL_TEXTURE_2D)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glPopMatrix()
-
- elif machine.startswith('Witbox'):
- if machine not in self._platformMesh:
- meshes = meshLoader.loadMeshes(resources.getPathForMesh(machine + '_platform.stl'))
- if len(meshes) > 0:
- self._platformMesh[machine] = meshes[0]
- else:
- self._platformMesh[machine] = None
- if machine == 'Witbox':
- self._platformMesh[machine]._drawOffset = numpy.array([0,-37,145], numpy.float32)
- glColor4f(1,1,1,0.5)
- self._objectShader.bind()
- self._renderObject(self._platformMesh[machine], False, False)
- self._objectShader.unbind()
else:
glColor4f(0,0,0,1)
glLineWidth(3)
yMin = profile.getMachineSettingFloat('extruder_head_size_min_y')
yMax = profile.getMachineSettingFloat('extruder_head_size_max_y')
gantryHeight = profile.getMachineSettingFloat('extruder_head_size_height')
+ objectSink = profile.getProfileSettingFloat("object_sink")
self._leftToRight = xMin < xMax
self._frontToBack = yMin < yMax
self._gantryHeight = gantryHeight
self._oneAtATime = self._gantryHeight > 0 and profile.getPreference('oneAtATime') == 'True'
for obj in self._objectList:
- if obj.getSize()[2] > self._gantryHeight:
+ if obj.getSize()[2] - objectSink > self._gantryHeight:
self._oneAtATime = False
headArea = numpy.array([[-xMin,-yMin],[ xMax,-yMin],[ xMax, yMax],[-xMin, yMax]], numpy.float32)
return polygon.polygonCollision(a._boundaryHull + a.getPosition(), b._boundaryHull + b.getPosition())
def checkPlatform(self, obj):
+ objectSink = profile.getProfileSettingFloat("object_sink")
+
area = obj._printAreaHull + obj.getPosition()
- if obj.getSize()[2] > self._machineSize[2]:
+ if obj.getSize()[2] - objectSink > self._machineSize[2]:
return False
if not polygon.fullInside(area, self._machinePolygons[0]):
return False
setting('fill_density', 20, float, 'basic', _('Fill')).setExpertSubCategory(_('Infill')).setRange(0, 100).setLabel(_("Fill Density (%)"), _("This controls how densely filled the insides of your print will be. For a solid part use 100%, for an empty part use 0%. A value around 20% is usually enough.\nThis won't affect the outside of the print and only adjusts how strong the part becomes."))
setting('nozzle_size', 0.4, float, 'advanced', _('Machine')).setRange(0.1,10).setLabel(_("Nozzle size (mm)"), _("The nozzle size is very important, this is used to calculate the line width of the infill, and used to calculate the amount of outside wall lines and thickness for the wall thickness you entered in the print settings."))
setting('print_speed', 50, float, 'basic', _('Speed and Temperature')).setRange(1).setLabel(_("Print speed (mm/s)"), _("Speed at which printing happens. A well adjusted Ultimaker can reach 150mm/s, but for good quality prints you want to print slower. Printing speed depends on a lot of factors. So you will be experimenting with optimal settings for this."))
-setting('print_temperature', 220, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("Printing temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required."))
+setting('print_temperature', 210, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("Printing temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required."))
setting('print_temperature2', 0, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("2nd nozzle temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required."))
setting('print_temperature3', 0, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("3th nozzle temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required."))
setting('print_temperature4', 0, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("4th nozzle temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required."))
+setting('print_temperature5', 0, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("5th nozzle temperature (C)"), _("Temperature used for printing. Set at 0 to pre-heat yourself.\nFor PLA a value of 210C is usually used.\nFor ABS a value of 230C or higher is required."))
setting('print_bed_temperature', 70, int, 'basic', _('Speed and Temperature')).setRange(0,340).setLabel(_("Bed temperature (C)"), _("Temperature used for the heated printer bed. Set at 0 to pre-heat yourself."))
setting('support', 'None', [_('None'), _('Touching buildplate'), _('Everywhere')], 'basic', _('Support')).setExpertSubCategory(_('Support')).setLabel(_("Support type"), _("Type of support structure build.\n\"Touching buildplate\" is the most commonly used support setting.\n\nNone does not do any support.\nTouching buildplate only creates support where the support structure will touch the build platform.\nEverywhere creates support even on top of parts of the model."))
setting('platform_adhesion', 'None', [_('None'), _('Brim'), _('Raft')], 'basic', _('Support')).setExpertSubCategory([_('Skirt'), _('Brim'), _('Raft')]).setLabel(_("Platform adhesion type"), _("Different options that help in preventing corners from lifting due to warping.\nBrim adds a single layer thick flat area around your object which is easy to cut off afterwards, and it is the recommended option.\nRaft adds a thick raster below the object and a thin interface between this and your object.\n(Note that enabling the brim or raft disables the skirt)"))
setting('filament_diameter2', 0, float, 'basic', _('Filament')).setRange(0).setLabel(_("Diameter2 (mm)"), _("Diameter of your filament for the 2nd nozzle. Use 0 to use the same diameter as for nozzle 1."))
setting('filament_diameter3', 0, float, 'basic', _('Filament')).setRange(0).setLabel(_("Diameter3 (mm)"), _("Diameter of your filament for the 3th nozzle. Use 0 to use the same diameter as for nozzle 1."))
setting('filament_diameter4', 0, float, 'basic', _('Filament')).setRange(0).setLabel(_("Diameter4 (mm)"), _("Diameter of your filament for the 4th nozzle. Use 0 to use the same diameter as for nozzle 1."))
+setting('filament_diameter5', 0, float, 'basic', _('Filament')).setRange(0).setLabel(_("Diameter5 (mm)"), _("Diameter of your filament for the 5th nozzle. Use 0 to use the same diameter as for nozzle 1."))
setting('filament_flow', 100., float, 'basic', _('Filament')).setRange(5,300).setLabel(_("Flow (%)"), _("Flow compensation, the amount of material extruded is multiplied by this value"))
setting('retraction_speed', 40.0, float, 'advanced', _('Retraction')).setRange(0.1).setLabel(_("Speed (mm/s)"), _("Speed at which the filament is retracted, a higher retraction speed works better. But a very high retraction speed can lead to filament grinding."))
setting('retraction_amount', 4.5, float, 'advanced', _('Retraction')).setRange(0).setLabel(_("Distance (mm)"), _("Amount of retraction, set at 0 for no retraction at all. A value of 4.5mm seems to generate good results."))
setting('filament_cost_kg', '0', float, 'preference', 'hidden').setLabel(_("Cost (price/kg)"), _("Cost of your filament per kg, to estimate the cost of the final print."))
setting('filament_cost_meter', '0', float, 'preference', 'hidden').setLabel(_("Cost (price/m)"), _("Cost of your filament per meter, to estimate the cost of the final print."))
setting('auto_detect_sd', 'True', bool, 'preference', 'hidden').setLabel(_("Auto detect SD card drive"), _("Auto detect the SD card. You can disable this because on some systems external hard-drives or USB sticks are detected as SD card."))
+setting('sdcard_rootfolder', '', str, 'preference', 'hidden').setLabel(_("Base folder to replicate on SD card"), _("The specified folder will be used as a base path. Any gcode generated from object coming from within that folder will be automatically saved on the SD card at the same sub-folder. Any object coming from outside of this path will save the gcode on the root folder of the card."))
setting('check_for_updates', 'True', bool, 'preference', 'hidden').setLabel(_("Check for updates"), _("Check for newer versions of Cura on startup"))
setting('submit_slice_information', 'False', bool, 'preference', 'hidden').setLabel(_("Send usage statistics"), _("Submit anonymous usage information to improve future versions of Cura"))
setting('youmagine_token', '', str, 'preference', 'hidden')
setting('ultimaker_extruder_upgrade', 'False', bool, 'machine', 'hidden')
setting('has_heated_bed', 'False', bool, 'machine', 'hidden').setLabel(_("Heated bed"), _("If you have an heated bed, this enabled heated bed settings (requires restart)"))
setting('gcode_flavor', 'RepRap (Marlin/Sprinter)', ['RepRap (Marlin/Sprinter)', 'RepRap (Volumetric)', 'UltiGCode', 'MakerBot', 'BFB', 'Mach3'], 'machine', 'hidden').setLabel(_("GCode Flavor"), _("Flavor of generated GCode.\nRepRap is normal 5D GCode which works on Marlin/Sprinter based firmwares.\nUltiGCode is a variation of the RepRap GCode which puts more settings in the machine instead of the slicer.\nMakerBot GCode has a few changes in the way GCode is generated, but still requires MakerWare to generate to X3G.\nBFB style generates RPM based code.\nMach3 uses A,B,C instead of E for extruders."))
-setting('extruder_amount', '1', ['1','2','3','4'], 'machine', 'hidden').setLabel(_("Extruder count"), _("Amount of extruders in your machine."))
+setting('extruder_amount', '1', ['1','2','3','4','5'], 'machine', 'hidden').setLabel(_("Extruder count"), _("Amount of extruders in your machine."))
setting('extruder_offset_x1', '0.0', float, 'machine', 'hidden').setLabel(_("Offset X"), _("The offset of your secondary extruder compared to the primary."))
setting('extruder_offset_y1', '21.6', float, 'machine', 'hidden').setLabel(_("Offset Y"), _("The offset of your secondary extruder compared to the primary."))
setting('extruder_offset_x2', '0.0', float, 'machine', 'hidden').setLabel(_("Offset X"), _("The offset of your tertiary extruder compared to the primary."))
setting('extruder_offset_y2', '0.0', float, 'machine', 'hidden').setLabel(_("Offset Y"), _("The offset of your tertiary extruder compared to the primary."))
setting('extruder_offset_x3', '0.0', float, 'machine', 'hidden').setLabel(_("Offset X"), _("The offset of your forth extruder compared to the primary."))
setting('extruder_offset_y3', '0.0', float, 'machine', 'hidden').setLabel(_("Offset Y"), _("The offset of your forth extruder compared to the primary."))
+setting('extruder_offset_x4', '0.0', float, 'machine', 'hidden').setLabel(_("Offset X"), _("The offset of your forth extruder compared to the primary."))
+setting('extruder_offset_y4', '0.0', float, 'machine', 'hidden').setLabel(_("Offset Y"), _("The offset of your forth extruder compared to the primary."))
setting('steps_per_e', '0', float, 'machine', 'hidden').setLabel(_("E-Steps per 1mm filament"), _("Amount of steps per mm filament extrusion. If set to 0 then this value is ignored and the value in your firmware is used."))
setting('serial_port', 'AUTO', str, 'machine', 'hidden').setLabel(_("Serial port"), _("Serial port to use for communication with the printer"))
setting('serial_port_auto', '', str, 'machine', 'hidden')
validators.warningAbove(settingsDictionary['print_temperature2'], 260.0, _("Temperatures above 260C could damage your machine, be careful!"))
validators.warningAbove(settingsDictionary['print_temperature3'], 260.0, _("Temperatures above 260C could damage your machine, be careful!"))
validators.warningAbove(settingsDictionary['print_temperature4'], 260.0, _("Temperatures above 260C could damage your machine, be careful!"))
+validators.warningAbove(settingsDictionary['print_temperature5'], 260.0, _("Temperatures above 260C could damage your machine, be careful!"))
validators.warningAbove(settingsDictionary['filament_diameter'], 3.5, _("Are you sure your filament is that thick? Normal filament is around 3mm or 1.75mm."))
validators.warningAbove(settingsDictionary['filament_diameter2'], 3.5, _("Are you sure your filament is that thick? Normal filament is around 3mm or 1.75mm."))
validators.warningAbove(settingsDictionary['filament_diameter3'], 3.5, _("Are you sure your filament is that thick? Normal filament is around 3mm or 1.75mm."))
validators.warningAbove(settingsDictionary['filament_diameter4'], 3.5, _("Are you sure your filament is that thick? Normal filament is around 3mm or 1.75mm."))
+validators.warningAbove(settingsDictionary['filament_diameter5'], 3.5, _("Are you sure your filament is that thick? Normal filament is around 3mm or 1.75mm."))
validators.warningAbove(settingsDictionary['travel_speed'], 300.0, _("It is highly unlikely that your machine can achieve a travel speed above 300mm/s"))
validators.warningAbove(settingsDictionary['bottom_thickness'], lambda : (float(getProfileSetting('nozzle_size')) * 3.0 / 4.0), _("A bottom layer of more then %.2fmm (3/4 nozzle size) usually give bad results and is not recommended."))
settingsDictionary['print_temperature2'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 1)
settingsDictionary['print_temperature3'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 2)
settingsDictionary['print_temperature4'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 3)
+settingsDictionary['print_temperature5'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 4)
settingsDictionary['filament_diameter2'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 1)
settingsDictionary['filament_diameter3'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 2)
settingsDictionary['filament_diameter4'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 3)
+settingsDictionary['filament_diameter5'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 4)
settingsDictionary['support_dual_extrusion'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 1)
settingsDictionary['retraction_dual_amount'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 1)
settingsDictionary['wipe_tower'].addCondition(lambda : int(getMachineSetting('extruder_amount')) > 1)
settingsDictionary['print_temperature2'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['print_temperature3'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['print_temperature4'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
+settingsDictionary['print_temperature5'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['filament_diameter'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['filament_diameter2'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['filament_diameter3'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['filament_diameter4'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
+settingsDictionary['filament_diameter5'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['filament_flow'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['print_bed_temperature'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
settingsDictionary['retraction_speed'].addCondition(lambda : getMachineSetting('gcode_flavor') != 'UltiGCode')
elif getMachineSetting('machine_type') == 'ultimaker_plus':
putProfileSetting('nozzle_size', '0.4')
putProfileSetting('retraction_enable', 'True')
- elif getMachineSetting('machine_type') == 'ultimaker2':
+ elif getMachineSetting('machine_type').startswith('ultimaker2'):
putProfileSetting('nozzle_size', '0.4')
putProfileSetting('retraction_enable', 'True')
else:
else:
ret.append(numpy.array([[-size[0]/2,-size[1]/2],[size[0]/2,-size[1]/2],[size[0]/2, size[1]/2], [-size[0]/2, size[1]/2]], numpy.float32))
- if getMachineSetting('machine_type') == 'ultimaker2':
+ if getMachineSetting('machine_type').startswith('ultimaker2'):
#UM2 no-go zones
w = 25
- h = 10
+ h = 8
ret.append(numpy.array([[-size[0]/2,-size[1]/2],[-size[0]/2+w+2,-size[1]/2], [-size[0]/2+w,-size[1]/2+h], [-size[0]/2,-size[1]/2+h]], numpy.float32))
ret.append(numpy.array([[ size[0]/2-w-2,-size[1]/2],[ size[0]/2,-size[1]/2], [ size[0]/2,-size[1]/2+h],[ size[0]/2-w,-size[1]/2+h]], numpy.float32))
ret.append(numpy.array([[-size[0]/2+w+2, size[1]/2],[-size[0]/2, size[1]/2], [-size[0]/2, size[1]/2-h],[-size[0]/2+w, size[1]/2-h]], numpy.float32))
['de', 'Deutsch'],
['fr', 'French'],
['tr', 'Turkish'],
- # ['ko', 'Korean'],
+ ['ko', 'Korean'],
# ['zh', 'Chinese'],
# ['nl', 'Nederlands'],
# ['es', 'Spanish'],
##Do we need to create the final archive
ARCHIVE_FOR_DISTRIBUTION=1
##Which version name are we appending to the final archive
-export BUILD_NAME=15.01-RC6
+export BUILD_NAME=15.01-RC7
TARGET_DIR=Cura-${BUILD_NAME}-${BUILD_TARGET}
##Which versions of external programs to use
gitClone git@github.com:Ultimaker/Ultimaker2Marlin.git _Ultimaker2Marlin
cd _Ultimaker2Marlin/Marlin
+git checkout master
$MAKE -j 3 HARDWARE_MOTHERBOARD=72 ARDUINO_INSTALL_DIR=${ARDUINO_PATH} ARDUINO_VERSION=${ARDUINO_VERSION} BUILD_DIR=_Ultimaker2 DEFINES="'STRING_CONFIG_H_AUTHOR=\"Version:_${BUILD_NAME}\"' TEMP_SENSOR_1=0 EXTRUDERS=1"
$MAKE -j 3 HARDWARE_MOTHERBOARD=72 ARDUINO_INSTALL_DIR=${ARDUINO_PATH} ARDUINO_VERSION=${ARDUINO_VERSION} BUILD_DIR=_Ultimaker2Dual DEFINES="'STRING_CONFIG_H_AUTHOR=\"Version:_${BUILD_NAME}\"' TEMP_SENSOR_1=20 EXTRUDERS=2"
+git checkout UM2go
+$MAKE -j 3 HARDWARE_MOTHERBOARD=72 ARDUINO_INSTALL_DIR=${ARDUINO_PATH} ARDUINO_VERSION=${ARDUINO_VERSION} BUILD_DIR=_Ultimaker2go DEFINES="'STRING_CONFIG_H_AUTHOR=\"Version:_${BUILD_NAME}go\"' TEMP_SENSOR_1=0 EXTRUDERS=1"
+git checkout UM2extended
+$MAKE -j 3 HARDWARE_MOTHERBOARD=72 ARDUINO_INSTALL_DIR=${ARDUINO_PATH} ARDUINO_VERSION=${ARDUINO_VERSION} BUILD_DIR=_Ultimaker2extended DEFINES="'STRING_CONFIG_H_AUTHOR=\"Version:_${BUILD_NAME}ex\"' TEMP_SENSOR_1=0 EXTRUDERS=1"
+$MAKE -j 3 HARDWARE_MOTHERBOARD=72 ARDUINO_INSTALL_DIR=${ARDUINO_PATH} ARDUINO_VERSION=${ARDUINO_VERSION} BUILD_DIR=_Ultimaker2extendedDual DEFINES="'STRING_CONFIG_H_AUTHOR=\"Version:_${BUILD_NAME}ex\"' TEMP_SENSOR_1=20 EXTRUDERS=2"
cd -
cp _UltimakerMarlin/Marlin/_UltimakerMarlin_250000/Marlin.hex resources/firmware/MarlinUltimaker-250000.hex
cp _UltimakerMarlin/Marlin/_UltimakerMarlin_Plus_Dual_115200/Marlin.hex resources/firmware/MarlinUltimaker-UMOP-115200-dual.hex
cp _Ultimaker2Marlin/Marlin/_Ultimaker2/Marlin.hex resources/firmware/MarlinUltimaker2.hex
cp _Ultimaker2Marlin/Marlin/_Ultimaker2Dual/Marlin.hex resources/firmware/MarlinUltimaker2-dual.hex
+cp _Ultimaker2Marlin/Marlin/_Ultimaker2go/Marlin.hex resources/firmware/MarlinUltimaker2go.hex
+cp _Ultimaker2Marlin/Marlin/_Ultimaker2extended/Marlin.hex resources/firmware/MarlinUltimaker2extended.hex
+cp _Ultimaker2Marlin/Marlin/_Ultimaker2extendedDual/Marlin.hex resources/firmware/MarlinUltimaker2extended-dual.hex
#############################
# Darwin
"Project-Id-Version: Cura Translation\n"\r
"Report-Msgid-Bugs-To: \n"\r
"POT-Creation-Date: 2014-12-08 10:01+0100\n"\r
-"PO-Revision-Date: 2014-11-14 20:43+0900\n"\r
+"PO-Revision-Date: 2015-01-07 17:30+0900\n"\r
"Last-Translator: Jinbuhm Kim <Jinbuhm.Kim@gmail.com>\n"\r
"Language-Team: Korean <Jinbuhm.Kim@gmail.com>\n"\r
"MIME-Version: 1.0\n"\r
"Content-Type: text/plain; charset=UTF-8\n"\r
"Content-Transfer-Encoding: 8bit\n"\r
-"X-Generator: Poedit 1.7beta1\n"\r
+"X-Generator: Poedit 1.7.1\n"\r
"Plural-Forms: nplurals=1; plural=0;\n"\r
"Language: ko_KR\n"\r
"X-Poedit-SourceCharset: UTF-8\n"\r
msgstr "언어를 선택하세요"\r
\r
#: Cura/gui/configWizard.py:266\r
-#, fuzzy\r
msgid "Older models"\r
-msgstr "3D 모델 열기 "\r
+msgstr "오래된 모델"\r
\r
#: Cura/gui/configWizard.py:283\r
msgid "Printrbot Selection"\r
msgstr "한번에 하나씩 프린팅 경고"\r
\r
#: Cura/gui/mainWindow.py:467\r
-#, fuzzy\r
msgid "Add new machine..."\r
-msgstr "새로운 기기 추가"\r
+msgstr "새로운 기기 추가..."\r
\r
#: Cura/gui/mainWindow.py:475\r
msgid "Install default firmware..."\r
\r
#: Cura/util/profile.py:221 Cura/util/profile.py:222 Cura/util/profile.py:223\r
msgid "Skirt"\r
-msgstr ""\r
+msgstr "Skirt"\r
\r
#: Cura/util/profile.py:221\r
msgid "Line count"\r
msgstr "서포트를 위한 돌출부 각도(deg)"\r
\r
#: Cura/util/profile.py:233\r
-#, fuzzy\r
msgid ""\r
"The minimal angle that overhangs need to have to get support. With 90 degree "\r
"being horizontal and 0 degree being vertical."\r
"Amount of infill structure in the support material, less material gives "\r
"weaker support which is easier to remove. 15% seems to be a good average."\r
msgstr ""\r
-"서포트 재질에 채우는 양, 재료가 적으면 서포트가 약해서 제거하기 쉽습니다. 15%"\r
-"가 평균적으로 좋습니다."\r
+"서포트 재질에 채우는 양, 재료가 적으면 서포트가 약해서 제거하기 쉽습니다. "\r
+"15% 가 평균적으로 좋습니다."\r
\r
#: Cura/util/profile.py:235\r
msgid "Distance X/Y (mm)"\r
\r
#: Cura/util/profile.py:237 Cura/util/profile.py:238\r
msgid "Black Magic"\r
-msgstr ""\r
+msgstr "Black Magic"\r
\r
#: Cura/util/profile.py:237\r
msgid "Spiralize the outer contour"\r
\r
#: Cura/util/profile.py:247\r
msgid "Gap between the last layer of the raft the whole print."\r
-msgstr ""\r
+msgstr "Gap between the last layer of the raft the whole print."\r
\r
#: Cura/util/profile.py:248\r
msgid "First Layer Airgap"\r
-msgstr ""\r
+msgstr "첫번째 레이어 Airgap"\r
\r
#: Cura/util/profile.py:248\r
-#, fuzzy\r
msgid ""\r
"Gap between the last layer of the raft and the first printing layer. A small "\r
"gap of 0.2mm works wonders on PLA and makes the raft easy to remove. This "\r
"value is added on top of the 'Airgap' setting."\r
msgstr ""\r
"첫번째 프린팅 레이어와 마지막 raft레이어 사이의 간격. PLA에서 0.2mm의 간격은 "\r
-"raft를 쉽게 제거되게 합니다."\r
+"raft를 쉽게 제거되게 합니다. 이 값은 Airgap 설정의 상위에 더해집니다."\r
\r
#: Cura/util/profile.py:249\r
msgid "Surface layers"\r
"다."\r
\r
#: Cura/util/profile.py:250\r
-#, fuzzy\r
msgid "Surface layer thickness (mm)"\r
-msgstr "첫번째 레이어 두께 (mm)"\r
+msgstr "표면 레이어 두께 (mm)"\r
\r
#: Cura/util/profile.py:250\r
msgid "Thickness of each surface layer."\r
-msgstr ""\r
+msgstr "각 표면 레이어의 두께"\r
\r
#: Cura/util/profile.py:251\r
-#, fuzzy\r
msgid "Surface layer line width (mm)"\r
-msgstr "인터페이스 라인 두께 (mm)"\r
+msgstr "표면 레이어 라인 두께 (mm)"\r
\r
#: Cura/util/profile.py:251\r
msgid "Width of the lines for each surface layer."\r
-msgstr ""\r
+msgstr "각 표면 레이어의 라인두께"\r
\r
#: Cura/util/profile.py:252 Cura/util/profile.py:253 Cura/util/profile.py:254\r
#: Cura/util/profile.py:255\r
--- /dev/null
+[machine]\r
+machine_name = Ord\r
+machine_type = RepRap\r
+machine_width = 260\r
+machine_depth = 300\r
+machine_height = 200\r
+machine_center_is_zero = False\r
+has_heated_bed = True\r
+gcode_flavor = RepRap (Marlin/Sprinter)\r
+extruder_amount = 5\r
+extruder_offset_x1 = 62.95\r
+extruder_offset_y1 = 2.05\r
+extruder_offset_x2 = 0.0\r
+extruder_offset_y2 = 27.7 \r
+extruder_offset_x3 = 63.18\r
+extruder_offset_y3 = 28.65\r
+extruder_offset_x4 = 31.6\r
+extruder_offset_y4 = 28.2\r
+serial_baud = 250000\r
+[profile]\r
+layer_height = 0.20\r
+wall_thickness = 0.8\r
+retraction_enable = True\r
+solid_layer_thickness = 0.6\r
+fill_density = 15\r
+nozzle_size = 0.5\r
+filament_diameter = 1.75\r
+filament_diameter2 = 0\r
+filament_diameter3 = 0\r
+filament_diameter4 = 0\r
+filament_diameter5 = 0\r
+nozzle_size = 0.35\r
+layer_height = 0.3\r
+print_speed = 50\r
+print_temperature = 240\r
+print_temperature2 = 0\r
+print_temperature3 = 0\r
+print_temperature4 = 0\r
+print_temperature5 = 0\r
+print_bed_temperature = 60\r
+travel_speed = 150\r
travel_speed = 120
bottom_layer_speed = 25
infill_speed = 50
-inset0_speed = 40
-insetx_speed = 50
+inset0_speed = 30
+insetx_speed = 40
cool_min_layer_time = 10
skirt_line_count = 1
skirt_gap = 3.0
--- /dev/null
+[machine]
+machine_name = FracktalWorks Julia
+machine_type = Julia
+machine_width = 210
+machine_depth = 250
+machine_height = 270
+machine_center_is_zero = False
+has_heated_bed = True
+gcode_flavor = RepRap (Marlin/Sprinter)
+extruder_amount = 1
+
+[profile]
+layer_height = 0.2
+wall_thickness = 0.4
+retraction_enable = True
+solid_layer_thickness = 0.6
+fill_density = 15
+nozzle_size = 0.4
+print_speed = 60
+print_temperature = 230
+print_temperature2 = 0
+print_temperature3 = 0
+print_temperature4 = 0
+print_bed_temperature = 80
+support = None
+platform_adhesion = None
+support_dual_extrusion = Both
+filament_diameter = 1.75
+filament_diameter2 = 0
+filament_diameter3 = 0
+filament_diameter4 = 0
+filament_flow = 100
+retraction_speed = 50.0
+bottom_thickness = 0.20
+layer0_width_factor = 100
+overlap_dual = 0.15
+travel_speed = 150.0
+bottom_layer_speed = 20
+infill_speed = 0
+inset0_speed = 40
+insetx_speed = 50
+cool_min_layer_time = 5
+fan_enabled = True
+skirt_line_count = 1
+skirt_gap = 3.0
+skirt_minimal_length = 150.0
+fan_full_height = 0.5
+fan_speed = 100
+fan_speed_max = 100
+cool_min_feedrate = 10
+cool_head_lift = False
+solid_top = True
+solid_bottom = True
+fill_overlap = 15
+support_type = Lines
+support_angle = 60
+support_fill_rate = 15
+support_xy_distance = 1.2
+support_z_distance = 0.1
+spiralize = False
+simple_mode = False
+brim_line_count = 20
+raft_margin = 5.0
+raft_line_spacing = 3.0
+raft_base_thickness = 0.3
+raft_base_linewidth = 1.0
+raft_interface_thickness = 0.27
+raft_interface_linewidth = 0.4
+raft_airgap_all = 0.0
+raft_airgap = 0.22
+raft_surface_layers = 2
+raft_surface_thickness = 0.27
+raft_surface_linewidth = 0.4
+fix_horrible_union_all_type_a = True
+fix_horrible_union_all_type_b = False
+fix_horrible_use_open_bits = False
+fix_horrible_extensive_stitching = False
+plugin_config =
+object_center_x = -1
+object_center_y = -1
platform_adhesion = Brim
filament_flow = 107
print_temperature = 250
+fan_speed = 50
+fan_speed_max = 50
--- /dev/null
+[info]
+name = U-PET
+
+[profile]
+print_bed_temperature = 60
+platform_adhesion = Brim
+print_temperature = 250
+fan_speed = 50
+fan_speed_max = 50