Radium Engine  1.5.20
Loading...
Searching...
No Matches
Ra::Core::Geometry::MultiIndexedGeometry Class Reference

AbstractGeometry with per-vertex attributes and layers of indices. Each layer represents a different topology or indexing logic, e.g. triangle/line/quad meshes, point-clouds. More...

#include <Core/Geometry/IndexedGeometry.hpp>

+ Inheritance diagram for Ra::Core::Geometry::MultiIndexedGeometry:
+ Collaboration diagram for Ra::Core::Geometry::MultiIndexedGeometry:

Public Types

using LayerSemanticCollection = Utils::ObjectWithSemantic::SemanticNameCollection
 
using LayerSemantic = Utils::ObjectWithSemantic::SemanticName
 
using LayerKeyType = std::pair<LayerSemanticCollection, std::string>
 
using PointAttribHandle = AttribArrayGeometry::PointAttribHandle
 
using NormalAttribHandle = AttribArrayGeometry::NormalAttribHandle
 
using FloatAttribHandle = AttribArrayGeometry::FloatAttribHandle
 
using Vec2AttribHandle = AttribArrayGeometry::Vec2AttribHandle
 
using Vec3AttribHandle = AttribArrayGeometry::Vec3AttribHandle
 
using Vec4AttribHandle = AttribArrayGeometry::Vec4AttribHandle
 
- Public Types inherited from Ra::Core::Geometry::AttribArrayGeometry
using Point = Vector3
 
using Normal = Vector3
 
using PointAttribHandle = Utils::AttribHandle<Point>
 
using NormalAttribHandle = Utils::AttribHandle<Normal>
 
using FloatAttribHandle = Utils::AttribHandle<Scalar>
 
using Vec2AttribHandle = Utils::AttribHandle<Vector2>
 
using Vec3AttribHandle = Utils::AttribHandle<Vector3>
 
using Vec4AttribHandle = Utils::AttribHandle<Vector4>
 

Public Member Functions

 MultiIndexedGeometry (const MultiIndexedGeometry &other)
 
 MultiIndexedGeometry (MultiIndexedGeometry &&other)
 
 MultiIndexedGeometry (const AttribArrayGeometry &other)
 
 MultiIndexedGeometry (AttribArrayGeometry &&other)
 
MultiIndexedGeometryoperator= (const MultiIndexedGeometry &other)
 
MultiIndexedGeometryoperator= (MultiIndexedGeometry &&other)
 
void clear () override
 Erases all data, making the AttribArrayGeometry empty.
 
void copy (const MultiIndexedGeometry &other)
 Copy geometry and indices from others.
 
void checkConsistency () const
 Check that the MultiIndexedGeometry is well built, asserting when it is not.
 
bool append (const MultiIndexedGeometry &other)
 
bool containsLayer (const LayerKeyType &layerKey) const
 Check if at least one layer with such properties exists.
 
bool containsLayer (const LayerSemanticCollection &semantics, const std::string &layerName) const
 Check if at least one layer with such properties exists.
 
bool containsLayer (const LayerSemanticCollection &semantics) const
 Check if at least one layer with such properties exists.
 
bool containsLayer (const LayerSemantic &semanticName) const
 Check if at least one layer with such properties exists.
 
size_t countLayers (const LayerKeyType &layerKey) const
 Count the number of layer matching the input parameters.
 
size_t countLayers (const LayerSemanticCollection &semantics, const std::string &layerName) const
 Count the number of layer matching the input parameters.
 
size_t countLayers (const LayerSemanticCollection &semantics) const
 Count the number of layer matching the input parameters.
 
size_t countLayers (const LayerSemantic &semanticName) const
 Count the number of layer matching the input parameters.
 
const GeometryIndexLayerBasegetLayer (const LayerKeyType &layerKey) const
 Read-only access to a layer.
 
const GeometryIndexLayerBasegetLayer (const LayerSemanticCollection &semantics, const std::string &layerName) const
 Read-only access to a layer.
 
std::pair< LayerKeyType, const GeometryIndexLayerBase & > getFirstLayerOccurrence (const LayerSemanticCollection &semantics) const
 Read-only access to a layer.
 
std::pair< LayerKeyType, const GeometryIndexLayerBase & > getFirstLayerOccurrence (const LayerSemantic &semanticName) const
 Read-only access to a layer.
 
GeometryIndexLayerBasegetLayerWithLock (const LayerKeyType &layerKey)
 Write access to a layer.
 
GeometryIndexLayerBasegetLayerWithLock (const LayerSemanticCollection &semantics, const std::string &layerName)
 Write access to a layer.
 
std::pair< LayerKeyType, GeometryIndexLayerBase & > getFirstLayerOccurrenceWithLock (const LayerSemanticCollection &semantics)
 Write access to a layer.
 
std::pair< LayerKeyType, GeometryIndexLayerBase & > getFirstLayerOccurrenceWithLock (const LayerSemantic &semanticName)
 Write access to a layer.
 
void unlockLayer (const LayerKeyType &layerKey)
 Unlock layer with write acces, notify observers of the update.
 
void unlockLayer (const LayerSemanticCollection &semantics, const std::string &layerName)
 Unlock layer with write acces, notify observers of the update.
 
std::pair< bool, GeometryIndexLayerBase & > addLayer (std::unique_ptr< GeometryIndexLayerBase > &&layer, const bool withLock=false, const std::string &layerName="")
 Add layer.
 
auto layerKeys () const
 Range on layer keys (read-only)
 
- Public Member Functions inherited from Ra::Core::Geometry::AttribArrayGeometry
 AttribArrayGeometry ()
 Create an empty geometry.
 
 AttribArrayGeometry (const AttribArrayGeometry &other)
 
 AttribArrayGeometry (AttribArrayGeometry &&other)
 
AttribArrayGeometryoperator= (const AttribArrayGeometry &other)
 
AttribArrayGeometryoperator= (AttribArrayGeometry &&other)
 
bool append (const AttribArrayGeometry &other)
 
void setVertices (PointAttribHandle::Container &&vertices)
 Set vertices.
 
void setVertices (const PointAttribHandle::Container &vertices)
 Set vertices.
 
const PointAttribHandle::Container & vertices () const
 Access the vertices positions.
 
void setNormals (PointAttribHandle::Container &&normals)
 Set normals.
 
void setNormals (const PointAttribHandle::Container &normals)
 Set normals.
 
const NormalAttribHandle::Container & normals () const
 Access the vertices normals.
 
template<typename T >
Utils::AttribHandle< T > getAttribHandle (const std::string &name) const
 
template<typename T >
bool isValid (const Utils::AttribHandle< T > &h) const
 Return true if h refers to an existing attribute in *this.
 
bool hasAttrib (const std::string &name) const
 
template<typename T >
void removeAttrib (Utils::AttribHandle< T > &h)
 
void clearAttributes ()
 Erases all attributes, leaving the AttribArrayGeometry with geometry only.
 
virtual void copyBaseGeometry (const AttribArrayGeometry &other)
 
template<typename... Handles>
bool copyAttributes (const AttribArrayGeometry &input, Handles... attribs)
 
bool copyAllAttributes (const AttribArrayGeometry &input)
 
Aabb computeAabb () const override
 Compute bounding box.
 
void colorize (const Utils::Color &c)
 
Utils::AttribManagervertexAttribs ()
 
const Utils::AttribManagervertexAttribs () const
 
PointAttribHandle::Container & verticesWithLock ()
 
void verticesUnlock ()
 Release lock on vertices positions.
 
NormalAttribHandle::Container & normalsWithLock ()
 
void normalsUnlock ()
 Release lock on vertices normals.
 
template<typename T >
Utils::Attrib< T > & getAttrib (const Utils::AttribHandle< T > &h)
 
template<typename T >
const Utils::Attrib< T > & getAttrib (const Utils::AttribHandle< T > &h) const
 
template<typename T >
Utils::Attrib< T > & getAttrib (const std::string &name)
 
template<typename T >
const Utils::Attrib< T > & getAttrib (const std::string &name) const
 
template<typename T >
Utils::Attrib< T > * getAttribPtr (const Utils::AttribHandle< T > &h)
 
template<typename T >
const Utils::Attrib< T > * getAttribPtr (const Utils::AttribHandle< T > &h) const
 
Utils::AttribBasegetAttribBase (const std::string &name)
 
const Utils::AttribBasegetAttribBase (const std::string &name) const
 
template<typename T >
Utils::AttribHandle< T > addAttrib (const std::string &name)
 
template<typename T >
Utils::AttribHandle< T > addAttrib (const std::string &name, const typename Core::VectorArray< T > &data)
 
template<typename T >
Utils::AttribHandle< T > addAttrib (const std::string &name, const typename Utils::Attrib< T >::Container &&data)
 
- Public Member Functions inherited from Ra::Core::Geometry::AbstractGeometry
 AbstractGeometry (const AbstractGeometry &other)
 
AbstractGeometryoperator= (const AbstractGeometry &other)
 
Ra::Core::Utils::ObservableVoid & getAabbObservable ()
 

Protected Member Functions

void unlockFirstLayerOccurrence (const LayerSemanticCollection &semantics)
 Unlock layer with write acces, notify observers of the update.
 
void unlockFirstLayerOccurrence (const LayerSemantic &semanticName)
 Unlock layer with write acces, notify observers of the update.
 
- Protected Member Functions inherited from Ra::Core::Geometry::AbstractGeometry
bool isAabbValid () const
 
Core::Aabb getAabb () const
 
void invalidateAabb () const
 
void setAabb (const Core::Aabb &aabb) const
 

Detailed Description

AbstractGeometry with per-vertex attributes and layers of indices. Each layer represents a different topology or indexing logic, e.g. triangle/line/quad meshes, point-clouds.

Multiple layers are useful to share and maintain consistency of per-vertex attributes between different meshes representing the same geometry, e.g., a quad and triangle mesh layers connecting the same set of vertices.

Data-structure

It is designed as follow:

See also
GeometryIndexLayerBase for more details about layers, semantics, and custom layers definition.
PointCloudIndexLayer, TriangleIndexLayer for examples of layers

Adding new layers

See also
setLayer to add or update an existing layer.

Example of adding a PointCloudIndexLayer to an existing MultiIndexedGeometry geo:

auto pil = std::make_unique<PointCloudIndexLayer>();
// fill indices as linspace
pil->linearIndices( geo );
// optional: save semantics for later
pilSemantics = pil->semantics();
// insert with default name
bool layerAdded = geo.addLayer( std::move( pil ) ).first;

Accessing layers

Each layer is also associated with a lock state, used to give read-only or to lock write access.

Layers can be accessed in different ways (see containsLayer, countLayers, getFirstLayerOccurrence, and getLayer):

  • query by name and semantics, by passing either LayerKeyType or a pair of name/semantics
  • query by semantics (Utils::ObjectWithSemantic::SemanticNameCollection), names are ignored. Only the first occurrence found is returned when required.
  • query by semantic name (Utils::ObjectWithSemantic::SemanticName): matches any layer including the given semantic name. Only the first occurrence found is returned when required.
Note
Layer ordering is arbitrary and might change each time a new layer is added.

Definition at line 131 of file IndexedGeometry.hpp.

Member Typedef Documentation

◆ FloatAttribHandle

◆ LayerKeyType

◆ LayerSemantic

◆ LayerSemanticCollection

◆ NormalAttribHandle

◆ PointAttribHandle

◆ Vec2AttribHandle

◆ Vec3AttribHandle

◆ Vec4AttribHandle

Constructor & Destructor Documentation

◆ MultiIndexedGeometry() [1/4]

Ra::Core::Geometry::MultiIndexedGeometry::MultiIndexedGeometry ( const MultiIndexedGeometry & other)
explicit

Definition at line 8 of file IndexedGeometry.cpp.

◆ MultiIndexedGeometry() [2/4]

Ra::Core::Geometry::MultiIndexedGeometry::MultiIndexedGeometry ( MultiIndexedGeometry && other)
explicit

Definition at line 13 of file IndexedGeometry.cpp.

◆ MultiIndexedGeometry() [3/4]

Ra::Core::Geometry::MultiIndexedGeometry::MultiIndexedGeometry ( const AttribArrayGeometry & other)
explicit

Definition at line 16 of file IndexedGeometry.cpp.

◆ MultiIndexedGeometry() [4/4]

Ra::Core::Geometry::MultiIndexedGeometry::MultiIndexedGeometry ( AttribArrayGeometry && other)
explicit

Definition at line 19 of file IndexedGeometry.cpp.

◆ ~MultiIndexedGeometry()

Ra::Core::Geometry::MultiIndexedGeometry::~MultiIndexedGeometry ( )
inlinevirtual

Definition at line 651 of file IndexedGeometry.hpp.

Member Function Documentation

◆ addLayer()

std::pair< bool, GeometryIndexLayerBase & > Ra::Core::Geometry::MultiIndexedGeometry::addLayer ( std::unique_ptr< GeometryIndexLayerBase > && layer,
const bool withLock = false,
const std::string & layerName = "" )

Add layer.

Notify observers of the update.

Returns
false if a layer with same semantics and name already exists.
Warning
Takes the ownership of the layer

If not inserted, the pointer is deleted. So the caller must ensure this possible deletion is safe before calling this method.

Definition at line 214 of file IndexedGeometry.cpp.

+ Here is the call graph for this function:

◆ append()

bool Ra::Core::Geometry::MultiIndexedGeometry::append ( const MultiIndexedGeometry & other)

Append another MultiIndexedGeometry to this one. Layers with same name/semantics are concatenated, and other layers are ignored

Returns
true if all fields have been copied

Definition at line 58 of file IndexedGeometry.cpp.

+ Here is the call graph for this function:

◆ checkConsistency()

void Ra::Core::Geometry::MultiIndexedGeometry::checkConsistency ( ) const

Check that the MultiIndexedGeometry is well built, asserting when it is not.

Note
Only compiles to something when in debug mode.
Todo
Implement MultiIndexedGeometry::checkConsistency

Definition at line 53 of file IndexedGeometry.cpp.

◆ clear()

void Ra::Core::Geometry::MultiIndexedGeometry::clear ( )
overridevirtual

Erases all data, making the AttribArrayGeometry empty.

Reimplemented from Ra::Core::Geometry::AttribArrayGeometry.

Definition at line 38 of file IndexedGeometry.cpp.

◆ containsLayer() [1/4]

bool Ra::Core::Geometry::MultiIndexedGeometry::containsLayer ( const LayerKeyType & layerKey) const
inline

Check if at least one layer with such properties exists.

Parameters
layerKeylayer key
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection

Definition at line 657 of file IndexedGeometry.hpp.

◆ containsLayer() [2/4]

bool Ra::Core::Geometry::MultiIndexedGeometry::containsLayer ( const LayerSemantic & semanticName) const

Check if at least one layer with such properties exists.

Convenience function.

Parameters
semanticNamelayer one semantic associated with the layer
Complexity:
\( O(n) \), with \( n \) the number of semantic names in the collection

Definition at line 89 of file IndexedGeometry.cpp.

◆ containsLayer() [3/4]

bool Ra::Core::Geometry::MultiIndexedGeometry::containsLayer ( const LayerSemanticCollection & semantics) const

Check if at least one layer with such properties exists.

Convenience function.

Parameters
semanticscollection of semantics associated with the layer (they should all match)
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection

Definition at line 96 of file IndexedGeometry.cpp.

◆ containsLayer() [4/4]

bool Ra::Core::Geometry::MultiIndexedGeometry::containsLayer ( const LayerSemanticCollection & semantics,
const std::string & layerName ) const
inline

Check if at least one layer with such properties exists.

Convenience function.

Parameters
semanticscollection of semantics associated with the layer (they should all match)
layerNamelayer name
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection

Definition at line 662 of file IndexedGeometry.hpp.

+ Here is the call graph for this function:

◆ copy()

void Ra::Core::Geometry::MultiIndexedGeometry::copy ( const MultiIndexedGeometry & other)

Copy geometry and indices from others.

See also
AttribArrayGeometry::copyBaseGeometry

Definition at line 45 of file IndexedGeometry.cpp.

◆ countLayers() [1/4]

size_t Ra::Core::Geometry::MultiIndexedGeometry::countLayers ( const LayerKeyType & layerKey) const
inline

Count the number of layer matching the input parameters.

Parameters
layerKeylayer key
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection

Definition at line 668 of file IndexedGeometry.hpp.

◆ countLayers() [2/4]

size_t Ra::Core::Geometry::MultiIndexedGeometry::countLayers ( const LayerSemantic & semanticName) const

Count the number of layer matching the input parameters.

Convenience function.

Parameters
semanticNamelayer one semantic associated with the layer
Complexity:
\( O(n) \), with \( n \) the number of semantic names in the collection

Definition at line 106 of file IndexedGeometry.cpp.

◆ countLayers() [3/4]

size_t Ra::Core::Geometry::MultiIndexedGeometry::countLayers ( const LayerSemanticCollection & semantics) const

Count the number of layer matching the input parameters.

Convenience function.

Parameters
semanticscollection of semantics associated with the layer (they should all match)
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection

Definition at line 114 of file IndexedGeometry.cpp.

◆ countLayers() [4/4]

size_t Ra::Core::Geometry::MultiIndexedGeometry::countLayers ( const LayerSemanticCollection & semantics,
const std::string & layerName ) const
inline

Count the number of layer matching the input parameters.

Convenience function.

Parameters
semanticscollection of semantics associated with the layer (they should all match)
layerNamelayer name
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection

Definition at line 673 of file IndexedGeometry.hpp.

+ Here is the call graph for this function:

◆ getFirstLayerOccurrence() [1/2]

std::pair< MultiIndexedGeometry::LayerKeyType, const GeometryIndexLayerBase & > Ra::Core::Geometry::MultiIndexedGeometry::getFirstLayerOccurrence ( const LayerSemantic & semanticName) const

Read-only access to a layer.

Convenience function.

Parameters
semanticNamelayer one semantic associated with the layer
Complexity:
\( O(n) \), with \( n \) the number of semantic names in the collection
Returns
The layer and its LayerKey (to be used with getLayer, getLayerWithLock, unlockLayer)
Exceptions
std::out_of_range

Definition at line 126 of file IndexedGeometry.cpp.

◆ getFirstLayerOccurrence() [2/2]

std::pair< MultiIndexedGeometry::LayerKeyType, const GeometryIndexLayerBase & > Ra::Core::Geometry::MultiIndexedGeometry::getFirstLayerOccurrence ( const LayerSemanticCollection & semantics) const

Read-only access to a layer.

Convenience function.

Parameters
semanticscollection of semantics associated with the layer (they should all match)
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Returns
The layer and its LayerKey (to be used with getLayer, getLayerWithLock, unlockLayer)
Exceptions
std::out_of_range

Definition at line 135 of file IndexedGeometry.cpp.

◆ getFirstLayerOccurrenceWithLock() [1/2]

std::pair< MultiIndexedGeometry::LayerKeyType, GeometryIndexLayerBase & > Ra::Core::Geometry::MultiIndexedGeometry::getFirstLayerOccurrenceWithLock ( const LayerSemantic & semanticName)

Write access to a layer.

Convenience function.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
semanticNamelayer one semantic associated with the layer
Complexity:
\( O(n) \), with \( n \) the number of semantic names in the collection
Returns
The layer and its LayerKey (to be used with getLayer, getLayerWithLock, unlockLayer)
Exceptions
std::out_of_range

Definition at line 146 of file IndexedGeometry.cpp.

◆ getFirstLayerOccurrenceWithLock() [2/2]

std::pair< MultiIndexedGeometry::LayerKeyType, GeometryIndexLayerBase & > Ra::Core::Geometry::MultiIndexedGeometry::getFirstLayerOccurrenceWithLock ( const LayerSemanticCollection & semantics)

Write access to a layer.

Convenience function.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
semanticscollection of semantics associated with the layer (they should all match)
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Returns
The layer and its LayerKey (to be used with getLayer, getLayerWithLock, unlockLayer)
Exceptions
std::out_of_range

Definition at line 158 of file IndexedGeometry.cpp.

◆ getLayer() [1/2]

const GeometryIndexLayerBase & Ra::Core::Geometry::MultiIndexedGeometry::getLayer ( const LayerKeyType & layerKey) const
inline

Read-only access to a layer.

Parameters
layerKeylayer key
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

Definition at line 679 of file IndexedGeometry.hpp.

◆ getLayer() [2/2]

const GeometryIndexLayerBase & Ra::Core::Geometry::MultiIndexedGeometry::getLayer ( const LayerSemanticCollection & semantics,
const std::string & layerName ) const
inline

Read-only access to a layer.

Convenience function.

Parameters
semanticscollection of semantics associated with the layer (they should all match)
layerNamelayer name
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

◆ getLayerWithLock() [1/2]

GeometryIndexLayerBase & Ra::Core::Geometry::MultiIndexedGeometry::getLayerWithLock ( const LayerKeyType & layerKey)

Write access to a layer.

Lock the layer for the caller, which needs to unlock after use, in order to release for other users and notify observers.

See also
unlockLayer( const LayerKeyType & )
Parameters
layerKeylayer key
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

Definition at line 169 of file IndexedGeometry.cpp.

◆ getLayerWithLock() [2/2]

GeometryIndexLayerBase & Ra::Core::Geometry::MultiIndexedGeometry::getLayerWithLock ( const LayerSemanticCollection & semantics,
const std::string & layerName )
inline

Write access to a layer.

Convenience function.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
semanticscollection of semantics associated with the layer (they should all match)
layerNamelayer name
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

Definition at line 683 of file IndexedGeometry.hpp.

+ Here is the call graph for this function:

◆ layerKeys()

auto Ra::Core::Geometry::MultiIndexedGeometry::layerKeys ( ) const
inlinenodiscard

Range on layer keys (read-only)

Usage:

for ( const auto& k : geo.layerKeys() ) {
REQUIRE( keys.erase( k ) == 1 );
REQUIRE( geo.countLayers( k ) == 1 );
}

Definition at line 695 of file IndexedGeometry.hpp.

◆ operator=() [1/2]

MultiIndexedGeometry & Ra::Core::Geometry::MultiIndexedGeometry::operator= ( const MultiIndexedGeometry & other)

Definition at line 22 of file IndexedGeometry.cpp.

◆ operator=() [2/2]

MultiIndexedGeometry & Ra::Core::Geometry::MultiIndexedGeometry::operator= ( MultiIndexedGeometry && other)

Definition at line 30 of file IndexedGeometry.cpp.

◆ unlockFirstLayerOccurrence() [1/2]

void Ra::Core::Geometry::MultiIndexedGeometry::unlockFirstLayerOccurrence ( const LayerSemantic & semanticName)
protected

Unlock layer with write acces, notify observers of the update.

Convenience function.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
semanticNamelayer one semantic associated with the layer
Complexity:
\( O(n) \), with \( n \) the number of semantic names in the collection
Exceptions
std::out_of_range

Definition at line 179 of file IndexedGeometry.cpp.

◆ unlockFirstLayerOccurrence() [2/2]

void Ra::Core::Geometry::MultiIndexedGeometry::unlockFirstLayerOccurrence ( const LayerSemanticCollection & semantics)
protected

Unlock layer with write acces, notify observers of the update.

Convenience function.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
semanticscollection of semantics associated with the layer (they should all match)
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

Definition at line 191 of file IndexedGeometry.cpp.

◆ unlockLayer() [1/2]

void Ra::Core::Geometry::MultiIndexedGeometry::unlockLayer ( const LayerKeyType & layerKey)

Unlock layer with write acces, notify observers of the update.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
layerKeylayer key
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

Definition at line 203 of file IndexedGeometry.cpp.

◆ unlockLayer() [2/2]

void Ra::Core::Geometry::MultiIndexedGeometry::unlockLayer ( const LayerSemanticCollection & semantics,
const std::string & layerName )
inline

Unlock layer with write acces, notify observers of the update.

Convenience function.

See also
getLayerWithLock( const LayerKeyType& ) for details about locks
Parameters
semanticscollection of semantics associated with the layer (they should all match)
layerNamelayer name
Complexity:
\( O(n) \), with \( n \) the number of layers in the collection
Exceptions
std::out_of_range

Definition at line 690 of file IndexedGeometry.hpp.

+ Here is the call graph for this function:

The documentation for this class was generated from the following files: