diff options
Diffstat (limited to 'mesh_snap_utilities_line/common_classes.py')
-rw-r--r-- | mesh_snap_utilities_line/common_classes.py | 122 |
1 files changed, 73 insertions, 49 deletions
diff --git a/mesh_snap_utilities_line/common_classes.py b/mesh_snap_utilities_line/common_classes.py index 274c8f35..990f1e46 100644 --- a/mesh_snap_utilities_line/common_classes.py +++ b/mesh_snap_utilities_line/common_classes.py @@ -5,14 +5,14 @@ import bpy from mathutils import ( Vector, Matrix, - ) +) from mathutils.geometry import intersect_point_line from .drawing_utilities import SnapDrawn from .common_utilities import ( convert_distance, get_units_info, location_3d_to_region_2d, - ) +) class SnapNavigation(): @@ -26,7 +26,6 @@ class SnapNavigation(): '_ndof_orbit_zoom', '_ndof_pan') - @staticmethod def debug_key(key): for member in dir(key): @@ -53,34 +52,44 @@ class SnapNavigation(): for key in context.window_manager.keyconfigs.user.keymaps['3D View'].keymap_items: if key.idname == 'view3d.rotate': - self._rotate.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type, key.value)) + self._rotate.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), key.type, key.value)) elif key.idname == 'view3d.move': - self._move.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type, key.value)) + self._move.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), key.type, key.value)) elif key.idname == 'view3d.zoom': if key.type == 'WHEELINMOUSE': - self._zoom.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), 'WHEELUPMOUSE', key.value, key.properties.delta)) + self._zoom.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), 'WHEELUPMOUSE', key.value, key.properties.delta)) elif key.type == 'WHEELOUTMOUSE': - self._zoom.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), 'WHEELDOWNMOUSE', key.value, key.properties.delta)) + self._zoom.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), 'WHEELDOWNMOUSE', key.value, key.properties.delta)) else: - self._zoom.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type, key.value, key.properties.delta)) + self._zoom.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), key.type, key.value, key.properties.delta)) elif self.use_ndof: if key.idname == 'view3d.ndof_all': - self._ndof_all.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type)) + self._ndof_all.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), key.type)) elif key.idname == 'view3d.ndof_orbit': - self._ndof_orbit.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type)) + self._ndof_orbit.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), key.type)) elif key.idname == 'view3d.ndof_orbit_zoom': - self._ndof_orbit_zoom.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type)) + self._ndof_orbit_zoom.add( + (self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type)) elif key.idname == 'view3d.ndof_pan': - self._ndof_pan.add((self.convert_to_flag(key.shift, key.ctrl, key.alt), key.type)) - + self._ndof_pan.add((self.convert_to_flag( + key.shift, key.ctrl, key.alt), key.type)) def run(self, context, event, snap_location): - evkey = (self.convert_to_flag(event.shift, event.ctrl, event.alt), event.type, event.value) + evkey = (self.convert_to_flag(event.shift, event.ctrl, + event.alt), event.type, event.value) if evkey in self._rotate: if snap_location: - bpy.ops.view3d.rotate_custom_pivot('INVOKE_DEFAULT', pivot=snap_location) + bpy.ops.view3d.rotate_custom_pivot( + 'INVOKE_DEFAULT', pivot=snap_location) else: bpy.ops.view3d.rotate('INVOKE_DEFAULT', use_cursor_init=True) return True @@ -93,7 +102,8 @@ class SnapNavigation(): if evkey == key[0:3]: if key[3]: if snap_location: - bpy.ops.view3d.zoom_custom_target('INVOKE_DEFAULT', delta=key[3], target=snap_location) + bpy.ops.view3d.zoom_custom_target( + 'INVOKE_DEFAULT', delta=key[3], target=snap_location) else: bpy.ops.view3d.zoom('INVOKE_DEFAULT', delta=key[3]) else: @@ -132,11 +142,11 @@ class CharMap: "c", "m", "d", "k", "h", "a", " ", "/", "*", "'", "\"" # "=" - } + } type = { 'BACK_SPACE', 'DEL', 'LEFT_ARROW', 'RIGHT_ARROW' - } + } def __init__(self, context): scale = context.scene.unit_settings.scale_length @@ -155,28 +165,34 @@ class CharMap: pos = self.line_pos if ascii == ",": ascii = "." - self.length_entered = self.length_entered[:pos] + ascii + self.length_entered[pos:] + self.length_entered = self.length_entered[:pos] + \ + ascii + self.length_entered[pos:] self.line_pos += 1 if self.length_entered: pos = self.line_pos if type == 'BACK_SPACE': - self.length_entered = self.length_entered[:pos - 1] + self.length_entered[pos:] + self.length_entered = self.length_entered[:pos - + 1] + self.length_entered[pos:] self.line_pos -= 1 elif type == 'DEL': - self.length_entered = self.length_entered[:pos] + self.length_entered[pos + 1:] + self.length_entered = self.length_entered[:pos] + \ + self.length_entered[pos + 1:] elif type == 'LEFT_ARROW': - self.line_pos = (pos - 1) % (len(self.length_entered) + 1) + self.line_pos = ( + pos - 1) % (len(self.length_entered) + 1) elif type == 'RIGHT_ARROW': - self.line_pos = (pos + 1) % (len(self.length_entered) + 1) + self.line_pos = ( + pos + 1) % (len(self.length_entered) + 1) try: - self.length_entered_value = bpy.utils.units.to_value(self.unit_system, 'LENGTH', self.length_entered) + self.length_entered_value = bpy.utils.units.to_value( + self.unit_system, 'LENGTH', self.length_entered) except: # ValueError: - self.length_entered_value = 0.0 #invalid + self.length_entered_value = 0.0 # invalid #self.report({'INFO'}, "Operation not supported yet") else: self.length_entered_value = 0.0 @@ -236,7 +252,7 @@ class Constrain: vec = self.orientation[self.orientation_id][1] type = 'Y' - else: # dot_z > dot_y and dot_z > dot_x: + else: # dot_z > dot_y and dot_z > dot_x: vec = self.orientation[self.orientation_id][2] type = 'Z' @@ -280,7 +296,7 @@ class Constrain: return True def toggle(self): - self.rotMat = None # update + self.rotMat = None # update if self.preferences.auto_constrain: self.orientation_id = (self.orientation_id + 1) % 2 self.preferences.auto_constrain = self.orientation_id != 0 @@ -292,14 +308,18 @@ class Constrain: self.rotMat = rv3d.view_matrix.copy() self.center = center.copy() - self.center_2d = location_3d_to_region_2d(region, rv3d, self.center) + self.center_2d = location_3d_to_region_2d( + region, rv3d, self.center) vec = self.center + self.orientation[self.orientation_id][0] - self.projected_vecs[0] = location_3d_to_region_2d(region, rv3d, vec) - self.center_2d + self.projected_vecs[0] = location_3d_to_region_2d( + region, rv3d, vec) - self.center_2d vec = self.center + self.orientation[self.orientation_id][1] - self.projected_vecs[1] = location_3d_to_region_2d(region, rv3d, vec) - self.center_2d + self.projected_vecs[1] = location_3d_to_region_2d( + region, rv3d, vec) - self.center_2d vec = self.center + self.orientation[self.orientation_id][2] - self.projected_vecs[2] = location_3d_to_region_2d(region, rv3d, vec) - self.center_2d + self.projected_vecs[2] = location_3d_to_region_2d( + region, rv3d, vec) - self.center_2d self.projected_vecs[0].normalize() self.projected_vecs[1].normalize() @@ -331,12 +351,12 @@ class SnapUtilities: """ constrain_keys = { - 'X': Vector((1,0,0)), - 'Y': Vector((0,1,0)), - 'Z': Vector((0,0,1)), + 'X': Vector((1, 0, 0)), + 'Y': Vector((0, 1, 0)), + 'Z': Vector((0, 0, 1)), 'RIGHT_SHIFT': 'shift', 'LEFT_SHIFT': 'shift', - } + } snapwidgets = [] constrain = None @@ -364,7 +384,6 @@ class SnapUtilities: SnapUtilities.constrain = key - def snap_context_update_and_return_moving_objects(self, context): moving_objects = set() moving_snp_objects = set() @@ -405,7 +424,6 @@ class SnapUtilities: del children return moving_objects, moving_snp_objects - def snap_context_update(self, context): def visible_objects_and_duplis(): if self.preferences.outer_verts: @@ -425,12 +443,12 @@ class SnapUtilities: for obj, matrix in visible_objects_and_duplis(): self.sctx.add_obj(obj, matrix) - def snap_context_init(self, context, snap_edge_and_vert=True): from .snap_context_l import global_snap_context_get - #Create Snap Context - self.sctx = global_snap_context_get(context.evaluated_depsgraph_get(), context.region, context.space_data) + # Create Snap Context + self.sctx = global_snap_context_get( + context.evaluated_depsgraph_get(), context.region, context.space_data) ui_scale = context.preferences.system.ui_scale self.sctx.set_pixel_dist(12 * ui_scale) @@ -448,7 +466,7 @@ class SnapUtilities: self.normal = widget.normal else: - #init these variables to avoid errors + # init these variables to avoid errors self.obj = context.active_object self.bm = None self.geom = None @@ -458,7 +476,7 @@ class SnapUtilities: preferences = context.preferences.addons[__package__].preferences self.preferences = preferences - #Init DrawCache + # Init DrawCache self.draw_cache = SnapDrawn( preferences.out_color, preferences.face_color, @@ -467,26 +485,32 @@ class SnapUtilities: preferences.center_color, preferences.perpendicular_color, preferences.constrain_shift_color, - tuple(context.preferences.themes[0].user_interface.axis_x) + (1.0,), - tuple(context.preferences.themes[0].user_interface.axis_y) + (1.0,), - tuple(context.preferences.themes[0].user_interface.axis_z) + (1.0,), + tuple( + context.preferences.themes[0].user_interface.axis_x) + (1.0,), + tuple( + context.preferences.themes[0].user_interface.axis_y) + (1.0,), + tuple( + context.preferences.themes[0].user_interface.axis_z) + (1.0,), self.sctx.rv3d, ui_scale) self.snap_vert = self.snap_edge = snap_edge_and_vert shading = context.space_data.shading - self.snap_face = not (snap_edge_and_vert and (shading.show_xray or shading.type == 'WIREFRAME')) + self.snap_face = not (snap_edge_and_vert and ( + shading.show_xray or shading.type == 'WIREFRAME')) self.sctx.set_snap_mode(self.snap_vert, self.snap_edge, self.snap_face) - #Configure the unit of measure + # Configure the unit of measure unit_system = context.scene.unit_settings.system scale = context.scene.unit_settings.scale_length scale /= context.space_data.overlay.grid_scale - self.rd = bpy.utils.units.to_value(unit_system, 'LENGTH', str(1 / scale)) + self.rd = bpy.utils.units.to_value( + unit_system, 'LENGTH', str(1 / scale)) - self.incremental = bpy.utils.units.to_value(unit_system, 'LENGTH', str(self.preferences.incremental)) + self.incremental = bpy.utils.units.to_value( + unit_system, 'LENGTH', str(self.preferences.incremental)) def snap_to_grid(self): if self.type == 'OUT' and self.preferences.increments_grid: |