19template<
typename ObjectT>
25 return std::string(
"one " ) + ObjectT::StaticClassName();
27 return std::string(
"two " ) + ObjectT::StaticClassNameInPlural();
29 return std::string(
"three " ) + ObjectT::StaticClassNameInPlural();
31 return std::string(
"four " ) + ObjectT::StaticClassNameInPlural();
33 return std::to_string( n ) +
" " + ObjectT::StaticClassNameInPlural();
39template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
42 if ( objs.size() != n )
44 for (
const auto& obj : objs )
46 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
48 return std::string(
"Selected object(s) must be " ) + ObjectT::StaticClassName();
50 if constexpr ( modelCheck )
51 if ( !tObj->hasModel() )
52 return "Selected object(s) must have valid model";
54 if constexpr ( visualRepresentationCheck )
55 if ( !tObj->hasVisualRepresentation() )
56 return "Selected object(s) must have valid visual representation";
63template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
66 if ( objs.size() < n )
69 for (
const auto& obj : objs )
71 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
75 if constexpr ( modelCheck )
76 if ( !tObj->hasModel() )
79 if constexpr ( visualRepresentationCheck )
80 if ( !tObj->hasVisualRepresentation() )
91template<
typename ObjectT,
bool visualRepresentationCheck,
bool modelCheck>
95 for (
const auto& obj : objs )
97 auto tObj =
dynamic_cast<const ObjectT*
>( obj.get() );
101 if constexpr ( modelCheck )
102 if ( !tObj->hasModel() )
105 if constexpr ( visualRepresentationCheck )
106 if ( !tObj->hasVisualRepresentation() )
126template<
unsigned N,
typename ObjectT,
typename =
void>
131 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
137template<
unsigned N,
typename ObjectT>
142 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
148template<
unsigned N,
typename ObjectT>
153 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
160template<
unsigned N,
typename ObjectT,
typename =
void>
165 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
171template<
unsigned N,
typename ObjectT>
176 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
182template<
unsigned N,
typename ObjectT>
187 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
194template<
unsigned N,
typename ObjectT,
typename =
void>
199 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
205template<
unsigned N,
typename ObjectT>
210 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
216template<
unsigned N,
typename ObjectT>
221 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
228template<
typename ...Checks>
233 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>&objs )
const override
235 std::vector<std::string> checkRes;
236 checkRes.reserve(
sizeof...( Checks ) );
237 ( checkRes.push_back( Checks::isAvailable( objs ) ), ... );
238 std::string combinedRes;
239 for (
int i = 0; i < checkRes.size(); ++i )
241 if ( checkRes[i].empty() )
245 checkRes[i].front() = ( char )tolower( checkRes[i].front() );
247 combinedRes += checkRes[i];
248 if ( i + 1 < checkRes.size() )
249 combinedRes +=
" or ";
256template<
typename ...Checks>
261 virtual std::string
isAvailable(
const std::vector<std::shared_ptr<const Object>>& objs )
const override
263 std::vector<std::string> checkRes;
264 checkRes.reserve(
sizeof...( Checks ) );
265 ( checkRes.push_back( Checks::isAvailable( objs ) ), ... );
266 std::string combinedRes;
267 for (
int i = 0; i < checkRes.size(); ++i )
269 if ( checkRes[i].empty() )
272 if ( !combinedRes.empty() )
274 combinedRes +=
" and ";
275 checkRes[i].front() = ( char )tolower( checkRes[i].front() );
277 combinedRes += checkRes[i];
Interface for checking scene state, to determine availability, also can return string with requiremen...
Definition MRISceneStateCheck.h:17
checks that all of argument checks are true
Definition MRSceneStateCheck.h:258
checks that given vector has at least N objects if type ObjectT
Definition MRSceneStateCheck.h:162
checks that given vector has at most N objects if type ObjectT
Definition MRSceneStateCheck.h:196
check that given vector has exactly N objects if type ObjectT
Definition MRSceneStateCheck.h:128
checks that at least one of argument checks is true
Definition MRSceneStateCheck.h:230
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:210
template std::string getNObjectsLine< ObjectPoints >(unsigned)
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:199
virtual ~SceneStateExactCheck()=default
std::string getNObjectsLine(unsigned n)
Definition MRSceneStateCheck.h:20
virtual ~SceneStateExactCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:261
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
Definition MRSceneStateCheck.h:233
virtual ~SceneStateAtLeastCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:142
virtual ~SceneStateAtMostCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:165
template std::string getNObjectsLine< ObjectMesh >(unsigned)
template std::string sceneSelectedExactly< ObjectPoints, true, true >(const std::vector< std::shared_ptr< const Object > > &, unsigned)
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:221
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:153
virtual ~SceneStateAtMostCheck()=default
virtual ~SceneStateAtLeastCheck()=default
std::string sceneSelectedAtMost(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:92
virtual ~SceneStateAtLeastCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:131
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:176
template std::string sceneSelectedExactly< ObjectLines, true, true >(const std::vector< std::shared_ptr< const Object > > &, unsigned)
std::string sceneSelectedExactly(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:40
std::string sceneSelectedAtLeast(const std::vector< std::shared_ptr< const Object > > &objs, unsigned n)
Definition MRSceneStateCheck.h:64
virtual ~SceneStateExactCheck()=default
virtual std::string isAvailable(const std::vector< std::shared_ptr< const Object > > &objs) const override
return empty string if all requirements are satisfied, otherwise return first unsatisfied requirement
Definition MRSceneStateCheck.h:187
virtual ~SceneStateOrCheck()=default
virtual ~SceneStateAtMostCheck()=default
template std::string getNObjectsLine< ObjectLines >(unsigned)
virtual ~SceneStateAndCheck()=default
template std::string sceneSelectedExactly< ObjectMesh, true, true >(const std::vector< std::shared_ptr< const Object > > &, unsigned)
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
special struct for disabling model check
Definition MRSceneStateCheck.h:17
special struct for disabling visual representation check
Definition MRSceneStateCheck.h:14