From: Youness Alaoui Date: Thu, 5 Mar 2015 21:45:44 +0000 (-0500) Subject: Merge tag '15.01-RC6' into upstream X-Git-Tag: lulzbot-15.02.1-1.01~52 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=d0741a02b703b9f5e53c527b04593699d37751fc;p=cura.git Merge tag '15.01-RC6' into upstream Conflicts: Cura/gui/simpleMode.py Cura/util/profile.py Cura/util/resources.py Cura/util/sliceEngine.py scripts/linux/debian_control scripts/linux/debian_i386/DEBIAN/control --- d0741a02b703b9f5e53c527b04593699d37751fc diff --cc Cura/gui/simpleMode.py index 87210db7,7b9e116e..ee352022 --- a/Cura/gui/simpleMode.py +++ b/Cura/gui/simpleMode.py @@@ -36,20 -40,16 +41,24 @@@ class simpleModePanel(wx.Panel) if cp.has_option('info', 'name'): name = cp.get('info', 'name') button = wx.RadioButton(printMaterialPanel, -1, name, style=wx.RB_GROUP if len(self._print_material_options) == 0 else 0) + button.base_filename = base_filename button.filename = filename self._print_material_options.append(button) + if profile.getPreference('simpleModeMaterial') == base_filename: + button.SetValue(True) + if profile.getMachineSetting('gcode_flavor') == 'UltiGCode': printMaterialPanel.Show(False) - - self.printSupport = wx.CheckBox(self, -1, _("Print support structure")) + + for filename in resources.getSimpleModeOptions(): + cp = configparser.ConfigParser() + cp.read(filename) + name = os.path.basename(filename) + if cp.has_option('info', 'name'): + name = cp.get('info', 'name') + button = wx.CheckBox(self, -1, name) + button.filename = filename + self._print_other_options.append(button) sizer = wx.GridBagSizer() self.SetSizer(sizer) @@@ -77,11 -76,20 +86,20 @@@ sizer.Add(boxsizer, (2,0), flag=wx.EXPAND) for button in self._print_profile_options: - button.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback()) + button.Bind(wx.EVT_RADIOBUTTON, self._update) for button in self._print_material_options: - button.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback()) + button.Bind(wx.EVT_RADIOBUTTON, self._update) - - self.printSupport.Bind(wx.EVT_CHECKBOX, self._update) + for button in self._print_other_options: - button.Bind(wx.EVT_CHECKBOX, lambda e: self._callback()) ++ button.Bind(wx.EVT_CHECKBOX, self._update) + + def _update(self, e): + for button in self._print_profile_options: + if button.GetValue(): + profile.putPreference('simpleModeProfile', button.base_filename) + for button in self._print_material_options: + if button.GetValue(): + profile.putPreference('simpleModeMaterial', button.base_filename) + self._callback() def getSettingOverrides(self): settings = {} diff --cc Cura/util/profile.py index 1275cb4e,691c0571..2351a24b --- a/Cura/util/profile.py +++ b/Cura/util/profile.py @@@ -175,20 -175,20 +175,20 @@@ class setting(object) def _(n): return n -setting('layer_height', 0.1, float, 'basic', _('Quality')).setRange(0.0001).setLabel(_("Layer height (mm)"), _("Layer height in millimeters.\nThis is the most important setting to determine the quality of your print. Normal quality prints are 0.1mm, high quality is 0.06mm. You can go up to 0.25mm with an Ultimaker for very fast prints at low quality.")) +setting('layer_height', 0.1, float, 'basic', _('Quality')).setRange(0.0001).setLabel(_("Layer height (mm)"), _("Layer height in millimeters.\nThis is the most important setting to determine the quality of your print. Smaller layer heights will give a finer surface but will give longer print time. Larger layer heights will provide fast prints but a rougher surface.")) setting('wall_thickness', 0.8, float, 'basic', _('Quality')).setRange(0.0).setLabel(_("Shell thickness (mm)"), _("Thickness of the outside shell in the horizontal direction.\nThis is used in combination with the nozzle size to define the number\nof perimeter lines and the thickness of those perimeter lines.")) - setting('retraction_enable', True, bool, 'basic', _('Quality')).setExpertSubCategory('Retraction').setLabel(_("Enable retraction"), _("Retract the filament when the nozzle is moving over a none-printed area. Details about the retraction can be configured in the advanced tab.")) + setting('retraction_enable', True, bool, 'basic', _('Quality')).setExpertSubCategory(_('Retraction')).setLabel(_("Enable retraction"), _("Retract the filament when the nozzle is moving over a none-printed area. Details about the retraction can be configured in the advanced tab.")) setting('solid_layer_thickness', 0.6, float, 'basic', _('Fill')).setRange(0).setLabel(_("Bottom/Top thickness (mm)"), _("This controls the thickness of the bottom and top layers, the amount of solid layers put down is calculated by the layer thickness and this value.\nHaving this value a multiple of the layer thickness makes sense. And keep it near your wall thickness to make an evenly strong part.")) - 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 will not affect the outside of the print and only adjusts how strong the part becomes.")) -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('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 will not 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_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_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('print_speed', 50, float, 'basic', _('Speed and Temperature')).setRange(1).setLabel(_("Print speed (mm/s)"), _("Speed at which printing happens. A well adjusted 3D printer can reach high speeds. However, for high quality prints slower speeds are required. Printing speed depends on a lot of factors. 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 205C is recommended.\nFor ABS and HIPS 240C is recommended.")) +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 205C is recommended.\nFor ABS and HIPS 240C is recommended.")) +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 205C is recommended.\nFor ABS and HIPS 240C is recommended.")) +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 205C is recommended.\nFor ABS and HIPS 240C is recommended.")) +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.\nFor PLA 60C is recommended.\nFor ABS and HIPS 110C is recommended.")) - setting('support', 'None', [_('None'), _('Touching buildplate'), _('Everywhere')], 'basic', _('Support')).setExpertSubCategory('Support').setLabel(_("Support type"), _("Type of support structure build.\n\"Support is useful when a model has severe over hangs. Using this option does require some finishing of the print, including removing the support material.\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('support', 'None', [_('None'), _('Touching buildplate'), _('Everywhere')], 'basic', _('Support')).setExpertSubCategory(_('Support')).setLabel(_("Support type"), _("Type of support structure build.\n\"Support is useful when a model has severe over hangs. Using this option does require some finishing of the print, including removing the support material.\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('support_dual_extrusion', 'Both', [_('Both'), _('First extruder'), _('Second extruder')], 'basic', _('Support')).setLabel(_("Support dual extrusion"), _("Which extruder to use for support material, for break-away support you can use both extruders.\nBut if one of the materials is more expensive then the other you could select an extruder to use for support material. This causes more extruder switches.\nYou can also use the 2nd extruder for soluble support materials.")) setting('wipe_tower', False, bool, 'basic', _('Dual extrusion')).setLabel(_("Wipe&prime tower"), _("The wipe-tower is a tower printed on every layer when switching between nozzles.\nThe old nozzle is wiped off on the tower before the new nozzle is used to print the 2nd color.")) setting('wipe_tower_volume', 15, float, 'expert', _('Dual extrusion')).setLabel(_("Wipe&prime tower volume per layer (mm3)"), _("The amount of material put in the wipe/prime tower.\nThis is done in volume because in general you want to extrude a\ncertain amount of volume to get the extruder going, independent on the layer height.\nThis means that with thinner layers, your tower gets bigger.")) @@@ -217,7 -217,7 +217,7 @@@ setting('solidarea_speed', 0. setting('inset0_speed', 0.0, float, 'advanced', _('Speed')).setRange(0.0).setLabel(_("Outer shell speed (mm/s)"), _("Speed at which outer shell is printed. If set to 0 then the print speed is used. Printing the outer shell at a lower speed improves the final skin quality. However, having a large difference between the inner shell speed and the outer shell speed will effect quality in a negative way.")) setting('insetx_speed', 0.0, float, 'advanced', _('Speed')).setRange(0.0).setLabel(_("Inner shell speed (mm/s)"), _("Speed at which inner shells are printed. If set to 0 then the print speed is used. Printing the inner shell faster then the outer shell will reduce printing time. It is good to set this somewhere in between the outer shell speed and the infill/printing speed.")) setting('cool_min_layer_time', 5, float, 'advanced', _('Cool')).setRange(0).setLabel(_("Minimal layer time (sec)"), _("Minimum time spent in a layer, gives the layer time to cool down before the next layer is put on top. If the layer will be placed down too fast the printer will slow down to make sure it has spent at least this amount of seconds printing this layer.")) - setting('fan_enabled', True, bool, 'advanced', _('Cool')).setExpertSubCategory('Cool').setLabel(_("Enable cooling fan"), _("Enable the cooling fan during the print. The extra cooling from the cooling fan is essential during faster prints and with PLA.")) -setting('fan_enabled', True, bool, 'advanced', _('Cool')).setExpertSubCategory(_('Cool')).setLabel(_("Enable cooling fan"), _("Enable the cooling fan during the print. The extra cooling from the cooling fan is essential during faster prints.")) ++setting('fan_enabled', True, bool, 'advanced', _('Cool')).setExpertSubCategory(_('Cool')).setLabel(_("Enable cooling fan"), _("Enable the cooling fan during the print. The extra cooling from the cooling fan is essential during faster prints and with PLA.")) setting('skirt_line_count', 1, int, 'expert', _('Skirt')).setRange(0).setLabel(_("Line count"), _("The skirt is a line drawn around the object at the first layer. This helps to prime your extruder, and to see if the object fits on your platform.\nSetting this to 0 will disable the skirt. Multiple skirt lines can help priming your extruder better for small objects.")) setting('skirt_gap', 3.0, float, 'expert', _('Skirt')).setRange(0).setLabel(_("Start distance (mm)"), _("The distance between the skirt and the first layer.\nThis is the minimal distance, multiple skirt lines will be put outwards from this distance.")) @@@ -479,8 -477,10 +479,10 @@@ setting('postSwitchExtruder.gcode', """ """, str, 'alteration', 'alteration') setting('startMode', 'Simple', ['Simple', 'Normal'], 'preference', 'hidden') + setting('simpleModeProfile', '2_normal', str, 'preference', 'hidden') + setting('simpleModeMaterial', '1_pla', str, 'preference', 'hidden') setting('oneAtATime', 'True', bool, 'preference', 'hidden') -setting('lastFile', os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources', 'example', 'UltimakerRobot_support.stl')), str, 'preference', 'hidden') +setting('lastFile', os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'resources', 'example', 'Rocktopus.stl')), str, 'preference', 'hidden') setting('save_profile', 'False', bool, 'preference', 'hidden').setLabel(_("Save profile on slice"), _("When slicing save the profile as [stl_file]_profile.ini next to the model.")) 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.")) diff --cc Cura/util/resources.py index 2a9e8eeb,305cc4b1..02141fbf --- a/Cura/util/resources.py +++ b/Cura/util/resources.py @@@ -52,27 -49,23 +52,29 @@@ def getDefaultMachineProfiles() path = os.path.normpath(os.path.join(resourceBasePath, 'machine_profiles', '*.ini')) return glob.glob(path) +def getSimpleModeIniFiles(subdir): + machine_type = profile.getMachineSetting('machine_type') + paths = [] + paths.append(os.path.normpath(os.path.expanduser(os.path.join('~', '.Cura', 'quickprint', machine_type, subdir)))) + paths.append(os.path.normpath(os.path.expanduser(os.path.join('~', '.Cura', 'quickprint', subdir)))) + paths.append(os.path.normpath(os.path.join(resourceBasePath, 'quickprint', machine_type, subdir))) + paths.append(os.path.normpath(os.path.join(resourceBasePath, 'quickprint', subdir))) + for path in paths: + if os.path.isdir(path): - return sorted(glob.glob(os.path.join(path, '*.ini'))) ++ files = sorted(glob.glob(os.path.join(path, '*.ini'))) ++ if len(files) > 0: ++ return files + return [] + + def getSimpleModeProfiles(): - path = os.path.normpath(os.path.join(resourceBasePath, 'quickprint', 'profiles', '*.ini')) - user_path = os.path.normpath(os.path.expanduser(os.path.join('~', '.Cura', 'quickprint', 'profiles'))) - if os.path.isdir(user_path): - files = sorted(glob.glob(os.path.join(user_path, '*.ini'))) - if len(files) > 0: - return files - return sorted(glob.glob(path)) + return getSimpleModeIniFiles('profiles') def getSimpleModeMaterials(): - path = os.path.normpath(os.path.join(resourceBasePath, 'quickprint', 'materials', '*.ini')) - user_path = os.path.normpath(os.path.expanduser(os.path.join('~', '.Cura', 'quickprint', 'materials'))) - if os.path.isdir(user_path): - files = sorted(glob.glob(os.path.join(user_path, '*.ini'))) - if len(files) > 0: - return files - return sorted(glob.glob(path)) + return getSimpleModeIniFiles('materials') + +def getSimpleModeOptions(): + return getSimpleModeIniFiles('options') def setupLocalization(selectedLanguage = None): #Default to english diff --cc package.sh index b647b3e7,7a3e1f83..7330f7ac --- a/package.sh +++ b/package.sh @@@ -19,15 -19,9 +19,15 @@@ BUILD_TARGET=${1:-none ##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-RC5 + export BUILD_NAME=15.01-RC6 TARGET_DIR=Cura-${BUILD_NAME}-${BUILD_TARGET} +##Revision +export REVISION=1.19 + +##Git commit +GIT_HASH=$(git rev-parse --short=4 HEAD) + ##Which versions of external programs to use WIN_PORTABLE_PY_VERSION=2.7.2.1 diff --cc scripts/linux/debian_control index a3c072f4,f969844f..bf813c3f mode 100755,100644..100644 --- a/scripts/linux/debian_control +++ b/scripts/linux/debian_control @@@ -1,12 -1,11 +1,12 @@@ +Source: cura Package: cura - Version: 14.09-1.19 + Version: [BUILD_NAME] +Maintainer: Aleph Objects, Inc. Section: misc Priority: optional - Architecture: amd64 + Architecture: [ARCH] Essential: no Depends: python-wxgtk2.8, python-opengl, python-serial, python-numpy -Maintainer: Daid Provides: cura Installed-Size: 10000 Description: Cura is a full software solution for 3D printing,