Merge -c 26897,26932 from COLLADA branch into trunk.
This commit is contained in:
@@ -173,9 +173,9 @@ const unsigned char translate_map[256] = {
|
||||
static std::string translate_id(const std::string &id)
|
||||
{
|
||||
std::string id_translated = id;
|
||||
for (int i=0; i < id_translated.size(); i++)
|
||||
for (unsigned int i=0; i < id_translated.size(); i++)
|
||||
{
|
||||
id_translated[i] = translate_map[id_translated[i]];
|
||||
id_translated[i] = translate_map[(unsigned int)id_translated[i]];
|
||||
}
|
||||
return id_translated;
|
||||
}
|
||||
@@ -471,7 +471,7 @@ public:
|
||||
int num_layers = CustomData_number_of_layers(&me->fdata, CD_MTFACE);
|
||||
|
||||
for (i = 0; i < num_layers; i++) {
|
||||
char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, i);
|
||||
// char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, i);
|
||||
COLLADASW::Input input3(COLLADASW::TEXCOORD,
|
||||
makeUrl(makeTexcoordSourceId(geom_id, i)),
|
||||
2, // offset always 2, this is only until we have optimized UV sets
|
||||
@@ -582,7 +582,7 @@ public:
|
||||
// each <source> will get id like meshName + "map-channel-1"
|
||||
for (int a = 0; a < num_layers; a++) {
|
||||
MTFace *tface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, a);
|
||||
char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, a);
|
||||
// char *name = CustomData_get_layer_name(&me->fdata, CD_MTFACE, a);
|
||||
|
||||
COLLADASW::FloatSourceF source(mSW);
|
||||
std::string layer_id = makeTexcoordSourceId(geom_id, a);
|
||||
@@ -751,7 +751,7 @@ protected:
|
||||
float rot[3], loc[3], scale[3];
|
||||
|
||||
if (ob->parent) {
|
||||
float C[4][4], D[4][4], tmat[4][4], imat[4][4], mat[4][4];
|
||||
float C[4][4], tmat[4][4], imat[4][4], mat[4][4];
|
||||
|
||||
// factor out scale from obmat
|
||||
|
||||
@@ -985,8 +985,6 @@ private:
|
||||
|
||||
void add_bone_transform(Object *ob_arm, Bone *bone, COLLADASW::Node& node)
|
||||
{
|
||||
bPose *pose = ob_arm->pose;
|
||||
|
||||
bPoseChannel *pchan = get_pose_channel(ob_arm->pose, bone->name);
|
||||
|
||||
float mat[4][4];
|
||||
@@ -1067,11 +1065,10 @@ private:
|
||||
COLLADASW::JointsElement joints(mSW);
|
||||
COLLADASW::InputList &input = joints.getInputList();
|
||||
|
||||
int offset = 0;
|
||||
input.push_back(COLLADASW::Input(COLLADASW::JOINT, // constant declared in COLLADASWInputList.h
|
||||
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, joints_source_id)));
|
||||
input.push_back(COLLADASW::Input(COLLADASW::BINDMATRIX,
|
||||
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, inv_bind_mat_source_id)));
|
||||
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, joints_source_id)));
|
||||
input.push_back(COLLADASW::Input(COLLADASW::BINDMATRIX,
|
||||
COLLADASW::URI(COLLADABU::Utils::EMPTY_STRING, inv_bind_mat_source_id)));
|
||||
joints.add();
|
||||
}
|
||||
|
||||
@@ -1964,7 +1961,7 @@ protected:
|
||||
// write x, y, z curves separately if it is rotation
|
||||
float *c = (float*)MEM_callocN(sizeof(float) * fra.size(), "temp. anim frames");
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < fra.size(); j++)
|
||||
for (unsigned int j = 0; j < fra.size(); j++)
|
||||
c[j] = v[j * 3 + i];
|
||||
|
||||
dae_bone_animation(fra, c, transform_type, i, id_name(ob_arm), bone->name);
|
||||
@@ -2115,6 +2112,8 @@ protected:
|
||||
return INTANGENT_SOURCE_ID_SUFFIX;
|
||||
case Sampler::OUT_TANGENT:
|
||||
return OUTTANGENT_SOURCE_ID_SUFFIX;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
@@ -2146,6 +2145,8 @@ protected:
|
||||
param.push_back("X");
|
||||
param.push_back("Y");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2170,6 +2171,9 @@ protected:
|
||||
// XXX
|
||||
*length = 2;
|
||||
break;
|
||||
default:
|
||||
*length = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2193,9 +2197,9 @@ protected:
|
||||
|
||||
source.prepareToAppendValues();
|
||||
|
||||
for (int i = 0; i < fcu->totvert; i++) {
|
||||
for (unsigned int i = 0; i < fcu->totvert; i++) {
|
||||
float values[3]; // be careful!
|
||||
int length;
|
||||
int length = 0;
|
||||
|
||||
get_source_values(&fcu->bezt[i], semantic, is_rotation, values, &length);
|
||||
for (int j = 0; j < length; j++)
|
||||
@@ -2353,7 +2357,7 @@ protected:
|
||||
|
||||
char *name = extract_transform_name(fcu->rna_path);
|
||||
if (!strcmp(name, tm_name)) {
|
||||
for (int i = 0; i < fcu->totvert; i++) {
|
||||
for (unsigned int i = 0; i < fcu->totvert; i++) {
|
||||
float f = fcu->bezt[i].vec[1][0];
|
||||
if (std::find(fra.begin(), fra.end(), f) == fra.end())
|
||||
fra.push_back(f);
|
||||
|
||||
@@ -99,11 +99,13 @@ extern "C"
|
||||
#include <float.h>
|
||||
|
||||
// #define COLLADA_DEBUG
|
||||
#define ARMATURE_TEST
|
||||
|
||||
// creates empties for each imported bone on layer 2, for debugging
|
||||
// #define ARMATURE_TEST
|
||||
|
||||
char *CustomData_get_layer_name(const struct CustomData *data, int type, int n);
|
||||
|
||||
const char *primTypeToStr(COLLADAFW::MeshPrimitive::PrimitiveType type)
|
||||
static const char *primTypeToStr(COLLADAFW::MeshPrimitive::PrimitiveType type)
|
||||
{
|
||||
using namespace COLLADAFW;
|
||||
|
||||
@@ -129,7 +131,8 @@ const char *primTypeToStr(COLLADAFW::MeshPrimitive::PrimitiveType type)
|
||||
}
|
||||
return "UNKNOWN";
|
||||
}
|
||||
const char *geomTypeToStr(COLLADAFW::Geometry::GeometryType type)
|
||||
|
||||
static const char *geomTypeToStr(COLLADAFW::Geometry::GeometryType type)
|
||||
{
|
||||
switch (type) {
|
||||
case COLLADAFW::Geometry::GEO_TYPE_MESH:
|
||||
@@ -146,7 +149,7 @@ const char *geomTypeToStr(COLLADAFW::Geometry::GeometryType type)
|
||||
|
||||
// works for COLLADAFW::Node, COLLADAFW::Geometry
|
||||
template<class T>
|
||||
const char *get_dae_name(T *node)
|
||||
static const char *get_dae_name(T *node)
|
||||
{
|
||||
const std::string& name = node->getName();
|
||||
return name.size() ? name.c_str() : node->getOriginalId().c_str();
|
||||
@@ -154,13 +157,13 @@ const char *get_dae_name(T *node)
|
||||
|
||||
// use this for retrieving bone names, since these must be unique
|
||||
template<class T>
|
||||
const char *get_joint_name(T *node)
|
||||
static const char *get_joint_name(T *node)
|
||||
{
|
||||
const std::string& id = node->getOriginalId();
|
||||
return id.size() ? id.c_str() : node->getName().c_str();
|
||||
}
|
||||
|
||||
float get_float_value(const COLLADAFW::FloatOrDoubleArray& array, int index)
|
||||
static float get_float_value(const COLLADAFW::FloatOrDoubleArray& array, unsigned int index)
|
||||
{
|
||||
if (index >= array.getValuesCount())
|
||||
return 0.0f;
|
||||
@@ -197,7 +200,7 @@ public:
|
||||
|
||||
unit_m4(mat);
|
||||
|
||||
for (int i = 0; i < node->getTransformations().getCount(); i++) {
|
||||
for (unsigned int i = 0; i < node->getTransformations().getCount(); i++) {
|
||||
|
||||
COLLADAFW::Transformation *tm = node->getTransformations()[i];
|
||||
COLLADAFW::Transformation::TransformationType type = tm->getTransformationType();
|
||||
@@ -406,7 +409,7 @@ private:
|
||||
|
||||
// cannot transfer data for FloatOrDoubleArray, copy values manually
|
||||
const COLLADAFW::FloatOrDoubleArray& weight = skin->getWeights();
|
||||
for (int i = 0; i < weight.getValuesCount(); i++)
|
||||
for (unsigned int i = 0; i < weight.getValuesCount(); i++)
|
||||
weights.push_back(get_float_value(weight, i));
|
||||
|
||||
unit_converter->dae_matrix_to_mat4(bind_shape_matrix, skin->getBindShapeMatrix());
|
||||
@@ -438,7 +441,7 @@ private:
|
||||
controller_uid = co->getUniqueId();
|
||||
|
||||
const COLLADAFW::UniqueIdArray& joint_uids = co->getJoints();
|
||||
for (int i = 0; i < joint_uids.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < joint_uids.getCount(); i++) {
|
||||
joint_data[i].joint_uid = joint_uids[i];
|
||||
|
||||
// // store armature pointer
|
||||
@@ -489,7 +492,7 @@ private:
|
||||
}
|
||||
|
||||
COLLADAFW::NodePointerArray& children = node->getChildNodes();
|
||||
for (int i = 0; i < children.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < children.getCount(); i++) {
|
||||
if (this->uses_joint(children[i]))
|
||||
return true;
|
||||
}
|
||||
@@ -543,9 +546,9 @@ private:
|
||||
|
||||
// get def group by index with BLI_findlink
|
||||
|
||||
for (int vertex = 0, weight = 0; vertex < joints_per_vertex.getCount(); vertex++) {
|
||||
for (unsigned int vertex = 0, weight = 0; vertex < joints_per_vertex.getCount(); vertex++) {
|
||||
|
||||
int limit = weight + joints_per_vertex[vertex];
|
||||
unsigned int limit = weight + joints_per_vertex[vertex];
|
||||
for ( ; weight < limit; weight++) {
|
||||
int joint = joint_indices[weight], joint_weight = weight_indices[weight];
|
||||
|
||||
@@ -677,7 +680,7 @@ private:
|
||||
}
|
||||
|
||||
COLLADAFW::NodePointerArray& children = node->getChildNodes();
|
||||
for (int i = 0; i < children.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < children.getCount(); i++) {
|
||||
create_bone(skin, children[i], bone, children.getCount(), mat, arm);
|
||||
}
|
||||
|
||||
@@ -953,7 +956,7 @@ public:
|
||||
|
||||
// store join inv bind matrix to use it later in armature construction
|
||||
const COLLADAFW::Matrix4Array& inv_bind_mats = data->getInverseBindMatrices();
|
||||
for (int i = 0; i < data->getJointsCount(); i++) {
|
||||
for (unsigned int i = 0; i < data->getJointsCount(); i++) {
|
||||
skin.add_joint(inv_bind_mats[i]);
|
||||
}
|
||||
|
||||
@@ -1243,11 +1246,10 @@ private:
|
||||
bool is_nice_mesh(COLLADAFW::Mesh *mesh)
|
||||
{
|
||||
COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
|
||||
int i;
|
||||
|
||||
const char *name = get_dae_name(mesh);
|
||||
|
||||
for (i = 0; i < prim_arr.getCount(); i++) {
|
||||
for (unsigned i = 0; i < prim_arr.getCount(); i++) {
|
||||
|
||||
COLLADAFW::MeshPrimitive *mp = prim_arr[i];
|
||||
COLLADAFW::MeshPrimitive::PrimitiveType type = mp->getPrimitiveType();
|
||||
@@ -1260,7 +1262,7 @@ private:
|
||||
COLLADAFW::Polygons *mpvc = (COLLADAFW::Polygons*)mp;
|
||||
COLLADAFW::Polygons::VertexCountArray& vca = mpvc->getGroupedVerticesVertexCountArray();
|
||||
|
||||
for(int j = 0; j < vca.getCount(); j++){
|
||||
for(unsigned int j = 0; j < vca.getCount(); j++){
|
||||
int count = vca[j];
|
||||
if (count < 3) {
|
||||
fprintf(stderr, "Primitive %s in %s has at least one face with vertex count < 3\n",
|
||||
@@ -1351,7 +1353,7 @@ private:
|
||||
int count_new_tris(COLLADAFW::Mesh *mesh, Mesh *me)
|
||||
{
|
||||
COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
|
||||
int i, j;
|
||||
unsigned int i;
|
||||
int tottri = 0;
|
||||
|
||||
for (i = 0; i < prim_arr.getCount(); i++) {
|
||||
@@ -1367,7 +1369,7 @@ private:
|
||||
COLLADAFW::Polygons *mpvc = (COLLADAFW::Polygons*)mp;
|
||||
COLLADAFW::Polygons::VertexCountArray& vcounta = mpvc->getGroupedVerticesVertexCountArray();
|
||||
|
||||
for (j = 0; j < prim_totface; j++) {
|
||||
for (unsigned int j = 0; j < prim_totface; j++) {
|
||||
int vcount = vcounta[j];
|
||||
|
||||
if (vcount > 4) {
|
||||
@@ -1387,14 +1389,14 @@ private:
|
||||
// TODO: import uv set names
|
||||
void read_faces(COLLADAFW::Mesh *mesh, Mesh *me, int new_tris)
|
||||
{
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
// allocate faces
|
||||
me->totface = mesh->getFacesCount() + new_tris;
|
||||
me->mface = (MFace*)CustomData_add_layer(&me->fdata, CD_MFACE, CD_CALLOC, NULL, me->totface);
|
||||
|
||||
// allocate UV layers
|
||||
int totuvset = mesh->getUVCoords().getInputInfosArray().getCount();
|
||||
unsigned int totuvset = mesh->getUVCoords().getInputInfosArray().getCount();
|
||||
|
||||
for (i = 0; i < totuvset; i++) {
|
||||
CustomData_add_layer(&me->fdata, CD_MTFACE, CD_CALLOC, NULL, me->totface);
|
||||
@@ -1429,7 +1431,7 @@ private:
|
||||
size_t prim_totface = mp->getFaceCount();
|
||||
unsigned int *indices = mp->getPositionIndices().getData();
|
||||
unsigned int *nind = mp->getNormalIndices().getData();
|
||||
int j, k;
|
||||
unsigned int j, k;
|
||||
int type = mp->getPrimitiveType();
|
||||
int index = 0;
|
||||
|
||||
@@ -1528,7 +1530,7 @@ private:
|
||||
|
||||
set_face_indices(mface, tri_indices, false);
|
||||
|
||||
for (int l = 0; l < totuvset; l++) {
|
||||
for (unsigned int l = 0; l < totuvset; l++) {
|
||||
// get mtface by face index and uv set index
|
||||
MTFace *mtface = (MTFace*)CustomData_get_layer_n(&me->fdata, CD_MTFACE, l);
|
||||
set_face_uv(&mtface[face_index], uvs, l, *index_list_array[l], uv_indices);
|
||||
@@ -1537,18 +1539,19 @@ private:
|
||||
test_index_face(mface, &me->fdata, face_index, 3);
|
||||
|
||||
if (has_normals) {
|
||||
unsigned int utri[3] = {tri[v], tri[v + 1], tri[v + 2]};
|
||||
unsigned int ntri[3] = {nind[tri[v]], nind[tri[v + 1]], nind[tri[v + 2]]};
|
||||
|
||||
if (!flat_face(utri, nor, 3))
|
||||
if (!flat_face(ntri, nor, 3))
|
||||
mface->flag |= ME_SMOOTH;
|
||||
|
||||
nind += 3;
|
||||
}
|
||||
|
||||
mface++;
|
||||
face_index++;
|
||||
prim.totface++;
|
||||
}
|
||||
|
||||
if (has_normals)
|
||||
nind += vcount;
|
||||
}
|
||||
|
||||
index += vcount;
|
||||
@@ -1596,9 +1599,11 @@ private:
|
||||
{
|
||||
float a[3], b[3];
|
||||
|
||||
get_vector(a, nor, *nind++);
|
||||
get_vector(a, nor, *nind);
|
||||
normalize_v3(a);
|
||||
|
||||
nind++;
|
||||
|
||||
for (int i = 1; i < count; i++, nind++) {
|
||||
get_vector(b, nor, *nind);
|
||||
normalize_v3(b);
|
||||
@@ -1875,7 +1880,7 @@ private:
|
||||
// COLLADAFW::FloatOrDoubleArray& outtan = curve->getOutTangentValues();
|
||||
float fps = (float)FPS;
|
||||
size_t dim = curve->getOutDimension();
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
std::vector<FCurve*>& fcurves = curve_map[curve->getUniqueId()];
|
||||
|
||||
@@ -1924,7 +1929,7 @@ private:
|
||||
//fcu->totvert = curve->getKeyCount();
|
||||
|
||||
// create beztriple for each key
|
||||
for (int j = 0; j < curve->getKeyCount(); j++) {
|
||||
for (unsigned int j = 0; j < curve->getKeyCount(); j++) {
|
||||
BezTriple bez;
|
||||
memset(&bez, 0, sizeof(BezTriple));
|
||||
|
||||
@@ -1958,92 +1963,12 @@ private:
|
||||
|
||||
void fcurve_deg_to_rad(FCurve *cu)
|
||||
{
|
||||
for (int i = 0; i < cu->totvert; i++) {
|
||||
for (unsigned int i = 0; i < cu->totvert; i++) {
|
||||
// TODO convert handles too
|
||||
cu->bezt[i].vec[1][1] *= M_PI / 180.0f;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void make_fcurves_from_animation(COLLADAFW::AnimationCurve *curve,
|
||||
COLLADAFW::FloatOrDoubleArray& input,
|
||||
COLLADAFW::FloatOrDoubleArray& output,
|
||||
COLLADAFW::FloatOrDoubleArray& intan,
|
||||
COLLADAFW::FloatOrDoubleArray& outtan, size_t dim, float fps)
|
||||
{
|
||||
int i;
|
||||
// char *path = "location";
|
||||
std::vector<FCurve*>& fcurves = curve_map[curve->getUniqueId()];
|
||||
|
||||
if (dim == 1) {
|
||||
// create fcurve
|
||||
FCurve *fcu = (FCurve*)MEM_callocN(sizeof(FCurve), "FCurve");
|
||||
|
||||
fcu->flag = (FCURVE_VISIBLE|FCURVE_AUTO_HANDLES|FCURVE_SELECTED);
|
||||
// fcu->rna_path = BLI_strdupn(path, strlen(path));
|
||||
fcu->array_index = 0;
|
||||
//fcu->totvert = curve->getKeyCount();
|
||||
|
||||
// create beztriple for each key
|
||||
for (i = 0; i < curve->getKeyCount(); i++) {
|
||||
BezTriple bez;
|
||||
memset(&bez, 0, sizeof(BezTriple));
|
||||
// intangent
|
||||
bez.vec[0][0] = get_float_value(intan, i + i) * fps;
|
||||
bez.vec[0][1] = get_float_value(intan, i + i + 1);
|
||||
// input, output
|
||||
bez.vec[1][0] = get_float_value(input, i) * fps;
|
||||
bez.vec[1][1] = get_float_value(output, i);
|
||||
// outtangent
|
||||
bez.vec[2][0] = get_float_value(outtan, i + i) * fps;
|
||||
bez.vec[2][1] = get_float_value(outtan, i + i + 1);
|
||||
|
||||
bez.ipo = U.ipo_new; /* use default interpolation mode here... */
|
||||
bez.f1 = bez.f2 = bez.f3 = SELECT;
|
||||
bez.h1 = bez.h2 = HD_AUTO;
|
||||
insert_bezt_fcurve(fcu, &bez, 0);
|
||||
calchandles_fcurve(fcu);
|
||||
}
|
||||
|
||||
fcurves.push_back(fcu);
|
||||
}
|
||||
else if(dim == 3) {
|
||||
for (i = 0; i < dim; i++ ) {
|
||||
// create fcurve
|
||||
FCurve *fcu = (FCurve*)MEM_callocN(sizeof(FCurve), "FCurve");
|
||||
|
||||
fcu->flag = (FCURVE_VISIBLE|FCURVE_AUTO_HANDLES|FCURVE_SELECTED);
|
||||
// fcu->rna_path = BLI_strdupn(path, strlen(path));
|
||||
fcu->array_index = 0;
|
||||
//fcu->totvert = curve->getKeyCount();
|
||||
|
||||
// create beztriple for each key
|
||||
for (int j = 0; j < curve->getKeyCount(); j++) {
|
||||
BezTriple bez;
|
||||
memset(&bez, 0, sizeof(BezTriple));
|
||||
// intangent
|
||||
bez.vec[0][0] = get_float_value(intan, j * 6 + i + i) * fps;
|
||||
bez.vec[0][1] = get_float_value(intan, j * 6 + i + i + 1);
|
||||
// input, output
|
||||
bez.vec[1][0] = get_float_value(input, j) * fps;
|
||||
bez.vec[1][1] = get_float_value(output, j * 3 + i);
|
||||
// outtangent
|
||||
bez.vec[2][0] = get_float_value(outtan, j * 6 + i + i) * fps;
|
||||
bez.vec[2][1] = get_float_value(outtan, j * 6 + i + i + 1);
|
||||
|
||||
bez.ipo = U.ipo_new; /* use default interpolation mode here... */
|
||||
bez.f1 = bez.f2 = bez.f3 = SELECT;
|
||||
bez.h1 = bez.h2 = HD_AUTO;
|
||||
insert_bezt_fcurve(fcu, &bez, 0);
|
||||
calchandles_fcurve(fcu);
|
||||
}
|
||||
|
||||
fcurves.push_back(fcu);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void add_fcurves_to_object(Object *ob, std::vector<FCurve*>& curves, char *rna_path, int array_index, Animation *animated)
|
||||
{
|
||||
bAction *act;
|
||||
@@ -2400,18 +2325,11 @@ public:
|
||||
// prerequisites:
|
||||
// animlist_map - map animlist id -> animlist
|
||||
// curve_map - map anim id -> curve(s)
|
||||
#ifdef ARMATURE_TEST
|
||||
Object *translate_animation(COLLADAFW::Node *node,
|
||||
std::map<COLLADAFW::UniqueId, Object*>& object_map,
|
||||
std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map,
|
||||
COLLADAFW::Transformation::TransformationType tm_type,
|
||||
Object *par_job = NULL)
|
||||
#else
|
||||
void translate_animation(COLLADAFW::Node *node,
|
||||
std::map<COLLADAFW::UniqueId, Object*>& object_map,
|
||||
std::map<COLLADAFW::UniqueId, COLLADAFW::Node*>& root_map,
|
||||
COLLADAFW::Transformation::TransformationType tm_type)
|
||||
#endif
|
||||
{
|
||||
bool is_rotation = tm_type == COLLADAFW::Transformation::ROTATE;
|
||||
bool is_joint = node->getType() == COLLADAFW::Node::JOINT;
|
||||
@@ -2421,11 +2339,7 @@ public:
|
||||
|
||||
if (!ob) {
|
||||
fprintf(stderr, "cannot find Object for Node with id=\"%s\"\n", node->getOriginalId().c_str());
|
||||
#ifdef ARMATURE_TEST
|
||||
return NULL;
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
// frames at which to sample
|
||||
@@ -2434,9 +2348,7 @@ public:
|
||||
// for each <rotate>, <translate>, etc. there is a separate Transformation
|
||||
const COLLADAFW::TransformationPointerArray& tms = node->getTransformations();
|
||||
|
||||
std::vector<FCurve*> old_curves;
|
||||
|
||||
int i;
|
||||
unsigned int i;
|
||||
|
||||
// find frames at which to sample plus convert all keys to radians
|
||||
for (i = 0; i < tms.getCount(); i++) {
|
||||
@@ -2451,7 +2363,7 @@ public:
|
||||
const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
|
||||
|
||||
if (bindings.getCount()) {
|
||||
for (int j = 0; j < bindings.getCount(); j++) {
|
||||
for (unsigned int j = 0; j < bindings.getCount(); j++) {
|
||||
std::vector<FCurve*>& curves = curve_map[bindings[j].animation];
|
||||
bool xyz = ((type == COLLADAFW::Transformation::TRANSLATE || type == COLLADAFW::Transformation::SCALE) && bindings[j].animationClass == COLLADAFW::AnimationList::POSITION_XYZ);
|
||||
|
||||
@@ -2464,7 +2376,7 @@ public:
|
||||
if (is_rotation)
|
||||
fcurve_deg_to_rad(fcu);
|
||||
|
||||
for (int k = 0; k < fcu->totvert; k++) {
|
||||
for (unsigned int k = 0; k < fcu->totvert; k++) {
|
||||
float fra = fcu->bezt[k].vec[1][0];
|
||||
if (std::find(frames.begin(), frames.end(), fra) == frames.end())
|
||||
frames.push_back(fra);
|
||||
@@ -2472,11 +2384,8 @@ public:
|
||||
}
|
||||
}
|
||||
else {
|
||||
fprintf(stderr, "expected 1 or 3 curves, got %u\n", curves.size());
|
||||
fprintf(stderr, "expected %d curves, got %u\n", xyz ? 3 : 1, curves.size());
|
||||
}
|
||||
|
||||
for (std::vector<FCurve*>::iterator it = curves.begin(); it != curves.end(); it++)
|
||||
old_curves.push_back(*it);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2498,11 +2407,7 @@ public:
|
||||
Bone *bone = get_named_bone((bArmature*)ob->data, bone_name);
|
||||
if (!bone) {
|
||||
fprintf(stderr, "cannot find bone \"%s\"\n", bone_name);
|
||||
#ifdef ARMATURE_TEST
|
||||
return NULL;
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
unit_m4(rest);
|
||||
@@ -2512,18 +2417,15 @@ public:
|
||||
|
||||
char rna_path[200];
|
||||
|
||||
Object *job = NULL;
|
||||
|
||||
#ifdef ARMATURE_TEST
|
||||
Object *job = get_joint_object(root, node, par_job);
|
||||
FCurve *job_curves[4];
|
||||
job = get_joint_object(root, node, par_job);
|
||||
#endif
|
||||
|
||||
if (frames.size() == 0) {
|
||||
#ifdef ARMATURE_TEST
|
||||
if (frames.size() == 0)
|
||||
return job;
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
const char *tm_str = NULL;
|
||||
switch (tm_type) {
|
||||
@@ -2537,11 +2439,7 @@ public:
|
||||
tm_str = "location";
|
||||
break;
|
||||
default:
|
||||
#ifdef ARMATURE_TEST
|
||||
return job;
|
||||
#else
|
||||
return;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (is_joint) {
|
||||
@@ -2555,12 +2453,14 @@ public:
|
||||
|
||||
// new curves
|
||||
FCurve *newcu[4];
|
||||
int totcu = is_rotation ? 4 : 3;
|
||||
unsigned int totcu = is_rotation ? 4 : 3;
|
||||
|
||||
for (i = 0; i < totcu; i++) {
|
||||
newcu[i] = create_fcurve(i, rna_path);
|
||||
|
||||
#ifdef ARMATURE_TEST
|
||||
job_curves[i] = create_fcurve(i, tm_str);
|
||||
if (is_joint)
|
||||
job_curves[i] = create_fcurve(i, tm_str);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -2642,19 +2542,6 @@ public:
|
||||
verify_adt_action((ID*)&ob->id, 1);
|
||||
|
||||
ListBase *curves = &ob->adt->action->curves;
|
||||
// no longer needed
|
||||
#if 0
|
||||
// remove old curves
|
||||
for (std::vector<FCurve*>::iterator it = old_curves.begin(); it != old_curves.end(); it++) {
|
||||
if (is_joint)
|
||||
action_groups_remove_channel(ob->adt->action, *it);
|
||||
else
|
||||
BLI_remlink(curves, *it);
|
||||
|
||||
// std::remove(unused_curves.begin(), unused_curves.end(), *it);
|
||||
// free_fcurve(*it);
|
||||
}
|
||||
#endif
|
||||
|
||||
// add curves
|
||||
for (i = 0; i < totcu; i++) {
|
||||
@@ -2679,9 +2566,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef ARMATURE_TEST
|
||||
return job;
|
||||
#endif
|
||||
}
|
||||
|
||||
// internal, better make it private
|
||||
@@ -2693,7 +2578,7 @@ public:
|
||||
|
||||
unit_m4(mat);
|
||||
|
||||
for (int i = 0; i < tms.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < tms.getCount(); i++) {
|
||||
COLLADAFW::Transformation *tm = tms[i];
|
||||
COLLADAFW::Transformation::TransformationType type = tm->getTransformationType();
|
||||
float m[4][4];
|
||||
@@ -2735,7 +2620,7 @@ public:
|
||||
const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
|
||||
|
||||
if (bindings.getCount()) {
|
||||
for (int j = 0; j < bindings.getCount(); j++) {
|
||||
for (unsigned int j = 0; j < bindings.getCount(); j++) {
|
||||
std::vector<FCurve*>& curves = curve_map[bindings[j].animation];
|
||||
COLLADAFW::AnimationList::AnimationClass animclass = bindings[j].animationClass;
|
||||
COLLADAFW::Transformation::TransformationType type = tm->getTransformationType();
|
||||
@@ -2851,7 +2736,7 @@ public:
|
||||
}
|
||||
|
||||
COLLADAFW::NodePointerArray& children = node->getChildNodes();
|
||||
for (int i = 0; i < children.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < children.getCount(); i++) {
|
||||
if (calc_joint_parent_mat_rest(mat, m, children[i], end))
|
||||
return true;
|
||||
}
|
||||
@@ -3065,14 +2950,13 @@ public:
|
||||
for (std::vector<const COLLADAFW::VisualScene*>::iterator it = vscenes.begin(); it != vscenes.end(); it++) {
|
||||
const COLLADAFW::NodePointerArray& roots = (*it)->getRootNodes();
|
||||
|
||||
for (int i = 0; i < roots.getCount(); i++)
|
||||
for (unsigned int i = 0; i < roots.getCount(); i++)
|
||||
translate_anim_recursive(roots[i]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#ifdef ARMATURE_TEST
|
||||
void translate_anim_recursive(COLLADAFW::Node *node, COLLADAFW::Node *par = NULL, Object *parob = NULL)
|
||||
{
|
||||
if (par && par->getType() == COLLADAFW::Node::JOINT) {
|
||||
@@ -3089,20 +2973,17 @@ public:
|
||||
COLLADAFW::Transformation::TRANSLATE
|
||||
};
|
||||
|
||||
int i;
|
||||
unsigned int i;
|
||||
Object *ob;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
ob = anim_importer.translate_animation(node, object_map, root_map, types[i]);
|
||||
|
||||
COLLADAFW::NodePointerArray &children = node->getChildNodes();
|
||||
for (int i = 0; i < children.getCount(); i++) {
|
||||
for (i = 0; i < children.getCount(); i++) {
|
||||
translate_anim_recursive(children[i], node, ob);
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
#endif
|
||||
|
||||
/** When this method is called, the writer must write the global document asset.
|
||||
@return The writer should return true, if writing succeeded, false otherwise.*/
|
||||
@@ -3221,7 +3102,7 @@ public:
|
||||
|
||||
// if node has child nodes write them
|
||||
COLLADAFW::NodePointerArray &child_nodes = node->getChildNodes();
|
||||
for (int i = 0; i < child_nodes.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < child_nodes.getCount(); i++) {
|
||||
write_node(child_nodes[i], node, sce, ob);
|
||||
}
|
||||
}
|
||||
@@ -3247,7 +3128,7 @@ public:
|
||||
Scene *sce = CTX_data_scene(mContext);
|
||||
const COLLADAFW::NodePointerArray& roots = visualScene->getRootNodes();
|
||||
|
||||
for (int i = 0; i < roots.getCount(); i++) {
|
||||
for (unsigned int i = 0; i < roots.getCount(); i++) {
|
||||
write_node(roots[i], NULL, sce, NULL);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user