15using namespace std::chrono_literals;
40 ins =
pInstance.load(std::memory_order_relaxed);
43 pInstance.store(ins, std::memory_order_release);
148 bool has_frame = scn->getFrameNumber() <
mTotalFrame;
151 mCond.wait_for(lock, 500ms);
211 scn->setFrameNumber(0);
239 auto model = node.nodeDataModel();
242 if (widget !=
nullptr)
253 class SyncNodeAct :
public Action
256 void process(
Node* node)
override {
262 scn->traverseForwardWithAutoSync<SyncNodeAct>(node);
294 return scn->getFrameNumber();
@ Info
Information to user.
static void sendMessage(MessageType type, const std::string &text)
Add a new message to log.
void updateGraphicsContext()
static std::atomic< PSimulationThread * > pInstance
void reset(int num)
Reset the simulation.
void startUpdatingGraphicsContext()
std::atomic< bool > mPaused
void simulationFinished()
void oneFrameFinished(int frame)
std::shared_ptr< Node > mActiveNode
std::atomic< bool > mUpdatingGraphicsContext
std::condition_variable_any mCond
static PSimulationThread * instance()
void syncNode(std::shared_ptr< Node > node)
void resetQtNode(Qt::QtNode &node)
std::chrono::milliseconds mTimeOut
std::atomic< bool > mRunning
void proceed(int num)
Continue the simulation from the current frame.
void resetNode(std::shared_ptr< Node > node)
static std::mutex mInstanceMutex
std::atomic< int > mTotalFrame
void stopUpdatingGraphicsContext()
void setTotalFrames(int num)
std::shared_ptr< SceneGraph > createNewScene()
Create a new SceneGraph.
static SceneGraphFactory * instance()
void pushScene(std::shared_ptr< SceneGraph > scn)
std::shared_ptr< SceneGraph > active()
This is an implementation of AdditiveCCD based on peridyno.
QWaitCondition m_wait_condition