2#include "Topology/TriangleSet.h"
3#include "Topology/PointSet.h"
4#include "Mapping/PointSetToPointSet.h"
6#include "ParticleSystem/Module/ParticleIntegrator.h"
8#include "Collision/NeighborPointQuery.h"
10#include "Module/LinearElasticitySolver.h"
11#include "Module/ProjectivePeridynamics.h"
12#include "Module/FixedPoints.h"
14#include "SharedFunc.h"
15#include "TriangularSystem.h"
19 IMPLEMENT_TCLASS(Thread, TDataType)
21 template<typename TDataType>
22 Thread<TDataType>::Thread()
23 : ThreadSystem<TDataType>()
25 auto integrator = std::make_shared<ParticleIntegrator<TDataType>>();
26 this->stateTimeStep()->connect(integrator->inTimeStep());
27 this->statePosition()->connect(integrator->inPosition());
28 this->stateVelocity()->connect(integrator->inVelocity());
30 this->animationPipeline()->pushModule(integrator);
32 auto elasticity = std::make_shared<LinearElasticitySolver<TDataType>>();
33 this->varHorizon()->connect(elasticity->inHorizon());
34 this->stateTimeStep()->connect(elasticity->inTimeStep());
35 this->statePosition()->connect(elasticity->inY());
36 this->stateVelocity()->connect(elasticity->inVelocity());
37 this->stateRestShape()->connect(elasticity->inBonds());
38 this->animationPipeline()->pushModule(elasticity);
43 template<typename TDataType>
44 Thread<TDataType>::~Thread()
49 template<typename TDataType>
50 bool Thread<TDataType>::translate(Coord t)
52 this->stateEdgeSet()->getDataPtr()->translate(t);
57 template<typename TDataType>
58 bool Thread<TDataType>::scale(Real s)
60 this->stateEdgeSet()->getDataPtr()->scale(s);
67 template<typename TDataType>
68 void Thread<TDataType>::resetStates()
70 ThreadSystem<TDataType>::resetStates();
72 auto nbrQuery = std::make_shared<NeighborPointQuery<TDataType>>();
73 this->varHorizon()->connect(nbrQuery->inRadius());
74 this->statePosition()->connect(nbrQuery->inPosition());
77 if (!this->statePosition()->isEmpty())
79 this->stateRestShape()->allocate();
80 auto nbrPtr = this->stateRestShape()->getDataPtr();
81 nbrPtr->resize(nbrQuery->outNeighborIds()->getData());
83 constructRestShape(*nbrPtr, nbrQuery->outNeighborIds()->getData(), this->statePosition()->getData());
84 //constructRestShapeForThreads();