Do not emit empty Curves primitive.

This commit is contained in:
Syoyo Fujita 2016-11-25 01:22:02 +09:00
parent bb3884e04e
commit 036166d121

View File

@ -835,59 +835,62 @@ static void VisitObjectAndExtractNode(Node *node_out, std::stringstream &ss,
Alembic::AbcGeom::ICurvesSchema::Sample psample; Alembic::AbcGeom::ICurvesSchema::Sample psample;
Alembic::AbcGeom::ICurvesSchema &ps = curve.getSchema(); Alembic::AbcGeom::ICurvesSchema &ps = curve.getSchema();
std::cout << " # of samples = " << ps.getNumSamples() << std::endl; std::cout << "Curve: # of samples = " << ps.getNumSamples() << std::endl;
if (ps.getNumSamples() > 0) { if (ps.getNumSamples() > 0) {
Curves *curves = new Curves();
ps.get(psample, samplesel); ps.get(psample, samplesel);
const size_t num_curves = psample.getNumCurves(); const size_t num_curves = psample.getNumCurves();
std::cout << " # of curves = " << num_curves << std::endl; std::cout << " # of curves = " << num_curves << std::endl;
Alembic::Abc::P3fArraySamplePtr P = psample.getPositions(); if (num_curves > 0) {
Alembic::Abc::FloatArraySamplePtr knots = psample.getKnots(); Curves *curves = new Curves();
Alembic::Abc::UcharArraySamplePtr orders = psample.getOrders();
Alembic::Abc::Int32ArraySamplePtr num_vertices = Alembic::Abc::P3fArraySamplePtr P = psample.getPositions();
psample.getCurvesNumVertices(); Alembic::Abc::FloatArraySamplePtr knots = psample.getKnots();
Alembic::Abc::UcharArraySamplePtr orders = psample.getOrders();
if (knots) std::cout << " # of knots= " << knots->size() << std::endl; Alembic::Abc::Int32ArraySamplePtr num_vertices =
if (orders) psample.getCurvesNumVertices();
std::cout << " # of orders= " << orders->size() << std::endl;
std::cout << " # of nvs= " << num_vertices->size() << std::endl;
curves->points.resize(3 * P->size()); if (knots) std::cout << " # of knots= " << knots->size() << std::endl;
memcpy(curves->points.data(), P->get(), sizeof(float) * 3 * P->size()); if (orders)
std::cout << " # of orders= " << orders->size() << std::endl;
std::cout << " # of nvs= " << num_vertices->size() << std::endl;
curves->points.resize(3 * P->size());
memcpy(curves->points.data(), P->get(), sizeof(float) * 3 * P->size());
#if 0 #if 0
for (size_t k = 0; k < P->size(); k++) { for (size_t k = 0; k < P->size(); k++) {
std::cout << "P[" << k << "] " << (*P)[k].x << ", " << (*P)[k].y << ", " << (*P)[k].z << std::endl; std::cout << "P[" << k << "] " << (*P)[k].x << ", " << (*P)[k].y << ", " << (*P)[k].z << std::endl;
} }
if (knots) { if (knots) {
for (size_t k = 0; k < knots->size(); k++) { for (size_t k = 0; k < knots->size(); k++) {
std::cout << "knots[" << k << "] " << (*knots)[k] << std::endl; std::cout << "knots[" << k << "] " << (*knots)[k] << std::endl;
} }
} }
if (orders) { if (orders) {
for (size_t k = 0; k < orders->size(); k++) { for (size_t k = 0; k < orders->size(); k++) {
std::cout << "orders[" << k << "] " << (*orders)[k] << std::endl; std::cout << "orders[" << k << "] " << (*orders)[k] << std::endl;
} }
} }
for (size_t k = 0; k < num_vertices->size(); k++) { for (size_t k = 0; k < num_vertices->size(); k++) {
std::cout << "nv[" << k << "] " << (*num_vertices)[k] << std::endl; std::cout << "nv[" << k << "] " << (*num_vertices)[k] << std::endl;
} }
#endif #endif
if (num_vertices) { if (num_vertices) {
curves->nverts.resize(num_vertices->size()); curves->nverts.resize(num_vertices->size());
memcpy(curves->nverts.data(), num_vertices->get(), memcpy(curves->nverts.data(), num_vertices->get(),
sizeof(int) * num_vertices->size()); sizeof(int) * num_vertices->size());
} }
node = curves; node = curves;
}
} else { } else {
std::cout << "Warning: # of samples = 0" << std::endl; std::cout << "Warning: # of samples = 0" << std::endl;
@ -991,11 +994,11 @@ static bool ConvertSceneToGLTF(picojson::object *out, const Scene &scene) {
picojson::object nodes; picojson::object nodes;
picojson::array node_names; picojson::array node_names;
{ {
//picojson::object node; // picojson::object node;
ConvertNodeToGLTF(&nodes, scene, scene.root_node); ConvertNodeToGLTF(&nodes, scene, scene.root_node);
//nodes[scene.root_node->name] = picojson::value(node); // nodes[scene.root_node->name] = picojson::value(node);
node_names.push_back(picojson::value(scene.root_node->name)); node_names.push_back(picojson::value(scene.root_node->name));
} }
(*out)["nodes"] = picojson::value(nodes); (*out)["nodes"] = picojson::value(nodes);