From 09a6f3400e4e474afa1db34534e3e75b083499c1 Mon Sep 17 00:00:00 2001 From: David Rose Date: Thu, 28 Jun 2001 19:51:58 +0000 Subject: [PATCH] don't create empty trims --- pandatool/src/maya/mayaFile.cxx | 81 +++++++++++++++++---------------- 1 file changed, 42 insertions(+), 39 deletions(-) diff --git a/pandatool/src/maya/mayaFile.cxx b/pandatool/src/maya/mayaFile.cxx index 0a60c3b28d..6022037ed5 100644 --- a/pandatool/src/maya/mayaFile.cxx +++ b/pandatool/src/maya/mayaFile.cxx @@ -422,50 +422,53 @@ make_nurbs_surface(const MDagPath &dag_path, MFnNurbsSurface surface, unsigned num_trims = surface.numRegions(); int trim_curve_index = 0; for (unsigned ti = 0; ti < num_trims; ti++) { - egg_nurbs->_trims.push_back(EggNurbsSurface::Trim()); - EggNurbsSurface::Trim &egg_trim = egg_nurbs->_trims.back(); - unsigned num_loops = surface.numBoundaries(ti); - for (unsigned li = 0; li < num_loops; li++) { - egg_trim.push_back(EggNurbsSurface::Loop()); - EggNurbsSurface::Loop &egg_loop = egg_trim.back(); - MFnNurbsSurface::BoundaryType type = - surface.boundaryType(ti, li, &status); - bool keep_loop = false; + if (num_loops > 0) { + egg_nurbs->_trims.push_back(EggNurbsSurface::Trim()); + EggNurbsSurface::Trim &egg_trim = egg_nurbs->_trims.back(); - if (!status) { - status.perror("MFnNurbsSurface::BoundaryType"); - } else { - keep_loop = (type == MFnNurbsSurface::kInner || - type == MFnNurbsSurface::kOuter); - } - - if (keep_loop) { - unsigned num_edges = surface.numEdges(ti, li); - for (unsigned ei = 0; ei < num_edges; ei++) { - MObjectArray edge = surface.edge(ti, li, ei, true, &status); - if (!status) { - status.perror("MFnNurbsSurface::edge"); - } else { - unsigned num_segs = edge.length(); - for (unsigned si = 0; si < num_segs; si++) { - MObject segment = edge[si]; - if (segment.hasFn(MFn::kNurbsCurve)) { - MFnNurbsCurve curve(segment, &status); - if (!status) { - nout << "Trim curve appears to be a nurbs curve, but isn't.\n"; - } else { - // Finally, we have a valid curve! - EggNurbsCurve *egg_curve = - make_trim_curve(curve, name, egg_group, trim_curve_index); - trim_curve_index++; - if (egg_curve != (EggNurbsCurve *)NULL) { - egg_loop.push_back(egg_curve); + for (unsigned li = 0; li < num_loops; li++) { + egg_trim.push_back(EggNurbsSurface::Loop()); + EggNurbsSurface::Loop &egg_loop = egg_trim.back(); + + MFnNurbsSurface::BoundaryType type = + surface.boundaryType(ti, li, &status); + bool keep_loop = false; + + if (!status) { + status.perror("MFnNurbsSurface::BoundaryType"); + } else { + keep_loop = (type == MFnNurbsSurface::kInner || + type == MFnNurbsSurface::kOuter); + } + + if (keep_loop) { + unsigned num_edges = surface.numEdges(ti, li); + for (unsigned ei = 0; ei < num_edges; ei++) { + MObjectArray edge = surface.edge(ti, li, ei, true, &status); + if (!status) { + status.perror("MFnNurbsSurface::edge"); + } else { + unsigned num_segs = edge.length(); + for (unsigned si = 0; si < num_segs; si++) { + MObject segment = edge[si]; + if (segment.hasFn(MFn::kNurbsCurve)) { + MFnNurbsCurve curve(segment, &status); + if (!status) { + nout << "Trim curve appears to be a nurbs curve, but isn't.\n"; + } else { + // Finally, we have a valid curve! + EggNurbsCurve *egg_curve = + make_trim_curve(curve, name, egg_group, trim_curve_index); + trim_curve_index++; + if (egg_curve != (EggNurbsCurve *)NULL) { + egg_loop.push_back(egg_curve); + } } + } else { + nout << "Trim curve segment is not a nurbs curve.\n"; } - } else { - nout << "Trim curve segment is not a nurbs curve.\n"; } } }