[Bf-blender-cvs] [8f57999] alembic_basic_io: Fix a couple of issues with NURBS.
Kévin Dietrich
noreply at git.blender.org
Wed May 25 14:00:33 CEST 2016
Commit: 8f579999ed0654099b71ee445b3d160aa6873ab7
Author: Kévin Dietrich
Date: Wed May 25 14:00:02 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB8f579999ed0654099b71ee445b3d160aa6873ab7
Fix a couple of issues with NURBS.
NURBS are still not read (and/or written) properly though.
===================================================================
M source/blender/alembic/intern/abc_nurbs.cc
===================================================================
diff --git a/source/blender/alembic/intern/abc_nurbs.cc b/source/blender/alembic/intern/abc_nurbs.cc
index 4f10ca7..1fb110d 100644
--- a/source/blender/alembic/intern/abc_nurbs.cc
+++ b/source/blender/alembic/intern/abc_nurbs.cc
@@ -241,7 +241,7 @@ void AbcNurbsReader::readObjectData(Main *bmain, Scene *scene, float time)
std::vector< std::pair<INuPatchSchema, IObject> >::iterator it;
for (it = m_schemas.begin(); it != m_schemas.end(); ++it) {
- Nurb *nu = (Nurb*)MEM_callocN(sizeof(Nurb), "abc_getnurb");
+ Nurb *nu = (Nurb *)MEM_callocN(sizeof(Nurb), "abc_getnurb");
nu->flag = CU_SMOOTH;
nu->type = CU_NURBS;
nu->resolu = 4;
@@ -268,25 +268,27 @@ void AbcNurbsReader::readObjectData(Main *bmain, Scene *scene, float time)
nu->pntsv = num_V;
nu->bezt = NULL;
- nu->bp = (BPoint*)MEM_callocN(numPt * sizeof(BPoint), "abc_setsplinetype");
- nu->knotsu = (float*)MEM_callocN(numKnotsU * sizeof(float), "abc_setsplineknotsu");
- nu->knotsv = (float*)MEM_callocN(numKnotsV * sizeof(float), "abc_setsplineknotsv");
+ nu->bp = (BPoint *)MEM_callocN(numPt * sizeof(BPoint), "abc_setsplinetype");
+ nu->knotsu = (float *)MEM_callocN(numKnotsU * sizeof(float), "abc_setsplineknotsu");
+ nu->knotsv = (float *)MEM_callocN(numKnotsV * sizeof(float), "abc_setsplineknotsv");
nu->bp->radius = 1.0f;
for (int i = 0; i < numPt; ++i) {
Imath::V3f pos_in = (*positions)[i];
- float posw_in = 1.0;
+ float posw_in = 1.0f;
if (positionsW && i < positionsW->size()) {
posw_in = (*positionsW)[i];
}
- /* TODO */
- /* swap from Y-Up to Z-Up */
nu->bp[i].vec[0] = pos_in[0];
- nu->bp[i].vec[1] = -pos_in[2];
- nu->bp[i].vec[2] = pos_in[1];
+ nu->bp[i].vec[1] = pos_in[1];
+ nu->bp[i].vec[2] = pos_in[2];
nu->bp[i].vec[3] = posw_in;
+
+ if (m_settings->do_convert_mat) {
+ mul_m4_v3(m_settings->conversion_mat, nu->bp[i].vec);
+ }
}
for (size_t i = 0; i < numKnotsU; i++) {
@@ -333,7 +335,16 @@ void AbcNurbsReader::getNurbsPatches(const IObject &obj)
return;
}
- for (int i = 0;i < obj.getNumChildren(); ++i) {
+ const int num_children = obj.getNumChildren();
+
+ if (num_children == 0) {
+ INuPatch abc_nurb(obj, kWrapExisting);
+ INuPatchSchema schem = abc_nurb.getSchema();
+ m_schemas.push_back(std::pair<INuPatchSchema, IObject>(schem, obj));
+ return;
+ }
+
+ for (int i = 0; i < num_children; ++i) {
bool ok = true;
IObject child(obj, obj.getChildHeader(i).getName());
More information about the Bf-blender-cvs
mailing list