PeriDyno 1.0.0
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
initializePeridynamics.cpp
Go to the documentation of this file.
2
3#include "Cloth.h"
4#include "ElasticBody.h"
5
9
10#include "NodeFactory.h"
11
12namespace dyno
13{
14 std::atomic<PeridynamicsInitializer*> PeridynamicsInitializer::gInstance;
16
18 {
19 PeridynamicsInitializer* ins = gInstance.load(std::memory_order_acquire);
20 if (!ins) {
21 std::lock_guard<std::mutex> tLock(gMutex);
22 ins = gInstance.load(std::memory_order_relaxed);
23 if (!ins) {
24 ins = new PeridynamicsInitializer();
25 ins->setName("Peridynamics");
26 ins->setVersion("1.0");
27 ins->setDescription("A peridynamics library");
28
29 gInstance.store(ins, std::memory_order_release);
30 }
31 }
32
33 return ins;
34 }
35
40
42 {
44
45 auto page = factory->addPage(
46 "Soft Body",
47 "ToolBarIco/SoftBody/SoftBody.png");
48
49 auto group = page->addGroup("Soft Body");
50
51 group->addAction(
52 "Cloth",
53 "ToolBarIco/SoftBody/SoftBody2.png",
54 [=]()->std::shared_ptr<Node> {
55
56 auto cloth = std::make_shared<Cloth<DataType3f>>();
57 cloth->setDt(0.001f);
58
59 auto pointRenderer = std::make_shared<GLPointVisualModule>();
60 pointRenderer->setColor(Color(1, 0.2, 1));
61 pointRenderer->setColorMapMode(GLPointVisualModule::PER_OBJECT_SHADER);
62 pointRenderer->varPointSize()->setValue(0.002f);
63 cloth->stateTriangleSet()->connect(pointRenderer->inPointSet());
64 cloth->stateVelocity()->connect(pointRenderer->inColor());
65
66 cloth->graphicsPipeline()->pushModule(pointRenderer);
67 cloth->setVisible(true);
68
69 auto wireRenderer = std::make_shared<GLWireframeVisualModule>();
70 wireRenderer->varBaseColor()->setValue(Color(1.0, 0.8, 0.8));
71 wireRenderer->varRadius()->setValue(0.001f);
72 wireRenderer->varRenderMode()->setCurrentKey(GLWireframeVisualModule::CYLINDER);
73 cloth->stateTriangleSet()->connect(wireRenderer->inEdgeSet());
74 cloth->graphicsPipeline()->pushModule(wireRenderer);
75
76 auto surfaceRenderer = std::make_shared<GLSurfaceVisualModule>();
77 cloth->stateTriangleSet()->connect(surfaceRenderer->inTriangleSet());
78 cloth->graphicsPipeline()->pushModule(surfaceRenderer);
79
80 return cloth;
81 });
82
83 group->addAction(
84 "Soft Body",
85 "ToolBarIco/SoftBody/SoftBody5.png",
86 [=]()->std::shared_ptr<Node> {
87 auto elasticBody = std::make_shared<ElasticBody<DataType3f>>();
88 return elasticBody;
89 });
90 }
91}
92
94{
97
98 return nullptr;
99}
100
static NodeFactory * instance()
std::shared_ptr< NodePage > addPage(std::string name, std::string icon)
static std::atomic< PeridynamicsInitializer * > gInstance
dyno::PluginEntry * initStaticPlugin()
PERIDYNO_API dyno::PluginEntry * initDynoPlugin()
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
Definition PluginEntry.h:14
void setDescription(std::string desc)
PluginEntry()
void setVersion(std::string pluginVersion)
void setName(std::string pluginName)