7 #include "imstkCamera.h" 8 #include "imstkCollisionDetectionAlgorithm.h" 9 #include "imstkDirectionalLight.h" 10 #include "imstkKeyboardDeviceClient.h" 11 #include "imstkKeyboardSceneControl.h" 12 #include "imstkMouseDeviceClient.h" 13 #include "imstkMouseSceneControl.h" 15 #include "imstkSceneManager.h" 16 #include "imstkSimulationManager.h" 17 #include "imstkSimulationUtils.h" 18 #include "imstkSphObject.h" 19 #include "imstkSphObjectCollision.h" 20 #include "imstkTextVisualModel.h" 21 #include "imstkVTKViewer.h" 26 using namespace imstk;
33 main(
int argc,
char* argv[])
38 double particleRadius = 0.1;
41 for (
int i = 1; i < argc; ++i)
43 auto param = std::string(argv[i]);
44 if (param.find(
"radius") == 0
45 && param.find_first_of(
"=") != std::string::npos)
47 particleRadius = std::stod(param.substr(param.find_first_of(
"=") + 1));
48 LOG(INFO) <<
"Particle radius: " << particleRadius;
52 LOG(FATAL) <<
"Invalid argument";
59 particleRadius = 0.08;
65 std::shared_ptr<SphObject> fluidObj = generateFluid(particleRadius);
66 std::vector<std::shared_ptr<CollidingObject>> solids = generateSolids(scene);
68 scene->addSceneObject(fluidObj);
69 for (
size_t i = 0; i < solids.size(); i++)
71 scene->addSceneObject(solids[i]);
75 for (
auto& solid : solids)
77 scene->addInteraction(
78 std::make_shared<SphObjectCollision>(fluidObj, solid));
82 scene->getActiveCamera()->setPosition(-0.475, 8.116, -6.728);
88 scene->addLight(
"whitelight", whiteLight);
101 sceneManager->pause();
109 std::shared_ptr<Entity> mouseAndKeyControls =
110 SimulationUtils::createDefaultSceneControl(driver);
111 auto txtStatus = std::make_shared<TextVisualModel>(
"StatusText");
112 txtStatus->setPosition(TextVisualModel::DisplayPosition::UpperLeft);
113 txtStatus->setFontSize(30);
114 txtStatus->setTextColor(Color::Red);
115 connect<Event>(viewer, &VTKViewer::preUpdate,
118 txtStatus->setText(
"Number of particles: " +
119 std::to_string(fluidObj->getSphModel()->getCurrentState()->getNumParticles()) +
120 "\nNumber of solids: " + std::to_string(solids.size()));
122 mouseAndKeyControls->addComponent(txtStatus);
123 scene->addSceneObject(mouseAndKeyControls);
128 MeshIO::write(std::dynamic_pointer_cast<PointSet>(fluidObj->getPhysicsGeometry()),
"fluid.vtk");
void setDesiredDt(const double dt)
Sets the target fixed timestep (may violate), seconds This ultimately effects the number of iteration...
void setActiveScene(std::shared_ptr< Scene > scene) override
Set scene to be rendered.
Base class for events which contain a type, priority, and data priority defaults to 0 and uses a grea...
void addModule(std::shared_ptr< Module > module) override
Add a module to run.
void setIntensity(const double intensity)
Set the light intensity. This value is unbounded.
std::shared_ptr<T> obj = std::make_shared<T>(); equivalent, convenience class for STL shared allocati...
void setFocalPoint(const Vec3d &p)
Get/Set the light focal point.
void setActiveScene(std::string newSceneName)
Sets the currently updating scene.
void setSize(const int width, const int height) override
Set the render window size.
static bool write(const std::shared_ptr< imstk::PointSet > imstkMesh, const std::string &filePath)
Write external file.
static LoggerG3 & startLogger()
Starts logger with default sinks, use getInstance to create a logger with no sinks.
void setWindowTitle(const std::string &title) override
Set the render window title.