/*---------------------------------------------------------------------------*/ unsigned int NifCollisionUtility::getGeometryFromTriStrips(NiTriStripsRef pShape, vector<hkGeometry>& geometryMap, vector<Matrix44>& transformAry) { NiTriStripsDataRef pData(DynamicCast<NiTriStripsData>(pShape->GetData())); if (pData != NULL) { getGeometryFromShapeData(pData->GetVertices(), pData->GetTriangles(), &(*pShape), geometryMap, transformAry); } return geometryMap.size(); }
/*---------------------------------------------------------------------------*/ NiTriShapeRef NifConvertUtility::convertNiTriStrips(NiTriStripsRef pSrcNode, NiTriShapeRef pTmplNode, NiAlphaPropertyRef pTmplAlphaProp) { NiTriShapeRef pDstNode (new NiTriShape()); NiTriShapeDataRef pDstGeo (new NiTriShapeData()); NiTriStripsDataRef pSrcGeo (DynamicCast<NiTriStripsData>(pSrcNode->GetData())); vector<NiPropertyRef> srcPropList(pSrcNode->GetProperties()); // copy NiTriStrips to NiTriShape pDstNode->SetCollisionObject(NULL); // no collision object here pDstNode->SetFlags (14); // ??? pDstNode->SetName (pSrcNode->GetName()); pDstNode->SetLocalTransform (pSrcNode->GetLocalTransform()); pDstNode->SetData (pDstGeo); // move properties for (auto pIter=srcPropList.begin(), pEnd=srcPropList.end(); pIter != pEnd; ++pIter) { if (DynamicCast<NiVertexColorProperty>(*pIter) != NULL) { int iii=0; } pDstNode->AddProperty(*pIter); } pSrcNode->ClearProperties(); // data node if (pSrcGeo != NULL) { pDstGeo->SetVertices (pSrcGeo->GetVertices()); pDstGeo->SetNormals (pSrcGeo->GetNormals()); pDstGeo->SetTriangles (pSrcGeo->GetTriangles()); pDstGeo->SetVertexColors(pSrcGeo->GetColors()); pDstGeo->SetUVSetCount (pSrcGeo->GetUVSetCount()); for (short idx(0), max(pSrcGeo->GetUVSetCount()); idx < max; ++idx) { pDstGeo->SetUVSet(idx, pSrcGeo->GetUVSet(idx)); } } // if (pSrcGeo != NULL) // return converted NiTriShape return convertNiTri(pDstNode, pTmplNode, pTmplAlphaProp); }
bool NifImporter::ImportMesh(NiTriStripsRef triStrips) { bool ok = true; ImpNode *node = i->CreateNode(); if(!node) return false; INode *inode = node->GetINode(); TriObject *triObject = CreateNewTriObject(); node->Reference(triObject); wstring name = wide(triStrips->GetName()); node->SetName(name.c_str()); // Texture Mesh& mesh = triObject->GetMesh(); NiTriStripsDataRef triStripsData = DynamicCast<NiTriStripsData>(triStrips->GetData()); if (triStripsData == NULL) return false; vector<Triangle> tris = triStripsData->GetTriangles(); ok |= ImportMesh(node, triObject, triStrips, triStripsData, tris); return ok; }