Skip to content

Commit f3099a7

Browse files
committed
scene3d widget (early commit after a while)
1 parent 6dc9fa8 commit f3099a7

13 files changed

+982
-2
lines changed

Diff for: CMakeLists.txt

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ find_package(Qt5Core REQUIRED)
1212
find_package(Qt5Gui REQUIRED)
1313
find_package(Qt5Widgets REQUIRED)
1414
find_package(Qt5PrintSupport REQUIRED)
15+
find_package(Qt53DCore REQUIRED)
16+
find_package(Qt53DRender REQUIRED)
17+
find_package(Qt53DInput REQUIRED)
18+
find_package(Qt53DExtras REQUIRED)
1519

1620
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/modules/")
1721
find_package(VREP REQUIRED)
@@ -55,6 +59,7 @@ set(SOURCES
5559
widgets/Plot.cpp
5660
widgets/Progressbar.cpp
5761
widgets/Radiobutton.cpp
62+
widgets/Scene3D.cpp
5863
widgets/Slider.cpp
5964
widgets/Spinbox.cpp
6065
widgets/Table.cpp
@@ -72,4 +77,4 @@ if(ENABLE_SIGNAL_SPY)
7277
set(SOURCES ${SOURCES} signal_spy.cpp)
7378
endif()
7479
add_library(v_repExtCustomUI SHARED ${SOURCES} ${CMAKE_BINARY_DIR}/generated/stubs.cpp ${VREP_EXPORTED_SOURCES})
75-
target_link_libraries(v_repExtCustomUI ${Boost_LIBRARIES} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::PrintSupport ${VREP_LIBRARIES})
80+
target_link_libraries(v_repExtCustomUI ${Boost_LIBRARIES} Qt5::Core Qt5::Gui Qt5::Widgets Qt5::PrintSupport Qt5::3DCore Qt5::3DRender Qt5::3DInput Qt5::3DExtras ${VREP_LIBRARIES})

Diff for: UIFunctions.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,14 @@ void UIFunctions::connectSignals()
158158
connect(this, &UIFunctions::setText, uiproxy, &UIProxy::onSetText, Qt::BlockingQueuedConnection);
159159
connect(this, &UIFunctions::setUrl, uiproxy, &UIProxy::onSetUrl, Qt::BlockingQueuedConnection);
160160
connect(uiproxy, &UIProxy::keyPressed, this, &UIFunctions::onKeyPress);
161+
connect(this, &UIFunctions::addScene3DNode, uiproxy, &UIProxy::onAddScene3DNode, Qt::BlockingQueuedConnection);
162+
connect(this, &UIFunctions::removeScene3DNode, uiproxy, &UIProxy::onRemoveScene3DNode, Qt::BlockingQueuedConnection);
163+
connect(this, &UIFunctions::setScene3DNodeEnabled, uiproxy, &UIProxy::onSetScene3DNodeEnabled, Qt::BlockingQueuedConnection);
164+
connect(this, &UIFunctions::setScene3DIntParam, uiproxy, &UIProxy::onSetScene3DIntParam, Qt::BlockingQueuedConnection);
165+
connect(this, &UIFunctions::setScene3DFloatParam, uiproxy, &UIProxy::onSetScene3DFloatParam, Qt::BlockingQueuedConnection);
166+
connect(this, &UIFunctions::setScene3DStringParam, uiproxy, &UIProxy::onSetScene3DStringParam, Qt::BlockingQueuedConnection);
167+
connect(this, &UIFunctions::setScene3DVector3Param, uiproxy, &UIProxy::onSetScene3DVector3Param, Qt::BlockingQueuedConnection);
168+
connect(this, &UIFunctions::setScene3DVector4Param, uiproxy, &UIProxy::onSetScene3DVector4Param, Qt::BlockingQueuedConnection);
161169
}
162170

163171
/**

Diff for: UIFunctions.h

+8
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,14 @@ private slots:
134134
void removeConnection(Dataflow *dataflow, int srcId, int srcOutlet, int dstId, int dstInlet);
135135
void setText(TextBrowser *textbrowser, std::string text, bool suppressSignals);
136136
void setUrl(TextBrowser *textbrowser, std::string url);
137+
void addScene3DNode(Scene3D *scene3d, int id, int parentId, int type);
138+
void removeScene3DNode(Scene3D *scene3d, int id);
139+
void setScene3DNodeEnabled(Scene3D *scene3d, int id, bool enabled);
140+
void setScene3DIntParam(Scene3D *scene3d, int id, std::string param, int value);
141+
void setScene3DFloatParam(Scene3D *scene3d, int id, std::string param, float value);
142+
void setScene3DStringParam(Scene3D *scene3d, int id, std::string param, std::string value);
143+
void setScene3DVector3Param(Scene3D *scene3d, int id, std::string param, float x, float y, float z);
144+
void setScene3DVector4Param(Scene3D *scene3d, int id, std::string param, float x, float y, float z, float w);
137145
};
138146

139147
#endif // UIFUNCTIONS_H_INCLUDED

Diff for: UIProxy.cpp

+50
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,16 @@ void UIProxy::onAnchorClicked(const QUrl &link)
558558
DBG << "[leave]" << std::endl;
559559
}
560560

561+
void UIProxy::onViewCenterChanged(const QVector3D &viewCenter)
562+
{
563+
std::cout << "View center changed: " << viewCenter.x() << ", " << viewCenter.y() << ", " << viewCenter.z() << std::endl;
564+
}
565+
566+
void UIProxy::onPositionChanged(const QVector3D &position)
567+
{
568+
std::cout << "Position changed: " << position.x() << ", " << position.y() << ", " << position.z() << std::endl;
569+
}
570+
561571
// The following slots are wrappers for functions called from SIM thread
562572
// which should instead execute in the UI thread.
563573

@@ -1139,3 +1149,43 @@ void UIProxy::onSetUrl(TextBrowser *textbrowser, std::string url)
11391149
textbrowser->setUrl(url);
11401150
}
11411151

1152+
void UIProxy::onAddScene3DNode(Scene3D *scene3d, int id, int parentId, int type)
1153+
{
1154+
scene3d->addNode(id, parentId, type);
1155+
}
1156+
1157+
void UIProxy::onRemoveScene3DNode(Scene3D *scene3d, int id)
1158+
{
1159+
scene3d->removeNode(id);
1160+
}
1161+
1162+
void UIProxy::onSetScene3DNodeEnabled(Scene3D *scene3d, int id, bool enabled)
1163+
{
1164+
scene3d->enableNode(id, enabled);
1165+
}
1166+
1167+
void UIProxy::onSetScene3DIntParam(Scene3D *scene3d, int id, std::string param, int value)
1168+
{
1169+
scene3d->setIntParameter(id, param, value);
1170+
}
1171+
1172+
void UIProxy::onSetScene3DFloatParam(Scene3D *scene3d, int id, std::string param, float value)
1173+
{
1174+
scene3d->setFloatParameter(id, param, value);
1175+
}
1176+
1177+
void UIProxy::onSetScene3DStringParam(Scene3D *scene3d, int id, std::string param, std::string value)
1178+
{
1179+
scene3d->setStringParameter(id, param, value);
1180+
}
1181+
1182+
void UIProxy::onSetScene3DVector3Param(Scene3D *scene3d, int id, std::string param, float x, float y, float z)
1183+
{
1184+
scene3d->setVector3Parameter(id, param, x, y, z);
1185+
}
1186+
1187+
void UIProxy::onSetScene3DVector4Param(Scene3D *scene3d, int id, std::string param, float x, float y, float z, float w)
1188+
{
1189+
scene3d->setVector4Parameter(id, param, x, y, z, w);
1190+
}
1191+

Diff for: UIProxy.h

+10
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public slots:
5656
void onConnectionRemoved(QDataflowModelConnection *conn);
5757
void onTextChanged();
5858
void onAnchorClicked(const QUrl &link);
59+
void onViewCenterChanged(const QVector3D &viewCenter);
60+
void onPositionChanged(const QVector3D &position);
5961
// ---
6062
void onSetStyleSheet(Widget *widget, std::string styleSheet);
6163
void onSetButtonText(Button *button, std::string text);
@@ -135,6 +137,14 @@ public slots:
135137
void onRemoveConnection(Dataflow *dataflow, int srcId, int srcOutlet, int dstId, int dstInlet);
136138
void onSetText(TextBrowser *textbrowser, std::string text, bool suppressSignals);
137139
void onSetUrl(TextBrowser *textbrowser, std::string url);
140+
void onAddScene3DNode(Scene3D *scene3d, int id, int parentId, int type);
141+
void onRemoveScene3DNode(Scene3D *scene3d, int id);
142+
void onSetScene3DNodeEnabled(Scene3D *scene3d, int id, bool enabled);
143+
void onSetScene3DIntParam(Scene3D *scene3d, int id, std::string param, int value);
144+
void onSetScene3DFloatParam(Scene3D *scene3d, int id, std::string param, float value);
145+
void onSetScene3DStringParam(Scene3D *scene3d, int id, std::string param, std::string value);
146+
void onSetScene3DVector3Param(Scene3D *scene3d, int id, std::string param, float x, float y, float z);
147+
void onSetScene3DVector4Param(Scene3D *scene3d, int id, std::string param, float x, float y, float z, float w);
138148

139149
signals:
140150
void buttonClick(Widget *widget);

Diff for: callbacks.xml

+223
Original file line numberDiff line numberDiff line change
@@ -2488,6 +2488,229 @@
24882488
<return>
24892489
</return>
24902490
</command>
2491+
<enum name="scene3d_node_type" item-prefix="scene3d_node_type_" base="44100">
2492+
<item name="entity" />
2493+
<item name="transform" />
2494+
<item name="camera" />
2495+
<item name="first_person_camera_controller" />
2496+
<item name="point_light" />
2497+
<item name="mesh_cuboid" />
2498+
<item name="phong_material" />
2499+
</enum>
2500+
<command name="addScene3DNode">
2501+
<description>Add a node in a scene3d widget.</description>
2502+
<categories>
2503+
<category name="scene3d" />
2504+
<category name="widgets" indirect="true" />
2505+
</categories>
2506+
<params>
2507+
<param name="handle" type="int">
2508+
<description>ui handle</description>
2509+
</param>
2510+
<param name="id" type="int">
2511+
<description>widget id</description>
2512+
</param>
2513+
<param name="nodeId" type="int">
2514+
<description>node id</description>
2515+
</param>
2516+
<param name="parentNodeId" type="int">
2517+
<description>parent node id</description>
2518+
</param>
2519+
<param name="type" type="int">
2520+
<description>type of the node. see <enum-ref name="scene3d_node_type" /></description>
2521+
</param>
2522+
</params>
2523+
<return>
2524+
</return>
2525+
</command>
2526+
<command name="removeScene3DNode">
2527+
<description>Remove a node in a scene3d widget.</description>
2528+
<categories>
2529+
<category name="scene3d" />
2530+
<category name="widgets" indirect="true" />
2531+
</categories>
2532+
<params>
2533+
<param name="handle" type="int">
2534+
<description>ui handle</description>
2535+
</param>
2536+
<param name="id" type="int">
2537+
<description>widget id</description>
2538+
</param>
2539+
<param name="nodeId" type="int">
2540+
<description>node id</description>
2541+
</param>
2542+
</params>
2543+
<return>
2544+
</return>
2545+
</command>
2546+
<command name="setScene3DNodeEnabled">
2547+
<description>Enable or disable a node in a scene3d widget.</description>
2548+
<categories>
2549+
<category name="scene3d" />
2550+
<category name="widgets" indirect="true" />
2551+
</categories>
2552+
<params>
2553+
<param name="handle" type="int">
2554+
<description>ui handle</description>
2555+
</param>
2556+
<param name="id" type="int">
2557+
<description>widget id</description>
2558+
</param>
2559+
<param name="nodeId" type="int">
2560+
<description>node id</description>
2561+
</param>
2562+
<param name="enabled" type="bool">
2563+
<description>enabled flag</description>
2564+
</param>
2565+
</params>
2566+
<return>
2567+
</return>
2568+
</command>
2569+
<command name="setScene3DNodeIntParam">
2570+
<description>Set node int parameter in a scene3d widget.</description>
2571+
<categories>
2572+
<category name="scene3d" />
2573+
<category name="widgets" indirect="true" />
2574+
</categories>
2575+
<params>
2576+
<param name="handle" type="int">
2577+
<description>ui handle</description>
2578+
</param>
2579+
<param name="id" type="int">
2580+
<description>widget id</description>
2581+
</param>
2582+
<param name="nodeId" type="int">
2583+
<description>node id</description>
2584+
</param>
2585+
<param name="paramName" type="string">
2586+
<description>name of parameter</description>
2587+
</param>
2588+
<param name="value" type="int">
2589+
<description>value of parameter</description>
2590+
</param>
2591+
</params>
2592+
<return>
2593+
</return>
2594+
</command>
2595+
<command name="setScene3DNodeFloatParam">
2596+
<description>Set node float parameter in a scene3d widget.</description>
2597+
<categories>
2598+
<category name="scene3d" />
2599+
<category name="widgets" indirect="true" />
2600+
</categories>
2601+
<params>
2602+
<param name="handle" type="int">
2603+
<description>ui handle</description>
2604+
</param>
2605+
<param name="id" type="int">
2606+
<description>widget id</description>
2607+
</param>
2608+
<param name="nodeId" type="int">
2609+
<description>node id</description>
2610+
</param>
2611+
<param name="paramName" type="string">
2612+
<description>name of parameter</description>
2613+
</param>
2614+
<param name="value" type="float">
2615+
<description>value of parameter</description>
2616+
</param>
2617+
</params>
2618+
<return>
2619+
</return>
2620+
</command>
2621+
<command name="setScene3DNodeStringParam">
2622+
<description>Set node string parameter in a scene3d widget.</description>
2623+
<categories>
2624+
<category name="scene3d" />
2625+
<category name="widgets" indirect="true" />
2626+
</categories>
2627+
<params>
2628+
<param name="handle" type="int">
2629+
<description>ui handle</description>
2630+
</param>
2631+
<param name="id" type="int">
2632+
<description>widget id</description>
2633+
</param>
2634+
<param name="nodeId" type="int">
2635+
<description>node id</description>
2636+
</param>
2637+
<param name="paramName" type="string">
2638+
<description>name of parameter</description>
2639+
</param>
2640+
<param name="value" type="string">
2641+
<description>value of parameter</description>
2642+
</param>
2643+
</params>
2644+
<return>
2645+
</return>
2646+
</command>
2647+
<command name="setScene3DNodeVector3Param">
2648+
<description>Set node vector3 parameter in a scene3d widget.</description>
2649+
<categories>
2650+
<category name="scene3d" />
2651+
<category name="widgets" indirect="true" />
2652+
</categories>
2653+
<params>
2654+
<param name="handle" type="int">
2655+
<description>ui handle</description>
2656+
</param>
2657+
<param name="id" type="int">
2658+
<description>widget id</description>
2659+
</param>
2660+
<param name="nodeId" type="int">
2661+
<description>node id</description>
2662+
</param>
2663+
<param name="paramName" type="string">
2664+
<description>name of parameter</description>
2665+
</param>
2666+
<param name="x" type="float">
2667+
<description>value of first component</description>
2668+
</param>
2669+
<param name="y" type="float">
2670+
<description>value of second component</description>
2671+
</param>
2672+
<param name="z" type="float">
2673+
<description>value of third component</description>
2674+
</param>
2675+
</params>
2676+
<return>
2677+
</return>
2678+
</command>
2679+
<command name="setScene3DNodeVector4Param">
2680+
<description>Set node vector4 parameter in a scene3d widget.</description>
2681+
<categories>
2682+
<category name="scene3d" />
2683+
<category name="widgets" indirect="true" />
2684+
</categories>
2685+
<params>
2686+
<param name="handle" type="int">
2687+
<description>ui handle</description>
2688+
</param>
2689+
<param name="id" type="int">
2690+
<description>widget id</description>
2691+
</param>
2692+
<param name="nodeId" type="int">
2693+
<description>node id</description>
2694+
</param>
2695+
<param name="paramName" type="string">
2696+
<description>name of parameter</description>
2697+
</param>
2698+
<param name="x" type="float">
2699+
<description>value of first component</description>
2700+
</param>
2701+
<param name="y" type="float">
2702+
<description>value of second component</description>
2703+
</param>
2704+
<param name="z" type="float">
2705+
<description>value of third component</description>
2706+
</param>
2707+
<param name="w" type="float">
2708+
<description>value of fourth component</description>
2709+
</param>
2710+
</params>
2711+
<return>
2712+
</return>
2713+
</command>
24912714
<script-function name="onclickCallback">
24922715
<description>Callback for button click event.</description>
24932716
<params>

Diff for: tests/test-scene3d.ttt

241 KB
Binary file not shown.

0 commit comments

Comments
 (0)