Blender V4.5
collada_utils.h File Reference
#include "COLLADAFWFloatOrDoubleArray.h"
#include "COLLADAFWTypes.h"
#include "COLLADASWColorOrTexture.h"
#include <algorithm>
#include <map>
#include <set>
#include <vector>
#include "DNA_anim_types.h"
#include "DNA_camera_types.h"
#include "DNA_constraint_types.h"
#include "DNA_light_types.h"
#include "DNA_mesh_types.h"
#include "DNA_object_types.h"
#include "DNA_customdata_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
#include "RNA_access.hh"
#include "BLI_linklist.h"
#include "BKE_context.hh"
#include "BKE_main.hh"
#include "BKE_node.hh"
#include "BKE_object.hh"
#include "BKE_scene.hh"
#include "BCSampleData.h"
#include "BlenderContext.h"
#include "ExportSettings.h"
#include "collada_internal.h"

Go to the source code of this file.

Classes

class  ColladaBaseNodes
class  BCPolygonNormalsIndices
class  BoneExtended
class  BoneExtensionManager

Namespaces

namespace  COLLADAFW

Typedefs

using UidImageMap = std::map<COLLADAFW::UniqueId, Image *>
using KeyImageMap = std::map<std::string, Image *>
using TexIndexTextureArrayMap = std::map<COLLADAFW::TextureMapId, std::vector<MTex *>>
using BCObjectSet = std::set<Object *>
using BoneExtensionMap = std::map<std::string, BoneExtended *>

Functions

void bc_update_scene (BlenderContext &blender_context, float ctime)
std::vector< bAction * > bc_getSceneActions (const bContext *C, Object *ob, bool all_actions)
bActionbc_getSceneObjectAction (Object *ob)
AnimDatabc_getSceneLightAnimData (Object *ob)
AnimDatabc_getSceneCameraAnimData (Object *ob)
AnimDatabc_getSceneMaterialAnimData (Material *ma)
std::string bc_get_action_id (const std::string &action_name, const std::string &ob_name, const std::string &channel_type, const std::string &axis_name, const std::string &axis_separator="_")
float bc_get_float_value (const COLLADAFW::FloatOrDoubleArray &array, unsigned int index)
int bc_test_parent_loop (Object *par, Object *ob)
bool bc_validateConstraints (bConstraint *con)
bool bc_set_parent (Object *ob, Object *par, bContext *C, bool is_parent_space=true)
Objectbc_add_object (Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name)
Objectbc_add_armature (COLLADAFW::Node *node, ExtraTags *node_extra_tags, Main *bmain, Scene *scene, ViewLayer *view_layer, int type, const char *name)
Meshbc_get_mesh_copy (BlenderContext &blender_context, Object *ob, BC_export_mesh_type export_mesh_type, bool apply_modifiers, bool triangulate)
Objectbc_get_assigned_armature (Object *ob)
bool bc_has_object_type (LinkNode *export_set, short obtype)
const char * bc_CustomData_get_layer_name (const CustomData *data, eCustomDataType type, int n)
const char * bc_CustomData_get_active_layer_name (const CustomData *data, eCustomDataType type)
void bc_bubble_sort_by_Object_name (LinkNode *export_set)
bool bc_is_root_bone (Bone *aBone, bool deform_bones_only)
int bc_get_active_UVLayer (Object *ob)
std::string bc_string_after (const std::string &s, const std::string &probe)
std::string bc_string_before (const std::string &s, const std::string &probe)
bool bc_startswith (std::string const &value, std::string const &starting)
bool bc_endswith (const std::string &value, const std::string &ending)
std::string bc_replace_string (std::string data, const std::string &pattern, const std::string &replacement)
std::string bc_url_encode (const std::string &data)
void bc_match_scale (Object *ob, UnitConverter &bc_unit, bool scale_to_scene)
void bc_match_scale (std::vector< Object * > *objects_done, UnitConverter &bc_unit, bool scale_to_scene)
void bc_decompose (float mat[4][4], float *loc, float eul[3], float quat[4], float *size)
void bc_rotate_from_reference_quat (float quat_to[4], float quat_from[4], float mat_to[4][4])
void bc_triangulate_mesh (Mesh *mesh)
bool bc_is_leaf_bone (Bone *bone)
EditBonebc_get_edit_bone (bArmature *armature, const char *name)
int bc_set_layer (int bitfield, int layer, bool enable)
int bc_set_layer (int bitfield, int layer)
bool bc_in_range (float a, float b, float range)
void bc_copy_m4_farray (float r[4][4], float *a)
void bc_copy_farray_m4 (float *r, float a[4][4])
void bc_copy_darray_m4d (double *r, double a[4][4])
void bc_copy_m4d_v44 (double(&r)[4][4], std::vector< std::vector< double > > &a)
void bc_copy_v44_m4d (std::vector< std::vector< double > > &r, double(&a)[4][4])
void bc_sanitize_v3 (double v[3], int precision)
void bc_sanitize_v3 (float v[3], int precision)
IDPropertybc_get_IDProperty (Bone *bone, const std::string &key)
void bc_set_IDProperty (EditBone *ebone, const char *key, float value)
void bc_set_IDPropertyMatrix (EditBone *ebone, const char *key, float mat[4][4])
float bc_get_property (Bone *bone, const std::string &key, float def)
void bc_get_property_vector (Bone *bone, const std::string &key, float val[3], const float def[3])
bool bc_get_property_matrix (Bone *bone, const std::string &key, float mat[4][4])
void bc_enable_fcurves (bAction *act, const char *bone_name)
bool bc_bone_matrix_local_get (Object *ob, Bone *bone, Matrix &mat, bool for_opensim)
bool bc_is_animated (BCMatrixSampleMap &values)
bool bc_has_animations (Scene *sce, LinkNode *export_set)
bool bc_has_animations (Object *ob)
void bc_add_global_transform (Matrix &to_mat, const Matrix &from_mat, const BCMatrix &global_transform, bool invert=false)
void bc_add_global_transform (Vector &to_vec, const Vector &from_vec, const BCMatrix &global_transform, bool invert=false)
void bc_add_global_transform (Vector &to_vec, const BCMatrix &global_transform, bool invert=false)
void bc_add_global_transform (Matrix &to_mat, const BCMatrix &global_transform, bool invert=false)
void bc_apply_global_transform (Matrix &to_mat, const BCMatrix &global_transform, bool invert=false)
void bc_apply_global_transform (Vector &to_vec, const BCMatrix &global_transform, bool invert=false)
void bc_create_restpose_mat (BCExportSettings &export_settings, Bone *bone, float to_mat[4][4], float from_mat[4][4], bool use_local_space)
void bc_add_default_shader (bContext *C, Material *ma)
bNodebc_get_master_shader (Material *ma)
COLLADASW::ColorOrTexture bc_get_base_color (Material *ma)
COLLADASW::ColorOrTexture bc_get_emission (Material *ma)
COLLADASW::ColorOrTexture bc_get_ambient (Material *ma)
COLLADASW::ColorOrTexture bc_get_specular (Material *ma)
COLLADASW::ColorOrTexture bc_get_reflective (Material *ma)
double bc_get_reflectivity (Material *ma)
double bc_get_alpha (Material *ma)
double bc_get_ior (Material *ma)
double bc_get_shininess (Material *ma)
bool bc_get_float_from_shader (bNode *shader, double &val, std::string nodeid)
COLLADASW::ColorOrTexture bc_get_cot_from_shader (bNode *shader, std::string nodeid, const Color &default_color, bool with_alpha=true)
COLLADASW::ColorOrTexture bc_get_cot (float r, float g, float b, float a)
COLLADASW::ColorOrTexture bc_get_cot (const Color col, bool with_alpha=true)

Variables

constexpr int LIMITTED_PRECISION = 6

Typedef Documentation

◆ BCObjectSet

using BCObjectSet = std::set<Object *>

Definition at line 51 of file collada_utils.h.

◆ BoneExtensionMap

using BoneExtensionMap = std::map<std::string, BoneExtended *>

Definition at line 414 of file collada_utils.h.

◆ KeyImageMap

using KeyImageMap = std::map<std::string, Image *>

Definition at line 49 of file collada_utils.h.

◆ TexIndexTextureArrayMap

using TexIndexTextureArrayMap = std::map<COLLADAFW::TextureMapId, std::vector<MTex *>>

Definition at line 50 of file collada_utils.h.

◆ UidImageMap

using UidImageMap = std::map<COLLADAFW::UniqueId, Image *>

Definition at line 48 of file collada_utils.h.

Function Documentation

◆ bc_add_armature()

Object * bc_add_armature ( COLLADAFW::Node * node,
ExtraTags * node_extra_tags,
Main * bmain,
Scene * scene,
ViewLayer * view_layer,
int type,
const char * name )
extern

◆ bc_add_default_shader()

◆ bc_add_global_transform() [1/4]

void bc_add_global_transform ( Matrix & to_mat,
const BCMatrix & global_transform,
bool invert = false )
extern

Definition at line 906 of file collada_utils.cpp.

References BCMatrix::add_transform(), BCMatrix::get_matrix(), and invert().

◆ bc_add_global_transform() [2/4]

void bc_add_global_transform ( Matrix & to_mat,
const Matrix & from_mat,
const BCMatrix & global_transform,
bool invert = false )
extern

◆ bc_add_global_transform() [3/4]

void bc_add_global_transform ( Vector & to_vec,
const BCMatrix & global_transform,
bool invert = false )
extern

Definition at line 913 of file collada_utils.cpp.

References copy_v3_v3(), BCMatrix::get_matrix(), invert(), and mul_v3_m4v3().

◆ bc_add_global_transform() [4/4]

void bc_add_global_transform ( Vector & to_vec,
const Vector & from_vec,
const BCMatrix & global_transform,
bool invert = false )
extern

Definition at line 897 of file collada_utils.cpp.

References bc_add_global_transform(), copy_v3_v3(), and invert().

◆ bc_add_object()

◆ bc_apply_global_transform() [1/2]

void bc_apply_global_transform ( Matrix & to_mat,
const BCMatrix & global_transform,
bool invert = false )
extern

◆ bc_apply_global_transform() [2/2]

void bc_apply_global_transform ( Vector & to_vec,
const BCMatrix & global_transform,
bool invert = false )
extern

Definition at line 929 of file collada_utils.cpp.

References BCMatrix::get_matrix(), invert(), mul_v3_m4v3(), and transform().

◆ bc_bone_matrix_local_get()

◆ bc_bubble_sort_by_Object_name()

void bc_bubble_sort_by_Object_name ( LinkNode * export_set)
extern

Definition at line 327 of file collada_utils.cpp.

References b, Object::id, LinkNode::link, ID::name, and LinkNode::next.

Referenced by collada_export().

◆ bc_copy_darray_m4d()

void bc_copy_darray_m4d ( double * r,
double a[4][4] )

Definition at line 1028 of file collada_utils.cpp.

References i.

◆ bc_copy_farray_m4()

void bc_copy_farray_m4 ( float * r,
float a[4][4] )

Definition at line 1019 of file collada_utils.cpp.

References i.

◆ bc_copy_m4_farray()

void bc_copy_m4_farray ( float r[4][4],
float * a )

Definition at line 1010 of file collada_utils.cpp.

References i.

◆ bc_copy_m4d_v44()

void bc_copy_m4d_v44 ( double(&) r[4][4],
std::vector< std::vector< double > > & a )

Definition at line 1046 of file collada_utils.cpp.

References i.

◆ bc_copy_v44_m4d()

void bc_copy_v44_m4d ( std::vector< std::vector< double > > & r,
double(&) a[4][4] )

Definition at line 1037 of file collada_utils.cpp.

References i.

◆ bc_create_restpose_mat()

void bc_create_restpose_mat ( BCExportSettings & export_settings,
Bone * bone,
float to_mat[4][4],
float from_mat[4][4],
bool use_local_space )
extern

Check if custom information about bind matrix exists and modify the from_mat accordingly.

Note
This is old style for Blender <= 2.78 only kept for compatibility.

Definition at line 936 of file collada_utils.cpp.

References b, bc_decompose(), bc_get_IDProperty(), bc_get_property(), bc_get_property_vector(), copy_m4_m4(), DEG2RADF, has_custom_props(), loc_eulO_size_to_mat4(), Bone::parent, and rot.

◆ bc_CustomData_get_active_layer_name()

const char * bc_CustomData_get_active_layer_name ( const CustomData * data,
eCustomDataType type )
extern

◆ bc_CustomData_get_layer_name()

const char * bc_CustomData_get_layer_name ( const CustomData * data,
eCustomDataType type,
int n )
extern

◆ bc_decompose()

void bc_decompose ( float mat[4][4],
float * loc,
float eul[3],
float quat[4],
float * size )
extern

Convenience function to get only the needed components of a matrix.

Definition at line 416 of file collada_utils.cpp.

References copy_v3_v3(), mat4_to_eul(), mat4_to_quat(), mat4_to_size(), and size().

Referenced by TransformWriter::add_joint_transform(), TransformWriter::add_node_transform_ob(), and bc_create_restpose_mat().

◆ bc_enable_fcurves()

void bc_enable_fcurves ( bAction * act,
const char * bone_name )
extern

References invert().

◆ bc_endswith()

bool bc_endswith ( const std::string & value,
const std::string & ending )
inline

Definition at line 176 of file collada_utils.h.

◆ bc_get_action_id()

std::string bc_get_action_id ( const std::string & action_name,
const std::string & ob_name,
const std::string & channel_type,
const std::string & axis_name,
const std::string & axis_separator = "_" )

◆ bc_get_active_UVLayer()

int bc_get_active_UVLayer ( Object * ob)
extern

◆ bc_get_alpha()

double bc_get_alpha ( Material * ma)

◆ bc_get_ambient()

COLLADASW::ColorOrTexture bc_get_ambient ( Material * ma)

Definition at line 1208 of file collada_utils.cpp.

References bc_get_cot().

◆ bc_get_assigned_armature()

◆ bc_get_base_color()

COLLADASW::ColorOrTexture bc_get_base_color ( Material * ma)

◆ bc_get_cot() [1/2]

COLLADASW::ColorOrTexture bc_get_cot ( const Color col,
bool with_alpha = true )

Definition at line 1312 of file collada_utils.cpp.

References col.

◆ bc_get_cot() [2/2]

COLLADASW::ColorOrTexture bc_get_cot ( float r,
float g,
float b,
float a )

◆ bc_get_cot_from_shader()

COLLADASW::ColorOrTexture bc_get_cot_from_shader ( bNode * shader,
std::string nodeid,
const Color & default_color,
bool with_alpha = true )

◆ bc_get_edit_bone()

EditBone * bc_get_edit_bone ( bArmature * armature,
const char * name )
extern

Definition at line 484 of file collada_utils.cpp.

References bArmature::edbo, LISTBASE_FOREACH, and STREQ.

◆ bc_get_emission()

COLLADASW::ColorOrTexture bc_get_emission ( Material * ma)

◆ bc_get_float_from_shader()

bool bc_get_float_from_shader ( bNode * shader,
double & val,
std::string nodeid )

◆ bc_get_float_value()

float bc_get_float_value ( const COLLADAFW::FloatOrDoubleArray & array,
unsigned int index )
extern

Definition at line 72 of file collada_utils.cpp.

Referenced by SkinInfo::borrow_skin_controller_data().

◆ bc_get_IDProperty()

IDProperty * bc_get_IDProperty ( Bone * bone,
const std::string & key )
extern

Get a custom property when it exists. This function is also used to check if a property exists.

Definition at line 680 of file collada_utils.cpp.

References IDP_GetPropertyFromGroup(), nullptr, and Bone::prop.

Referenced by bc_create_restpose_mat(), bc_get_property(), bc_get_property_matrix(), and has_custom_props().

◆ bc_get_ior()

double bc_get_ior ( Material * ma)

◆ bc_get_master_shader()

◆ bc_get_mesh_copy()

◆ bc_get_property()

float bc_get_property ( Bone * bone,
const std::string & key,
float def )
extern

Read a custom bone property and convert to float Return def if the property does not exist.

Definition at line 685 of file collada_utils.cpp.

References bc_get_IDProperty(), IDP_Bool, IDP_BOOLEAN, IDP_DOUBLE, IDP_Double, IDP_FLOAT, IDP_Float, IDP_INT, IDP_Int, and result.

Referenced by bc_create_restpose_mat(), and bc_get_property_vector().

◆ bc_get_property_matrix()

bool bc_get_property_matrix ( Bone * bone,
const std::string & key,
float mat[4][4] )
extern

Read a custom bone property and convert to matrix Return true if conversion was successful

Return false if:

  • the property does not exist
  • is not an array of size 16

Definition at line 710 of file collada_utils.cpp.

References bc_get_IDProperty(), i, IDP_ARRAY, and IDP_Array.

◆ bc_get_property_vector()

void bc_get_property_vector ( Bone * bone,
const std::string & key,
float val[3],
const float def[3] )
extern

Get a vector that is stored in 3 custom properties (used in Blender <= 2.78).

Definition at line 725 of file collada_utils.cpp.

References bc_get_property().

Referenced by bc_create_restpose_mat().

◆ bc_get_reflective()

COLLADASW::ColorOrTexture bc_get_reflective ( Material * ma)

Definition at line 1220 of file collada_utils.cpp.

References bc_get_cot().

◆ bc_get_reflectivity()

double bc_get_reflectivity ( Material * ma)

◆ bc_get_shininess()

double bc_get_shininess ( Material * ma)

◆ bc_get_specular()

COLLADASW::ColorOrTexture bc_get_specular ( Material * ma)

Definition at line 1214 of file collada_utils.cpp.

References bc_get_cot().

◆ bc_getSceneActions()

std::vector< bAction * > bc_getSceneActions ( const bContext * C,
Object * ob,
bool all_actions )

◆ bc_getSceneCameraAnimData()

AnimData * bc_getSceneCameraAnimData ( Object * ob)
inline

Definition at line 84 of file collada_utils.h.

References Camera::adt, Object::data, OB_CAMERA, and Object::type.

Referenced by bc_has_animations().

◆ bc_getSceneLightAnimData()

AnimData * bc_getSceneLightAnimData ( Object * ob)
inline

Definition at line 73 of file collada_utils.h.

References Light::adt, Object::data, OB_LAMP, and Object::type.

Referenced by bc_has_animations().

◆ bc_getSceneMaterialAnimData()

AnimData * bc_getSceneMaterialAnimData ( Material * ma)
inline

Definition at line 95 of file collada_utils.h.

References Material::adt.

Referenced by bc_has_animations().

◆ bc_getSceneObjectAction()

◆ bc_has_animations() [1/2]

◆ bc_has_animations() [2/2]

bool bc_has_animations ( Scene * sce,
LinkNode * export_set )
extern

Definition at line 873 of file collada_utils.cpp.

References bc_has_animations(), LinkNode::link, and LinkNode::next.

◆ bc_has_object_type()

bool bc_has_object_type ( LinkNode * export_set,
short obtype )
extern

◆ bc_in_range()

bool bc_in_range ( float a,
float b,
float range )
inline

Definition at line 237 of file collada_utils.h.

References b, and fabsf.

◆ bc_is_animated()

bool bc_is_animated ( BCMatrixSampleMap & values)
extern

◆ bc_is_leaf_bone()

bool bc_is_leaf_bone ( Bone * bone)
extern

A bone is a leaf when it has no children or all children are not connected.

Definition at line 474 of file collada_utils.cpp.

References BONE_CONNECTED, Bone::childbase, and LISTBASE_FOREACH.

◆ bc_is_root_bone()

bool bc_is_root_bone ( Bone * aBone,
bool deform_bones_only )
extern

Check if a bone is the top most exportable bone in the bone hierarchy. When deform_bones_only == false, then only bones with NO parent can be root bones. Otherwise the top most deform bones in the hierarchy are root bones.

Definition at line 351 of file collada_utils.cpp.

References BONE_NO_DEFORM, Bone::flag, and Bone::parent.

◆ bc_match_scale() [1/2]

void bc_match_scale ( Object * ob,
UnitConverter & bc_unit,
bool scale_to_scene )
extern

Calculate a re-scale factor such that the imported scene's scale is preserved. I.e. 1 meter in the import will also be 1 meter in the current scene.

Definition at line 394 of file collada_utils.cpp.

References BKE_object_apply_mat4(), UnitConverter::get_rotation(), UnitConverter::get_scale(), mul_m4_m4m4(), and Object::runtime.

Referenced by bc_match_scale(), and DocumentImporter::finish().

◆ bc_match_scale() [2/2]

void bc_match_scale ( std::vector< Object * > * objects_done,
UnitConverter & bc_unit,
bool scale_to_scene )
extern

Definition at line 405 of file collada_utils.cpp.

References bc_match_scale().

◆ bc_replace_string()

std::string bc_replace_string ( std::string data,
const std::string & pattern,
const std::string & replacement )
extern

Definition at line 382 of file collada_utils.cpp.

References data, and pos.

Referenced by bc_url_encode().

◆ bc_rotate_from_reference_quat()

void bc_rotate_from_reference_quat ( float quat_to[4],
float quat_from[4],
float mat_to[4][4] )
extern

Create rotation_quaternion from a delta rotation and a reference quat

Input: mat_from: The rotation matrix before rotation mat_to : The rotation matrix after rotation qref : the quat corresponding to mat_from

Output: rot : the calculated result (quaternion).

Definition at line 435 of file collada_utils.cpp.

References invert_m4_m4(), mat4_to_quat(), mul_m4_m4m4(), mul_qt_qtqt(), and quat_to_mat4().

◆ bc_sanitize_v3() [1/2]

void bc_sanitize_v3 ( double v[3],
int precision )

Definition at line 1003 of file collada_utils.cpp.

References double_round(), i, and v.

◆ bc_sanitize_v3() [2/2]

void bc_sanitize_v3 ( float v[3],
int precision )

Definition at line 994 of file collada_utils.cpp.

References double_round(), i, and v.

Referenced by TransformWriter::add_node_transform_ob().

◆ bc_set_IDProperty()

void bc_set_IDProperty ( EditBone * ebone,
const char * key,
float value )
extern

◆ bc_set_IDPropertyMatrix()

void bc_set_IDPropertyMatrix ( EditBone * ebone,
const char * key,
float mat[4][4] )
extern

Stores a 4*4 matrix as a custom bone property array of size 16.

Definition at line 647 of file collada_utils.cpp.

References blender::bke::idprop::create(), blender::bke::idprop::create_group(), data, IDP_AddToGroup(), and EditBone::prop.

◆ bc_set_layer() [1/2]

int bc_set_layer ( int bitfield,
int layer )
extern

Definition at line 494 of file collada_utils.cpp.

References bc_set_layer().

Referenced by bc_set_layer().

◆ bc_set_layer() [2/2]

int bc_set_layer ( int bitfield,
int layer,
bool enable )
extern

Definition at line 499 of file collada_utils.cpp.

◆ bc_set_parent()

◆ bc_startswith()

bool bc_startswith ( std::string const & value,
std::string const & starting )
inline

◆ bc_string_after()

std::string bc_string_after ( const std::string & s,
const std::string & probe )
inline

◆ bc_string_before()

std::string bc_string_before ( const std::string & s,
const std::string & probe )
inline

Definition at line 159 of file collada_utils.h.

References i.

Referenced by BCAnimationCurve::get_channel_posebone(), and BCSample::get_value().

◆ bc_test_parent_loop()

int bc_test_parent_loop ( Object * par,
Object * ob )
extern

Definition at line 85 of file collada_utils.cpp.

References bc_test_parent_loop(), and Object::parent.

Referenced by bc_test_parent_loop().

◆ bc_triangulate_mesh()

◆ bc_update_scene()

void bc_update_scene ( BlenderContext & blender_context,
float ctime )
extern

◆ bc_url_encode()

std::string bc_url_encode ( const std::string & data)
extern

Definition at line 374 of file collada_utils.cpp.

References bc_replace_string(), and data.

Referenced by DocumentImporter::import().

◆ bc_validateConstraints()

Variable Documentation

◆ LIMITTED_PRECISION

int LIMITTED_PRECISION = 6
constexpr

Definition at line 46 of file collada_utils.h.

Referenced by TransformWriter::add_node_transform_ob().