def create_locator_empty(name, loc, rot=(0, 0, 0), scale=(1, 1, 1), size=1.0, data_type='Prefab', hookup=None, blend_coords=False): """ Creates an empty object for a Locator. :param name: :param loc: :param rot: :param scale: :param size: :param data_type: :param hookup: :param blend_coords: :return: """ rot_quaternion = None if len(rot) == 4: rot_quaternion = rot rot = (0, 0, 0) if blend_coords: location = loc else: location = _convert.change_to_scs_xyz_coordinates(loc, _get_scs_globals().import_scale) unique_name = _name.get_unique(name, bpy.data.objects, sep=".") locator = bpy.data.objects.new(unique_name, None) locator.empty_display_type = 'PLAIN_AXES' locator.scs_props.object_identity = locator.name # link to active layer and scene and make it active and selected bpy.context.view_layer.active_layer_collection.collection.objects.link(locator) bpy.context.view_layer.objects.active = locator locator.select_set(True) # fix scene objects count to avoid callback of new object bpy.context.scene.scs_cached_num_objects = len(bpy.context.scene.objects) locator.location = location if rot_quaternion: locator.rotation_mode = 'QUATERNION' if blend_coords: locator.rotation_quaternion = rot_quaternion else: locator.rotation_quaternion = _convert.change_to_blender_quaternion_coordinates(rot_quaternion) else: locator.rotation_mode = 'XYZ' locator.rotation_euler = rot locator.scale = scale locator.scs_props.empty_object_type = 'Locator' locator.scs_props.locator_type = data_type if data_type == "Prefab": locator.scs_props.scs_part = "" if hookup: locator.scs_props.locator_model_hookup = hookup return locator
def create_locator_empty(name, loc, rot=(0, 0, 0), scale=(1, 1, 1), size=1.0, data_type='Prefab', hookup=None): """ Creates an empty object for a Locator. :param name: :param loc: :param rot: :param scale: :param size: :param data_type: :param hookup: :return: """ rot_quaternion = None if len(rot) == 4: rot_quaternion = rot rot = (0, 0, 0) bpy.ops.object.empty_add( type='PLAIN_AXES', view_align=False, location=_convert.change_to_scs_xyz_coordinates( loc, _get_scs_globals().import_scale), rotation=rot, ) bpy.context.active_object.name = _name.get_unique(name, bpy.data.objects, sep=".") locator = bpy.context.active_object locator.scs_props.object_identity = locator.name if rot_quaternion: locator.rotation_mode = 'QUATERNION' locator.rotation_quaternion = _convert.change_to_blender_quaternion_coordinates( rot_quaternion) locator.scale = scale locator.scs_props.empty_object_type = 'Locator' locator.scs_props.locator_type = data_type if data_type == "Prefab": locator.scs_props.scs_part = "" if hookup: locator.scs_props.locator_model_hookup = hookup return locator
def create_locator_empty(name, loc, rot=(0, 0, 0), scale=(1, 1, 1), size=1.0, data_type='Prefab', hookup=None): """ Creates an empty object for a Locator. :param name: :param loc: :param rot: :param scale: :param size: :param data_type: :param hookup: :return: """ rot_quaternion = None if len(rot) == 4: rot_quaternion = rot rot = (0, 0, 0) bpy.ops.object.empty_add( type='PLAIN_AXES', view_align=False, location=_convert.change_to_scs_xyz_coordinates(loc, _get_scs_globals().import_scale), rotation=rot, ) name = _name.make_unique_name(object, name) bpy.context.active_object.name = name locator = bpy.data.objects.get(name) locator.scs_props.object_identity = locator.name if rot_quaternion: locator.rotation_mode = 'QUATERNION' locator.rotation_quaternion = _convert.change_to_blender_quaternion_coordinates(rot_quaternion) locator.scale = scale locator.scs_props.empty_object_type = 'Locator' locator.scs_props.locator_type = data_type if data_type == "Prefab": locator.scs_props.scs_part = "" if hookup: locator.scs_props.locator_model_hookup = hookup return locator