Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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