Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use std::optional for options #1617

Merged
merged 28 commits into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ project(F3D
DESCRIPTION "F3D - A fast and minimalist 3D viewer"
LANGUAGES C CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
mwestphal marked this conversation as resolved.
Show resolved Hide resolved

set(f3d_cmake_dir "${F3D_SOURCE_DIR}/cmake")
list(INSERT CMAKE_MODULE_PATH 0 "${f3d_cmake_dir}")
include(f3dVersion)
Expand Down
1 change: 0 additions & 1 deletion application/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ endif()

set_target_properties(f3d PROPERTIES
CXX_VISIBILITY_PRESET hidden
CXX_STANDARD 17
)

if (APPLE)
Expand Down
17 changes: 13 additions & 4 deletions application/F3DOptionsTools.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ struct CLIGroup
/**
* Declaration of all F3D CLI options except `--input` using above structs
* Order of groups matters in the context of `--help`
* TODO update help text for optional values
*/
// clang-format off
#if F3D_MODULE_RAYTRACING
Expand Down Expand Up @@ -82,7 +83,7 @@ static inline const std::array<CLIGroup, 8> CLIOptions = {{
{ "up", "", "Up direction", "{-X, +X, -Y, +Y, -Z, +Z}", "" },
{ "axis", "x", "Show axes", "<bool>", "1" }, { "grid", "g", "Show grid", "<bool>", "1" },
{ "grid-absolute", "", "Position grid at the absolute origin instead of below the model", "<bool>", "1" },
{ "grid-unit", "", "Size of grid unit square, set to a non-positive value for automatic computation", "<value>", "" },
{ "grid-unit", "", "Size of grid unit square, automatically computed by default", "<value>", "" },
{ "grid-subdivisions", "", "Number of grid subdivisions", "<value>", "" },
{ "grid-color", "", "Color of main grid lines", "<R,G,B>", "" },
{ "edges", "e", "Show cell edges", "<bool>", "1" },
Expand All @@ -97,8 +98,9 @@ static inline const std::array<CLIGroup, 8> CLIOptions = {{
{"font-file", "", "Path to a FreeType compatible font file", "<file_path>", ""} } },
{ "Material",
{ {"point-sprites", "o", "Show sphere sprites instead of geometry", "<bool>", "1" },
{"point-type", "", "Point sprites type when showing point sprites", "<sphere|gaussian>", ""},
{"point-size", "", "Point size when showing vertices or point sprites", "<size>", ""},
{"point-sprites-type", "", "Point sprites type when showing point sprites", "<sphere|gaussian>", ""},
{"point-sprites-size", "", "Point sprites size", "<size>", ""},
{"point-size", "", "Point size when showing vertices", "<size>", ""},
{"line-width", "", "Line width when showing edges", "<width>", ""},
{"backface-type", "", "Backface type, can be default (usually visible), visible or hidden", "<default|visible|hidden>", ""},
{"color", "", "Solid color", "<R,G,B>", ""},
Expand Down Expand Up @@ -450,7 +452,14 @@ F3DOptionsTools::OptionsDict F3DOptionsTools::ParseCLIOptions(
if (libIter != F3DOptionsTools::LibOptionsNames.end())
{
f3d::options opt;
defaultValue = opt.getAsString(std::string(libIter->second));
try
{
defaultValue = opt.getAsString(std::string(libIter->second));
}
catch (const f3d::options::unset_exception&)
{
// let defaultValue empty for unset options
}
}
}

Expand Down
3 changes: 2 additions & 1 deletion application/F3DOptionsTools.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ static inline const std::map<std::string_view, std::string_view> LibOptionsNames
{ "animation-frame-rate", "scene.animation.frame_rate" },
{ "font-file", "ui.font_file" },
{ "point-sprites", "model.point_sprites.enable" },
{ "point-type", "model.point_sprites.type" },
{ "point-sprites-type", "model.point_sprites.type" },
mwestphal marked this conversation as resolved.
Show resolved Hide resolved
{ "point-sprites-size", "model.point_sprites.size" },
{ "point-size", "render.point_size" },
{ "line-width", "render.line_width" },
{ "backface-type", "render.backface_type" },
Expand Down
14 changes: 7 additions & 7 deletions application/testing/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ f3d_test(NAME TestVTS DATA bluntfin.vts)
f3d_test(NAME TestVTM DATA mb.vtm)
f3d_test(NAME TestVTK DATA cow.vtk)
f3d_test(NAME TestNRRD DATA beach.nrrd ARGS -s)
f3d_test(NAME TestSPLAT DATA small.splat ARGS -osy --up=-Y --point-size=1)
f3d_test(NAME TestSPLAT DATA small.splat ARGS -osy --up=-Y --point-sprites-size=1)
f3d_test(NAME TestGridX DATA suzanne.ply ARGS -g --up=+X)
f3d_test(NAME TestGridY DATA suzanne.ply ARGS -g --up=+Y)
f3d_test(NAME TestGridZ DATA suzanne.ply ARGS -g --up=+Z)
Expand All @@ -137,9 +137,9 @@ f3d_test(NAME TestGridColor DATA suzanne.ply ARGS -g --grid-color=1,1,1)
f3d_test(NAME TestAxis DATA suzanne.ply ARGS -x)
f3d_test(NAME TestBackfaceVisible DATA backface.vtp ARGS --backface-type=visible)
f3d_test(NAME TestBackfaceHidden DATA backface.vtp ARGS --backface-type=hidden)
f3d_test(NAME TestPointCloud DATA pointsCloud.vtp ARGS -o --point-size=20)
f3d_test(NAME TestPointCloudBar DATA pointsCloud.vtp ARGS -sob --point-size=20)
f3d_test(NAME TestPointCloudUG DATA pointsCloud.vtu ARGS -o --point-size=20)
f3d_test(NAME TestPointCloud DATA pointsCloud.vtp ARGS -o --point-sprites-size=20)
f3d_test(NAME TestPointCloudBar DATA pointsCloud.vtp ARGS -sob --point-sprites-size=20)
f3d_test(NAME TestPointCloudUG DATA pointsCloud.vtu ARGS -o --point-sprites-size=20)
f3d_test(NAME TestPointCloudVolume DATA bluntfin.vts ARGS -sob)
f3d_test(NAME TestPointCloudDefaultScene DATA pointsCloud.vtp ARGS --point-size=20)
f3d_test(NAME Test3DSImporter DATA iflamigm.3ds ARGS --up=+Z)
Expand Down Expand Up @@ -287,7 +287,7 @@ endif()
# Needs splat sorting with compute shaders
if(VTK_VERSION VERSION_GREATER_EQUAL 9.3.20240203)
if(NOT APPLE) # MacOS does not support compute shaders
f3d_test(NAME Test3DGaussiansSplatting DATA small.splat ARGS -osy --up=-Y --point-size=1 --point-type=gaussian --camera-position=-3.6,0.5,-4.2)
f3d_test(NAME Test3DGaussiansSplatting DATA small.splat ARGS -osy --up=-Y --point-sprites-size=1 --point-sprites-type=gaussian --camera-position=-3.6,0.5,-4.2)
f3d_test(NAME TestDefaultConfigFileSPLAT DATA small.splat CONFIG config_build LONG_TIMEOUT)
f3d_test(NAME TestThumbnailConfigFileSPLAT DATA small.splat CONFIG thumbnail_build LONG_TIMEOUT)
endif()
Expand Down Expand Up @@ -721,7 +721,7 @@ f3d_test(NAME TestInteractionCycleCell DATA waveletArrays.vti INTERACTION) #VCCC
f3d_test(NAME TestInteractionCycleComp DATA dragon.vtu INTERACTION) #SYYYY
f3d_test(NAME TestInteractionCycleScalars DATA dragon.vtu INTERACTION) #BSSSS
f3d_test(NAME TestInteractionVolumeInverse DATA HeadMRVolume.mhd ARGS --camera-position=127.5,-400,127.5 --camera-view-up=0,0,1 INTERACTION) #VI
f3d_test(NAME TestInteractionPointCloud DATA pointsCloud.vtp ARGS --point-size=20 INTERACTION) #O
f3d_test(NAME TestInteractionPointCloud DATA pointsCloud.vtp ARGS --point-sprites-size=20 INTERACTION) #O
f3d_test(NAME TestInteractionDirectory DATA mb INTERACTION ARGS --scalar-coloring) #Right;Right;Right;Left;Up;
f3d_test(NAME TestInteractionDirectoryLoop DATA mb INTERACTION ARGS --scalar-coloring) #Left;Left;Left;
f3d_test(NAME TestInteractionDirectoryEmpty DATA mb INTERACTION NO_DATA_FORCE_RENDER) #Right;Right;Right;
Expand Down Expand Up @@ -821,7 +821,7 @@ f3d_test(NAME TestVerboseDebug DATA dragon.vtu ARGS --verbose REGEXP "Number of
f3d_test(NAME TestVerboseInvalid DATA dragon.vtu ARGS --verbose=invalid REGEXP "Unrecognized verbose level" NO_BASELINE)

# Unknown scalar array verbosity test
f3d_test(NAME TestVerboseWrongArray DATA dragon.vtu ARGS -s --coloring-array=dummy --verbose REGEXP "Unknown scalar array: dummy" NO_BASELINE)
f3d_test(NAME TestVerboseWrongArray DATA dragon.vtu ARGS -s --coloring-array=dummy --verbose REGEXP "Unknown scalar array: \"dummy\"" NO_BASELINE)

# Default scalar array verbosity test
f3d_test(NAME TestVerboseDefaultScalar DATA HeadMRVolume.mhd ARGS -s --verbose REGEXP "Coloring using point array named MetaImage, Magnitude" NO_BASELINE)
Expand Down
27 changes: 21 additions & 6 deletions cmake/f3dOptions.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -98,17 +98,22 @@ function(_parse_json_option _top_json)
# Read the json element
string(JSON _cur_json GET ${_top_json} ${_member_name})
# Recover its type and default if it is a leaf option
string(JSON _option_type ERROR_VARIABLE _type_error GET ${_cur_json} "type")
string(JSON _option_default_value ERROR_VARIABLE _default_value_error GET ${_cur_json} "default_value")
if(_type_error STREQUAL "NOTFOUND" AND _default_value_error STREQUAL "NOTFOUND")
string(JSON _option_type ERROR_VARIABLE _option_type_error GET ${_cur_json} "type")
string(JSON _option_type_type ERROR_VARIABLE _option_type_type_error TYPE ${_cur_json} "type")
if(_option_type_error STREQUAL "NOTFOUND" AND ${_option_type_type} STREQUAL "STRING")
# Leaf option found!

# Recover default_value if any
string(JSON _option_default_value ERROR_VARIABLE _default_value_error GET ${_cur_json} "default_value")

set(_option_name "${_option_basename}${_member_name}")

# Identify types
set(_option_actual_type ${_option_type})
set(_option_variant_type ${_option_type})
set(_option_default_value_start "")
set(_option_default_value_end "")

if(_option_type STREQUAL "double_vector")
set(_option_actual_type "std::vector<double>")
set(_option_variant_type "std::vector<double>")
Expand All @@ -125,11 +130,21 @@ function(_parse_json_option _top_json)
endif()

# Add option to struct and methods
string(APPEND _options_struct "${_option_indent} ${_option_actual_type} ${_member_name} = ${_option_default_value_start}${_option_default_value}${_option_default_value_end};\n")

if(_default_value_error STREQUAL "NOTFOUND")
# Use default_value
string(APPEND _options_struct "${_option_indent} ${_option_actual_type} ${_member_name} = ${_option_default_value_start}${_option_default_value}${_option_default_value_end};\n")
set(_optional_getter "")
else()
# No default_value, it is an std::optional
string(APPEND _options_struct "${_option_indent} std::optional<${_option_actual_type}> ${_member_name};\n")
set(_optional_getter ".value()")
endif()

list(APPEND _options_setter "if (name == \"${_option_name}\") opt.${_option_name} = std::get<${_option_variant_type}>(value)")
list(APPEND _options_getter "if (name == \"${_option_name}\") return opt.${_option_name}")
list(APPEND _options_getter "if (name == \"${_option_name}\") return opt.${_option_name}${_optional_getter}")
list(APPEND _options_string_setter "if (name == \"${_option_name}\") opt.${_option_name} = options_tools::parse<${_option_actual_type}>(str)")
list(APPEND _options_string_getter "if (name == \"${_option_name}\") return options_tools::format(opt.${_option_name})")
list(APPEND _options_string_getter "if (name == \"${_option_name}\") return options_tools::format(opt.${_option_name}${_optional_getter})")
list(APPEND _options_lister "\"${_option_name}\"")

else()
Expand Down
2 changes: 1 addition & 1 deletion doc/GALLERY.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ Images and videos displayed below use public datasets, you can download them [he

<video src='https://media.githubusercontent.com/media/f3d-app/f3d-media/main/media/counter.webm' autoplay="autoplay" loop="loop" width="700"></video>

*3D Gaussians Splatting*: `f3d counter.splat --point-size=1 --point-type=gaussian -soynxz --up=-Y --camera-position=0,1,-5.2 --camera-focal-point=0,1,0`
*3D Gaussians Splatting*: `f3d counter.splat --point-sprites-size=1 --point-sprites-type=gaussian -soynxz --up=-Y --camera-position=0,1,-5.2 --camera-focal-point=0,1,0`

<img src="https://user-images.githubusercontent.com/3129530/194735272-5bcd3e7c-a333-41f5-8066-9b0bec9885e8.png" width="700">

Expand Down
11 changes: 5 additions & 6 deletions doc/libf3d/OPTIONS.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# Options exhaustive list

An option is a specific value stored in different struct in an `options` instance.
They can be accessed directly through the structs, through a string API or through a std::variant API, the last one require C++17.
If your compiler does not support C++17, you can disable this API by defining `F3D_DISABLE_CXX17_API`.
They can be accessed directly through the structs, through a string API or through a std::variant API.

The possible option are listed below and are organized by categories and subcategories, here is a non-exhaustive explanation of the categories.

Expand Down Expand Up @@ -57,7 +56,8 @@ model.scivis.component|int<br>-1<br>render|Specify the component to color with.
model.scivis.array_name|string<br>-<br>render|Select the name of the array to color with.|\-\-coloring-array
model.scivis.range|vector\<double\><br>-<br>render|Set a *custom range for the coloring*.|\-\-range
model.point_sprites.enable|bool<br>false<br>render|Show sphere *points sprites* instead of the geometry.|\-\-point-sprites
model.point_sprites.type|string<br>sphere<br>render|Set the sprites type when showing point sprites (can be `sphere` or `gaussian`).|\-\-point-type
model.point_sprites.type|string<br>sphere<br>render|Set the sprites type when showing point sprites (can be `sphere` or `gaussian`).|\-\-point-stripes-type
model.point_sprites.size|double<br>10.0<br>render|Set the *size* of point sprites.|\-\-point-stripes-size
model.volume.enable|bool<br>false<br>render|Enable *volume rendering*. It is only available for 3D image data (vti, dcm, nrrd, mhd files) and will display nothing with other default scene formats.|\-\-volume
model.volume.inverse|bool<br>false<br>render|Inverse the linear opacity function.|\-\-inverse

Expand All @@ -72,7 +72,7 @@ render.effect.tone_mapping|bool<br>false<br>render|Enable generic filmic *Tone M
render.effect.final_shader|string<br>""<br>render|Add a final shader to the output image|\-\-final-shader. See [user documentation](../user/FINAL_SHADER.md).
render.line_width|double<br>1.0<br>render|Set the *width* of lines when showing edges.|\-\-line-width
render.show_edges|bool<br>false<br>render|Show the *cell edges*|\-\-edges
render.point_size|double<br>10.0<br>render|Set the *size* of points when showing vertices and point sprites.|\-\-point-size
render.point_size|double<br>10.0<br>render|Set the *size* of points when showing vertices.|\-\-point-size
render.grid.enable|bool<br>false<br>render|Show *a grid* aligned with the horizontal (orthogonal to the Up direction) plane.|\-\-grid
render.grid.absolute|bool<br>false<br>render|Position the grid at the *absolute origin* of the model's coordinate system instead of below the model.|\-\-grid
render.grid.unit|double<br>0<br>render|Set the size of the *unit square* for the grid. If set to non-positive (the default) a suitable value will be automatically computed.|\-\-grid\-unit
Expand Down Expand Up @@ -138,8 +138,7 @@ The documentation about option parsing is upcoming.

## Variant API

An API that is similar to the F3D 2.0 options API thanks to std::variant, requires C++17.
If your compiler does not support C++17, you can disable this API by defining `F3D_DISABLE_CXX17_API`.
An API that is similar to the F3D 2.0 options API thanks to std::variant.

```cpp
f3d::engine eng(f3d::window::Type::NATIVE);
Expand Down
2 changes: 1 addition & 1 deletion doc/user/LIMITATIONS_AND_TROUBLESHOOTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ VDB file formats rely on [OpenVDB](https://github.com/AcademySoftwareFoundation/
- The `vdb` plugin is not shipped in the python wheels yet.

## Gaussian splatting
Gaussian splatting (option `--point-type=gaussian`) needs depth sorting which is done internally using a compute shader. This requires support for OpenGL 4.3 which is not supported by macOS and old GPUs/drivers.
Gaussian splatting (option `--point-sprites-type=gaussian`) needs depth sorting which is done internally using a compute shader. This requires support for OpenGL 4.3 which is not supported by macOS and old GPUs/drivers.

# Troubleshooting

Expand Down
5 changes: 3 additions & 2 deletions doc/user/OPTIONS.md
mwestphal marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,9 @@ Options|Default|Description
Options|Default|Description
------|------|------
-o, \-\-point-sprites||Show sphere *points sprites* instead of the geometry.
\-\-point-size=\<size\>|10.0|Set the *size* of points when showing vertices and point sprites.
\-\-point-type=\<sphere|gaussian\>|sphere|Set the splat type when showing point sprites.
\-\-point-sprites-type=\<sphere|gaussian\>|sphere|Set the splat type when showing point sprites.
\-\-point-sprites-size=\<size\>|10.0|Set the *size* of point sprites.
\-\-point-size=\<size\>|10.0|Set the *size* of points when showing vertices.
\-\-line-width=\<size\>|1.0|Set the *width* of lines when showing edges.
\-\-color=\<R,G,B\>|1.0, 1.0, 1.0| Set a *color* on the geometry. Multiplied with the base color texture when present. <br>Requires a default scene.
\-\-opacity=\<opacity\>|1.0|Set *opacity* on the geometry. Multiplied with the base color texture when present. <br>Requires a default scene. Usually used with Depth Peeling option.
Expand Down
3 changes: 1 addition & 2 deletions examples/libf3d/cpp/use-options-string/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ project(use-options-string)
find_package(f3d REQUIRED COMPONENTS library)

add_executable(use-options-string main.cxx)
target_compile_definitions(use-options-string PRIVATE F3D_DISABLE_CXX17_API)
target_link_libraries(use-options-string f3d::libf3d)
set_target_properties(use-options-string PROPERTIES CXX_STANDARD 11)
set_target_properties(use-options-string PROPERTIES CXX_STANDARD 17)

# Simple testing
if(BUILD_TESTING)
Expand Down
3 changes: 1 addition & 2 deletions examples/libf3d/cpp/use-options-struct/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ project(use-options-struct)
find_package(f3d REQUIRED COMPONENTS library)

add_executable(use-options-struct main.cxx)
target_compile_definitions(use-options-struct PRIVATE F3D_DISABLE_CXX17_API)
target_link_libraries(use-options-struct f3d::libf3d)
set_target_properties(use-options-struct PROPERTIES CXX_STANDARD 11)
set_target_properties(use-options-struct PROPERTIES CXX_STANDARD 17)

# Simple testing
if(BUILD_TESTING)
Expand Down
2 changes: 1 addition & 1 deletion examples/libf3d/python/render-terminal/render_terminal.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def main():
"render.effect.tone_mapping": True,
"render.effect.ambient_occlusion": True,
"render.effect.translucency_support": True,
"render.effect.anti-aliasing": True,
"render.effect.anti_aliasing": True,
mwestphal marked this conversation as resolved.
Show resolved Hide resolved
}
anim_fps = 30
anim_duration = 4
Expand Down
1 change: 0 additions & 1 deletion java/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ endif()

set_target_properties(javaf3d PROPERTIES
CXX_VISIBILITY_PRESET hidden
CXX_STANDARD 17
OUTPUT_NAME "f3d-java"
)

Expand Down
1 change: 0 additions & 1 deletion library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ if (WIN32)
endif()

set_target_properties(libf3d PROPERTIES
CXX_STANDARD 17
CXX_VISIBILITY_PRESET hidden
POSITION_INDEPENDENT_CODE ON
OUTPUT_NAME "f3d"
Expand Down
37 changes: 15 additions & 22 deletions library/options.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
"default_value": "1.0"
},
"time": {
"type": "double",
"default_value": "0.0"
"type": "double"
},
"frame_rate": {
"type": "double",
Expand All @@ -28,8 +27,7 @@
},
"camera": {
"index": {
"type": "int",
"default_value": "-1"
"type": "int"
},
"orthographic": {
"type": "bool",
Expand All @@ -43,16 +41,13 @@
"default_value": "false"
},
"line_width": {
"type": "double",
"default_value": "1.0"
"type": "double"
},
"point_size": {
"type": "double",
"default_value": "10.0"
mwestphal marked this conversation as resolved.
Show resolved Hide resolved
"type": "double"
},
"backface_type": {
"type": "string",
"default_value": "default"
"type": "string"
},
"grid": {
"enable": {
Expand All @@ -64,8 +59,7 @@
"default_value": "false"
},
"unit": {
"type": "double",
"default_value": "0.0"
"type": "double"
},
"subdivisions": {
"type": "int",
Expand Down Expand Up @@ -108,14 +102,12 @@
"default_value": "false"
},
"final_shader": {
"type": "string",
"default_value": ""
"type": "string"
}
},
"hdri": {
"file": {
"type": "string",
"default_value": ""
"type": "string"
},
"ambient": {
"type": "bool",
Expand Down Expand Up @@ -181,8 +173,7 @@
"default_value": "false"
},
"font_file": {
"type": "string",
"default_value": ""
"type": "string"
},
"loader_progress": {
"type": "bool",
Expand Down Expand Up @@ -258,8 +249,7 @@
"default_value": "false"
},
"array_name": {
"type": "string",
"default_value": ""
"type": "string"
},
"component": {
"type": "int",
Expand All @@ -270,8 +260,7 @@
"default_value": "0.0, 0.0, 0.0, 0.0, 0.4, 0.9, 0.0, 0.0, 0.8, 0.9, 0.9, 0.0, 1.0, 1.0, 1.0, 1.0"
},
"range": {
"type": "double_vector",
"default_value": "0.0"
"type": "double_vector"
}
},
"point_sprites": {
Expand All @@ -282,6 +271,10 @@
"type": {
"type": "string",
"default_value": "sphere"
},
"size": {
"type": "double",
"default_value": 10.0
}
},
"volume": {
Expand Down
Loading
Loading