Ejemplo n.º 1
0
	def OnSlice(self, e):
		put = profile.setTempOverride
		oldProfile = profile.getGlobalProfileString()

		put('model_multiply_x', '1')
		put('model_multiply_y', '1')
		put('enable_raft', 'False')
		put('add_start_end_gcode', 'False')
		put('gcode_extension', 'project_tmp')
		
		clearZ = 0
		actionList = []
		for item in self.list:
			if item.profile != None and os.path.isfile(item.profile):
				profile.loadGlobalProfile(item.profile)
			put('machine_center_x', item.centerX - self.extruderOffset[item.extruder].x)
			put('machine_center_y', item.centerY - self.extruderOffset[item.extruder].y)
			put('model_scale', item.scale)
			put('flip_x', item.flipX)
			put('flip_y', item.flipY)
			put('flip_z', item.flipZ)
			put('model_rotate_base', item.rotate)
			put('swap_xz', item.swapXZ)
			put('swap_yz', item.swapYZ)
			
			action = Action()
			action.sliceCmd = sliceRun.getSliceCommand(item.filename)
			action.centerX = item.centerX
			action.centerY = item.centerY
			action.extruder = item.extruder
			action.filename = item.filename
			clearZ = max(clearZ, item.getMaximum().z * item.scale + 5.0)
			action.clearZ = clearZ
			action.leaveResultForNextSlice = False
			action.usePreviousSlice = False
			actionList.append(action)

			if self.list.index(item) > 0 and item.isSameExceptForPosition(self.list[self.list.index(item)-1]):
				actionList[-2].leaveResultForNextSlice = True
				actionList[-1].usePreviousSlice = True

			if item.profile != None:
				profile.loadGlobalProfileFromString(oldProfile)
		
		#Restore the old profile.
		profile.resetTempOverride()
		
		dlg=wx.FileDialog(self, "Save project gcode file", os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_SAVE)
		dlg.SetWildcard("GCode file (*.gcode)|*.gcode")
		if dlg.ShowModal() != wx.ID_OK:
			dlg.Destroy()
			return
		resultFilename = dlg.GetPath()
		dlg.Destroy()
		
		pspw = ProjectSliceProgressWindow(actionList, resultFilename)
		pspw.extruderOffset = self.extruderOffset
		pspw.Centre()
		pspw.Show(True)
Ejemplo n.º 2
0
def getSliceCommand(filename):
	if profile.getPreference('slicer').startswith('Slic3r') and getSlic3rExe() != False:
		slic3rExe = getSlic3rExe()
		if slic3rExe == False:
			return False
		cmd = [slic3rExe,
			'--output-filename-format', '[input_filename_base]_export.gcode',
			'--nozzle-diameter', str(profile.calculateEdgeWidth()),
			'--print-center', '%s,%s' % (profile.getProfileSetting('machine_center_x'), profile.getProfileSetting('machine_center_y')),
			'--z-offset', '0',
			'--gcode-flavor', 'reprap',
			'--gcode-comments',
			'--filament-diameter', profile.getProfileSetting('filament_diameter'),
			'--extrusion-multiplier', str(1.0 / float(profile.getProfileSetting('filament_density'))),
			'--temperature', profile.getProfileSetting('print_temperature'),
			'--travel-speed', profile.getProfileSetting('travel_speed'),
			'--perimeter-speed', profile.getProfileSetting('print_speed'),
			'--small-perimeter-speed', profile.getProfileSetting('print_speed'),
			'--infill-speed', profile.getProfileSetting('print_speed'),
			'--solid-infill-speed', profile.getProfileSetting('print_speed'),
			'--bridge-speed', profile.getProfileSetting('print_speed'),
			'--bottom-layer-speed-ratio', str(float(profile.getProfileSetting('bottom_layer_speed')) / float(profile.getProfileSetting('print_speed'))),
			'--layer-height', profile.getProfileSetting('layer_height'),
			'--first-layer-height-ratio', '1.0',
			'--infill-every-layers', '1',
			'--perimeters', str(profile.calculateLineCount()),
			'--solid-layers', str(profile.calculateSolidLayerCount()),
			'--fill-density', str(float(profile.getProfileSetting('fill_density'))/100),
			'--fill-angle', '45',
			'--fill-pattern', 'rectilinear', #rectilinear line concentric hilbertcurve archimedeanchords octagramspiral
			'--solid-fill-pattern', 'rectilinear',
			'--start-gcode', profile.getAlterationFilePath('start.gcode'),
			'--end-gcode', profile.getAlterationFilePath('end.gcode'),
			'--retract-length', profile.getProfileSetting('retraction_amount'),
			'--retract-speed', str(int(float(profile.getProfileSetting('retraction_speed')))),
			'--retract-restart-extra', profile.getProfileSetting('retraction_extra'),
			'--retract-before-travel', profile.getProfileSetting('retraction_min_travel'),
			'--retract-lift', '0',
			'--slowdown-below-layer-time', profile.getProfileSetting('cool_min_layer_time'),
			'--min-print-speed', profile.getProfileSetting('cool_min_feedrate'),
			'--skirts', profile.getProfileSetting('skirt_line_count'),
			'--skirt-distance', str(int(float(profile.getProfileSetting('skirt_gap')))),
			'--skirt-height', '1',
			'--scale', profile.getProfileSetting('model_scale'),
			'--rotate', profile.getProfileSetting('model_rotate_base'),
			'--duplicate-x', profile.getProfileSetting('model_multiply_x'),
			'--duplicate-y', profile.getProfileSetting('model_multiply_y'),
			'--duplicate-distance', '10']
		if profile.getProfileSetting('support') != 'None':
			cmd.extend(['--support-material'])
		cmd.extend([filename])
		return cmd
	else:
		pypyExe = getPyPyExe()
		if pypyExe == False:
			pypyExe = sys.executable
		
		#In case we have a frozen exe, then argv[0] points to the executable, but we want to give pypy a real script file.
		if hasattr(sys, 'frozen'):
			mainScriptFile = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../..", "cura_sf.zip"))
		else:
			mainScriptFile = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", os.path.split(sys.argv[0])[1]))
		cmd = [pypyExe, mainScriptFile, '-p', profile.getGlobalProfileString()]
		if platform.system() == "Windows":
			try:
				cmd.append(str(filename))
			except UnicodeEncodeError:
				cmd.append("#UTF8#" + filename.encode("utf-8"))
		else:
			cmd.append(filename)
		return cmd
Ejemplo n.º 3
0
	def OnSlice(self, e):
		if len(self.filelist) < 1:
			wx.MessageBox('You need to load a file before you can slice it.', 'Print error', wx.OK | wx.ICON_INFORMATION)
			return
		#save the current profile so we can put it back latter
		oldProfile = profile.getGlobalProfileString()
		
		put = profile.putProfileSetting
		get = profile.getProfileSetting

		put('layer_height', '0.2')
		put('wall_thickness', '0.8')
		put('solid_layer_thickness', '0.6')
		put('fill_density', '20')
		put('skirt_line_count', '1')
		put('skirt_gap', '6.0')
		put('print_speed', '50')
		put('print_temperature', '0')
		put('support', 'None')
		#put('machine_center_x', '100')
		#put('machine_center_y', '100')
		#put('retraction_min_travel', '5.0')
		#put('retraction_speed', '13.5')
		#put('retraction_amount', '0.0')
		#put('retraction_extra', '0.0')
		put('travel_speed', '150')
		put('max_z_speed', '3.0')
		put('bottom_layer_speed', '25')
		put('cool_min_layer_time', '10')
		put('fan_enabled', 'True')
		put('fan_layer', '1')
		put('fan_speed', '100')
		#put('model_scale', '1.0')
		#put('flip_x', 'False')
		#put('flip_y', 'False')
		#put('flip_z', 'False')
		#put('model_rotate_base', '0')
		#put('model_multiply_x', '1')
		#put('model_multiply_y', '1')
		put('extra_base_wall_thickness', '0.0')
		put('sequence', 'Loops > Perimeter > Infill')
		put('force_first_layer_sequence', 'True')
		put('infill_type', 'Line')
		put('solid_top', 'True')
		put('fill_overlap', '15')
		put('support_rate', '50')
		put('support_distance', '0.5')
		put('joris', 'False')
		put('cool_min_feedrate', '5')
		put('bridge_speed', '100')
		put('raft_margin', '5')
		put('raft_base_material_amount', '100')
		put('raft_interface_material_amount', '100')
		put('bottom_thickness', '0.0')

		if self.printSupport.GetValue():
			put('support', 'Exterior Only')

		nozzle_size = float(get('nozzle_size'))
		if self.printTypeNormal.GetValue():
			put('wall_thickness', nozzle_size * 2.0)
			put('layer_height', '0.2')
			put('fill_density', '20')
		elif self.printTypeLow.GetValue():
			put('wall_thickness', nozzle_size * 1.0)
			put('layer_height', '0.3')
			put('fill_density', '10')
			put('print_speed', '80')
			put('bottom_layer_speed', '40')
		elif self.printTypeHigh.GetValue():
			put('wall_thickness', nozzle_size * 3.0)
			put('layer_height', '0.1')
			put('fill_density', '30')
			put('bottom_layer_speed', '15')
			put('bottom_thickness', '0.2')
		elif self.printTypeJoris.GetValue():
			put('wall_thickness', nozzle_size * 1.5)
			put('layer_height', '0.3')
			put('fill_density', '0')
			put('joris', 'True')
			put('extra_base_wall_thickness', '15.0')
			put('sequence', 'Infill > Loops > Perimeter')
			put('force_first_layer_sequence', 'False')
			put('solid_top', 'False')
			put('support', 'None')
			put('cool_min_layer_time', '3')

		put('filament_diameter', self.printMaterialDiameter.GetValue())
		if self.printMaterialPLA.GetValue():
			put('filament_density', '1.00')
			put('enable_raft', 'False')
			put('skirt_line_count', '1')
		if self.printMaterialABS.GetValue():
			put('filament_density', '0.85')
			put('enable_raft', 'True')
			put('skirt_line_count', '0')
			put('fan_layer', '1')
			put('bottom_thickness', '0.0')
		
		#Create a progress panel and add it to the window. The progress panel will start the Skein operation.
		spp = sliceProgessPanel.sliceProgessPanel(self, self, self.filelist)
		self.sizer.Add(spp, (len(self.progressPanelList)+2,0), span=(1,4), flag=wx.EXPAND)
		self.sizer.Layout()
		newSize = self.GetSize();
		newSize.IncBy(0, spp.GetSize().GetHeight())
		self.SetSize(newSize)
		self.progressPanelList.append(spp)
		
		#Restore the old profile.
		profile.loadGlobalProfileFromString(oldProfile)
Ejemplo n.º 4
0
    def OnSlice(self, e):
        if len(self.filelist) < 1:
            wx.MessageBox('You need to load a file before you can prepare it.',
                          'Print error', wx.OK | wx.ICON_INFORMATION)
            return
        #save the current profile so we can put it back latter
        oldProfile = profile.getGlobalProfileString()

        put = profile.putProfileSetting
        get = profile.getProfileSetting

        put('layer_height', '0.2')
        put('wall_thickness', '0.8')
        put('solid_layer_thickness', '0.6')
        put('fill_density', '20')
        put('skirt_line_count', '1')
        put('skirt_gap', '6.0')
        put('print_speed', '50')
        put('print_temperature', '220')
        put('support', 'None')
        #put('machine_center_x', '100')
        #put('machine_center_y', '100')
        put('retraction_enable', 'False')
        put('retraction_min_travel', '5.0')
        put('retraction_speed', '40.0')
        put('retraction_amount', '4.5')
        put('retraction_extra', '0.0')
        put('travel_speed', '150')
        put('max_z_speed', '3.0')
        put('bottom_layer_speed', '25')
        put('cool_min_layer_time', '10')
        put('fan_enabled', 'True')
        put('fan_layer', '1')
        put('fan_speed', '100')
        #put('model_scale', '1.0')
        #put('flip_x', 'False')
        #put('flip_y', 'False')
        #put('flip_z', 'False')
        #put('model_rotate_base', '0')
        #put('model_multiply_x', '1')
        #put('model_multiply_y', '1')
        put('extra_base_wall_thickness', '0.0')
        put('sequence', 'Loops > Perimeter > Infill')
        put('force_first_layer_sequence', 'True')
        put('infill_type', 'Line')
        put('solid_top', 'True')
        put('fill_overlap', '15')
        put('support_rate', '50')
        put('support_distance', '0.5')
        put('joris', 'False')
        put('cool_min_feedrate', '5')
        put('bridge_speed', '100')
        put('raft_margin', '5')
        put('raft_base_material_amount', '100')
        put('raft_interface_material_amount', '100')
        put('bottom_thickness', '0.0')

        if self.printSupport.GetValue():
            put('support', 'Exterior Only')

        nozzle_size = float(get('nozzle_size'))
        if self.printTypeNormal.GetValue():
            put('wall_thickness', nozzle_size * 2.0)
            put('layer_height', '0.2')
            put('fill_density', '20')
        elif self.printTypeLow.GetValue():
            put('wall_thickness', nozzle_size * 1.4)
            put('layer_height', '0.25')
            put('fill_density', '10')
            put('print_speed', '80')
            put('cool_min_layer_time', '3')
            put('bottom_layer_speed', '40')
        elif self.printTypeHigh.GetValue():
            put('wall_thickness', nozzle_size * 2.0)
            put('layer_height', '0.1')
            put('fill_density', '30')
            put('bottom_layer_speed', '15')
            put('bottom_thickness', '0.2')
        elif self.printTypeJoris.GetValue():
            put('wall_thickness', nozzle_size * 1.5)
            put('layer_height', '0.3')
            put('solid_layer_thickness', '0.9')
            put('fill_density', '0')
            put('joris', 'True')
            put('extra_base_wall_thickness', '15.0')
            put('sequence', 'Infill > Loops > Perimeter')
            put('force_first_layer_sequence', 'False')
            put('solid_top', 'False')
            put('support', 'None')
            put('cool_min_layer_time', '3')

        put('filament_diameter', self.printMaterialDiameter.GetValue())
        if self.printMaterialPLA.GetValue():
            put('filament_density', '1.00')
            put('enable_raft', 'False')
            put('skirt_line_count', '1')
        if self.printMaterialABS.GetValue():
            put('filament_density', '0.85')
            put('enable_raft', 'True')
            put('skirt_line_count', '0')
            put('fan_layer', '1')
            put('bottom_thickness', '0.0')
            put('print_temperature', '260')

        #Create a progress panel and add it to the window. The progress panel will start the Skein operation.
        spp = sliceProgessPanel.sliceProgessPanel(self, self, self.filelist)
        self.sizer.Add(spp, (len(self.progressPanelList) + 2, 0),
                       span=(1, 4),
                       flag=wx.EXPAND)
        self.sizer.Layout()
        newSize = self.GetSize()
        newSize.IncBy(0, spp.GetSize().GetHeight())
        self.SetSize(newSize)
        self.progressPanelList.append(spp)

        #Restore the old profile.
        profile.loadGlobalProfileFromString(oldProfile)
Ejemplo n.º 5
0
def getSliceCommand(filename):
    if profile.getPreference('slicer').startswith(
            'Slic3r') and getSlic3rExe() != False:
        slic3rExe = getSlic3rExe()
        if slic3rExe == False:
            return False
        cmd = [
            slic3rExe,
            '--output-filename-format',
            '[input_filename_base]_export.gcode',
            '--nozzle-diameter',
            str(profile.calculateEdgeWidth()),
            '--print-center',
            '%s,%s' % (profile.getProfileSetting('machine_center_x'),
                       profile.getProfileSetting('machine_center_y')),
            '--z-offset',
            '0',
            '--gcode-flavor',
            'reprap',
            '--gcode-comments',
            '--filament-diameter',
            profile.getProfileSetting('filament_diameter'),
            '--extrusion-multiplier',
            str(1.0 / float(profile.getProfileSetting('filament_density'))),
            '--temperature',
            profile.getProfileSetting('print_temperature'),
            '--travel-speed',
            profile.getProfileSetting('travel_speed'),
            '--perimeter-speed',
            profile.getProfileSetting('print_speed'),
            '--small-perimeter-speed',
            profile.getProfileSetting('print_speed'),
            '--infill-speed',
            profile.getProfileSetting('print_speed'),
            '--solid-infill-speed',
            profile.getProfileSetting('print_speed'),
            '--bridge-speed',
            profile.getProfileSetting('print_speed'),
            '--bottom-layer-speed-ratio',
            str(
                float(profile.getProfileSetting('bottom_layer_speed')) /
                float(profile.getProfileSetting('print_speed'))),
            '--layer-height',
            profile.getProfileSetting('layer_height'),
            '--first-layer-height-ratio',
            '1.0',
            '--infill-every-layers',
            '1',
            '--perimeters',
            str(profile.calculateLineCount()),
            '--solid-layers',
            str(profile.calculateSolidLayerCount()),
            '--fill-density',
            str(float(profile.getProfileSetting('fill_density')) / 100),
            '--fill-angle',
            '45',
            '--fill-pattern',
            'rectilinear',  #rectilinear line concentric hilbertcurve archimedeanchords octagramspiral
            '--solid-fill-pattern',
            'rectilinear',
            '--start-gcode',
            profile.getAlterationFilePath('start.gcode'),
            '--end-gcode',
            profile.getAlterationFilePath('end.gcode'),
            '--retract-length',
            profile.getProfileSetting('retraction_amount'),
            '--retract-speed',
            str(int(float(profile.getProfileSetting('retraction_speed')))),
            '--retract-restart-extra',
            profile.getProfileSetting('retraction_extra'),
            '--retract-before-travel',
            profile.getProfileSetting('retraction_min_travel'),
            '--retract-lift',
            '0',
            '--slowdown-below-layer-time',
            profile.getProfileSetting('cool_min_layer_time'),
            '--min-print-speed',
            profile.getProfileSetting('cool_min_feedrate'),
            '--skirts',
            profile.getProfileSetting('skirt_line_count'),
            '--skirt-distance',
            str(int(float(profile.getProfileSetting('skirt_gap')))),
            '--skirt-height',
            '1',
            '--scale',
            profile.getProfileSetting('model_scale'),
            '--rotate',
            profile.getProfileSetting('model_rotate_base'),
            '--duplicate-x',
            profile.getProfileSetting('model_multiply_x'),
            '--duplicate-y',
            profile.getProfileSetting('model_multiply_y'),
            '--duplicate-distance',
            '10'
        ]
        if profile.getProfileSetting('support') != 'None':
            cmd.extend(['--support-material'])
        cmd.extend([filename])
        return cmd
    else:
        pypyExe = getPyPyExe()
        if pypyExe == False:
            pypyExe = sys.executable

        #In case we have a frozen exe, then argv[0] points to the executable, but we want to give pypy a real script file.
        if hasattr(sys, 'frozen'):
            mainScriptFile = os.path.abspath(
                os.path.join(os.path.dirname(os.path.abspath(__file__)),
                             "../..", "cura_sf.zip"))
        else:
            mainScriptFile = os.path.abspath(
                os.path.join(os.path.dirname(os.path.abspath(__file__)), "..",
                             os.path.split(sys.argv[0])[1]))
        cmd = [pypyExe, mainScriptFile, '-p', profile.getGlobalProfileString()]
        cmd.append(filename)
        return cmd
Ejemplo n.º 6
0
	def OnSlice(self, e):
		dlg=wx.FileDialog(self, "Save project gcode file", os.path.split(profile.getPreference('lastFile'))[0], style=wx.FD_SAVE)
		dlg.SetWildcard("GCode file (*.gcode)|*.gcode")
		if dlg.ShowModal() != wx.ID_OK:
			dlg.Destroy()
			return
		resultFilename = dlg.GetPath()
		dlg.Destroy()

		put = profile.setTempOverride
		oldProfile = profile.getGlobalProfileString()
		
		put('add_start_end_gcode', 'False')
		put('gcode_extension', 'project_tmp')
		if self.printMode == 0:
			clearZ = 0
			actionList = []
			for item in self.list:
				if item.profile != None and os.path.isfile(item.profile):
					profile.loadGlobalProfile(item.profile)
				put('machine_center_x', item.centerX - self.extruderOffset[item.extruder][0])
				put('machine_center_y', item.centerY - self.extruderOffset[item.extruder][1])
				put('model_scale', item.scale)
				put('flip_x', item.flipX)
				put('flip_y', item.flipY)
				put('flip_z', item.flipZ)
				put('model_rotate_base', item.rotate)
				put('swap_xz', item.swapXZ)
				put('swap_yz', item.swapYZ)
				
				action = Action()
				action.sliceCmd = sliceRun.getSliceCommand(item.filename)
				action.centerX = item.centerX
				action.centerY = item.centerY
				action.temperature = profile.getProfileSettingFloat('print_temperature')
				action.extruder = item.extruder
				action.filename = item.filename
				clearZ = max(clearZ, item.getSize()[2] * item.scale + 5.0)
				action.clearZ = clearZ
				action.leaveResultForNextSlice = False
				action.usePreviousSlice = False
				actionList.append(action)

				if self.list.index(item) > 0 and item.isSameExceptForPosition(self.list[self.list.index(item)-1]):
					actionList[-2].leaveResultForNextSlice = True
					actionList[-1].usePreviousSlice = True

				if item.profile != None:
					profile.loadGlobalProfileFromString(oldProfile)
			
		else:
			self._saveCombinedSTL(resultFilename + "_temp_.stl")
			put('model_scale', 1.0)
			put('flip_x', False)
			put('flip_y', False)
			put('flip_z', False)
			put('model_rotate_base', 0)
			put('swap_xz', False)
			put('swap_yz', False)
			actionList = []
			
			action = Action()
			action.sliceCmd = sliceRun.getSliceCommand(resultFilename + "_temp_.stl")
			action.centerX = profile.getProfileSettingFloat('machine_center_x')
			action.centerY = profile.getProfileSettingFloat('machine_center_y')
			action.temperature = profile.getProfileSettingFloat('print_temperature')
			action.extruder = 0
			action.filename = resultFilename + "_temp_.stl"
			action.clearZ = 0
			action.leaveResultForNextSlice = False
			action.usePreviousSlice = False

			actionList.append(action)
		
		#Restore the old profile.
		profile.resetTempOverride()
		
		pspw = ProjectSliceProgressWindow(actionList, resultFilename)
		pspw.extruderOffset = self.extruderOffset
		pspw.Centre()
		pspw.Show(True)