Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
iMSTK
iMSTK
Commits
57725ee0
Commit
57725ee0
authored
Apr 06, 2021
by
Harald Scheirich
Browse files
Add simple tests for rendering
add test for scalar functions on geometry that is being changed add wip fix
parent
6460ea57
Changes
3
Hide whitespace changes
Inline
Side-by-side
Source/Rendering/CMakeLists.txt
View file @
57725ee0
...
...
@@ -144,6 +144,15 @@ endif()
#-----------------------------------------------------------------------------
# Testing
#-----------------------------------------------------------------------------
#if( ${PROJECT_NAME}_BUILD_TESTING )
# add_subdirectory( Testing )
#endif()
if
(
${
PROJECT_NAME
}
_BUILD_TESTING
)
include
(
imstkAddTest
)
imstk_add_test
(
Rendering
)
target_link_libraries
(
imstk_rendering_test_driver
GTest::gtest
Threads::Threads
Rendering
apiUtilities
)
endif
()
Source/Rendering/Testing/imstkMeshRenderTest.cpp
0 → 100644
View file @
57725ee0
/*=========================================================================
Library: iMSTK
Copyright (c) Kitware, Inc. & Center for Modeling, Simulation,
& Imaging in Medicine, Rensselaer Polytechnic Institute.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0.txt
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
=========================================================================*/
#include
"gtest/gtest.h"
#include
<memory>
#include
"imstkAPIUtilities.h"
#include
"imstkCamera.h"
#include
"imstkKeyboardSceneControl.h"
#include
"imstkMeshIO.h"
#include
"imstkMouseSceneControl.h"
#include
"imstkRenderMaterial.h"
#include
"imstkScene.h"
#include
"imstkSceneManager.h"
#include
"imstkSceneObject.h"
#include
"imstkSimulationManager.h"
#include
"imstkSurfaceMesh.h"
#include
"imstkVTKViewer.h"
#include
"imstkVecDataArray.h"
#include
"imstkVisualModel.h"
#include
"imstkColorFunction.h"
#include
"imstkEventObject.h"
using
namespace
imstk
;
namespace
{
void
run_for
(
SimulationManager
*
driver
,
int
i
)
{
std
::
thread
t
(
&
SimulationManager
::
start
,
driver
);
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
seconds
(
i
));
driver
->
requestStatus
(
ModuleDriverStopped
);
t
.
join
();
}
}
class
RenderTest
:
public
testing
::
Test
{
public:
void
SetUp
()
override
{
scene
=
std
::
make_shared
<
Scene
>
(
"Render Test Scene"
);
viewer
=
std
::
make_shared
<
VTKViewer
>
(
"Viewer"
);
viewer
->
setActiveScene
(
scene
);
// Setup a scene manager to advance the scene in its own thread
sceneManager
=
std
::
make_shared
<
SceneManager
>
(
"Scene Manager"
);
sceneManager
->
setActiveScene
(
scene
);
driver
=
std
::
make_shared
<
SimulationManager
>
();
driver
->
addModule
(
viewer
);
driver
->
addModule
(
sceneManager
);
mouseControl
=
std
::
make_shared
<
MouseSceneControl
>
(
viewer
->
getMouseDevice
());
mouseControl
->
setSceneManager
(
sceneManager
);
viewer
->
addControl
(
mouseControl
);
keyControl
=
std
::
make_shared
<
KeyboardSceneControl
>
(
viewer
->
getKeyboardDevice
());
keyControl
->
setSceneManager
(
sceneManager
);
keyControl
->
setModuleDriver
(
driver
);
viewer
->
addControl
(
keyControl
);
driver
->
requestStatus
(
ModuleDriverRunning
);
}
std
::
shared_ptr
<
Scene
>
scene
;
std
::
shared_ptr
<
VTKViewer
>
viewer
;
std
::
shared_ptr
<
SceneManager
>
sceneManager
;
std
::
shared_ptr
<
SimulationManager
>
driver
;
std
::
shared_ptr
<
MouseSceneControl
>
mouseControl
;
std
::
shared_ptr
<
KeyboardSceneControl
>
keyControl
;
};
TEST_F
(
RenderTest
,
plain_mesh
)
{
auto
sceneObj
=
apiutils
::
createAndAddVisualSceneObject
(
scene
,
iMSTK_DATA_ROOT
"/textured_organs/heart.obj"
,
"Heart"
);
ASSERT_TRUE
(
sceneObj
!=
nullptr
)
<<
"ERROR: Unable to create scene object"
;
run_for
(
driver
.
get
(),
2
);
}
TEST_F
(
RenderTest
,
mesh_material
)
{
auto
sceneObj
=
apiutils
::
createAndAddVisualSceneObject
(
scene
,
iMSTK_DATA_ROOT
"/textured_organs/heart.obj"
,
"Heart"
);
std
::
shared_ptr
<
RenderMaterial
>
material
=
std
::
make_shared
<
RenderMaterial
>
();
material
->
setDisplayMode
(
RenderMaterial
::
DisplayMode
::
Wireframe
);
material
->
setPointSize
(
6.0
);
material
->
setLineWidth
(
4.0
);
sceneObj
->
getVisualModel
(
0
)
->
setRenderMaterial
(
material
);
ASSERT_TRUE
(
sceneObj
!=
nullptr
)
<<
"ERROR: Unable to create scene object"
;
run_for
(
driver
.
get
(),
2
);
}
TEST_F
(
RenderTest
,
material_color_function
)
{
imstk
::
VecDataArray
<
double
,
3
>
points
;
imstk
::
DataArray
<
float
>
scalars
;
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
points
.
push_back
({
0
,
0
,
static_cast
<
double
>
(
i
)});
scalars
.
push_back
(
i
);
points
.
push_back
({
1
,
0
,
static_cast
<
double
>
(
i
)});
scalars
.
push_back
(
i
);
}
imstk
::
SurfaceMesh
mesh
;
imstk
::
VecDataArray
<
int
,
3
>
tris
;
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
int
j
=
i
*
2
;
tris
.
push_back
({
j
+
2
,
j
+
1
,
j
});
tris
.
push_back
({
j
+
3
,
j
+
1
,
j
+
2
});
}
mesh
.
initialize
(
std
::
make_shared
<
VecDataArray
<
double
,
3
>>
(
points
),
std
::
make_shared
<
VecDataArray
<
int
,
3
>>
(
tris
));
mesh
.
setVertexAttribute
(
"scalars"
,
std
::
make_shared
<
DataArray
<
float
>>
(
scalars
));
mesh
.
setVertexScalars
(
"scalars"
);
auto
visualModel
=
std
::
make_shared
<
VisualModel
>
(
std
::
make_shared
<
SurfaceMesh
>
(
mesh
));
std
::
shared_ptr
<
ColorFunction
>
colorFunc
=
std
::
make_shared
<
ColorFunction
>
();
colorFunc
->
setNumberOfColors
(
3
);
colorFunc
->
setColor
(
0
,
imstk
::
Color
::
Green
);
colorFunc
->
setColor
(
1
,
imstk
::
Color
::
Blue
);
colorFunc
->
setColor
(
2
,
imstk
::
Color
::
Red
);
colorFunc
->
setColorSpace
(
imstk
::
ColorFunction
::
ColorSpace
::
RGB
);
colorFunc
->
setRange
(
0
,
6
);
auto
material
=
std
::
make_shared
<
imstk
::
RenderMaterial
>
();
material
->
setScalarVisibility
(
true
);
material
->
setColorLookupTable
(
colorFunc
);
visualModel
->
setRenderMaterial
(
material
);
auto
sceneObj
=
std
::
make_shared
<
SceneObject
>
(
"plains"
);
sceneObj
->
addVisualModel
(
visualModel
);
scene
->
addSceneObject
(
sceneObj
);
scene
->
getActiveCamera
()
->
setPosition
(
Vec3d
(
0
,
12
,
3
));
scene
->
getActiveCamera
()
->
setFocalPoint
(
Vec3d
(
0
,
0
,
3.01
));
run_for
(
driver
.
get
(),
2
);
}
TEST_F
(
RenderTest
,
material_color_function_dynamical
)
{
auto
mesh
=
std
::
make_shared
<
imstk
::
SurfaceMesh
>
();
auto
points
=
std
::
make_shared
<
imstk
::
VecDataArray
<
double
,
3
>>
();
auto
tris
=
std
::
make_shared
<
imstk
::
VecDataArray
<
int
,
3
>>
();
auto
scalars
=
std
::
make_shared
<
imstk
::
DataArray
<
float
>>
();
mesh
->
initialize
(
points
,
tris
);
auto
updateMesh
=
[
mesh
](
Event
*
)
{
// ODD ... updating the values in the original arrays fails somewhere (no surface can be seen)
// , this is unexpected, when the data is in a new array then the update call successfully
// produces a surface
auto
points
=
std
::
make_shared
<
imstk
::
VecDataArray
<
double
,
3
>>
();
auto
tris
=
std
::
make_shared
<
imstk
::
VecDataArray
<
int
,
3
>>
();
auto
scalars
=
std
::
make_shared
<
imstk
::
DataArray
<
float
>>
();
mesh
->
clear
();
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
points
->
push_back
({
0
,
0
,
static_cast
<
double
>
(
i
)
});
scalars
->
push_back
(
i
);
points
->
push_back
({
1
,
0
,
static_cast
<
double
>
(
i
)
});
scalars
->
push_back
(
i
);
}
for
(
int
i
=
0
;
i
<
5
;
++
i
)
{
int
j
=
i
*
2
;
tris
->
push_back
({
j
+
2
,
j
+
1
,
j
});
tris
->
push_back
({
j
+
3
,
j
+
1
,
j
+
2
});
}
mesh
->
initialize
(
points
,
tris
);
mesh
->
setVertexAttribute
(
"scalars"
,
scalars
);
mesh
->
setVertexScalars
(
"scalars"
);
mesh
->
computeVertexNormals
();
mesh
->
modified
();
};
connect
<
Event
>
(
viewer
,
viewer
->
preUpdate
,
updateMesh
);
auto
visualModel
=
std
::
make_shared
<
VisualModel
>
(
mesh
);
imstk
::
Event
e
(
"test"
);
updateMesh
(
&
e
);
std
::
shared_ptr
<
ColorFunction
>
colorFunc
=
std
::
make_shared
<
ColorFunction
>
();
colorFunc
->
setNumberOfColors
(
3
);
colorFunc
->
setColor
(
0
,
imstk
::
Color
::
Green
);
colorFunc
->
setColor
(
1
,
imstk
::
Color
::
Blue
);
colorFunc
->
setColor
(
2
,
imstk
::
Color
::
Red
);
colorFunc
->
setColorSpace
(
imstk
::
ColorFunction
::
ColorSpace
::
RGB
);
colorFunc
->
setRange
(
0
,
6
);
auto
material
=
std
::
make_shared
<
imstk
::
RenderMaterial
>
();
material
->
setScalarVisibility
(
true
);
material
->
setColorLookupTable
(
colorFunc
);
visualModel
->
setRenderMaterial
(
material
);
auto
sceneObj
=
std
::
make_shared
<
SceneObject
>
(
"plains"
);
sceneObj
->
addVisualModel
(
visualModel
);
scene
->
addSceneObject
(
sceneObj
);
scene
->
getActiveCamera
()
->
setPosition
(
Vec3d
(
0
,
12
,
3
));
scene
->
getActiveCamera
()
->
setFocalPoint
(
Vec3d
(
0
,
0
,
3.01
));
run_for
(
driver
.
get
(),
2
);
}
int
imstkMeshRenderTest
(
int
argc
,
char
*
argv
[])
{
// Init Google Test
::
testing
::
InitGoogleTest
(
&
argc
,
argv
);
// Run tests with gtest
return
RUN_ALL_TESTS
();
}
\ No newline at end of file
Source/Rendering/VTKRenderer/RenderDelegate/imstkVTKSurfaceMeshRenderDelegate.cpp
View file @
57725ee0
...
...
@@ -184,7 +184,7 @@ VTKSurfaceMeshRenderDelegate::processEvents()
}
});
// Now do each event in order rec
i
eved
// Now do each event in order rece
i
ved
for
(
std
::
list
<
Command
>::
reverse_iterator
i
=
cmds
.
rbegin
();
i
!=
cmds
.
rend
();
i
++
)
{
i
->
invoke
();
...
...
@@ -249,6 +249,13 @@ VTKSurfaceMeshRenderDelegate::geometryModified(Event* imstkNotUsed(e))
geometry
->
computeVertexNormals
();
setNormalBuffer
(
geometry
->
getVertexNormals
());
}
// Map vertex scalars if it has them
if
(
m_geometry
->
getVertexScalars
()
!=
nullptr
)
{
m_mappedVertexScalarArray
=
GeometryUtils
::
coupleVtkDataArray
(
m_geometry
->
getVertexScalars
());
m_polydata
->
GetPointData
()
->
SetScalars
(
m_mappedVertexScalarArray
);
}
}
void
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment