1 from __future__ import absolute_import
2 __copyright__ = "Copyright (C) 2013 David Braam - Released under terms of the AGPLv3 License"
6 from Cura.util import profile
8 class simpleModePanel(wx.Panel):
9 "Main user interface window for Quickprint mode"
10 def __init__(self, parent, callback):
11 super(simpleModePanel, self).__init__(parent)
12 self._callback = callback
14 #toolsMenu = wx.Menu()
15 #i = toolsMenu.Append(-1, 'Switch to Normal mode...')
16 #self.Bind(wx.EVT_MENU, self.OnNormalSwitch, i)
17 #self.menubar.Insert(1, toolsMenu, 'Normal mode')
19 printTypePanel = wx.Panel(self)
20 self.printTypeHigh = wx.RadioButton(printTypePanel, -1, _("High quality print"), style=wx.RB_GROUP)
21 self.printTypeNormal = wx.RadioButton(printTypePanel, -1, _("Normal quality print"))
22 self.printTypeLow = wx.RadioButton(printTypePanel, -1, _("Fast low quality print"))
23 self.printTypeJoris = wx.RadioButton(printTypePanel, -1, _("Thin walled cup or vase"))
24 self.printTypeJoris.Hide()
26 printMaterialPanel = wx.Panel(self)
27 self.printMaterialPLA = wx.RadioButton(printMaterialPanel, -1, 'PLA', style=wx.RB_GROUP)
28 self.printMaterialABS = wx.RadioButton(printMaterialPanel, -1, 'ABS')
29 self.printMaterialDiameter = wx.TextCtrl(printMaterialPanel, -1, profile.getProfileSetting('filament_diameter'))
30 if profile.getMachineSetting('gcode_flavor') == 'UltiGCode':
31 printMaterialPanel.Show(False)
33 self.printSupport = wx.CheckBox(self, -1, _("Print support structure"))
35 sizer = wx.GridBagSizer()
38 sb = wx.StaticBox(printTypePanel, label=_("Select a print type:"))
39 boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
40 boxsizer.Add(self.printTypeHigh)
41 boxsizer.Add(self.printTypeNormal)
42 boxsizer.Add(self.printTypeLow)
43 boxsizer.Add(self.printTypeJoris, border=5, flag=wx.TOP)
44 printTypePanel.SetSizer(wx.BoxSizer(wx.VERTICAL))
45 printTypePanel.GetSizer().Add(boxsizer, flag=wx.EXPAND)
46 sizer.Add(printTypePanel, (0,0), flag=wx.EXPAND)
48 sb = wx.StaticBox(printMaterialPanel, label=_("Material:"))
49 boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
50 boxsizer.Add(self.printMaterialPLA)
51 boxsizer.Add(self.printMaterialABS)
52 boxsizer.Add(wx.StaticText(printMaterialPanel, -1, _("Diameter:")))
53 boxsizer.Add(self.printMaterialDiameter)
54 printMaterialPanel.SetSizer(wx.BoxSizer(wx.VERTICAL))
55 printMaterialPanel.GetSizer().Add(boxsizer, flag=wx.EXPAND)
56 sizer.Add(printMaterialPanel, (1,0), flag=wx.EXPAND)
58 sb = wx.StaticBox(self, label=_("Other:"))
59 boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL)
60 boxsizer.Add(self.printSupport)
61 sizer.Add(boxsizer, (2,0), flag=wx.EXPAND)
63 self.printTypeNormal.SetValue(True)
64 self.printMaterialPLA.SetValue(True)
66 self.printTypeHigh.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
67 self.printTypeNormal.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
68 self.printTypeLow.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
69 #self.printTypeJoris.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
71 self.printMaterialPLA.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
72 self.printMaterialABS.Bind(wx.EVT_RADIOBUTTON, lambda e: self._callback())
73 self.printMaterialDiameter.Bind(wx.EVT_TEXT, lambda e: self._callback())
75 self.printSupport.Bind(wx.EVT_CHECKBOX, lambda e: self._callback())
78 put = profile.setTempOverride
79 get = profile.getProfileSetting
81 put('layer_height', '0.2')
82 put('wall_thickness', '0.8')
83 put('solid_layer_thickness', '0.6')
84 put('fill_density', '20')
85 put('skirt_line_count', '1')
86 put('skirt_gap', '6.0')
87 put('print_speed', '50')
88 put('print_temperature', '220')
89 put('support', 'None')
90 put('retraction_enable', 'True')
91 put('retraction_min_travel', '5.0')
92 put('retraction_speed', '40.0')
93 put('retraction_amount', '4.5')
94 put('retraction_extra', '0.0')
95 put('travel_speed', '150')
96 put('max_z_speed', '3.0')
97 put('bottom_layer_speed', '25')
98 put('cool_min_layer_time', '5')
99 put('fan_enabled', 'True')
100 put('fan_layer', '1')
101 put('fan_speed', '100')
102 put('extra_base_wall_thickness', '0.0')
103 put('sequence', 'Loops > Perimeter > Infill')
104 put('force_first_layer_sequence', 'True')
105 put('infill_type', 'Line')
106 put('solid_top', 'True')
107 put('fill_overlap', '15')
108 put('support_rate', '80')
109 put('support_distance', '0.5')
110 put('joris', 'False')
111 put('cool_min_feedrate', '5')
112 put('bridge_speed', '100')
113 put('raft_margin', '5')
114 put('raft_base_material_amount', '100')
115 put('raft_interface_material_amount', '100')
116 put('bottom_thickness', '0.3')
118 if self.printSupport.GetValue():
119 put('support', _("Exterior Only"))
121 nozzle_size = float(get('nozzle_size'))
122 if self.printTypeNormal.GetValue():
123 put('wall_thickness', nozzle_size * 2.0)
124 put('layer_height', '0.10')
125 put('fill_density', '20')
126 elif self.printTypeLow.GetValue():
127 put('wall_thickness', nozzle_size * 2.5)
128 put('layer_height', '0.20')
129 put('fill_density', '10')
130 put('print_speed', '50')
131 put('cool_min_layer_time', '3')
132 put('bottom_layer_speed', '30')
133 elif self.printTypeHigh.GetValue():
134 put('wall_thickness', nozzle_size * 2.0)
135 put('layer_height', '0.06')
136 put('fill_density', '20')
137 put('bottom_layer_speed', '15')
138 elif self.printTypeJoris.GetValue():
139 put('wall_thickness', nozzle_size * 1.5)
140 put('layer_height', '0.3')
141 put('solid_layer_thickness', '0.9')
142 put('fill_density', '0')
144 put('extra_base_wall_thickness', '15.0')
145 put('sequence', 'Infill > Loops > Perimeter')
146 put('force_first_layer_sequence', 'False')
147 put('solid_top', 'False')
148 put('support', 'None')
149 put('cool_min_layer_time', '3')
151 put('filament_diameter', self.printMaterialDiameter.GetValue())
152 if self.printMaterialPLA.GetValue():
153 put('filament_density', '1.00')
154 put('enable_raft', 'False')
155 put('skirt_line_count', '1')
156 if self.printMaterialABS.GetValue():
157 put('filament_density', '0.85')
158 put('enable_raft', 'True')
159 put('skirt_line_count', '0')
160 put('fan_layer', '1')
161 put('bottom_thickness', '0.0')
162 put('print_temperature', '260')
163 put('plugin_config', '')
165 def updateProfileToControls(self):