diff --git a/src/fgt/filter_physics/ODEFacade.cpp b/src/fgt/filter_physics/ODEFacade.cpp index e4599598c..366d7a332 100644 --- a/src/fgt/filter_physics/ODEFacade.cpp +++ b/src/fgt/filter_physics/ODEFacade.cpp @@ -32,8 +32,8 @@ void ODEFacade::initialize(){ void ODEFacade::clear(MeshDocument& md){ for(MeshContainer::iterator i = m_registeredMeshes.begin(); i != m_registeredMeshes.end(); i++){ - if(md.meshList.contains(i->first)) - tri::Allocator::DeletePerMeshAttribute(i->first->cm, "physicsID"); + /*if(tri::HasPerMeshAttribute(i->first->cm, "physicsID")) + tri::Allocator::DeletePerMeshAttribute(i->first->cm, "physicsID");*/ dGeomDestroy(i->second->geom); if(i->second->body) @@ -50,7 +50,7 @@ void ODEFacade::setGlobalForce(float force[3]){ void ODEFacade::registerTriMesh(MeshModel& mesh, bool scenery){ if(tri::HasPerMeshAttribute(mesh.cm, "physicsID")) - return; + tri::Allocator::DeletePerMeshAttribute(mesh.cm, "physicsID"); if(mesh.cm.Tr != vcg::Matrix44f::Identity()){ vcg::tri::UpdatePosition::Matrix(mesh.cm, mesh.cm.Tr); diff --git a/src/fgt/filter_physics/RandomFillFilter.cpp b/src/fgt/filter_physics/RandomFillFilter.cpp index 414a88bc2..3c7e47f0c 100644 --- a/src/fgt/filter_physics/RandomFillFilter.cpp +++ b/src/fgt/filter_physics/RandomFillFilter.cpp @@ -46,10 +46,15 @@ bool RandomFillFilter::applyFilter(QAction* filter, MeshDocument &md, RichParame srand((unsigned)time(0)); + vcg::tri::UpdatePosition::Matrix(filler->cm, filler->cm.Tr); + filler->cm.Tr.SetIdentity(); + tri::Inertia inertiaContainer, inertiaFiller; inertiaContainer.Compute(par.getMesh("container")->cm); inertiaFiller.Compute(par.getMesh("filler")->cm); + int objects = abs(inertiaContainer.Mass()/inertiaFiller.Mass())*par.getFloat("factor"); + filler->cm.Tr.SetColumn(3, - inertiaFiller.CenterOfMass()); if(par.getBool("useRandomVertices")){ for(int i = 0; i < objects; i++){ @@ -74,6 +79,7 @@ bool RandomFillFilter::applyFilter(QAction* filter, MeshDocument &md, RichParame } m_engine.updateTransform(); + filler->cm.Tr.SetIdentity(); if(cb != 0) (*cb)(0, "Physics renderization of the scene completed..."); return true; @@ -91,5 +97,5 @@ void RandomFillFilter::addRandomObject(MeshDocument& md, MeshModel* filler, cons MeshModel* meshCopy = md.addNewMesh(meshName.str().c_str()); vcg::tri::Append::Mesh(meshCopy->cm, filler->cm, false, true); meshCopy->cm.Tr = filler->cm.Tr; - meshCopy->cm.Tr.SetColumn(3, origin); + meshCopy->cm.Tr.SetColumn(3, meshCopy->cm.Tr.GetColumn3(3) + origin); }