PeriDyno 1.0.0
Loading...
Searching...
No Matches
initializeParticleSystem.cpp
Go to the documentation of this file.
2
3#include "SquareEmitter.h"
4
5#include "ParticleFluid.h"
6
7#include "NodeFactory.h"
8
11
12#include "Module/CalculateNorm.h"
13#include "ColorMapping.h"
14
15namespace dyno
16{
17 std::atomic<ParticleSystemInitializer*> ParticleSystemInitializer::gInstance;
19
21 {
22 ParticleSystemInitializer* ins = gInstance.load(std::memory_order_acquire);
23 if (!ins) {
24 std::lock_guard<std::mutex> tLock(gMutex);
25 ins = gInstance.load(std::memory_order_relaxed);
26 if (!ins) {
27 ins = new ParticleSystemInitializer();
28 ins->setName("Particle System");
29 ins->setVersion("1.0");
30 ins->setDescription("A particle system library");
31
32 gInstance.store(ins, std::memory_order_release);
33 }
34 }
35
36 return ins;
37 }
38
40 : PluginEntry()
41 {
42 }
43
44 void ParticleSystemInitializer::initializeActions()
45 {
46 NodeFactory* factory = NodeFactory::instance();
47
48 auto page = factory->addPage(
49 "Particle System",
50 "ToolBarIco/ParticleSystem/ParticleSystem.png");
51
52 auto group = page->addGroup("Particle System");
53
54 group->addAction(
55 "Square Emitter",
56 "ToolBarIco/ParticleSystem/ParticleEmitterSquare.png",
57 [=]()->std::shared_ptr<Node> {
58 auto emitter = std::make_shared<SquareEmitter>();
59
60 auto wireRender = std::make_shared<GLWireframeVisualModule>();
61 wireRender->setColor(Color(0, 1, 0));
62 emitter->stateOutline()->connect(wireRender->inEdgeSet());
63 emitter->graphicsPipeline()->pushModule(wireRender);
64 return emitter;;
65 });
66
67 group->addAction(
68 "Particle Fluid",
69 "ToolBarIco/ParticleSystem/ParticleFluid.png",
70 [=]()->std::shared_ptr<Node> {
71 auto fluid = std::make_shared<ParticleFluid>();
72
73 auto calculateNorm = std::make_shared<CalculateNorm>();
74 fluid->stateVelocity()->connect(calculateNorm->inVec());
75 fluid->graphicsPipeline()->pushModule(calculateNorm);
76
77 auto colorMapper = std::make_shared<ColorMapping>();
78 colorMapper->varMax()->setValue(5.0f);
79 calculateNorm->outNorm()->connect(colorMapper->inScalar());
80 fluid->graphicsPipeline()->pushModule(colorMapper);
81
82 auto pointRender = std::make_shared<GLPointVisualModule>();
83 pointRender->varColorMode()->setCurrentKey(GLPointVisualModule::PER_VERTEX_SHADER);
84 fluid->statePointSet()->connect(pointRender->inPointSet());
85 colorMapper->outColor()->connect(pointRender->inColor());
86
87 fluid->graphicsPipeline()->pushModule(pointRender);
88
89 return fluid;
90 });
91 }
92}
93
95{
98
99 return nullptr;
100}
101
103{
106
107 return nullptr;
108}
static std::atomic< ParticleSystemInitializer * > gInstance
dyno::PluginEntry * initStaticPlugin()
PERIDYNO_API dyno::PluginEntry * initDynoPlugin()
RenderRef initialize(QWindow *window, bool defaultRender)
Definition QtImGui.cpp:157
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Definition PluginEntry.h:14