177 template <
size_t M,
typename T>
180 return reinterpret_cast<std::array<T, M>*
>(glm::value_ptr(vec));
183 template <
typename T>
186 return reinterpret_cast<std::array<T, 4>*
>(glm::value_ptr(quat));
189 template <
size_t M,
typename T>
192 return reinterpret_cast<std::vector<std::array<T, M>
>*>(&vecVec);
203 h->set_flags(Flags::DisallowUnknownKey);
208 h->add_property(
"id", &s->
id);
209 h->set_flags(Flags::DisallowUnknownKey);
214 h->add_property(
"id", &s->
id);
215 h->add_property(
"properties", &s->
properties);
216 h->set_flags(Flags::DisallowUnknownKey);
221 h->add_property(
"id", &s->
id);
223 h->set_flags(Flags::DisallowUnknownKey);
228 h->add_property(
"id", &g->
modelID);
229 h->add_property(
"result_range", toArray<2, uint32_t>(g->
resultRange), Flags::Optional);
230 h->set_flags(Flags::DisallowUnknownKey);
235 h->add_property(
"endpoint", &s->
endpoint);
236 h->set_flags(Flags::DisallowUnknownKey);
241 h->add_property(
"filename", &s->
filename);
242 h->set_flags(Flags::DisallowUnknownKey);
247 h->add_property(
"enabled", &s->
enabled, Flags::Optional);
248 h->add_property(
"kbps", &s->
kbps, Flags::Optional);
249 h->set_flags(Flags::DisallowUnknownKey);
254 h->add_property(
"id", &c->
id, Flags::Optional);
255 h->set_flags(Flags::DisallowUnknownKey);
260 h->add_property(
"bounding_box", &s->
_boundingBox, Flags::Optional);
261 h->add_property(
"chunks_id", &s->
chunksID);
262 h->add_property(
"name", &s->
_name, Flags::Optional);
263 h->add_property(
"path", &s->
_path);
264 h->add_property(
"size", &s->
size);
265 h->add_property(
"transformation", &s->
_transformation, Flags::Optional);
266 h->add_property(
"type", &s->
type);
267 h->add_property(
"visible", &s->
_visible, Flags::Optional);
268 h->add_property(
"loader_name", &s->
_loaderName, Flags::Optional);
270 h->set_flags(Flags::DisallowUnknownKey);
275 h->add_property(
"animation_parameters", &s->
animParams, Flags::Optional);
276 h->add_property(
"camera", &s->
camera, Flags::Optional);
277 h->add_property(
"format", &s->
format);
278 h->add_property(
"name", &s->
name, Flags::Optional);
279 h->add_property(
"quality", &s->
quality, Flags::Optional);
280 h->add_property(
"samples_per_pixel", &s->
samplesPerPixel, Flags::Optional);
281 h->add_property(
"size", toArray<2, uint32_t>(s->
size));
282 h->add_property(
"filePath", &s->
filePath, Flags::Optional);
283 h->set_flags(Flags::DisallowUnknownKey);
288 h->add_property(
"fps", &s->_fps);
289 h->add_property(
"scene_size_in_bytes", &s->_sceneSizeInBytes);
290 h->set_flags(Flags::DisallowUnknownKey);
295 h->add_property(
"hit", &p->
hit);
296 h->add_property(
"position", toArray<3, double>(p->
pos));
297 h->set_flags(Flags::DisallowUnknownKey);
302 h->add_property(
"orientation",
toArray(c->_orientation), Flags::Optional);
303 h->add_property(
"position", toArray<3, double>(c->_position), Flags::Optional);
304 h->add_property(
"target", toArray<3, double>(c->_target), Flags::Optional);
305 h->add_property(
"current", &c->
_currentType, Flags::Optional);
307 h->add_property(
"types", &types, Flags::IgnoreRead | Flags::Optional);
308 h->set_flags(Flags::DisallowUnknownKey);
313 h->add_property(
"head_light", &r->
_headLight, Flags::Optional);
314 h->add_property(
"background_color", toArray<3, double>(r->
_backgroundColor), Flags::Optional);
315 h->add_property(
"max_accum_frames", &r->
_maxAccumFrames, Flags::Optional);
316 h->add_property(
"samples_per_pixel", &r->
_spp, Flags::Optional);
317 h->add_property(
"subsampling", &r->
_subsampling, Flags::Optional);
318 h->add_property(
"accumulation", &r->
_accumulation, Flags::Optional);
319 h->add_property(
"current", &r->
_currentType, Flags::Optional);
321 h->add_property(
"types", &types, Flags::IgnoreRead | Flags::Optional);
322 h->set_flags(Flags::DisallowUnknownKey);
327 h->add_property(
"data", &i->
data);
328 h->set_flags(Flags::DisallowUnknownKey);
333 h->add_property(
"name", &t->
name, Flags::Optional);
334 h->add_property(
"colors", toArray<3, float>(t->
colors));
339 h->add_property(
"range", toArray<2, double>(t->_valuesRange), Flags::Optional);
340 h->add_property(
"opacity_curve", toArray<2, double>(t->_controlPoints), Flags::Optional);
341 h->add_property(
"colormap", &t->_colorMap, Flags::Optional);
342 h->set_flags(Flags::DisallowUnknownKey);
347 h->add_property(
"min", toArray<3, double>(b->_min));
348 h->add_property(
"max", toArray<3, double>(b->_max));
349 h->set_flags(Flags::DisallowUnknownKey);
354 h->add_property(
"name", &m->
_name, Flags::Optional);
355 h->add_property(
"diffuse_color", toArray<3, double>(m->
_diffuseColor), Flags::Optional);
356 h->add_property(
"specular_color", toArray<3, double>(m->
_specularColor), Flags::Optional);
359 h->add_property(
"opacity", &m->
_opacity, Flags::Optional);
361 h->add_property(
"light_emission", &m->
_emission, Flags::Optional);
362 h->add_property(
"glossiness", &m->
_glossiness, Flags::Optional);
363 h->set_flags(Flags::DisallowUnknownKey);
368 h->add_property(
"translation", toArray<3, double>(g->_translation));
369 h->add_property(
"scale", toArray<3, double>(g->_scale));
370 h->add_property(
"rotation",
toArray(g->_rotation));
371 h->add_property(
"rotation_center", toArray<3, double>(g->_rotationCenter), Flags::Optional);
372 h->set_flags(Flags::DisallowUnknownKey);
377 h->add_property(
"model_id", &i->
_modelID);
379 h->add_property(
"bounding_box", &i->
_boundingBox, Flags::Optional);
380 h->add_property(
"transformation", &i->
_transformation, Flags::Optional);
381 h->add_property(
"visible", &i->
_visible, Flags::Optional);
382 h->set_flags(Flags::DisallowUnknownKey);
387 h->add_property(
"bounding_box", &g->
_boundingBox, Flags::Optional);
388 h->add_property(
"name", &g->
_name, Flags::Optional);
389 h->add_property(
"path", &g->
_path);
390 h->add_property(
"transformation", &g->
_transformation, Flags::Optional);
391 h->add_property(
"visible", &g->
_visible, Flags::Optional);
392 h->add_property(
"loader_name", &g->
_loaderName, Flags::Optional);
395 h->set_flags(Flags::DisallowUnknownKey);
400 h->add_property(
"bounding_box", &g->
_boundingBox, Flags::Optional);
401 h->add_property(
"bounds", &g->_bounds, Flags::Optional);
402 h->add_property(
"id", &g->
_modelID);
403 h->add_property(
"metadata", &g->_metadata, Flags::Optional);
404 h->add_property(
"name", &g->
_name, Flags::Optional);
405 h->add_property(
"path", &g->
_path, Flags::Optional);
406 h->add_property(
"transformation", &g->
_transformation, Flags::Optional);
407 h->add_property(
"visible", &g->
_visible, Flags::Optional);
408 h->set_flags(Flags::DisallowUnknownKey);
413 h->add_property(
"id", &g->_id);
414 h->add_property(
"plane", &g->_plane);
415 h->set_flags(Flags::DisallowUnknownKey);
420 h->add_property(
"bounds", &s->
_bounds, Flags::IgnoreRead | Flags::Optional);
421 h->add_property(
"models", &s->
_modelDescriptors, Flags::Optional | Flags::IgnoreRead);
422 h->set_flags(Flags::DisallowUnknownKey);
427 h->add_property(
"engine", &a->
_engine, Flags::IgnoreRead | Flags::Optional);
429 h->add_property(
"image_stream_fps", &a->
_imageStreamFPS, Flags::Optional);
430 h->add_property(
"viewport", toArray<2, double>(a->
_windowSize), Flags::Optional);
431 h->set_flags(Flags::DisallowUnknownKey);
436 h->add_property(
"types", &r->
_renderers, Flags::IgnoreRead | Flags::Optional);
439 h->add_property(
"denoise_blend", &r->
_denoiseBlend, Flags::Optional);
441 h->add_property(
"tone_mapper_gamma", &r->
_toneMapperGamma, Flags::Optional);
442 h->set_flags(Flags::DisallowUnknownKey);
447 h->add_property(
"sdf_epsilon", &r->
_sdfEpsilon, Flags::Optional);
449 h->add_property(
"sdf_blend_factor", &r->
_sdfBlendFactor, Flags::Optional);
451 h->add_property(
"sdf_ray_marching_omega", &r->
_sdfOmega, Flags::Optional);
452 h->add_property(
"sdf_distance", &r->
_sdfDistance, Flags::Optional);
453 h->set_flags(Flags::DisallowUnknownKey);
458 h->add_property(
"volume_dimensions", toArray<3, uint32_t>(v->
_dimensions), Flags::Optional);
459 h->add_property(
"volume_element_spacing", toArray<3, double>(v->
_elementSpacing), Flags::Optional);
460 h->add_property(
"volume_offset", toArray<3, double>(v->
_offset), Flags::Optional);
463 h->add_property(
"gradient_offset", &v->
_gradientOffset, Flags::Optional);
464 h->add_property(
"single_shade", &v->
_singleShade, Flags::Optional);
465 h->add_property(
"pre_integration", &v->
_preIntegration, Flags::Optional);
468 h->add_property(
"sampling_rate", &v->
_samplingRate, Flags::Optional);
469 h->add_property(
"specular", toArray<3, double>(v->
_specular), Flags::Optional);
470 h->add_property(
"clip_box", &v->
_clipBox, Flags::Optional);
471 h->add_property(
"user_parameters", toArray<3, double>(v->
_userParameters), Flags::Optional);
472 h->set_flags(Flags::DisallowUnknownKey);
478 h->add_property(
"gradient_offset", &v->
_gradientOffset, Flags::Optional);
479 h->add_property(
"sampling_rate", &v->
_samplingRate, Flags::Optional);
480 h->add_property(
"distance", &v->
_distance, Flags::Optional);
481 h->add_property(
"cutoff", &v->
_cutoff, Flags::Optional);
482 h->add_property(
"epsilon", &v->
_epsilon, Flags::Optional);
484 h->add_property(
"use_octree", &v->
_useOctree, Flags::Optional);
485 h->set_flags(Flags::DisallowUnknownKey);
490 h->add_property(
"frame_count", &a->_numFrames, Flags::Optional);
491 h->add_property(
"current", &a->_current, Flags::Optional);
492 h->add_property(
"delta", &a->_delta, Flags::Optional);
493 h->add_property(
"dt", &a->_dt, Flags::Optional);
494 h->add_property(
"playing", &a->_playing, Flags::Optional);
495 h->add_property(
"unit", &a->_unit, Flags::Optional);
496 h->set_flags(Flags::DisallowUnknownKey);
501 h->add_property(
"name", &a->
name);
502 h->add_property(
"extensions", &a->
extensions);
503 h->add_property(
"properties", &a->
properties);
504 h->set_flags(Flags::DisallowUnknownKey);
509 h->add_property(
"color", toArray<3, double>(a->
_color));
511 h->add_property(
"is_visible", &a->
_isVisible);
512 h->set_flags(Flags::DisallowUnknownKey);
518 h->add_property(
"direction", toArray<3, double>(a->
_direction));
520 h->set_flags(Flags::DisallowUnknownKey);
526 h->add_property(
"position", toArray<3, double>(a->
_position));
527 h->add_property(
"radius", &a->
_radius);
528 h->set_flags(Flags::DisallowUnknownKey);
534 h->add_property(
"position", toArray<3, double>(a->
_position));
535 h->add_property(
"edge1", toArray<3, double>(a->
_edge1));
536 h->add_property(
"edge2", toArray<3, double>(a->
_edge2));
537 h->set_flags(Flags::DisallowUnknownKey);
543 h->add_property(
"position", toArray<3, double>(a->
_position));
544 h->add_property(
"direction", toArray<3, double>(a->
_direction));
547 h->add_property(
"radius", &a->
_radius);
548 h->set_flags(Flags::DisallowUnknownKey);
554 h->set_flags(Flags::DisallowUnknownKey);
559 h->add_property(
"id", &a->
id);
560 h->add_property(
"type", &a->
type);
561 h->add_property(
"properties", &a->
properties);
562 h->set_flags(Flags::DisallowUnknownKey);
567 h->add_property(
"path", &a->
path);
568 h->set_flags(Flags::DisallowUnknownKey);
573 h->add_property(
"type", &a->
type);
574 h->add_property(
"error", &a->
error);
575 h->add_property(
"message", &a->
message);
576 h->set_flags(Flags::DisallowUnknownKey);
581 h->add_property(
"content", &a->
content);
582 h->add_property(
"error", &a->
error);
583 h->add_property(
"message", &a->
message);
584 h->set_flags(Flags::DisallowUnknownKey);
589 h->add_property(
"root", &a->
root);
590 h->set_flags(Flags::DisallowUnknownKey);
595 h->add_property(
"names", &a->
names);
596 h->add_property(
"sizes", &a->
sizes);
601 h->add_property(
"files", &a->
files);
602 h->add_property(
"dirs", &a->
dirs);
603 h->add_property(
"error", &a->
error);
604 h->add_property(
"message", &a->
message);
605 h->set_flags(Flags::DisallowUnknownKey);
610 h->add_property(
"type", &a->
type);
611 h->set_flags(Flags::DisallowUnknownKey);
616 h->add_property(
"minutes", &a->
minutes);
617 h->set_flags(Flags::DisallowUnknownKey);
626 return staticjson::to_json_string(obj);
633 inline std::string
to_json(
const core::Version& obj)
642 return staticjson::to_json_string(scene);
645 template <
typename T>
649 const auto jsonOriginal = staticjson::to_json_string(params);
651 const std::string key =
"\"" + propertyMapName +
"\"";
652 const std::string propertiesJson = key +
":" +
to_json(properties);
685 return staticjson::from_json_string(json.c_str(), &obj,
nullptr);
690 return staticjson::from_json_string(json.c_str(), toArray<2, double>(obj),
nullptr);
695 template <
typename T>
697 const std::string& propertyMapName)
699 using namespace rapidjson;
701 document.Parse(json.c_str());
705 if (document.HasMember(propertyMapName.c_str()))
707 auto& loaderProperties = document[propertyMapName.c_str()];
708 Document propertyDoc;
709 propertyDoc.CopyFrom(loaderProperties, propertyDoc.GetAllocator());
710 rapidjson::StringBuffer buffer;
711 rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
712 propertyDoc.Accept(writer);
717 loaderProperties.SetObject();
720 rapidjson::StringBuffer buffer;
721 rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
722 document.Accept(writer);
723 const auto str = buffer.GetString();
724 return {staticjson::from_json_string(str, ¶ms,
nullptr), propertyMap};
727 template <
typename T>
732 std::tie<bool, core::PropertyMap>(success, propertyMap) =
734 params.setLoaderProperties(propertyMap);
The Camera class is an abstract interface for a camera in a 3D graphics application....
uint64_t _randomAccumulation
float _sdfBlendLerpFactor
uint64_t _sdfNbMarchIterations
The Light class defines the common base class for all lights.
The class that represents the material object. This class is derived from PropertyObject and provides...
The ModelDescriptor struct defines the metadata attached to a model.Model descriptor are exposed via ...
A class representing an instance of a 3D model.
Transformation _transformation
The ModelParams class represents the parameters needed for initializing a model instance.
PLATFORM_API const PropertyMap & getLoaderProperties() const
getLoaderProperties gets the loader properties of the model
PropertyMap _loaderProperties
Renderer class inherits from PropertyObject class The Renderer class has methods to render a FrameBuf...
Vector3d _backgroundColor
uint32_t _numNonDenoisedFrames
double _varianceThreshold
std::deque< std::string > _renderers
float _toneMapperExposure
Scene object This object contains collections of geometries, materials and light sources that are use...
ModelDescriptors _modelDescriptors
PLATFORM_API auto acquireReadAccess() const
double _adaptiveMaxSamplingRate
bool from_json(T &obj, const std::string &json)
bool modelBinaryParamsFromJson(T ¶ms, const std::string &json)
std::pair< bool, core::PropertyMap > fromJSONWithPropertyMap(T ¶ms, const std::string &json, const std::string &propertyMapName)
std::string to_json(const T &obj)
STATICJSON_DECLARE_ENUM(core::GeometryQuality, {"low", core::GeometryQuality::low}, {"medium", core::GeometryQuality::medium}, {"high", core::GeometryQuality::high})
core::PropertyMap jsonToPropertyMap(const std::string &json)
std::string toJSONReplacePropertyMap(const T ¶ms, const std::string &propertyMapName, const core::PropertyMap &properties)
auto toArray(glm::vec< M, T > &vec)
std::string replaceFirstOccurrence(std::string input, const std::string &toReplace, const std::string &replaceWith)
glm::vec< 2, double > Vector2d
glm::vec< 2, uint32_t > Vector2ui
void init(core::Box< U > *, ObjectHandler *)
std::string type
file extension or type (MESH, POINTS, CIRCUIT)
size_t size
size in bytes of file
std::vector< std::string > extensions
TransferFunction transferFunction
PickResult Struct containing hit boolean value and Vector3d pos PickResult struct is used to retrieve...
std::unique_ptr< AnimationParameters > animParams
std::unique_ptr< Camera > camera
bool operator!=(const VideoStreamParam &rhs) const
bool operator==(const VideoStreamParam &rhs) const