void Exporter::CalcBoundingBox(INode *node, Box3& box, int all) { if (nullptr == node) return; Matrix3 tm = node->GetObjTMAfterWSM(0); if (node->IsBoneShowing()) { box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, nullptr); } else { if (Object *o = node->GetObjectRef()) { if (o->SuperClassID() == GEOMOBJECT_CLASS_ID) { if (o->ClassID() == BONE_OBJ_CLASSID || o->ClassID() == Class_ID(BONE_CLASS_ID, 0) || o->ClassID() == Class_ID(0x00009125, 0) /* Biped Twist Helpers */ ) { box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, nullptr); } else { Box3 local; #if VERSION_3DSMAX < (15000<<16) // Version 15 (2013) o->GetLocalBoundBox(0, node, mI->GetActiveViewport(), local); #else o->GetLocalBoundBox(0, node, &mI->GetActiveViewExp(), local); #endif box.IncludePoints(&local.Min(), 1, nullptr); box.IncludePoints(&local.Max(), 1, nullptr); } } else if (mExportCameras && o->SuperClassID() == CAMERA_CLASS_ID) { box.IncludePoints(const_cast<Point3*>(&tm.GetTrans()), 1, nullptr); } } } if (all < 0) return; all = (all>0 ? all : -1); for (int i = 0; i < node->NumberOfChildren(); i++) { CalcBoundingBox(node->GetChildNode(i), box, all); } }
void CalcAxisAlignedBox(Mesh& mesh, Box3& box, Matrix3 *tm) { int nv = mesh.getNumVerts(); box.IncludePoints(mesh.getVertPtr(0), nv, tm); }
void CalcAxisAlignedBox(Mesh& mesh, Box3& box) { int nv = mesh.getNumVerts(); box.IncludePoints(mesh.getVertPtr(0), nv, nullptr); }