FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
mesh_part_ops.hpp File Reference

Contains boolean operations on meshparts (intersection, union, difference, symmetric difference) More...

#include <kernel/base_header.hpp>
#include <kernel/geometry/index_set.hpp>
#include <kernel/geometry/mesh_part.hpp>
#include <kernel/geometry/target_set.hpp>
#include <kernel/shape.hpp>
#include <kernel/util/assertion.hpp>
#include <algorithm>
#include <functional>
#include <memory>
#include <optional>

Go to the source code of this file.

Classes

class  FEAT::Geometry::Inner::DimVector< Shape_, T_ >
 Utility class for storing one vector per dimension. More...
 
class  FEAT::Geometry::Inner::DimVector< Shape::Vertex, T_ >
 Utility class for storing one vector per dimension. More...
 
struct  FEAT::Geometry::Inner::JoinEntry
 Helper-struct for storing relationships between meshpart entities. More...
 
class  FEAT::Geometry::MeshPartOperations< MeshType_ >
 Boolean operations on mesh parts. More...
 

Namespaces

namespace  FEAT
 FEAT namespace.
 
namespace  FEAT::Geometry
 Geometry namespace.
 

Detailed Description

Contains boolean operations on meshparts (intersection, union, difference, symmetric difference)

The core idea of this implementation is a sort of join over mesh entities, inspired by database joins. The join contains an entry for each entity in either of the input meshparts. That entry contains the following information:

  • is the entitiy contained in the lefthand-side meshpart and what is its index there
  • is the entitiy contained in the righthand-side meshpart and what is its index there
  • is the entitiy contained in the output meshpart and what is its index there After this join has been calculated all other operations are rather simple.

We can create the target sets with a simple predicate.

Selecting all entities that are contained in both input meshpart creates an intersection Selecting all entities that are contained in either input meshpart creates an union. Selecting all entities that are contained in the lefthand-side meshpart but not the righthand-side creates a difference.

After selecting the elements we can create target sets by simply copying the mesh-indices from the correct input target sets. During this step we also record the indicices of the selected entities in the result meshpart.

We can copy topology information by looking at the topologies of the input meshparts (if they have one), searching of any facets in the join, and then recording the indices of the entities in the result meshpart in the result meshparts topology.

We can copy attributes by copying from the input attributes and merging values whenever an entitiy occurs in both input meshparts.

Definition in file mesh_part_ops.hpp.