Skip to content

Commit 448e628

Browse files
committed
Add experimental SceneRecorder module
This module observes all MRML node changes in the scene and records them into a list. The module could be enhanced with the ability to replay these events.
1 parent fc679d6 commit 448e628

File tree

7 files changed

+582
-0
lines changed

7 files changed

+582
-0
lines changed

CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ add_subdirectory(DocumentationTools)
3131
add_subdirectory(StyleTester)
3232
add_subdirectory(CombineModels)
3333
add_subdirectory(SliceOmaticImporter)
34+
add_subdirectory(SceneRecorder)
3435

3536
#-----------------------------------------------------------------------------
3637
include(${Slicer_EXTENSION_GENERATE_CONFIG})

SceneRecorder/CMakeLists.txt

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#-----------------------------------------------------------------------------
2+
set(MODULE_NAME SceneRecorder)
3+
4+
#-----------------------------------------------------------------------------
5+
set(MODULE_PYTHON_SCRIPTS
6+
${MODULE_NAME}.py
7+
)
8+
9+
set(MODULE_PYTHON_RESOURCES
10+
Resources/Icons/${MODULE_NAME}.png
11+
Resources/UI/${MODULE_NAME}.ui
12+
)
13+
14+
#-----------------------------------------------------------------------------
15+
slicerMacroBuildScriptedModule(
16+
NAME ${MODULE_NAME}
17+
SCRIPTS ${MODULE_PYTHON_SCRIPTS}
18+
RESOURCES ${MODULE_PYTHON_RESOURCES}
19+
WITH_GENERIC_TESTS
20+
)
21+
22+
#-----------------------------------------------------------------------------
23+
if(BUILD_TESTING)
24+
25+
# Register the unittest subclass in the main script as a ctest.
26+
# Note that the test will also be available at runtime.
27+
slicer_add_python_unittest(SCRIPT ${MODULE_NAME}.py)
28+
29+
# Additional build-time testing
30+
add_subdirectory(Testing)
31+
endif()
20.5 KB
Loading
+170
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<ui version="4.0">
3+
<class>SceneRecorder</class>
4+
<widget class="qMRMLWidget" name="SceneRecorder">
5+
<property name="geometry">
6+
<rect>
7+
<x>0</x>
8+
<y>0</y>
9+
<width>279</width>
10+
<height>484</height>
11+
</rect>
12+
</property>
13+
<layout class="QVBoxLayout" name="verticalLayout">
14+
<property name="spacing">
15+
<number>4</number>
16+
</property>
17+
<property name="leftMargin">
18+
<number>4</number>
19+
</property>
20+
<property name="topMargin">
21+
<number>4</number>
22+
</property>
23+
<property name="rightMargin">
24+
<number>4</number>
25+
</property>
26+
<property name="bottomMargin">
27+
<number>4</number>
28+
</property>
29+
<item>
30+
<widget class="ctkCollapsibleButton" name="inputsCollapsibleButton">
31+
<property name="text">
32+
<string>Control</string>
33+
</property>
34+
<layout class="QFormLayout" name="formLayout_2">
35+
<item row="0" column="0" colspan="2">
36+
<widget class="QPushButton" name="startStopPushButton">
37+
<property name="text">
38+
<string>Record</string>
39+
</property>
40+
<property name="checkable">
41+
<bool>true</bool>
42+
</property>
43+
</widget>
44+
</item>
45+
<item row="1" column="0" colspan="2">
46+
<widget class="QPushButton" name="clearPushButton">
47+
<property name="text">
48+
<string>Clear</string>
49+
</property>
50+
</widget>
51+
</item>
52+
</layout>
53+
</widget>
54+
</item>
55+
<item>
56+
<widget class="ctkCollapsibleButton" name="outputsCollapsibleButton">
57+
<property name="text">
58+
<string>View</string>
59+
</property>
60+
<layout class="QVBoxLayout" name="verticalLayout_2">
61+
<property name="spacing">
62+
<number>4</number>
63+
</property>
64+
<property name="leftMargin">
65+
<number>4</number>
66+
</property>
67+
<property name="topMargin">
68+
<number>4</number>
69+
</property>
70+
<property name="rightMargin">
71+
<number>4</number>
72+
</property>
73+
<property name="bottomMargin">
74+
<number>4</number>
75+
</property>
76+
<item>
77+
<widget class="ctkExpandableWidget" name="ResizableFrame">
78+
<property name="orientations">
79+
<set>Qt::Vertical</set>
80+
</property>
81+
<property name="sizeGripInside">
82+
<bool>false</bool>
83+
</property>
84+
<layout class="QVBoxLayout" name="verticalLayout_3">
85+
<property name="leftMargin">
86+
<number>0</number>
87+
</property>
88+
<property name="topMargin">
89+
<number>0</number>
90+
</property>
91+
<property name="rightMargin">
92+
<number>0</number>
93+
</property>
94+
<property name="bottomMargin">
95+
<number>0</number>
96+
</property>
97+
<item>
98+
<widget class="QTableWidget" name="recordingTableWidget"/>
99+
</item>
100+
</layout>
101+
</widget>
102+
</item>
103+
<item>
104+
<widget class="ctkExpandableWidget" name="ResizableFrame_2">
105+
<property name="orientations">
106+
<set>Qt::Vertical</set>
107+
</property>
108+
<property name="sizeGripInside">
109+
<bool>false</bool>
110+
</property>
111+
<layout class="QVBoxLayout" name="verticalLayout_4">
112+
<property name="leftMargin">
113+
<number>0</number>
114+
</property>
115+
<property name="topMargin">
116+
<number>0</number>
117+
</property>
118+
<property name="rightMargin">
119+
<number>0</number>
120+
</property>
121+
<property name="bottomMargin">
122+
<number>0</number>
123+
</property>
124+
<item>
125+
<widget class="QTextEdit" name="eventDetailsTextEdit"/>
126+
</item>
127+
</layout>
128+
</widget>
129+
</item>
130+
</layout>
131+
</widget>
132+
</item>
133+
<item>
134+
<spacer name="verticalSpacer">
135+
<property name="orientation">
136+
<enum>Qt::Vertical</enum>
137+
</property>
138+
<property name="sizeHint" stdset="0">
139+
<size>
140+
<width>20</width>
141+
<height>40</height>
142+
</size>
143+
</property>
144+
</spacer>
145+
</item>
146+
</layout>
147+
</widget>
148+
<customwidgets>
149+
<customwidget>
150+
<class>ctkCollapsibleButton</class>
151+
<extends>QWidget</extends>
152+
<header>ctkCollapsibleButton.h</header>
153+
<container>1</container>
154+
</customwidget>
155+
<customwidget>
156+
<class>ctkExpandableWidget</class>
157+
<extends>QFrame</extends>
158+
<header>ctkExpandableWidget.h</header>
159+
<container>1</container>
160+
</customwidget>
161+
<customwidget>
162+
<class>qMRMLWidget</class>
163+
<extends>QWidget</extends>
164+
<header>qMRMLWidget.h</header>
165+
<container>1</container>
166+
</customwidget>
167+
</customwidgets>
168+
<resources/>
169+
<connections/>
170+
</ui>

0 commit comments

Comments
 (0)