Esempio n. 1
0
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);
}
Esempio n. 2
0
	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++;
		}
	}