38 IsVisualizeMaskEnum<T>::value &&
39 std::is_same_v<std::underlying_type_t<T>,
int> &&
40 std::is_same_v<T, std::remove_cvref_t<T>>;
53class AnyVisualizeMaskEnum
55 std::type_index type_;
59 template <AnyVisualizeMaskEnumType T>
62 template <AnyVisualizeMaskEnumType T>
63 [[nodiscard]] std::optional<T> tryGet()
const
65 if ( type_ ==
typeid(T) )
77 DIRTY_POSITION = 0x0001,
79 DIRTY_VERTS_RENDER_NORMAL = 0x0004,
80 DIRTY_FACES_RENDER_NORMAL = 0x0008,
81 DIRTY_CORNERS_RENDER_NORMAL = 0x0010,
82 DIRTY_RENDER_NORMALS = DIRTY_VERTS_RENDER_NORMAL | DIRTY_FACES_RENDER_NORMAL | DIRTY_CORNERS_RENDER_NORMAL,
83 DIRTY_SELECTION = 0x0020,
84 DIRTY_TEXTURE = 0x0040,
85 DIRTY_PRIMITIVES = 0x0080,
86 DIRTY_FACE = DIRTY_PRIMITIVES,
87 DIRTY_VERTS_COLORMAP = 0x0100,
88 DIRTY_PRIMITIVE_COLORMAP = 0x0200,
89 DIRTY_FACES_COLORMAP = DIRTY_PRIMITIVE_COLORMAP,
90 DIRTY_TEXTURE_PER_FACE = 0x0400,
92 DIRTY_BOUNDING_BOX = 0x0800,
93 DIRTY_BORDER_LINES = 0x1000,
94 DIRTY_EDGES_SELECTION = 0x2000,
95 DIRTY_CACHES = DIRTY_BOUNDING_BOX,
96 DIRTY_VOLUME = 0x4000,
105 uint32_t f{DIRTY_ALL};
106 operator uint32_t&() {
return f; }
107 operator uint32_t()
const {
return f; }
109 Dirty() noexcept = default;
112 Dirty& operator =( const
Dirty& ) noexcept {
return *
this; }
113 Dirty& operator =(
Dirty&& ) noexcept = default;
114 Dirty& operator =( uint32_t b ) noexcept { f = b;
return *
this; }
123 VisualObject( VisualObject&& ) =
default;
124 VisualObject& operator = ( VisualObject&& ) =
default;
125 virtual ~VisualObject() =
default;
127 constexpr static const char* StaticTypeName() noexcept {
return "VisualObject"; }
128 virtual const char* typeName()
const override {
return StaticTypeName(); }
130 constexpr static const char* StaticClassName() noexcept {
return "Visual Object"; }
131 virtual std::string className()
const override {
return StaticClassName(); }
133 constexpr static const char* StaticClassNameInPlural() noexcept {
return "Visual Objects"; }
134 virtual std::string classNameInPlural()
const override {
return StaticClassNameInPlural(); }
137 [[nodiscard]]
MRMESH_API virtual bool supportsVisualizeProperty( AnyVisualizeMaskEnum type )
const;
139 MRMESH_API void setVisualizeProperty(
bool value, AnyVisualizeMaskEnum type, ViewportMask viewportMask );
141 MRMESH_API virtual void setVisualizePropertyMask( AnyVisualizeMaskEnum type, ViewportMask viewportMask );
143 MRMESH_API bool getVisualizeProperty( AnyVisualizeMaskEnum type, ViewportMask viewportMask )
const;
145 MRMESH_API virtual const ViewportMask& getVisualizePropertyMask( AnyVisualizeMaskEnum type )
const;
147 MRMESH_API void toggleVisualizeProperty( AnyVisualizeMaskEnum type, ViewportMask viewportMask );
152 void setAllVisualizeProperties(
const AllVisualizeProperties& properties )
154 std::size_t counter = 0;
155 setAllVisualizeProperties_( properties, counter );
159 MRMESH_API void copyAllSolidColors(
const VisualObject& other );
162 [[nodiscard]]
MRMESH_API ViewportMask globalClippedByPlaneMask()
const;
165 [[nodiscard]]
bool globalClippedByPlane( ViewportMask viewportMask = ViewportMask::any() )
const {
return !( globalClippedByPlaneMask() & viewportMask ).empty(); }
168 MRMESH_API void setGlobalClippedByPlane(
bool on, ViewportMask viewportMask = ViewportMask::all() );
171 void showName(
bool on ) {
return setVisualizeProperty( on, VisualizeMaskType::Name, ViewportMask::all() ); }
173 bool showName()
const {
return getVisualizeProperty( VisualizeMaskType::Name, ViewportMask::any() ); }
176 MRMESH_API const Color& getFrontColor(
bool selected =
true, ViewportId viewportId = {} )
const;
178 MRMESH_API virtual void setFrontColor(
const Color& color,
bool selected, ViewportId viewportId = {} );
181 MRMESH_API virtual const ViewportProperty<Color>& getFrontColorsForAllViewports(
bool selected =
true )
const;
183 MRMESH_API virtual void setFrontColorsForAllViewports( ViewportProperty<Color> val,
bool selected =
true );
186 MRMESH_API virtual const ViewportProperty<Color>& getBackColorsForAllViewports()
const;
188 MRMESH_API virtual void setBackColorsForAllViewports( ViewportProperty<Color> val );
191 MRMESH_API const Color& getBackColor( ViewportId viewportId = {} )
const;
193 MRMESH_API virtual void setBackColor(
const Color& color, ViewportId viewportId = {} );
196 MRMESH_API const uint8_t& getGlobalAlpha( ViewportId viewportId = {} )
const;
198 MRMESH_API virtual void setGlobalAlpha( uint8_t alpha, ViewportId viewportId = {} );
201 MRMESH_API virtual const ViewportProperty<uint8_t>& getGlobalAlphaForAllViewports()
const;
203 MRMESH_API virtual void setGlobalAlphaForAllViewports( ViewportProperty<uint8_t> val );
208 MRMESH_API virtual void setDirtyFlags( uint32_t mask,
bool invalidateCaches =
true );
210 MRMESH_API uint32_t getDirtyFlags()
const {
return dirty_; }
214 MRMESH_API virtual void resetDirtyExceptMask( uint32_t mask )
const;
220 MRMESH_API virtual Box3f getWorldBox( ViewportId = {} )
const override;
222 virtual bool getRedrawFlag( ViewportMask viewportMask )
const override
224 return Object::getRedrawFlag( viewportMask ) ||
225 ( isVisible( viewportMask ) &&
226 ( dirty_ & ( ~( DIRTY_CACHES ) ) ) );
230 bool isPickable( ViewportMask viewportMask = ViewportMask::any() )
const{
return !(pickable_ & viewportMask).empty();}
232 MRMESH_API virtual void setPickable(
bool on, ViewportMask viewportMask = ViewportMask::all() );
235 ColoringType getColoringType()
const {
return coloringType_; }
238 MRMESH_API virtual void setColoringType( ColoringType coloringType );
241 float getShininess()
const {
return shininess_; }
243 virtual void setShininess(
float shininess ) { shininess_ = shininess; needRedraw_ =
true; }
246 float getSpecularStrength()
const {
return specularStrength_; }
248 virtual void setSpecularStrength(
float specularStrength ) { specularStrength_ = specularStrength; needRedraw_ =
true; }
251 float getAmbientStrength()
const {
return ambientStrength_; }
253 virtual void setAmbientStrength(
float ambientStrength ) { ambientStrength_ = ambientStrength; needRedraw_ =
true; }
257 MRMESH_API virtual std::shared_ptr<Object> clone()
const override;
260 MRMESH_API virtual std::shared_ptr<Object> shallowClone()
const override;
264 MRMESH_API virtual bool render(
const ModelRenderParams& )
const;
266 MRMESH_API virtual void renderForPicker(
const ModelBaseRenderParams&,
unsigned )
const;
268 MRMESH_API virtual void renderUi(
const UiRenderParams& params )
const;
271 VisualObject( ProtectedStruct,
const VisualObject& obj ) : VisualObject( obj ) {}
276 MRMESH_API virtual std::vector<std::string> getInfoLines()
const override;
280 [[nodiscard]]
MRMESH_API bool useDefaultScenePropertiesOnDeserialization()
const {
return useDefaultScenePropertiesOnDeserialization_; }
283 MRMESH_API void setUseDefaultScenePropertiesOnDeserialization(
bool useDefaultScenePropertiesOnDeserialization )
284 { useDefaultScenePropertiesOnDeserialization_ = useDefaultScenePropertiesOnDeserialization; }
292 VisualObject(
const VisualObject& obj ) =
default;
295 MRMESH_API virtual void swapBase_( Object& other )
override;
299 virtual void setupRenderObject_()
const {}
301 mutable UniquePtr<IRenderObject> renderObj_;
306 ViewportMask clipByPlane_;
307 ViewportMask showName_;
308 ViewportMask pickable_ = ViewportMask::all();
309 ViewportMask invertNormals_;
310 ViewportMask depthTest_ = ViewportMask::all();
312 float shininess_{35.0f};
313 float specularStrength_{ 0.5f };
314 float ambientStrength_{ 0.1f };
317 ColoringType coloringType_{ColoringType::SolidColor};
318 ViewportProperty<Color> selectedColor_;
319 ViewportProperty<Color> unselectedColor_;
320 ViewportProperty<Color> backFacesColor_;
321 ViewportProperty<uint8_t> globalAlpha_{ 255 };
323 bool useDefaultScenePropertiesOnDeserialization_{
false };
325 MRMESH_API ViewportMask& getVisualizePropertyMask_( AnyVisualizeMaskEnum type );
327 MRMESH_API virtual void serializeFields_( Json::Value& root )
const override;
329 MRMESH_API void deserializeFields_(
const Json::Value& root )
override;
331 virtual Box3f computeBoundingBox_()
const {
return Box3f(); }
334 MRMESH_API void boundingBoxToInfoLines_( std::vector<std::string> & res )
const;
336 MRMESH_API virtual void setAllVisualizeProperties_(
const AllVisualizeProperties& properties, std::size_t& pos );
339 template <AnyVisualizeMaskEnumType T>
340 void setAllVisualizePropertiesForEnum(
const AllVisualizeProperties& properties, std::size_t& pos )
342 for (
int i = 0; i < int( T::_count ); i++ )
343 setVisualizePropertyMask( T( i ), properties[pos++] );
346 template <AnyVisualizeMaskEnumType T>
347 void getAllVisualizePropertiesForEnum( AllVisualizeProperties& properties )
const
349 properties.reserve( properties.size() + std::size_t( T::_count ) );
350 for (
int i = 0; i < int( ( T::_count ) ); i++ )
351 properties.push_back( getVisualizePropertyMask( T( i ) ) );
355 mutable Dirty dirty_;
357 mutable Box3f boundingBoxCache_;
360 void setDefaultColors_();
363 void setDefaultSceneProperties_();
_count
Definition MRFeatureObject.h:87
#define MRMESH_API
Definition MRMeshFwd.h:80
#define MRMESH_CLASS
Definition MRMeshFwd.h:87
InvertedNormals
Definition MRVisualObject.h:23
Visibility
Definition MRVisualObject.h:22
ClippedByPlane
Definition MRVisualObject.h:25
Name
Definition MRVisualObject.h:24
DepthTest
Definition MRVisualObject.h:26
unsafe AnyVisualizeMaskEnum(MR.Const_AnyVisualizeMaskEnum _other)
Definition MRVisualObject.h:37
std::vector< ViewportMask > AllVisualizeProperties
Definition MRVisualObject.h:72
Definition MRCameraOrientationPlugin.h:8
int heapBytes(FloatGrid grid)
Definition MRVisualObject.h:32