Skip to content

Commit

Permalink
An option to skip caches invalidation in setDirtyFlags() (#1501)
Browse files Browse the repository at this point in the history
  • Loading branch information
Fedr authored Aug 3, 2023
1 parent 1be7c13 commit 269c93e
Show file tree
Hide file tree
Showing 18 changed files with 31 additions and 30 deletions.
4 changes: 2 additions & 2 deletions source/MRMesh/MRObjectGcode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ void ObjectGcode::setGcodeSource( const std::shared_ptr<GcodeSource>& gcodeSourc
updateAll_();
}

void ObjectGcode::setDirtyFlags( uint32_t mask )
void ObjectGcode::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
ObjectLinesHolder::setDirtyFlags( mask );
ObjectLinesHolder::setDirtyFlags( mask, invalidateCaches );

if ( mask & DIRTY_POSITION || mask & DIRTY_PRIMITIVES )
{
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectGcode.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class MRMESH_CLASS ObjectGcode : public ObjectLinesHolder
// get mapping of tool path polyline segment id to source line number of g-code source
virtual const std::vector<int>& segmentToSourceLineMap() const { return segmentToSourceLineMap_; }

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

/// \note this ctor is public only for std::make_shared used inside clone()
ObjectGcode( ProtectedStruct, const ObjectGcode& obj ) : ObjectGcode( obj ) {}
Expand Down
4 changes: 2 additions & 2 deletions source/MRMesh/MRObjectLines.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ std::shared_ptr< Polyline3 > ObjectLines::updatePolyline( std::shared_ptr< Polyl
return polyline;
}

void ObjectLines::setDirtyFlags( uint32_t mask )
void ObjectLines::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
ObjectLinesHolder::setDirtyFlags( mask );
ObjectLinesHolder::setDirtyFlags( mask, invalidateCaches );

if ( mask & DIRTY_POSITION || mask & DIRTY_PRIMITIVES )
{
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectLines.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class MRMESH_CLASS ObjectLines : public ObjectLinesHolder

virtual const std::shared_ptr<Polyline3>& varPolyline() { return polyline_; }

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

/// \note this ctor is public only for std::make_shared used inside clone()
ObjectLines( ProtectedStruct, const ObjectLines& obj ) : ObjectLines( obj ) {}
Expand Down
6 changes: 3 additions & 3 deletions source/MRMesh/MRObjectLinesHolder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ std::shared_ptr<Object> ObjectLinesHolder::shallowClone() const
return res;
}

void ObjectLinesHolder::setDirtyFlags( uint32_t mask )
void ObjectLinesHolder::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
VisualObject::setDirtyFlags( mask );
VisualObject::setDirtyFlags( mask, invalidateCaches );

if ( mask & DIRTY_PRIMITIVES )
{
Expand All @@ -66,7 +66,7 @@ void ObjectLinesHolder::setDirtyFlags( uint32_t mask )
totalLength_.reset();
worldBox_.reset();
worldBox_.get().reset();
if ( polyline_ )
if ( invalidateCaches && polyline_ )
polyline_->invalidateCaches();
}
}
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectLinesHolder.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ class MRMESH_CLASS ObjectLinesHolder : public VisualObject
const std::shared_ptr<const Polyline3>& polyline() const
{ return reinterpret_cast< const std::shared_ptr<const Polyline3>& >( polyline_ ); } // reinterpret_cast to avoid making a copy of shared_ptr

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

MRMESH_API virtual void setLineWidth( float width );
float getLineWidth() const { return lineWidth_; }
Expand Down
4 changes: 2 additions & 2 deletions source/MRMesh/MRObjectMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -137,9 +137,9 @@ std::shared_ptr<Object> ObjectMesh::shallowClone() const
return res;
}

void ObjectMesh::setDirtyFlags( uint32_t mask )
void ObjectMesh::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
ObjectMeshHolder::setDirtyFlags( mask );
ObjectMeshHolder::setDirtyFlags( mask, invalidateCaches );
if ( mask & DIRTY_POSITION || mask & DIRTY_FACE)
{
if ( mesh_ )
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class MRMESH_CLASS ObjectMesh : public ObjectMeshHolder
MRMESH_API virtual std::shared_ptr<Object> clone() const override;
MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

/// \note this ctor is public only for std::make_shared used inside clone()
ObjectMesh( ProtectedStruct, const ObjectMesh& obj ) : ObjectMesh( obj ) {}
Expand Down
6 changes: 3 additions & 3 deletions source/MRMesh/MRObjectMeshHolder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -531,13 +531,13 @@ size_t ObjectMeshHolder::numHandles() const
return meshStat_->numComponents - EulerCharacteristic / 2;
}

void ObjectMeshHolder::setDirtyFlags( uint32_t mask )
void ObjectMeshHolder::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
// selected faces and edges can be changed only by the methods of this class,
// which set dirty flags appropriately
mask &= ~( DIRTY_SELECTION | DIRTY_EDGES_SELECTION );

VisualObject::setDirtyFlags( mask );
VisualObject::setDirtyFlags( mask, invalidateCaches );

if ( mask & DIRTY_FACE )
{
Expand All @@ -552,7 +552,7 @@ void ObjectMeshHolder::setDirtyFlags( uint32_t mask )
totalArea_.reset();
selectedArea_.reset();
avgEdgeLen_.reset();
if ( mesh_ )
if ( invalidateCaches && mesh_ )
mesh_->invalidateCaches();
}
}
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectMeshHolder.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class MRMESH_CLASS ObjectMeshHolder : public VisualObject
MRMESH_API virtual std::shared_ptr<Object> clone() const override;
MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

const FaceBitSet& getSelectedFaces() const { return selectedTriangles_; }
MRMESH_API virtual void selectFaces( FaceBitSet newSelection );
Expand Down
4 changes: 2 additions & 2 deletions source/MRMesh/MRObjectPoints.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ std::vector<std::string> ObjectPoints::getInfoLines() const
return res;
}

void ObjectPoints::setDirtyFlags( uint32_t mask )
void ObjectPoints::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
ObjectPointsHolder::setDirtyFlags( mask );
ObjectPointsHolder::setDirtyFlags( mask, invalidateCaches );
if ( mask & DIRTY_POSITION || mask & DIRTY_FACE )
{
if ( points_ )
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectPoints.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class MRMESH_CLASS ObjectPoints : public ObjectPointsHolder
MRMESH_API virtual std::vector<std::string> getInfoLines() const override;
virtual std::string getClassName() const override { return "Points"; }

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

/// signal about points changing, triggered in setDirtyFlag
using PointsChangedSignal = Signal<void( uint32_t mask )>;
Expand Down
6 changes: 3 additions & 3 deletions source/MRMesh/MRObjectPointsHolder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ std::shared_ptr<MR::Object> ObjectPointsHolder::shallowClone() const
return res;
}

void ObjectPointsHolder::setDirtyFlags( uint32_t mask )
void ObjectPointsHolder::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
VisualObject::setDirtyFlags( mask );
VisualObject::setDirtyFlags( mask, invalidateCaches );

if ( mask & DIRTY_FACE )
numValidPoints_.reset();
Expand All @@ -72,7 +72,7 @@ void ObjectPointsHolder::setDirtyFlags( uint32_t mask )
{
worldBox_.reset();
worldBox_.get().reset();
if ( points_ )
if ( invalidateCaches && points_ )
points_->invalidateCaches();
}
}
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectPointsHolder.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class MRMESH_CLASS ObjectPointsHolder : public VisualObject
MRMESH_API virtual std::shared_ptr<Object> clone() const override;
MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

const VertBitSet& getSelectedPoints() const { return selectedPoints_; }
MRMESH_API virtual void selectPoints( VertBitSet newSelection );
Expand Down
6 changes: 3 additions & 3 deletions source/MRMesh/MRObjectVoxels.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -372,11 +372,11 @@ std::shared_ptr<Object> ObjectVoxels::shallowClone() const
return res;
}

void ObjectVoxels::setDirtyFlags( uint32_t mask )
void ObjectVoxels::setDirtyFlags( uint32_t mask, bool invalidateCaches )
{
ObjectMeshHolder::setDirtyFlags( mask );
ObjectMeshHolder::setDirtyFlags( mask, invalidateCaches );

if ( ( mask & DIRTY_POSITION || mask & DIRTY_FACE ) && mesh_ )
if ( invalidateCaches && ( mask & DIRTY_POSITION || mask & DIRTY_FACE ) && mesh_ )
mesh_->invalidateCaches();
}

Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRObjectVoxels.h
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ class MRMESH_CLASS ObjectVoxels : public ObjectMeshHolder
MRMESH_API virtual std::shared_ptr<Object> clone() const override;
MRMESH_API virtual std::shared_ptr<Object> shallowClone() const override;

MRMESH_API virtual void setDirtyFlags( uint32_t mask ) override;
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true ) override;

/// \note this ctor is public only for std::make_shared used inside clone()
ObjectVoxels( ProtectedStruct, const ObjectVoxels& obj ) : ObjectVoxels( obj ) {}
Expand Down
2 changes: 1 addition & 1 deletion source/MRMesh/MRVisualObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ void VisualObject::setLabelsColorsForAllViewports( ViewportProperty<Color> val )
labelsColor_ = val;
}

void VisualObject::setDirtyFlags( uint32_t mask )
void VisualObject::setDirtyFlags( uint32_t mask, bool )
{
if ( mask & DIRTY_FACE ) // first to also activate all flags due to DIRTY_POSITION later
mask |= DIRTY_POSITION | DIRTY_UV | DIRTY_VERTS_COLORMAP;
Expand Down
3 changes: 2 additions & 1 deletion source/MRMesh/MRVisualObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,8 @@ class MRMESH_CLASS VisualObject : public Object

/// sets some dirty flags for the object (to force its visual update)
/// \param mask is a union of DirtyFlags flags
MRMESH_API virtual void setDirtyFlags( uint32_t mask );
/// \param invalidateCaches whether to automatically invalidate model caches (pass false here if you manually update the caches)
MRMESH_API virtual void setDirtyFlags( uint32_t mask, bool invalidateCaches = true );
/// returns current dirty flags for the object
MRMESH_API uint32_t getDirtyFlags() const { return dirty_; }
/// resets all dirty flags (except for cache flags that will be reset automatically on cache update)
Expand Down

0 comments on commit 269c93e

Please sign in to comment.