99
1010#include < functional>
1111
12- template <typename D, typename B>
13- struct derived_from : std::is_base_of<B,D> {};
1412
1513namespace nbl ::ext::MitsubaLoader
1614{
@@ -20,36 +18,14 @@ auto CElementSensor::compAddPropertyMap() -> AddPropertyMap<CElementSensor>
2018 using this_t = CElementSensor;
2119 AddPropertyMap<CElementSensor> retval;
2220
23- // auto setUp = SET_PROPERTY_TEMPLATE(up, SNamedPropertyElement::Type::VECTOR, ShutterSensor);
24- NBL_EXT_MITSUBA_LOADER_REGISTER_ADD_PROPERTY (VECTOR," clipPlane" )
25- {
26- if (_property.getVectorDimension ()!=4 )
27- {
28- return false ;
29- }
30- constexpr std::string_view Name = " clipPlane" ;
31- const std::string_view sv (_property.name );
32- if (sv.length ()!=Name.length ()+1 || sv.find (Name)!=0 )
33- {
34- return false ;
35- }
36- const auto index = std::atoi (sv.data ()+Name.length ());
37- if (index>MaxClipPlanes)
38- {
39- return false ;
40- }
41- // everyone inherits from this
42- _this->perspective .clipPlanes [index] = _property.vvalue ;
43- return true ;
44- }
45- });
46-
47- // auto setShiftX = SET_PROPERTY_TEMPLATE(shiftX, SNamedPropertyElement::Type::FLOAT, PerspectivePinhole);
48- // auto setShiftY = SET_PROPERTY_TEMPLATE(shiftY, SNamedPropertyElement::Type::FLOAT, PerspectivePinhole);
49- // auto setFov = SET_PROPERTY_TEMPLATE(fov, SNamedPropertyElement::Type::FLOAT, PerspectivePinhole);
50- retval.template registerCallback<derived_from,PerspectivePinhole>(SNamedPropertyElement::Type::STRING," fovAxis" ,[](CElementSensor* _this, SNamedPropertyElement&& _property, const system::logger_opt_ptr logger)->bool
21+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (up,VECTOR,derived_from,ShutterSensor);
22+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (shiftX,FLOAT,derived_from,PerspectivePinhole);
23+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (shiftY,FLOAT,derived_from,PerspectivePinhole);
24+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (fov,FLOAT,derived_from,PerspectivePinhole);
25+ NBL_EXT_MITSUBA_LOADER_REGISTER_ADD_PROPERTY_CONSTRAINED (" fovAxis" ,STRING,derived_from,PerspectivePinhole)
5126 {
5227 auto & state = _this->perspective ;
28+ // TODO: check if this gives problem with delay loads
5329 static const core::unordered_map<std::string,PerspectivePinhole::FOVAxis,core::CaseInsensitiveHash,core::CaseInsensitiveEquals> StringToType =
5430 {
5531 {" x" , PerspectivePinhole::FOVAxis::X},
@@ -67,81 +43,51 @@ auto CElementSensor::compAddPropertyMap() -> AddPropertyMap<CElementSensor>
6743 }
6844 );
6945
70- return retval;
71- }
46+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (up,VECTOR,derived_from,ShutterSensor);
47+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (shutterOpen,FLOAT,derived_from,ShutterSensor);
48+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (shutterClose,FLOAT,derived_from,ShutterSensor);
49+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (moveSpeed,FLOAT,derived_from,ShutterSensor);
50+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (zoomSpeed,FLOAT,derived_from,ShutterSensor);
51+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (rotateSpeed,FLOAT,derived_from,ShutterSensor);
52+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (nearClip,FLOAT,derived_from,CameraBase);
53+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (farClip,FLOAT,derived_from,CameraBase);
54+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (focusDistance,FLOAT,derived_from,DepthOfFieldBase);
55+ NBL_EXT_MITSUBA_LOADER_REGISTER_SIMPLE_ADD_VARIANT_PROPERTY_CONSTRAINED (apertureRadius,FLOAT,derived_from,DepthOfFieldBase);
56+
57+ // special
58+ auto setClipPlane = [](this_t * _this, SNamedPropertyElement&& _property, const system::logger_opt_ptr logger)->bool
59+ {
60+ if (_property.getVectorDimension ()!=4 )
61+ {
62+ return false ;
63+ }
64+ constexpr std::string_view Name = " clipPlane" ;
65+ const std::string_view sv (_property.name );
66+ if (sv.length ()!=Name.length ()+1 || sv.find (Name)!=0 )
67+ {
68+ return false ;
69+ }
70+ const auto index = std::atoi (sv.data ()+Name.length ());
71+ if (index>MaxClipPlanes)
72+ {
73+ return false ;
74+ }
75+ // everyone inherits from this
76+ _this->perspective .clipPlanes [index] = _property.vvalue ;
77+ return true ;
78+ };
79+ for (auto i=0 ; i<MaxClipPlanes; i++)
80+ retval.registerCallback (SNamedPropertyElement::Type::VECTOR," clipPlane" +std::to_string (i),{.func =setClipPlane});
7281
73- bool CElementSensor::addProperty (SNamedPropertyElement&& _property, system::logger_opt_ptr logger)
74- {
75- if (type >= Type::INVALID)
76- return false ;
77- bool error = false ;
78-
79- #if 0
80-
81- #define SET_PROPERTY_TEMPLATE(MEMBER,PROPERTY_TYPE,BASE) [&]() -> void { \
82- dispatch([&](auto& state) -> void { \
83- if constexpr (std::is_base_of<BASE,std::remove_reference<decltype(state)>::type >::value) \
84- { \
85- if (_property.type!=PROPERTY_TYPE) { \
86- error = true; \
87- return; \
88- } \
89- state. ## MEMBER = _property.getProperty<PROPERTY_TYPE>(); \
90- } \
91- }); \
92- }
93-
94- auto setUp = SET_PROPERTY_TEMPLATE(up,SNamedPropertyElement::Type::VECTOR,ShutterSensor);
95- auto setShutterOpen = SET_PROPERTY_TEMPLATE(shutterOpen,SNamedPropertyElement::Type::FLOAT,ShutterSensor);
96- auto setShutterClose = SET_PROPERTY_TEMPLATE(shutterClose,SNamedPropertyElement::Type::FLOAT,ShutterSensor);
97- auto setMoveSpeed = SET_PROPERTY_TEMPLATE(moveSpeed,SNamedPropertyElement::Type::FLOAT,ShutterSensor);
98- auto setZoomSpeed = SET_PROPERTY_TEMPLATE(zoomSpeed,SNamedPropertyElement::Type::FLOAT,ShutterSensor);
99- auto setRotateSpeed = SET_PROPERTY_TEMPLATE(rotateSpeed,SNamedPropertyElement::Type::FLOAT,ShutterSensor);
100- auto setNearClip = SET_PROPERTY_TEMPLATE(nearClip,SNamedPropertyElement::Type::FLOAT,CameraBase);
101- auto setFarClip = SET_PROPERTY_TEMPLATE(farClip,SNamedPropertyElement::Type::FLOAT,CameraBase);
102- auto setFocusDistance = SET_PROPERTY_TEMPLATE(focusDistance,SNamedPropertyElement::Type::FLOAT,DepthOfFieldBase);
103- auto setApertureRadius = SET_PROPERTY_TEMPLATE(apertureRadius,SNamedPropertyElement::Type::FLOAT,DepthOfFieldBase);
82+ // TODOs:
10483 // auto setKc = SET_PROPERTY_TEMPLATE(apertureRadius,SNamedPropertyElement::Type::STRING,PerspectivePinholeRadialDistortion);
84+ // {"focalLength", noIdeaHowToProcessValue},
10585
106- const core::unordered_map<std::string, std::function<void()>, core::CaseInsensitiveHash, core::CaseInsensitiveEquals> SetPropertyMap =
107- {
108- //{"focalLength", noIdeaHowToProcessValue},
109- {"up", setUp},
110- {"clipPlane0", setClipPlane},
111- {"clipPlane1", setClipPlane},
112- {"clipPlane2", setClipPlane},
113- {"clipPlane3", setClipPlane},
114- {"clipPlane4", setClipPlane},
115- {"clipPlane5", setClipPlane},
116- // UPDATE WHENEVER `MaxClipPlanes` changes!
117- {"shiftX", setShiftX},
118- {"shiftY", setShiftY},
119- {"fov", setFov},
120- {"fovAxis", setFovAxis},
121- {"shutterOpen", setShutterOpen},
122- {"shuttterClose", setShutterClose},
123- {"moveSpeed", setMoveSpeed},
124- {"zoomSpeed", setZoomSpeed},
125- {"rotateSpeed", setRotateSpeed},
126- {"nearClip", setNearClip},
127- {"farClip", setFarClip},
128- {"focusDistance", setFocusDistance},
129- {"apertureRadius", setApertureRadius}
130- //, {"kc", setKc}
131- };
132-
86+ return retval;
87+ }
13388
134- auto found = SetPropertyMap.find(_property.name);
135- if (found==SetPropertyMap.end())
136- {
137- _NBL_DEBUG_BREAK_IF(true);
138- ParserLog::invalidXMLFileStructure("No Integrator can have such property set with name: "+_property.name);
139- return false;
140- }
141-
142- found->second();
143- return !error;
144- #endif
89+ bool CElementSensor::addProperty (SNamedPropertyElement&& _property, system::logger_opt_ptr logger)
90+ {
14591 assert (false );
14692 return false ;
14793}
0 commit comments