From: Daid Date: Thu, 23 Feb 2012 21:47:42 +0000 (+0100) Subject: Fixed the OpenGL window (old implementation caused problems in windows) X-Git-Tag: RC1~156 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=86c8bc22884aaf657e4bc3cae1c54f85f0dad415;p=cura.git Fixed the OpenGL window (old implementation caused problems in windows) Changed the way profiles are loaded/saved/used. This is more flexable, allows for calculations inside the actual settings to SF --- diff --git a/SkeinPyPy_NewUI/fabmetheus_utilities/geometry/solids/triangle_mesh.py b/SkeinPyPy_NewUI/fabmetheus_utilities/geometry/solids/triangle_mesh.py index 1335668c..bbe77230 100644 --- a/SkeinPyPy_NewUI/fabmetheus_utilities/geometry/solids/triangle_mesh.py +++ b/SkeinPyPy_NewUI/fabmetheus_utilities/geometry/solids/triangle_mesh.py @@ -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 diff --git a/SkeinPyPy_NewUI/fabmetheus_utilities/settings.py b/SkeinPyPy_NewUI/fabmetheus_utilities/settings.py index dcb76fb1..9817c115 100644 --- a/SkeinPyPy_NewUI/fabmetheus_utilities/settings.py +++ b/SkeinPyPy_NewUI/fabmetheus_utilities/settings.py @@ -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): diff --git a/SkeinPyPy_NewUI/newui/mainWindow.py b/SkeinPyPy_NewUI/newui/mainWindow.py index 6ae0d3a7..f629b881 100644 --- a/SkeinPyPy_NewUI/newui/mainWindow.py +++ b/SkeinPyPy_NewUI/newui/mainWindow.py @@ -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() diff --git a/SkeinPyPy_NewUI/newui/preview3d.py b/SkeinPyPy_NewUI/newui/preview3d.py index af950d82..f8038904 100644 --- a/SkeinPyPy_NewUI/newui/preview3d.py +++ b/SkeinPyPy_NewUI/newui/preview3d.py @@ -1,10 +1,10 @@ -import wx import sys import math import threading import re from wx.glcanvas import GLCanvas +import wx try: from OpenGL.GLUT import * from OpenGL.GLU import * @@ -24,19 +24,10 @@ class previewPanel(wx.Panel): self.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DDKSHADOW)) self.SetMinSize((400,300)) - self.glCanvas = GLCanvas(self, -1) - wx.EVT_PAINT(self.glCanvas, self.OnPaint) - wx.EVT_SIZE(self.glCanvas, self.OnSize) - wx.EVT_ERASE_BACKGROUND(self.glCanvas, self.OnEraseBackground) - wx.EVT_MOTION(self.glCanvas, self.OnMouseMotion) + self.glCanvas = PreviewGLCanvas(self) self.init = 0 self.triangleMesh = None - self.modelDisplayList = None self.pathList = None - self.yaw = 30 - self.pitch = 60 - self.zoom = 150 - self.renderTransparent = False self.machineSize = Vector3(210, 210, 200) self.machineCenter = Vector3(105, 105, 0) @@ -70,7 +61,7 @@ class previewPanel(wx.Panel): self.modelDirty = False self.triangleMesh = fabmetheus_interpret.getCarving(self.modelFilename) self.moveModel() - self.Refresh() + self.glCanvas.Refresh() def getCodeInt(self, str, id): m = re.search(id + '([^\s]+)', str) @@ -172,11 +163,11 @@ class previewPanel(wx.Panel): print "Unknown G code:" + str(G) self.pathList = pathList self.triangleMesh = None - self.Refresh() + self.glCanvas.Refresh() def OnConfigClick(self, e): - self.renderTransparent = not self.renderTransparent - self.Refresh() + self.glCanvas.renderTransparent = not self.glCanvas.renderTransparent + self.glCanvas.Refresh() def moveModel(self): if self.triangleMesh == None: @@ -192,7 +183,21 @@ class previewPanel(wx.Panel): v.y += self.machineCenter.y self.triangleMesh.getMinimumZ() self.modelDirty = True - + +class PreviewGLCanvas(GLCanvas): + def __init__(self, parent): + GLCanvas.__init__(self, parent) + self.parent = parent + wx.EVT_PAINT(self, self.OnPaint) + wx.EVT_SIZE(self, self.OnSize) + wx.EVT_ERASE_BACKGROUND(self, self.OnEraseBackground) + wx.EVT_MOTION(self, self.OnMouseMotion) + self.yaw = 30 + self.pitch = 60 + self.zoom = 150 + self.renderTransparent = False + self.modelDisplayList = None + def OnMouseMotion(self,e): if e.Dragging() and e.LeftIsDown(): self.yaw += e.GetX() - self.oldX @@ -221,53 +226,54 @@ class previewPanel(wx.Panel): dc.Clear() dc.DrawText("No PyOpenGL installation found.\nNo preview window available.", 10, 10) return - self.glCanvas.SetCurrent() + self.SetCurrent() self.InitGL() self.OnDraw() return def OnDraw(self): + machineSize = self.parent.machineSize glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) - glTranslate(-self.machineCenter.x, -self.machineCenter.y, 0) + glTranslate(-self.parent.machineCenter.x, -self.parent.machineCenter.y, 0) glColor3f(1,1,1) glLineWidth(4) glDisable(GL_LIGHTING) glBegin(GL_LINE_LOOP) glVertex3f(0, 0, 0) - glVertex3f(self.machineSize.x, 0, 0) - glVertex3f(self.machineSize.x, self.machineSize.y, 0) - glVertex3f(0, self.machineSize.y, 0) + glVertex3f(machineSize.x, 0, 0) + glVertex3f(machineSize.x, machineSize.y, 0) + glVertex3f(0, machineSize.y, 0) glEnd() glLineWidth(2) glBegin(GL_LINES) - for i in xrange(0, self.machineSize.x, 10): + for i in xrange(0, machineSize.x, 10): glVertex3f(i, 0, 0) - glVertex3f(i, self.machineSize.y, 0) - for i in xrange(0, self.machineSize.y, 10): + glVertex3f(i, machineSize.y, 0) + for i in xrange(0, machineSize.y, 10): glVertex3f(0, i, 0) - glVertex3f(self.machineSize.x, i, 0) + glVertex3f(machineSize.x, i, 0) glEnd() glLineWidth(1) glBegin(GL_LINE_LOOP) - glVertex3f(0, 0, self.machineSize.z) - glVertex3f(self.machineSize.x, 0, self.machineSize.z) - glVertex3f(self.machineSize.x, self.machineSize.y, self.machineSize.z) - glVertex3f(0, self.machineSize.y, self.machineSize.z) + glVertex3f(0, 0, machineSize.z) + glVertex3f(machineSize.x, 0, machineSize.z) + glVertex3f(machineSize.x, machineSize.y, machineSize.z) + glVertex3f(0, machineSize.y, machineSize.z) glEnd() glBegin(GL_LINES) glVertex3f(0, 0, 0) - glVertex3f(0, 0, self.machineSize.z) - glVertex3f(self.machineSize.x, 0, 0) - glVertex3f(self.machineSize.x, 0, self.machineSize.z) - glVertex3f(self.machineSize.x, self.machineSize.y, 0) - glVertex3f(self.machineSize.x, self.machineSize.y, self.machineSize.z) - glVertex3f(0, self.machineSize.y, 0) - glVertex3f(0, self.machineSize.y, self.machineSize.z) + glVertex3f(0, 0, machineSize.z) + glVertex3f(machineSize.x, 0, 0) + glVertex3f(machineSize.x, 0, machineSize.z) + glVertex3f(machineSize.x, machineSize.y, 0) + glVertex3f(machineSize.x, machineSize.y, machineSize.z) + glVertex3f(0, machineSize.y, 0) + glVertex3f(0, machineSize.y, machineSize.z) glEnd() - if self.pathList != None: + if self.parent.pathList != None: for path in self.pathList: if path['type'] == 'move': glColor3f(0,0,1) @@ -280,17 +286,17 @@ class previewPanel(wx.Panel): glVertex3f(v.x, v.y, v.z) glEnd() - if self.triangleMesh != None: + if self.parent.triangleMesh != None: if self.modelDisplayList == None: self.modelDisplayList = glGenLists(1); - if self.modelDirty: - self.modelDirty = False + if self.parent.modelDirty: + self.parent.modelDirty = False glNewList(self.modelDisplayList, GL_COMPILE) glBegin(GL_TRIANGLES) - for face in self.triangleMesh.faces: - v1 = self.triangleMesh.vertexes[face.vertexIndexes[0]] - v2 = self.triangleMesh.vertexes[face.vertexIndexes[1]] - v3 = self.triangleMesh.vertexes[face.vertexIndexes[2]] + for face in self.parent.triangleMesh.faces: + v1 = self.parent.triangleMesh.vertexes[face.vertexIndexes[0]] + v2 = self.parent.triangleMesh.vertexes[face.vertexIndexes[1]] + v3 = self.parent.triangleMesh.vertexes[face.vertexIndexes[2]] normal = (v2 - v1).cross(v3 - v1) normal.normalize() glNormal3f(normal.x, normal.y, normal.z) @@ -317,14 +323,14 @@ class previewPanel(wx.Panel): glEnable(GL_LIGHTING) glCallList(self.modelDisplayList) - self.glCanvas.SwapBuffers() + self.SwapBuffers() return def InitGL(self): # set viewing projection glMatrixMode(GL_MODELVIEW) glLoadIdentity() - size = self.glCanvas.GetSize() + size = self.GetSize() glViewport(0,0, size.GetWidth(), size.GetHeight()) if self.renderTransparent: @@ -352,6 +358,6 @@ class previewPanel(wx.Panel): glTranslate(0,0,-self.zoom) glRotate(-self.pitch, 1,0,0) glRotate(self.yaw, 0,0,1) - if self.triangleMesh != None: - glTranslate(0,0,-self.triangleMesh.getCarveCornerMaximum().z / 2) + if self.parent.triangleMesh != None: + glTranslate(0,0,-self.parent.triangleMesh.getCarveCornerMaximum().z / 2) return