double GetTargetVolume(Chiral &chiral, std::vector<sdgDistance> &dists) { vector<double> ideal_dists; ideal_dists.push_back(FindDistance(chiral.GetCenter(), chiral.GetSub(0), dists).GetIdeal() ); ideal_dists.push_back(FindDistance(chiral.GetCenter(), chiral.GetSub(1), dists).GetIdeal() ); ideal_dists.push_back(FindDistance(chiral.GetCenter(), chiral.GetSub(2), dists).GetIdeal() ); ideal_dists.push_back(FindDistance(chiral.GetSub(0), chiral.GetSub(1), dists).GetIdeal() ); ideal_dists.push_back(FindDistance(chiral.GetSub(0), chiral.GetSub(2), dists).GetIdeal() ); ideal_dists.push_back(FindDistance(chiral.GetSub(1), chiral.GetSub(2), dists).GetIdeal() ); return CalcTetraVolume(ideal_dists); }
void VolumesSplitter::LoadDomain(const formatCoreBIN::ioModel& model,const formatMBIN::trimeshmodel& tetramodel) { faces.clear(); vols.clear(); faces.insert(faces.end(),model.faces.size(),facemodel_t()); std::size_t quanttetra=tetramodel.tetrahedres.size(); int lastvolid=-2; vol_t* lastvol=NULL; for(std::vector<formatMBIN::bintetrahedre>::const_iterator ittetra=tetramodel.tetrahedres.begin();ittetra!=tetramodel.tetrahedres.end();ittetra++) { //Mise à jour Lien, face<->volume SET_FACE_STATE((*ittetra).tetrafaces[0]) SET_FACE_STATE((*ittetra).tetrafaces[1]) SET_FACE_STATE((*ittetra).tetrafaces[2]) SET_FACE_STATE((*ittetra).tetrafaces[3]) //Mise à jour du volume if((*ittetra).idVolume!=lastvolid) FindOrCreateVol((*ittetra).idVolume,lastvolid,&lastvol); lastvol->volume+=CalcTetraVolume(GET_SOMMET_COORDS(0), GET_SOMMET_COORDS(1), GET_SOMMET_COORDS(2), GET_SOMMET_COORDS(3)); } int lastvolid_norm=-2; vol_t* lastvol_norm=NULL; int lastvolid_invnorm=-2; vol_t* lastvol_invnorm=NULL; std::size_t idface=0; for(std::vector<facemodel_t>::iterator it=faces.begin();it!=faces.end();it++) { if((*it).volid_norm!=-1) { if((*it).volid_norm!=lastvolid_norm) FindOrCreateVol((*it).volid_norm,lastvolid_norm,&lastvol_norm); lastvol_norm->faceIds.push_back(idface); } if((*it).volid_invnorm!=-1) { if((*it).volid_invnorm!=lastvolid_invnorm) FindOrCreateVol((*it).volid_invnorm,lastvolid_invnorm,&lastvol_invnorm); lastvol_invnorm->faceIds.push_back(idface); } idface++; } }