17 this->setLayoutSizeAware(
true);
18 this->setOverflow(Wt::Overflow::Auto);
19 this->setHeight(Wt::WLength(
"100%"));
22 auto layout = this->setLayout(std::make_unique<Wt::WVBoxLayout>());
23 layout->setContentsMargins(0, 0, 0, 0);
25 mCodeEditor = layout->addWidget(std::make_unique<Wt::WText>(), 1);
33 ref +
".editor = ace.edit(" + ref +
");" +
34 ref +
".editor.setTheme(\"ace/theme/monokai\");" +
35 ref +
".editor.getSession().setMode(\"ace/mode/python\");" +
36 ref +
".editor.setFontSize(14);" +
37 "ace.require(\"ace/ext/language_tools\");" +
38 ref +
".editor.setOptions({enableBasicAutocompletion: true,enableSnippets : true,enableLiveAutocompletion : true});" +
39 ref +
".editor.setOption(\"wrap\",\"free\")";
43 auto jsignal =
new Wt::JSignal<std::string>(
mCodeEditor,
"update");
46 auto str = jsignal->createCall({ ref +
".editor.getValue()" });
47 command =
"function(object, event) {" + str +
";}";
48 auto btn = layout->addWidget(std::make_unique<Wt::WPushButton>(
"Update"), 0);
49 btn->clicked().connect(command);
52 std::string source = R
"====(# dyno sample
53import PyPeridyno as dyno
55scene = dyno.SceneGraph()
57emitter = dyno.SquareEmitter3f()
58emitter.var_location().set_value(dyno.Vector3f([0.5, 0.5, 0.5]))
60fluid = dyno.ParticleFluid3f()
61fluid.load_particles(dyno.Vector3f([0, 0, 0]), dyno.Vector3f([0.2, 0.2, 0.2]), 0.05)
63emitter.connect(fluid.import_particle_emitters())
65calculateNorm = dyno.CalculateNorm3f()
66colorMapper = dyno.ColorMapping3f()
67colorMapper.var_max().set_value(0.5)
69ptRender = dyno.GLPointVisualModule()
70ptRender.set_color(dyno.Color(1, 0, 0))
71ptRender.set_color_map_mode(ptRender.ColorMapMode.PER_VERTEX_SHADER)
73fluid.state_velocity().connect(calculateNorm.in_vec())
74fluid.state_point_set().connect(ptRender.in_point_set())
75calculateNorm.out_norm().connect(colorMapper.in_scalar())
76colorMapper.out_color().connect(ptRender.in_color())
78fluid.graphics_pipeline().push_module(calculateNorm)
79fluid.graphics_pipeline().push_module(colorMapper)
80fluid.graphics_pipeline().push_module(ptRender)
82container = dyno.StaticBoundary3f()
83container.load_cube(dyno.Vector3f([0, 0, 0]), dyno.Vector3f([1.0, 1.0, 1.0]), 0.02, True)
85fluid.connect(container.import_particle_systems())
87scene.add_node(emitter)
89scene.add_node(container)
113 py::scoped_interpreter guard{};
116 auto locals = py::dict();
117 py::exec(src, py::globals(), locals);
119 if (locals.contains(
"scene"))
121 auto scene = locals[
"scene"].cast<std::shared_ptr<dyno::SceneGraph>>();
122 if (scene)
mSignal.emit(scene);
126 Wt::WMessageBox::show(
"Error",
"Please define 'scene = dyno.SceneGraph()'", Wt::StandardButton::Ok);
129 catch (
const std::exception& e) {
130 Wt::WMessageBox::show(
"Error", e.what(), Wt::StandardButton::Ok);