def update_convex_hull_margins(obj): """ :param obj: :type obj: :return: :rtype: """ bbox = obj.scs_props.get("coll_convex_bbox", None) bbcenter = obj.scs_props.get("coll_convex_bbcenter", None) # print(' oo bbox_width: %s - bbox_height: %s - bbox_depth: %s' % (bbox[0], bbox[1], bbox[2])) # print(' oo bbcenter: <%s, %s, %s>' % (bbcenter[0], bbcenter[1], bbcenter[2])) verts = obj.scs_props.get("coll_convex_verts", None) verts_orig = obj.scs_props.get("coll_convex_verts_orig", None) if bbox and bbcenter and verts and verts_orig: margin = obj.scs_props.locator_collider_margin scaling = _math.scaling_width_margin(bbox, margin) # print(' oo margin: %s - scaling: <%s, %s, %s>' % (margin, scaling[0], scaling[1], scaling[2])) # APPLY THE SCALE TO OBJECT VERTICES scaled_verts = [] for vert_orig in verts_orig: vert_loc = [] for axis in range(3): length = vert_orig[axis] - bbcenter[axis] new_length = length * scaling[axis] vert_loc.append(bbcenter[axis] + new_length) scaled_verts.append(tuple(vert_loc)) obj.scs_props["coll_convex_verts"] = scaled_verts return
def set_locators_coll_draw_size(obj): """Set Collision Locator drawing style for Empty object. :param obj: Blender Object :type obj: bpy.types.Object """ new_draw_size = 0.5 if obj.scs_props.locator_collider_type == 'Box': bigest_value = max(obj.scs_props.locator_collider_box_x, obj.scs_props.locator_collider_box_y, obj.scs_props.locator_collider_box_z) new_draw_size = (0.1 * bigest_value) * 12 elif obj.scs_props.locator_collider_type in ('Sphere', 'Capsule', 'Cylinder'): new_draw_size = (0.1 * obj.scs_props.locator_collider_dia) * 12 elif obj.scs_props.locator_collider_type == 'Convex': bbox = obj.scs_props.get("coll_convex_bbox", None) bbcenter = obj.scs_props.get("coll_convex_bbcenter", None) if bbox and bbcenter: scaling = _math_utils.scaling_width_margin( bbox, obj.scs_props.locator_collider_margin) val = [] for axis in range(3): val.append( (bbox[axis] + abs(bbcenter[axis])) * scaling[axis]) bigest_value = max(val) new_draw_size = (0.1 * bigest_value) * 12 _object_utils.set_attr_if_different(obj, "empty_draw_size", new_draw_size) _object_utils.set_attr_if_different(obj, "empty_draw_type", 'PLAIN_AXES')
def set_locators_coll_draw_size(obj): """Set Collision Locator drawing style for Empty object. :param obj: Blender Object :type obj: bpy.types.Object """ new_draw_size = 0.5 if obj.scs_props.locator_collider_type == 'Box': bigest_value = max(obj.scs_props.locator_collider_box_x, obj.scs_props.locator_collider_box_y, obj.scs_props.locator_collider_box_z) new_draw_size = (0.1 * bigest_value) * 12 elif obj.scs_props.locator_collider_type in ('Sphere', 'Capsule', 'Cylinder'): new_draw_size = (0.1 * obj.scs_props.locator_collider_dia) * 12 elif obj.scs_props.locator_collider_type == 'Convex': bbox = obj.scs_props.get("coll_convex_bbox", None) bbcenter = obj.scs_props.get("coll_convex_bbcenter", None) if bbox and bbcenter: scaling = _math_utils.scaling_width_margin(bbox, obj.scs_props.locator_collider_margin) val = [] for axis in range(3): val.append((bbox[axis] + abs(bbcenter[axis])) * scaling[axis]) bigest_value = max(val) new_draw_size = (0.1 * bigest_value) * 12 _object_utils.set_attr_if_different(obj, "empty_draw_size", new_draw_size) _object_utils.set_attr_if_different(obj, "empty_draw_type", 'PLAIN_AXES')