chiark / gitweb /
Fixed the OpenGL window (old implementation caused problems in windows)
authorDaid <daid303@gmail.com>
Thu, 23 Feb 2012 21:47:42 +0000 (22:47 +0100)
committerDaid <daid303@gmail.com>
Thu, 23 Feb 2012 21:47:42 +0000 (22:47 +0100)
Changed the way profiles are loaded/saved/used. This is more flexable,
allows for calculations inside the actual settings to SF

SkeinPyPy_NewUI/fabmetheus_utilities/geometry/solids/triangle_mesh.py
SkeinPyPy_NewUI/fabmetheus_utilities/settings.py
SkeinPyPy_NewUI/newui/mainWindow.py
SkeinPyPy_NewUI/newui/preview3d.py

index 1335668c4a5790781af4ddbf946130e74e90cf2c..bbe7723045a62b465905bb0c074363dd892f1f5a 100644 (file)
@@ -812,7 +812,7 @@ class TriangleMesh( group.Group ):
                self.zoneArrangement = ZoneArrangement(self.layerHeight, self.getTransformedVertexes())
                layerTop = self.cornerMaximum.z - halfHeight * 0.5
                z = self.cornerMinimum.z + halfHeight
-               layerCount = int((layerTop - z) / self.layerHeight)
+               layerCount = int((layerTop - z) / self.layerHeight) + 1
                while z < layerTop:
                        getLoopLayerAppend(self.loopLayers, layerCount, z).loops = self.getLoopsFromMesh(self.zoneArrangement.getEmptyZ(z))
                        z += self.layerHeight
index dcb76fb11b801bf89669e79b41aa2e4e38c4b4f8..9817c1152fb5598ff5348a0171c4d012b718fc0a 100644 (file)
@@ -9,299 +9,306 @@ import __init__
 
 import ConfigParser
 import os, sys
+import types
 
 from fabmetheus_utilities import archive
 
+def defaultSetting(setting):
+       return setting.value
+
+def storedSetting(name):
+       return lambda setting: getSetting(name, setting.value)
+
 def getSkeinPyPyProfileInformation():
        return {
                'carve': {
-                       'Add_Layer_Template_to_SVG': 'ignore',
-                       'Edge_Width_mm': 'save',
-                       'Extra_Decimal_Places_float': 'ignore',
-                       'Import_Coarseness_ratio': 'ignore',
-                       'Layer_Height_mm': 'save',
-                       'Layers_From_index': 'ignore',
-                       'Layers_To_index': 'ignore',
-                       'Correct_Mesh': 'ignore',
-                       'Unproven_Mesh': 'ignore',
-                       'SVG_Viewer': 'ignore',
+                       'Add_Layer_Template_to_SVG': defaultSetting,
+                       'Edge_Width_mm': defaultSetting,
+                       'Extra_Decimal_Places_float': defaultSetting,
+                       'Import_Coarseness_ratio': defaultSetting,
+                       'Layer_Height_mm': storedSetting("layer_height"),
+                       'Layers_From_index': defaultSetting,
+                       'Layers_To_index': defaultSetting,
+                       'Correct_Mesh': defaultSetting,
+                       'Unproven_Mesh': defaultSetting,
+                       'SVG_Viewer': defaultSetting,
                },'scale': {
-                       'Activate_Scale': 'ignore',
-                       'XY_Plane_Scale_ratio': 'ignore',
-                       'Z_Axis_Scale_ratio': 'ignore',
-                       'SVG_Viewer': 'ignore',
+                       'Activate_Scale': defaultSetting,
+                       'XY_Plane_Scale_ratio': defaultSetting,
+                       'Z_Axis_Scale_ratio': defaultSetting,
+                       'SVG_Viewer': defaultSetting,
                },'bottom': {
-                       'Activate_Bottom': 'ignore',
-                       'Additional_Height_over_Layer_Thickness_ratio': 'ignore',
-                       'Altitude_mm': 'ignore',
-                       'SVG_Viewer': 'ignore',
+                       'Activate_Bottom': defaultSetting,
+                       'Additional_Height_over_Layer_Thickness_ratio': defaultSetting,
+                       'Altitude_mm': defaultSetting,
+                       'SVG_Viewer': defaultSetting,
                },'preface': {
-                       'Meta': 'ignore',
-                       'Set_Positioning_to_Absolute': 'ignore',
-                       'Set_Units_to_Millimeters': 'ignore',
-                       'Start_at_Home': 'ignore',
-                       'Turn_Extruder_Off_at_Shut_Down': 'ignore',
-                       'Turn_Extruder_Off_at_Start_Up': 'ignore',
+                       'Meta': defaultSetting,
+                       'Set_Positioning_to_Absolute': defaultSetting,
+                       'Set_Units_to_Millimeters': defaultSetting,
+                       'Start_at_Home': defaultSetting,
+                       'Turn_Extruder_Off_at_Shut_Down': defaultSetting,
+                       'Turn_Extruder_Off_at_Start_Up': defaultSetting,
                },'widen': {
-                       'Activate_Widen': 'save',
+                       'Activate_Widen': defaultSetting,
                },'inset': {
-                       'Add_Custom_Code_for_Temperature_Reading': 'ignore',
-                       'Infill_in_Direction_of_Bridge': 'ignore',
-                       'Infill_Width_over_Thickness_ratio': 'ignore',
-                       'Loop_Order_Choice': 'ignore',
-                       'Overlap_Removal_Width_over_Perimeter_Width_ratio': 'ignore',
-                       'Turn_Extruder_Heater_Off_at_Shut_Down': 'ignore',
-                       'Volume_Fraction_ratio': 'ignore',
+                       'Add_Custom_Code_for_Temperature_Reading': defaultSetting,
+                       'Infill_in_Direction_of_Bridge': defaultSetting,
+                       'Infill_Width_over_Thickness_ratio': defaultSetting,
+                       'Loop_Order_Choice': defaultSetting,
+                       'Overlap_Removal_Width_over_Perimeter_Width_ratio': defaultSetting,
+                       'Turn_Extruder_Heater_Off_at_Shut_Down': defaultSetting,
+                       'Volume_Fraction_ratio': defaultSetting,
                },'fill': {
-                       'Activate_Fill': 'save',
-                       'Diaphragm_Period_layers': 'save',
-                       'Diaphragm_Thickness_layers': 'save',
-                       'Extra_Shells_on_Alternating_Solid_Layer_layers': 'save',
-                       'Extra_Shells_on_Base_layers': 'save',
-                       'Extra_Shells_on_Sparse_Layer_layers': 'save',
-                       'Grid_Circle_Separation_over_Perimeter_Width_ratio': 'ignore',
-                       'Grid_Extra_Overlap_ratio': 'ignore',
-                       'Grid_Junction_Separation_Band_Height_layers': 'ignore',
-                       'Grid_Junction_Separation_over_Octogon_Radius_At_End_ratio': 'ignore',
-                       'Grid_Junction_Separation_over_Octogon_Radius_At_Middle_ratio': 'ignore',
-                       'Infill_Begin_Rotation_degrees': 'ignore',
-                       'Infill_Begin_Rotation_Repeat_layers': 'ignore',
-                       'Infill_Odd_Layer_Extra_Rotation_degrees': 'ignore',
-                       'Grid_Circular': 'ignore',
-                       'Grid_Hexagonal': 'ignore',
-                       'Grid_Rectangular': 'ignore',
-                       'Line': 'ignore',
-                       'Infill_Perimeter_Overlap_ratio': 'save',
-                       'Infill_Solidity_ratio': 'save',
-                       'Infill_Width': 'use:carve:Edge_Width_mm',
-                       'Solid_Surface_Thickness_layers': 'save',
-                       'Start_From_Choice': 'ignore',
-                       'Surrounding_Angle_degrees': 'ignore',
-                       'Thread_Sequence_Choice': 'save',
+                       'Activate_Fill': defaultSetting,
+                       'Diaphragm_Period_layers': defaultSetting,
+                       'Diaphragm_Thickness_layers': defaultSetting,
+                       'Extra_Shells_on_Alternating_Solid_Layer_layers': defaultSetting,
+                       'Extra_Shells_on_Base_layers': defaultSetting,
+                       'Extra_Shells_on_Sparse_Layer_layers': defaultSetting,
+                       'Grid_Circle_Separation_over_Perimeter_Width_ratio': defaultSetting,
+                       'Grid_Extra_Overlap_ratio': defaultSetting,
+                       'Grid_Junction_Separation_Band_Height_layers': defaultSetting,
+                       'Grid_Junction_Separation_over_Octogon_Radius_At_End_ratio': defaultSetting,
+                       'Grid_Junction_Separation_over_Octogon_Radius_At_Middle_ratio': defaultSetting,
+                       'Infill_Begin_Rotation_degrees': defaultSetting,
+                       'Infill_Begin_Rotation_Repeat_layers': defaultSetting,
+                       'Infill_Odd_Layer_Extra_Rotation_degrees': defaultSetting,
+                       'Grid_Circular': defaultSetting,
+                       'Grid_Hexagonal': defaultSetting,
+                       'Grid_Rectangular': defaultSetting,
+                       'Line': defaultSetting,
+                       'Infill_Perimeter_Overlap_ratio': defaultSetting,
+                       'Infill_Solidity_ratio': defaultSetting,
+                       'Infill_Width': defaultSetting,
+                       'Solid_Surface_Thickness_layers': defaultSetting,
+                       'Start_From_Choice': defaultSetting,
+                       'Surrounding_Angle_degrees': defaultSetting,
+                       'Thread_Sequence_Choice': defaultSetting,
                },'multiply': {
-                       'Activate_Multiply': 'ignore',
-                       'Center_X_mm': 'save',
-                       'Center_Y_mm': 'save',
-                       'Number_of_Columns_integer': 'save',
-                       'Number_of_Rows_integer': 'save',
-                       'Reverse_Sequence_every_Odd_Layer': 'ignore',
-                       'Separation_over_Perimeter_Width_ratio': 'save',
+                       'Activate_Multiply': "True",
+                       'Center_X_mm': storedSetting("centerX"),
+                       'Center_Y_mm': storedSetting("centerY"),
+                       'Number_of_Columns_integer': "1",
+                       'Number_of_Rows_integer': "1",
+                       'Reverse_Sequence_every_Odd_Layer': defaultSetting,
+                       'Separation_over_Perimeter_Width_ratio': defaultSetting,
                },'speed': {
-                       'Activate_Speed': 'ignore',
-                       'Add_Flow_Rate': 'ignore',
-                       'Bridge_Feed_Rate_Multiplier_ratio': 'ignore',
-                       'Bridge_Flow_Rate_Multiplier_ratio': 'ignore',
-                       'Duty_Cyle_at_Beginning_portion': 'ignore',
-                       'Duty_Cyle_at_Ending_portion': 'ignore',
-                       'Feed_Rate_mm/s': 'save',
-                       'Flow_Rate_Setting_float': 'use:speed:Feed_Rate_mm/s',
-                       'Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio': 'save',
-                       'Object_First_Layer_Feed_Rate_Perimeter_Multiplier_ratio': 'use:speed:Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio',
-                       'Object_First_Layer_Feed_Rate_Travel_Multiplier_ratio': 'use:speed:Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio',
-                       'Object_First_Layer_Flow_Rate_Infill_Multiplier_ratio': 'use:speed:Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio',
-                       'Object_First_Layer_Flow_Rate_Perimeter_Multiplier_ratio': 'use:speed:Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio',
-                       'Object_First_Layers_Amount_Of_Layers_For_Speed_Change': 'save',
-                       'Orbital_Feed_Rate_over_Operating_Feed_Rate_ratio': 'ignore',
-                       'Maximum_Z_Feed_Rate_mm/s': 'save',
-                       'Perimeter_Feed_Rate_Multiplier_ratio': 'ignore',
-                       'Perimeter_Flow_Rate_Multiplier_ratio': 'ignore',
-                       'Travel_Feed_Rate_mm/s': 'save',
+                       'Activate_Speed': "True",
+                       'Add_Flow_Rate': "True",
+                       'Bridge_Feed_Rate_Multiplier_ratio': defaultSetting,
+                       'Bridge_Flow_Rate_Multiplier_ratio': defaultSetting,
+                       'Duty_Cyle_at_Beginning_portion': defaultSetting,
+                       'Duty_Cyle_at_Ending_portion': defaultSetting,
+                       'Feed_Rate_mm/s': storedSetting("print_speed"),
+                       'Flow_Rate_Setting_float': storedSetting("print_speed"),
+                       'Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio': defaultSetting,
+                       'Object_First_Layer_Feed_Rate_Perimeter_Multiplier_ratio': defaultSetting,
+                       'Object_First_Layer_Feed_Rate_Travel_Multiplier_ratio': defaultSetting,
+                       'Object_First_Layer_Flow_Rate_Infill_Multiplier_ratio': defaultSetting,
+                       'Object_First_Layer_Flow_Rate_Perimeter_Multiplier_ratio': defaultSetting,
+                       'Object_First_Layers_Amount_Of_Layers_For_Speed_Change': defaultSetting,
+                       'Orbital_Feed_Rate_over_Operating_Feed_Rate_ratio': defaultSetting,
+                       'Maximum_Z_Feed_Rate_mm/s': defaultSetting,
+                       'Perimeter_Feed_Rate_Multiplier_ratio': defaultSetting,
+                       'Perimeter_Flow_Rate_Multiplier_ratio': defaultSetting,
+                       'Travel_Feed_Rate_mm/s': storedSetting("travel_speed"),
                },'temperature': {
-                       'Activate_Temperature': 'ignore',
-                       'Cooling_Rate_Celcius/second': 'ignore',
-                       'Heating_Rate_Celcius/second': 'ignore',
-                       'Base_Temperature_Celcius': 'ignore',
-                       'Interface_Temperature_Celcius': 'ignore',
-                       'Object_First_Layer_Infill_Temperature_Celcius': 'ignore',
-                       'Object_First_Layer_Perimeter_Temperature_Celcius': 'ignore',
-                       'Object_Next_Layers_Temperature_Celcius': 'ignore',
-                       'Support_Layers_Temperature_Celcius': 'ignore',
-                       'Supported_Layers_Temperature_Celcius': 'ignore',
+                       'Activate_Temperature': defaultSetting,
+                       'Cooling_Rate_Celcius/second': defaultSetting,
+                       'Heating_Rate_Celcius/second': defaultSetting,
+                       'Base_Temperature_Celcius': defaultSetting,
+                       'Interface_Temperature_Celcius': defaultSetting,
+                       'Object_First_Layer_Infill_Temperature_Celcius': defaultSetting,
+                       'Object_First_Layer_Perimeter_Temperature_Celcius': defaultSetting,
+                       'Object_Next_Layers_Temperature_Celcius': defaultSetting,
+                       'Support_Layers_Temperature_Celcius': defaultSetting,
+                       'Supported_Layers_Temperature_Celcius': defaultSetting,
                },'raft': {
-                       'Activate_Raft': 'ignore',
-                       'Add_Raft,_Elevate_Nozzle,_Orbit': 'ignore',
-                       'Base_Feed_Rate_Multiplier_ratio': 'ignore',
-                       'Base_Flow_Rate_Multiplier_ratio': 'ignore',
-                       'Base_Infill_Density_ratio': 'ignore',
-                       'Base_Layer_Thickness_over_Layer_Thickness': 'ignore',
-                       'Base_Layers_integer': 'ignore',
-                       'Base_Nozzle_Lift_over_Base_Layer_Thickness_ratio': 'ignore',
-                       'Initial_Circling': 'ignore',
-                       'Infill_Overhang_over_Extrusion_Width_ratio': 'ignore',
-                       'Interface_Feed_Rate_Multiplier_ratio': 'ignore',
-                       'Interface_Flow_Rate_Multiplier_ratio': 'ignore',
-                       'Interface_Infill_Density_ratio': 'ignore',
-                       'Interface_Layer_Thickness_over_Layer_Thickness': 'ignore',
-                       'Interface_Layers_integer': 'ignore',
-                       'Interface_Nozzle_Lift_over_Interface_Layer_Thickness_ratio': 'ignore',
-                       'Name_of_Support_End_File': 'ignore',
-                       'Name_of_Support_Start_File': 'ignore',
-                       'Operating_Nozzle_Lift_over_Layer_Thickness_ratio': 'ignore',
-                       'Raft_Additional_Margin_over_Length_%': 'ignore',
-                       'Raft_Margin_mm': 'ignore',
-                       'Support_Cross_Hatch': 'save',
-                       'Support_Flow_Rate_over_Operating_Flow_Rate_ratio': 'save',
-                       'Support_Gap_over_Perimeter_Extrusion_Width_ratio': 'save',
-                       'Support_Material_Choice_': 'save',
-                       'Support_Minimum_Angle_degrees': 'save',
+                       'Activate_Raft': defaultSetting,
+                       'Add_Raft,_Elevate_Nozzle,_Orbit': defaultSetting,
+                       'Base_Feed_Rate_Multiplier_ratio': defaultSetting,
+                       'Base_Flow_Rate_Multiplier_ratio': defaultSetting,
+                       'Base_Infill_Density_ratio': defaultSetting,
+                       'Base_Layer_Thickness_over_Layer_Thickness': defaultSetting,
+                       'Base_Layers_integer': defaultSetting,
+                       'Base_Nozzle_Lift_over_Base_Layer_Thickness_ratio': defaultSetting,
+                       'Initial_Circling': defaultSetting,
+                       'Infill_Overhang_over_Extrusion_Width_ratio': defaultSetting,
+                       'Interface_Feed_Rate_Multiplier_ratio': defaultSetting,
+                       'Interface_Flow_Rate_Multiplier_ratio': defaultSetting,
+                       'Interface_Infill_Density_ratio': defaultSetting,
+                       'Interface_Layer_Thickness_over_Layer_Thickness': defaultSetting,
+                       'Interface_Layers_integer': defaultSetting,
+                       'Interface_Nozzle_Lift_over_Interface_Layer_Thickness_ratio': defaultSetting,
+                       'Name_of_Support_End_File': defaultSetting,
+                       'Name_of_Support_Start_File': defaultSetting,
+                       'Operating_Nozzle_Lift_over_Layer_Thickness_ratio': defaultSetting,
+                       'Raft_Additional_Margin_over_Length_%': defaultSetting,
+                       'Raft_Margin_mm': defaultSetting,
+                       'Support_Cross_Hatch': defaultSetting,
+                       'Support_Flow_Rate_over_Operating_Flow_Rate_ratio': defaultSetting,
+                       'Support_Gap_over_Perimeter_Extrusion_Width_ratio': defaultSetting,
+                       'Support_Material_Choice_': defaultSetting,
+                       'Support_Minimum_Angle_degrees': defaultSetting,
                },'skirt': {
-                       'Skirt_line_count': 'save',
-                       'Convex': 'ignore',
-                       'Gap_Width_mm': 'save',
-                       'Layers_To_index': 'ignore',
+                       'Skirt_line_count': storedSetting("skirt_line_count"),
+                       'Convex': "True",
+                       'Gap_Width_mm': storedSetting("skirt_gap"),
+                       'Layers_To_index': "1",
                },'chamber': {
-                       'Activate_Chamber': 'ignore',
-                       'Bed_Temperature_Celcius': 'ignore',
-                       'Bed_Temperature_Begin_Change_Height_mm': 'ignore',
-                       'Bed_Temperature_End_Change_Height_mm': 'ignore',
-                       'Bed_Temperature_End_Celcius': 'ignore',
-                       'Chamber_Temperature_Celcius': 'ignore',
-                       'Holding_Force_bar': 'ignore',
+                       'Activate_Chamber': defaultSetting,
+                       'Bed_Temperature_Celcius': defaultSetting,
+                       'Bed_Temperature_Begin_Change_Height_mm': defaultSetting,
+                       'Bed_Temperature_End_Change_Height_mm': defaultSetting,
+                       'Bed_Temperature_End_Celcius': defaultSetting,
+                       'Chamber_Temperature_Celcius': defaultSetting,
+                       'Holding_Force_bar': defaultSetting,
                },'tower': {
-                       'Activate_Tower': 'ignore',
-                       'Extruder_Possible_Collision_Cone_Angle_degrees': 'ignore',
-                       'Maximum_Tower_Height_layers': 'ignore',
-                       'Tower_Start_Layer_integer': 'ignore',
+                       'Activate_Tower': defaultSetting,
+                       'Extruder_Possible_Collision_Cone_Angle_degrees': defaultSetting,
+                       'Maximum_Tower_Height_layers': defaultSetting,
+                       'Tower_Start_Layer_integer': defaultSetting,
                },'jitter': {
-                       'Activate_Jitter': 'ignore',
-                       'Jitter_Over_Perimeter_Width_ratio': 'ignore',
+                       'Activate_Jitter': defaultSetting,
+                       'Jitter_Over_Perimeter_Width_ratio': defaultSetting,
                },'clip': {
-                       'Activate_Clip': 'ignore',
-                       'Clip_Over_Perimeter_Width_ratio': 'ignore',
-                       'Maximum_Connection_Distance_Over_Perimeter_Width_ratio': 'ignore',
+                       'Activate_Clip': defaultSetting,
+                       'Clip_Over_Perimeter_Width_ratio': defaultSetting,
+                       'Maximum_Connection_Distance_Over_Perimeter_Width_ratio': defaultSetting,
                },'smooth': {
-                       'Activate_Smooth': 'ignore',
-                       'Layers_From_index': 'ignore',
-                       'Maximum_Shortening_over_Width_float': 'ignore',
+                       'Activate_Smooth': defaultSetting,
+                       'Layers_From_index': defaultSetting,
+                       'Maximum_Shortening_over_Width_float': defaultSetting,
                },'stretch': {
-                       'Activate_Stretch': 'ignore',
-                       'Cross_Limit_Distance_Over_Perimeter_Width_ratio': 'ignore',
-                       'Loop_Stretch_Over_Perimeter_Width_ratio': 'ignore',
-                       'Path_Stretch_Over_Perimeter_Width_ratio': 'ignore',
-                       'Perimeter_Inside_Stretch_Over_Perimeter_Width_ratio': 'ignore',
-                       'Perimeter_Outside_Stretch_Over_Perimeter_Width_ratio': 'ignore',
-                       'Stretch_From_Distance_Over_Perimeter_Width_ratio': 'ignore',
+                       'Activate_Stretch': defaultSetting,
+                       'Cross_Limit_Distance_Over_Perimeter_Width_ratio': defaultSetting,
+                       'Loop_Stretch_Over_Perimeter_Width_ratio': defaultSetting,
+                       'Path_Stretch_Over_Perimeter_Width_ratio': defaultSetting,
+                       'Perimeter_Inside_Stretch_Over_Perimeter_Width_ratio': defaultSetting,
+                       'Perimeter_Outside_Stretch_Over_Perimeter_Width_ratio': defaultSetting,
+                       'Stretch_From_Distance_Over_Perimeter_Width_ratio': defaultSetting,
                },'skin': {
-                       'Activate_Skin': 'ignore',
-                       'Horizontal_Infill_Divisions_integer': 'ignore',
-                       'Horizontal_Perimeter_Divisions_integer': 'ignore',
-                       'Vertical_Divisions_integer': 'ignore',
-                       'Hop_When_Extruding_Infill': 'ignore',
-                       'Layers_From_index': 'ignore',
+                       'Activate_Skin': defaultSetting,
+                       'Horizontal_Infill_Divisions_integer': defaultSetting,
+                       'Horizontal_Perimeter_Divisions_integer': defaultSetting,
+                       'Vertical_Divisions_integer': defaultSetting,
+                       'Hop_When_Extruding_Infill': defaultSetting,
+                       'Layers_From_index': defaultSetting,
                },'comb': {
-                       'Activate_Comb': 'ignore',
-                       'Running_Jump_Space_mm': 'ignore',
+                       'Activate_Comb': defaultSetting,
+                       'Running_Jump_Space_mm': defaultSetting,
                },'cool': {
-                       'Activate_Cool': 'save',
-                       'Bridge_Cool_Celcius': 'ignore',
-                       'Cool_Type': 'save',
-                       'Maximum_Cool_Celcius': 'ignore',
-                       'Minimum_Layer_Time_seconds': 'save',
-                       'Minimum_Orbital_Radius_millimeters': 'ignore',
-                       'Name_of_Cool_End_File': 'ignore',
-                       'Name_of_Cool_Start_File': 'ignore',
-                       'Orbital_Outset_millimeters': 'ignore',
-                       'Turn_Fan_On_at_Beginning': 'ignore',
-                       'Turn_Fan_Off_at_Ending': 'ignore',
+                       'Activate_Cool': defaultSetting,
+                       'Bridge_Cool_Celcius': defaultSetting,
+                       'Cool_Type': defaultSetting,
+                       'Maximum_Cool_Celcius': defaultSetting,
+                       'Minimum_Layer_Time_seconds': defaultSetting,
+                       'Minimum_Orbital_Radius_millimeters': defaultSetting,
+                       'Name_of_Cool_End_File': defaultSetting,
+                       'Name_of_Cool_Start_File': defaultSetting,
+                       'Orbital_Outset_millimeters': defaultSetting,
+                       'Turn_Fan_On_at_Beginning': defaultSetting,
+                       'Turn_Fan_Off_at_Ending': defaultSetting,
                },'hop': {
-                       'Activate_Hop': 'ignore',
-                       'Hop_Over_Layer_Thickness_ratio': 'ignore',
-                       'Minimum_Hop_Angle_degrees': 'ignore',
+                       'Activate_Hop': defaultSetting,
+                       'Hop_Over_Layer_Thickness_ratio': defaultSetting,
+                       'Minimum_Hop_Angle_degrees': defaultSetting,
                },'wipe': {
-                       'Activate_Wipe': 'ignore',
-                       'Arrival_X_mm': 'ignore',
-                       'Arrival_Y_mm': 'ignore',
-                       'Arrival_Z_mm': 'ignore',
-                       'Departure_X_mm': 'ignore',
-                       'Departure_Y_mm': 'ignore',
-                       'Departure_Z_mm': 'ignore',
-                       'Wipe_X_mm': 'ignore',
-                       'Wipe_Y_mm': 'ignore',
-                       'Wipe_Z_mm': 'ignore',
-                       'Wipe_Period_layers': 'ignore',
+                       'Activate_Wipe': defaultSetting,
+                       'Arrival_X_mm': defaultSetting,
+                       'Arrival_Y_mm': defaultSetting,
+                       'Arrival_Z_mm': defaultSetting,
+                       'Departure_X_mm': defaultSetting,
+                       'Departure_Y_mm': defaultSetting,
+                       'Departure_Z_mm': defaultSetting,
+                       'Wipe_X_mm': defaultSetting,
+                       'Wipe_Y_mm': defaultSetting,
+                       'Wipe_Z_mm': defaultSetting,
+                       'Wipe_Period_layers': defaultSetting,
                },'oozebane': {
-                       'Activate_Oozebane': 'ignore',
-                       'After_Startup_Distance_millimeters': 'ignore',
-                       'Early_Shutdown_Distance_millimeters': 'ignore',
-                       'Early_Startup_Distance_Constant_millimeters': 'ignore',
-                       'Early_Startup_Maximum_Distance_millimeters': 'ignore',
-                       'First_Early_Startup_Distance_millimeters': 'ignore',
-                       'Minimum_Distance_for_Early_Startup_millimeters': 'ignore',
-                       'Minimum_Distance_for_Early_Shutdown_millimeters': 'ignore',
-                       'Slowdown_Startup_Steps_positive_integer': 'ignore',
+                       'Activate_Oozebane': defaultSetting,
+                       'After_Startup_Distance_millimeters': defaultSetting,
+                       'Early_Shutdown_Distance_millimeters': defaultSetting,
+                       'Early_Startup_Distance_Constant_millimeters': defaultSetting,
+                       'Early_Startup_Maximum_Distance_millimeters': defaultSetting,
+                       'First_Early_Startup_Distance_millimeters': defaultSetting,
+                       'Minimum_Distance_for_Early_Startup_millimeters': defaultSetting,
+                       'Minimum_Distance_for_Early_Shutdown_millimeters': defaultSetting,
+                       'Slowdown_Startup_Steps_positive_integer': defaultSetting,
                },'dwindle': {
-                       'Activate_Dwindle': 'ignore',
-                       'End_Rate_Multiplier_ratio': 'ignore',
-                       'Pent_Up_Volume_cubic_millimeters': 'ignore',
-                       'Slowdown_Steps_positive_integer': 'ignore',
-                       'Slowdown_Volume_cubic_millimeters': 'ignore',
+                       'Activate_Dwindle': defaultSetting,
+                       'End_Rate_Multiplier_ratio': defaultSetting,
+                       'Pent_Up_Volume_cubic_millimeters': defaultSetting,
+                       'Slowdown_Steps_positive_integer': defaultSetting,
+                       'Slowdown_Volume_cubic_millimeters': defaultSetting,
                },'splodge': {
-                       'Activate_Splodge': 'ignore',
-                       'Initial_Lift_over_Extra_Thickness_ratio': 'ignore',
-                       'Initial_Splodge_Feed_Rate_mm/s': 'ignore',
-                       'Operating_Splodge_Feed_Rate_mm/s': 'ignore',
-                       'Operating_Splodge_Quantity_Length_millimeters': 'ignore',
-                       'Initial_Splodge_Quantity_Length_millimeters': 'ignore',
-                       'Operating_Lift_over_Extra_Thickness_ratio': 'ignore',
+                       'Activate_Splodge': defaultSetting,
+                       'Initial_Lift_over_Extra_Thickness_ratio': defaultSetting,
+                       'Initial_Splodge_Feed_Rate_mm/s': defaultSetting,
+                       'Operating_Splodge_Feed_Rate_mm/s': defaultSetting,
+                       'Operating_Splodge_Quantity_Length_millimeters': defaultSetting,
+                       'Initial_Splodge_Quantity_Length_millimeters': defaultSetting,
+                       'Operating_Lift_over_Extra_Thickness_ratio': defaultSetting,
                },'home': {
-                       'Activate_Home': 'ignore',
-                       'Name_of_Home_File': 'ignore',
+                       'Activate_Home': defaultSetting,
+                       'Name_of_Home_File': defaultSetting,
                },'lash': {
-                       'Activate_Lash': 'ignore',
-                       'X_Backlash_mm': 'ignore',
-                       'Y_Backlash_mm': 'ignore',
+                       'Activate_Lash': defaultSetting,
+                       'X_Backlash_mm': defaultSetting,
+                       'Y_Backlash_mm': defaultSetting,
                },'fillet': {
-                       'Activate_Fillet': 'ignore',
-                       'Arc_Point': 'ignore',
-                       'Arc_Radius': 'ignore',
-                       'Arc_Segment': 'ignore',
-                       'Bevel': 'ignore',
-                       'Corner_Feed_Rate_Multiplier_ratio': 'ignore',
-                       'Fillet_Radius_over_Perimeter_Width_ratio': 'ignore',
-                       'Reversal_Slowdown_Distance_over_Perimeter_Width_ratio': 'ignore',
-                       'Use_Intermediate_Feed_Rate_in_Corners': 'ignore',
+                       'Activate_Fillet': defaultSetting,
+                       'Arc_Point': defaultSetting,
+                       'Arc_Radius': defaultSetting,
+                       'Arc_Segment': defaultSetting,
+                       'Bevel': defaultSetting,
+                       'Corner_Feed_Rate_Multiplier_ratio': defaultSetting,
+                       'Fillet_Radius_over_Perimeter_Width_ratio': defaultSetting,
+                       'Reversal_Slowdown_Distance_over_Perimeter_Width_ratio': defaultSetting,
+                       'Use_Intermediate_Feed_Rate_in_Corners': defaultSetting,
                },'limit': {
-                       'Activate_Limit': 'ignore',
-                       'Maximum_Initial_Feed_Rate_mm/s': 'ignore',
+                       'Activate_Limit': defaultSetting,
+                       'Maximum_Initial_Feed_Rate_mm/s': defaultSetting,
                },'unpause': {
-                       'Activate_Unpause': 'ignore',
-                       'Delay_milliseconds': 'ignore',
-                       'Maximum_Speed_ratio': 'ignore',
+                       'Activate_Unpause': defaultSetting,
+                       'Delay_milliseconds': defaultSetting,
+                       'Maximum_Speed_ratio': defaultSetting,
                },'dimension': {
-                       'Activate_Dimension': 'ignore',
-                       'Absolute_Extrusion_Distance': 'ignore',
-                       'Relative_Extrusion_Distance': 'ignore',
-                       'Extruder_Retraction_Speed_mm/s': 'save',
-                       'Filament_Diameter_mm': 'save',
-                       'Filament_Packing_Density_ratio': 'save',
-                       'Maximum_E_Value_before_Reset_float': 'ignore',
-                       'Minimum_Travel_for_Retraction_millimeters': 'save',
-                       'Retract_Within_Island': 'save',
-                       'Retraction_Distance_millimeters': 'save',
-                       'Restart_Extra_Distance_millimeters': 'save',
+                       'Activate_Dimension': defaultSetting,
+                       'Absolute_Extrusion_Distance': defaultSetting,
+                       'Relative_Extrusion_Distance': defaultSetting,
+                       'Extruder_Retraction_Speed_mm/s': defaultSetting,
+                       'Filament_Diameter_mm': defaultSetting,
+                       'Filament_Packing_Density_ratio': defaultSetting,
+                       'Maximum_E_Value_before_Reset_float': defaultSetting,
+                       'Minimum_Travel_for_Retraction_millimeters': defaultSetting,
+                       'Retract_Within_Island': defaultSetting,
+                       'Retraction_Distance_millimeters': defaultSetting,
+                       'Restart_Extra_Distance_millimeters': defaultSetting,
                },'alteration': {
-                       'Activate_Alteration': 'ignore',
-                       'Name_of_End_File': 'ignore',
-                       'Name_of_Start_File': 'ignore',
-                       'Remove_Redundant_Mcode': 'ignore',
-                       'Replace_Variable_with_Setting': 'ignore',
+                       'Activate_Alteration': defaultSetting,
+                       'Name_of_End_File': defaultSetting,
+                       'Name_of_Start_File': defaultSetting,
+                       'Remove_Redundant_Mcode': defaultSetting,
+                       'Replace_Variable_with_Setting': defaultSetting,
                },'export': {
-                       'Activate_Export': 'ignore',
-                       'Add_Descriptive_Extension': 'ignore',
-                       'Add_Export_Suffix': 'ignore',
-                       'Add_Profile_Extension': 'ignore',
-                       'Add_Timestamp_Extension': 'ignore',
-                       'Also_Send_Output_To': 'ignore',
-                       'Analyze_Gcode': 'ignore',
-                       'Comment_Choice': 'ignore',
-                       'Do_Not_Change_Output': 'ignore',
-                       'binary_16_byte': 'ignore',
-                       'gcode_step': 'ignore',
-                       'gcode_time_segment': 'ignore',
-                       'gcode_small': 'ignore',
-                       'File_Extension': 'ignore',
-                       'Name_of_Replace_File': 'ignore',
-                       'Save_Penultimate_Gcode': 'ignore',
+                       'Activate_Export': defaultSetting,
+                       'Add_Descriptive_Extension': defaultSetting,
+                       'Add_Export_Suffix': defaultSetting,
+                       'Add_Profile_Extension': defaultSetting,
+                       'Add_Timestamp_Extension': defaultSetting,
+                       'Also_Send_Output_To': defaultSetting,
+                       'Analyze_Gcode': defaultSetting,
+                       'Comment_Choice': defaultSetting,
+                       'Do_Not_Change_Output': defaultSetting,
+                       'binary_16_byte': defaultSetting,
+                       'gcode_step': defaultSetting,
+                       'gcode_time_segment': defaultSetting,
+                       'gcode_small': defaultSetting,
+                       'File_Extension': defaultSetting,
+                       'Name_of_Replace_File': defaultSetting,
+                       'Save_Penultimate_Gcode': defaultSetting,
                }
        }
 
@@ -314,6 +321,25 @@ def loadGlobalProfile(filename):
 def saveGlobalProfile(filename):
        globalProfileParser.write(open(filename, 'w'))
 
+def getSetting(name, default = ""):
+       #Check if we have a configuration file loaded, else load the default.
+       if not globals().has_key('globalProfileParser'):
+               loadGlobalProfile(getDefaultProfilePath())
+       if not globalProfileParser.has_option("profile", name):
+               if not globalProfileParser.has_section("profile"):
+                       globalProfileParser.add_section("profile")
+               globalProfileParser.set("profile", name, str(default))
+               return default
+       return globalProfileParser.get("profile", name)
+
+def putSetting(name, value):
+       #Check if we have a configuration file loaded, else load the default.
+       if not globals().has_key('globalProfileParser'):
+               loadGlobalProfile(getDefaultProfilePath())
+       if not globalProfileParser.has_section("profile"):
+               globalProfileParser.add_section("profile")
+       globalProfileParser.set("profile", name, str(value))
+
 def getDefaultProfilePath():
        return os.path.normpath(os.path.join(os.path.dirname(os.path.abspath(__file__)), "../current_profile.ini"))
 
@@ -323,10 +349,6 @@ def safeConfigName(name):
 def getReadRepository(repository):
        "Read the configuration for this 'repository'"
        
-       #Check if we have a configuration file loaded, else load the default.
-       if not globals().has_key('globalProfileParser'):
-               loadGlobalProfile(getDefaultProfilePath())
-       
        info = getSkeinPyPyProfileInformation()
        if not info.has_key(repository.name):
                print "Warning: Plugin: " + repository.name + " missing from SkeinPyPy info"
@@ -342,63 +364,19 @@ def getReadRepository(repository):
                if not info.has_key(name):
                        print "Setting: " + repository.name + ":" + name + " missing from SkeinPyPy info"
                        continue
-               #ignore this setting, use the default, always
-               if info[name] == 'ignore':
-                       continue
-               #Load this setting from another value.
-               if info[name][0:4] == "use:":
-                       i = info[name][4:].split(':')
-                       p.setValueToString(globalProfileParser.get(i[0], i[1]))
-                       continue
-               
-               try:
-                       p.setValueToString(globalProfileParser.get(repository.name, name))
-               except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
-                       #Value not in configuration, add it.
-                       try:
-                               globalProfileParser.add_section(repository.name)
-                       except:
-                               pass
-                       globalProfileParser.set(repository.name, name, str(p.value))
-                       #saveGlobalProfile(getDefaultProfilePath())
-               #print "============" + str(p) + "|" + p.name + "|" + str(p.value) + "|" + str(type(p.value))
-       return repository
-
-def storeRepository(repository):
-       "Store the configuration for this 'repository'"
-       #Check if we have a configuration file loaded, else load the default.
-       if not globals().has_key('globalProfileParser'):
-               loadGlobalProfile(getDefaultProfilePath())
-       
-       info = getSkeinPyPyProfileInformation()
-       if not info.has_key(repository.name):
-               print "Warning: Plugin: " + repository.name + " missing from SkeinPyPy info"
-               return repository
-       info = info[repository.name]
-       if not type(info) is dict:
-               print "Ignoring plugin configuration: " + repository.name
-               return repository
-       
-       for p in repository.preferences:
-               name = safeConfigName(p.name)
-               if not info.has_key(name):
-                       print "Setting: " + repository.name + ":" + name + " missing from SkeinPyPy info"
-                       continue
+               if isinstance(info[name], types.FunctionType):
+                       p.setValueToString(str(info[name](p)))
+               else:
+                       p.setValueToString(str(info[name]))
 
-               if info[name] == "save":
-                       try:
-                               globalProfileParser.add_section(repository.name)
-                       except:
-                               pass
-                       globalProfileParser.set(repository.name, name, str(p.value))
        return repository
 
 def printProgress(layerIndex, procedureName):
-       print ("Progress[" + procedureName + ":" + str(layerIndex) + "]")
+       print ("Progress[" + procedureName + ":" + str(layerIndex+1) + "]")
        sys.stdout.flush()
 
 def printProgressByNumber(layerIndex, numberOfLayers, procedureName):
-       print ("Progress[" + procedureName + ":" + str(layerIndex) + ":" + str(numberOfLayers) + "]")
+       print ("Progress[" + procedureName + ":" + str(layerIndex+1) + ":" + str(numberOfLayers) + "]")
        sys.stdout.flush()
 
 def getAlterationFileLines(fileName):
index 6ae0d3a7f3e98329deed98471e0d82848fccc043..f629b8812dbf46444812bcd5ac05434fe582c060 100644 (file)
@@ -20,6 +20,9 @@ class mainWindow(wx.Frame):
        "Main user interface window"
        def __init__(self):
                super(mainWindow, self).__init__(None, title='SkeinPyPy')
+               
+               wx.EVT_CLOSE(self, self.OnClose)
+               
                menubar = wx.MenuBar()
                fileMenu = wx.Menu()
                fitem = fileMenu.Append(-1, 'Open Profile...', 'Open Profile...')
@@ -38,21 +41,8 @@ class mainWindow(wx.Frame):
                self.filename = None
                self.progressPanelList = []
                self.controlList = []
-               self.plugins = {}
-               for m in skeinforge_profile.getCraftTypePluginModule().getCraftSequence():
-                       self.plugins[m] = archive.getModuleWithDirectoryPath(archive.getCraftPluginsDirectoryPath(), m).getNewRepository()
-                       settings.getReadRepository(self.plugins[m])
                
-               skeinPyPySettingInfo = settings.getSkeinPyPyProfileInformation()
-
-               for pluginName in self.plugins.keys():
-                       self.plugins[pluginName].preferencesDict = {}
-                       for pref in self.plugins[pluginName].preferences:
-                               if skeinPyPySettingInfo[pluginName][settings.safeConfigName(pref.name)] == 'save':
-                                       self.plugins[pluginName].preferencesDict[settings.safeConfigName(pref.name)] = pref
-
-               p = self#wx.Panel(self)
-               nb = wx.Notebook(p)
+               nb = wx.Notebook(self)
                
                configPanel = wx.Panel(nb);
                nb.AddPage(configPanel, "Print config")
@@ -68,21 +58,21 @@ class mainWindow(wx.Frame):
                sizer.Add(rightConfigPanel)
                
                self.AddTitle(leftConfigPanel, "Accuracy")
-               self.AddSetting(leftConfigPanel, "Layer height (mm)", self.plugins['carve'].preferencesDict['Layer_Height_mm'], 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.')
+               self.AddSetting(leftConfigPanel, "Layer height (mm)", 'layer_height', 'Layer height in millimeters.\n0.2 is a good value for quick prints.\n0.1 gives high quality prints.')
                self.AddTitle(leftConfigPanel, "Fill")
-               self.AddSetting(leftConfigPanel, "Solid layers", self.plugins['fill'].preferencesDict['Solid_Surface_Thickness_layers'])
-               self.AddSetting(leftConfigPanel, "Fill Density", self.plugins['fill'].preferencesDict['Infill_Solidity_ratio'])
+               #self.AddSetting(leftConfigPanel, "Solid layers", self.plugins['fill'].preferencesDict['Solid_Surface_Thickness_layers'])
+               #self.AddSetting(leftConfigPanel, "Fill Density", self.plugins['fill'].preferencesDict['Infill_Solidity_ratio'])
                self.AddTitle(leftConfigPanel, "Skirt")
-               self.AddSetting(leftConfigPanel, "Line count", self.plugins['skirt'].preferencesDict['Skirt_line_count'])
-               self.AddSetting(leftConfigPanel, "Start distance (mm)", self.plugins['skirt'].preferencesDict['Gap_Width_mm'])
+               self.AddSetting(leftConfigPanel, "Line count", 'skirt_line_count')
+               self.AddSetting(leftConfigPanel, "Start distance (mm)", 'skirt_gap')
                self.AddTitle(leftConfigPanel, "Cool")
                #self.AddSetting(configPanel, "Cool type", self.plugins['cool'].preferencesDict['Cool_Type'])
-               self.AddSetting(leftConfigPanel, "Minimal layer time", self.plugins['cool'].preferencesDict['Minimum_Layer_Time_seconds'])
+               #self.AddSetting(leftConfigPanel, "Minimal layer time", self.plugins['cool'].preferencesDict['Minimum_Layer_Time_seconds'])
                self.AddTitle(rightConfigPanel, "Retraction")
-               self.AddSetting(rightConfigPanel, "Speed (mm/s)", self.plugins['dimension'].preferencesDict['Extruder_Retraction_Speed_mm/s'])
-               self.AddSetting(rightConfigPanel, "Distance (mm)", self.plugins['dimension'].preferencesDict['Retraction_Distance_millimeters'])
-               self.AddSetting(rightConfigPanel, "Extra length on start (mm)", self.plugins['dimension'].preferencesDict['Restart_Extra_Distance_millimeters'])
-               self.AddSetting(rightConfigPanel, "Minimal travel (mm)", self.plugins['dimension'].preferencesDict['Minimum_Travel_for_Retraction_millimeters'])
+               #self.AddSetting(rightConfigPanel, "Speed (mm/s)", self.plugins['dimension'].preferencesDict['Extruder_Retraction_Speed_mm/s'])
+               #self.AddSetting(rightConfigPanel, "Distance (mm)", self.plugins['dimension'].preferencesDict['Retraction_Distance_millimeters'])
+               #self.AddSetting(rightConfigPanel, "Extra length on start (mm)", self.plugins['dimension'].preferencesDict['Restart_Extra_Distance_millimeters'])
+               #self.AddSetting(rightConfigPanel, "Minimal travel (mm)", self.plugins['dimension'].preferencesDict['Minimum_Travel_for_Retraction_millimeters'])
                
                configPanel = wx.Panel(nb);
                nb.AddPage(configPanel, "Machine && Filament")
@@ -98,35 +88,35 @@ class mainWindow(wx.Frame):
                sizer.Add(rightConfigPanel)
                
                self.AddTitle(leftConfigPanel, "Machine size")
-               self.AddSetting(leftConfigPanel, "Width (mm)", settings.IntSpin().getFromValue(10, "machine_width", None, 1000, 205))
-               self.AddSetting(leftConfigPanel, "Depth (mm)", settings.IntSpin().getFromValue(10, "machine_depth", None, 1000, 205))
-               self.AddSetting(leftConfigPanel, "Height (mm)", settings.IntSpin().getFromValue(10, "machine_height", None, 1000, 200))
+               #self.AddSetting(leftConfigPanel, "Width (mm)", settings.IntSpin().getFromValue(10, "machine_width", None, 1000, 205))
+               #self.AddSetting(leftConfigPanel, "Depth (mm)", settings.IntSpin().getFromValue(10, "machine_depth", None, 1000, 205))
+               #self.AddSetting(leftConfigPanel, "Height (mm)", settings.IntSpin().getFromValue(10, "machine_height", None, 1000, 200))
 
                self.AddTitle(leftConfigPanel, "Machine nozzle")
-               self.AddSetting(leftConfigPanel, "Nozzle size (mm)", self.plugins['carve'].preferencesDict['Edge_Width_mm'])
+               #self.AddSetting(leftConfigPanel, "Nozzle size (mm)", self.plugins['carve'].preferencesDict['Edge_Width_mm'])
 
                self.AddTitle(leftConfigPanel, "Speed")
-               self.AddSetting(leftConfigPanel, "Print speed (mm/s)", self.plugins['speed'].preferencesDict['Feed_Rate_mm/s'])
-               self.AddSetting(leftConfigPanel, "Travel speed (mm/s)", self.plugins['speed'].preferencesDict['Travel_Feed_Rate_mm/s'])
-               self.AddSetting(leftConfigPanel, "Max Z speed (mm/z)", self.plugins['speed'].preferencesDict['Maximum_Z_Feed_Rate_mm/s'])
-               self.AddSetting(leftConfigPanel, "Bottom Layer Speed Ratio", self.plugins['speed'].preferencesDict['Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio'])
+               #self.AddSetting(leftConfigPanel, "Print speed (mm/s)", self.plugins['speed'].preferencesDict['Feed_Rate_mm/s'])
+               #self.AddSetting(leftConfigPanel, "Travel speed (mm/s)", self.plugins['speed'].preferencesDict['Travel_Feed_Rate_mm/s'])
+               #self.AddSetting(leftConfigPanel, "Max Z speed (mm/z)", self.plugins['speed'].preferencesDict['Maximum_Z_Feed_Rate_mm/s'])
+               #self.AddSetting(leftConfigPanel, "Bottom Layer Speed Ratio", self.plugins['speed'].preferencesDict['Object_First_Layer_Feed_Rate_Infill_Multiplier_ratio'])
 
                self.AddTitle(rightConfigPanel, "Filament")
-               self.AddSetting(rightConfigPanel, "Diameter (mm)", self.plugins['dimension'].preferencesDict['Filament_Diameter_mm'])
-               self.AddSetting(rightConfigPanel, "Packing Density", self.plugins['dimension'].preferencesDict['Filament_Packing_Density_ratio'])
+               #self.AddSetting(rightConfigPanel, "Diameter (mm)", self.plugins['dimension'].preferencesDict['Filament_Diameter_mm'])
+               #self.AddSetting(rightConfigPanel, "Packing Density", self.plugins['dimension'].preferencesDict['Filament_Packing_Density_ratio'])
                
                nb.AddPage(alterationPanel.alterationPanel(nb), "Start/End-GCode")
 
                #Preview window, load and slice buttons.
-               self.preview3d = preview3d.previewPanel(p)
+               self.preview3d = preview3d.previewPanel(self)
                
-               loadButton = wx.Button(p, -1, 'Load STL')
-               sliceButton = wx.Button(p, -1, 'Slice to GCode')
+               loadButton = wx.Button(self, -1, 'Load STL')
+               sliceButton = wx.Button(self, -1, 'Slice to GCode')
                self.Bind(wx.EVT_BUTTON, self.OnLoadSTL, loadButton)
                self.Bind(wx.EVT_BUTTON, self.OnSlice, sliceButton)
 
                sizer = wx.GridBagSizer()
-               p.SetSizer(sizer)
+               self.SetSizer(sizer)
                sizer.Add(nb, (0,0), span=(1,1), flag=wx.EXPAND)
                sizer.Add(self.preview3d, (0,1), span=(1,3), flag=wx.EXPAND)
                sizer.AddGrowableCol(2)
@@ -134,7 +124,6 @@ class mainWindow(wx.Frame):
                sizer.Add(loadButton, (1,1))
                sizer.Add(sliceButton, (1,2))
                
-               self.panel = p
                self.sizer = sizer
 
                self.Fit()
@@ -150,24 +139,14 @@ class mainWindow(wx.Frame):
                sizer.Add(wx.StaticLine(panel), (sizer.GetRows()+1,sizer.GetCols()), (1,3), flag=wx.EXPAND)
                sizer.SetRows(sizer.GetRows() + 2)
        
-       def AddSetting(self, panel, name, setting, help = 'Help: TODO'):
+       def AddSetting(self, panel, name, settingName, help = 'Help: TODO'):
                "Add a setting to the configuration panel"
                sizer = panel.GetSizer()
                sizer.Add(wx.StaticText(panel, -1, name), (sizer.GetRows(),sizer.GetCols()), flag=wx.ALIGN_CENTER_VERTICAL)
-               ctrl = None
-               if setting.__class__ is settings.FloatSpin:
-                       ctrl = wx.TextCtrl(panel, -1, str(setting.value))
-               if setting.__class__ is settings.IntSpin:
-                       ctrl = wx.TextCtrl(panel, -1, str(setting.value))
-               if setting.__class__ is settings.BooleanSetting:
-                       ctrl = wx.CheckBox(panel, -1, '')
-                       ctrl.SetValue(setting.value)
-               if ctrl == None:
-                       print "No WX control for: " + str(setting), str(setting.__class__)
-               else:
-                       ctrl.setting = setting
-                       self.controlList.append(ctrl)
-                       sizer.Add(ctrl, (sizer.GetRows(),sizer.GetCols()+1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)
+               ctrl = wx.TextCtrl(panel, -1, settings.getSetting(settingName))
+               ctrl.settingName = settingName
+               self.controlList.append(ctrl)
+               sizer.Add(ctrl, (sizer.GetRows(),sizer.GetCols()+1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)
                helpButton = wx.Button(panel, -1, "?", style=wx.BU_EXACTFIT)
                sizer.Add(helpButton, (sizer.GetRows(),sizer.GetCols()+2))
                helpButton.SetToolTip(wx.ToolTip(help))
@@ -235,23 +214,19 @@ class mainWindow(wx.Frame):
        
        def updateProfileToControls(self):
                "Update the configuration wx controls to show the new configuration settings"
-               for pluginName in self.plugins.keys():
-                       settings.getReadRepository(self.plugins[pluginName])
                settings.saveGlobalProfile(settings.getDefaultProfilePath())
                for ctrl in self.controlList:
-                       if ctrl.setting.__class__ is settings.BooleanSetting:
-                               ctrl.SetValue(ctrl.setting.value)
-                       else:
-                               ctrl.SetValue(str(ctrl.setting.value))
+                       ctrl.SetValue(settings.getSetting(ctrl.settingName))
 
        def updateProfileFromControls(self):
                "Update the configuration settings with values from the wx controls"
                for ctrl in self.controlList:
-                       ctrl.setting.setValueToString(ctrl.GetValue())
-               for pluginName in self.plugins.keys():
-                       settings.storeRepository(self.plugins[pluginName])
+                       settings.putSetting(ctrl.settingName, ctrl.GetValue())
                settings.saveGlobalProfile(settings.getDefaultProfilePath())
        
        def OnQuit(self, e):
                self.Close()
-
+       
+       def OnClose(self, e):
+               self.updateProfileFromControls()
+               self.Destroy()
index af950d822448a56b33bc62789ac9c004bb1d4a22..f80389046e2217b7a59b493cc2cdb4e76557f0eb 100644 (file)
@@ -1,10 +1,10 @@
-import wx\r
 import sys\r
 import math\r
 import threading\r
 import re\r
 \r
 from wx.glcanvas import GLCanvas\r
+import wx\r
 try:\r
        from OpenGL.GLUT import *\r
        from OpenGL.GLU import *\r
@@ -24,19 +24,10 @@ class previewPanel(wx.Panel):
                self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DDKSHADOW))\r
                self.SetMinSize((400,300))\r
 \r
-               self.glCanvas = GLCanvas(self, -1)\r
-               wx.EVT_PAINT(self.glCanvas, self.OnPaint)\r
-               wx.EVT_SIZE(self.glCanvas, self.OnSize)\r
-               wx.EVT_ERASE_BACKGROUND(self.glCanvas, self.OnEraseBackground)\r
-               wx.EVT_MOTION(self.glCanvas, self.OnMouseMotion)\r
+               self.glCanvas = PreviewGLCanvas(self)\r
                self.init = 0\r
                self.triangleMesh = None\r
-               self.modelDisplayList = None\r
                self.pathList = None\r
-               self.yaw = 30\r
-               self.pitch = 60\r
-               self.zoom = 150\r
-               self.renderTransparent = False\r
                self.machineSize = Vector3(210, 210, 200)\r
                self.machineCenter = Vector3(105, 105, 0)\r
                \r
@@ -70,7 +61,7 @@ class previewPanel(wx.Panel):
                self.modelDirty = False\r
                self.triangleMesh = fabmetheus_interpret.getCarving(self.modelFilename)\r
                self.moveModel()\r
-               self.Refresh()\r
+               self.glCanvas.Refresh()\r
        \r
        def getCodeInt(self, str, id):\r
                m = re.search(id + '([^\s]+)', str)\r
@@ -172,11 +163,11 @@ class previewPanel(wx.Panel):
                                        print "Unknown G code:" + str(G)\r
                self.pathList = pathList\r
                self.triangleMesh = None\r
-               self.Refresh()\r
+               self.glCanvas.Refresh()\r
        \r
        def OnConfigClick(self, e):\r
-               self.renderTransparent = not self.renderTransparent\r
-               self.Refresh()\r
+               self.glCanvas.renderTransparent = not self.glCanvas.renderTransparent\r
+               self.glCanvas.Refresh()\r
        \r
        def moveModel(self):\r
                if self.triangleMesh == None:\r
@@ -192,7 +183,21 @@ class previewPanel(wx.Panel):
                        v.y += self.machineCenter.y\r
                self.triangleMesh.getMinimumZ()\r
                self.modelDirty = True\r
-       \r
+\r
+class PreviewGLCanvas(GLCanvas):\r
+       def __init__(self, parent):\r
+               GLCanvas.__init__(self, parent)\r
+               self.parent = parent\r
+               wx.EVT_PAINT(self, self.OnPaint)\r
+               wx.EVT_SIZE(self, self.OnSize)\r
+               wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground)\r
+               wx.EVT_MOTION(self, self.OnMouseMotion)\r
+               self.yaw = 30\r
+               self.pitch = 60\r
+               self.zoom = 150\r
+               self.renderTransparent = False\r
+               self.modelDisplayList = None\r
+\r
        def OnMouseMotion(self,e):\r
                if e.Dragging() and e.LeftIsDown():\r
                        self.yaw += e.GetX() - self.oldX\r
@@ -221,53 +226,54 @@ class previewPanel(wx.Panel):
                        dc.Clear()\r
                        dc.DrawText("No PyOpenGL installation found.\nNo preview window available.", 10, 10)\r
                        return\r
-               self.glCanvas.SetCurrent()\r
+               self.SetCurrent()\r
                self.InitGL()\r
                self.OnDraw()\r
                return\r
 \r
        def OnDraw(self):\r
+               machineSize = self.parent.machineSize\r
                glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)\r
                \r
-               glTranslate(-self.machineCenter.x, -self.machineCenter.y, 0)\r
+               glTranslate(-self.parent.machineCenter.x, -self.parent.machineCenter.y, 0)\r
                \r
                glColor3f(1,1,1)\r
                glLineWidth(4)\r
                glDisable(GL_LIGHTING)\r
                glBegin(GL_LINE_LOOP)\r
                glVertex3f(0, 0, 0)\r
-               glVertex3f(self.machineSize.x, 0, 0)\r
-               glVertex3f(self.machineSize.x, self.machineSize.y, 0)\r
-               glVertex3f(0, self.machineSize.y, 0)\r
+               glVertex3f(machineSize.x, 0, 0)\r
+               glVertex3f(machineSize.x, machineSize.y, 0)\r
+               glVertex3f(0, machineSize.y, 0)\r
                glEnd()\r
                glLineWidth(2)\r
                glBegin(GL_LINES)\r
-               for i in xrange(0, self.machineSize.x, 10):\r
+               for i in xrange(0, machineSize.x, 10):\r
                        glVertex3f(i, 0, 0)\r
-                       glVertex3f(i, self.machineSize.y, 0)\r
-               for i in xrange(0, self.machineSize.y, 10):\r
+                       glVertex3f(i, machineSize.y, 0)\r
+               for i in xrange(0, machineSize.y, 10):\r
                        glVertex3f(0, i, 0)\r
-                       glVertex3f(self.machineSize.x, i, 0)\r
+                       glVertex3f(machineSize.x, i, 0)\r
                glEnd()\r
                glLineWidth(1)\r
                glBegin(GL_LINE_LOOP)\r
-               glVertex3f(0, 0, self.machineSize.z)\r
-               glVertex3f(self.machineSize.x, 0, self.machineSize.z)\r
-               glVertex3f(self.machineSize.x, self.machineSize.y, self.machineSize.z)\r
-               glVertex3f(0, self.machineSize.y, self.machineSize.z)\r
+               glVertex3f(0, 0, machineSize.z)\r
+               glVertex3f(machineSize.x, 0, machineSize.z)\r
+               glVertex3f(machineSize.x, machineSize.y, machineSize.z)\r
+               glVertex3f(0, machineSize.y, machineSize.z)\r
                glEnd()\r
                glBegin(GL_LINES)\r
                glVertex3f(0, 0, 0)\r
-               glVertex3f(0, 0, self.machineSize.z)\r
-               glVertex3f(self.machineSize.x, 0, 0)\r
-               glVertex3f(self.machineSize.x, 0, self.machineSize.z)\r
-               glVertex3f(self.machineSize.x, self.machineSize.y, 0)\r
-               glVertex3f(self.machineSize.x, self.machineSize.y, self.machineSize.z)\r
-               glVertex3f(0, self.machineSize.y, 0)\r
-               glVertex3f(0, self.machineSize.y, self.machineSize.z)\r
+               glVertex3f(0, 0, machineSize.z)\r
+               glVertex3f(machineSize.x, 0, 0)\r
+               glVertex3f(machineSize.x, 0, machineSize.z)\r
+               glVertex3f(machineSize.x, machineSize.y, 0)\r
+               glVertex3f(machineSize.x, machineSize.y, machineSize.z)\r
+               glVertex3f(0, machineSize.y, 0)\r
+               glVertex3f(0, machineSize.y, machineSize.z)\r
                glEnd()\r
 \r
-               if self.pathList != None:\r
+               if self.parent.pathList != None:\r
                        for path in self.pathList:\r
                                if path['type'] == 'move':\r
                                        glColor3f(0,0,1)\r
@@ -280,17 +286,17 @@ class previewPanel(wx.Panel):
                                        glVertex3f(v.x, v.y, v.z)\r
                                glEnd()\r
                \r
-               if self.triangleMesh != None:\r
+               if self.parent.triangleMesh != None:\r
                        if self.modelDisplayList == None:\r
                                self.modelDisplayList = glGenLists(1);\r
-                       if self.modelDirty:\r
-                               self.modelDirty = False\r
+                       if self.parent.modelDirty:\r
+                               self.parent.modelDirty = False\r
                                glNewList(self.modelDisplayList, GL_COMPILE)\r
                                glBegin(GL_TRIANGLES)\r
-                               for face in self.triangleMesh.faces:\r
-                                       v1 = self.triangleMesh.vertexes[face.vertexIndexes[0]]\r
-                                       v2 = self.triangleMesh.vertexes[face.vertexIndexes[1]]\r
-                                       v3 = self.triangleMesh.vertexes[face.vertexIndexes[2]]\r
+                               for face in self.parent.triangleMesh.faces:\r
+                                       v1 = self.parent.triangleMesh.vertexes[face.vertexIndexes[0]]\r
+                                       v2 = self.parent.triangleMesh.vertexes[face.vertexIndexes[1]]\r
+                                       v3 = self.parent.triangleMesh.vertexes[face.vertexIndexes[2]]\r
                                        normal = (v2 - v1).cross(v3 - v1)\r
                                        normal.normalize()\r
                                        glNormal3f(normal.x, normal.y, normal.z)\r
@@ -317,14 +323,14 @@ class previewPanel(wx.Panel):
                                glEnable(GL_LIGHTING)\r
                                glCallList(self.modelDisplayList)\r
                \r
-               self.glCanvas.SwapBuffers()\r
+               self.SwapBuffers()\r
                return\r
 \r
        def InitGL(self):\r
                # set viewing projection\r
                glMatrixMode(GL_MODELVIEW)\r
                glLoadIdentity()\r
-               size = self.glCanvas.GetSize()\r
+               size = self.GetSize()\r
                glViewport(0,0, size.GetWidth(), size.GetHeight())\r
                \r
                if self.renderTransparent:\r
@@ -352,6 +358,6 @@ class previewPanel(wx.Panel):
                glTranslate(0,0,-self.zoom)\r
                glRotate(-self.pitch, 1,0,0)\r
                glRotate(self.yaw, 0,0,1)\r
-               if self.triangleMesh != None:\r
-                       glTranslate(0,0,-self.triangleMesh.getCarveCornerMaximum().z / 2)\r
+               if self.parent.triangleMesh != None:\r
+                       glTranslate(0,0,-self.parent.triangleMesh.getCarveCornerMaximum().z / 2)\r
                return\r