Skip to content

Commit

Permalink
feat(Model): Added constructors taking an initial model, an OpenGeode…
Browse files Browse the repository at this point in the history
… model (BRep/Section) constructed from it and a mapping between the two
  • Loading branch information
MelchiorSchuh committed May 28, 2024
1 parent a7f5151 commit 9e97f86
Show file tree
Hide file tree
Showing 12 changed files with 221 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <geode/model/mixin/core/model_boundary.h>
#include <geode/model/mixin/core/surface.h>
#include <geode/model/mixin/core/surface_collection.h>
#include <geode/model/representation/core/mapping.h>
#include <geode/model/representation/core/section.h>

#include <geode/geosciences/explicit/mixin/core/fault_blocks.h>
Expand Down Expand Up @@ -147,6 +148,9 @@ namespace geode
CrossSection() = default;
CrossSection( CrossSection&& ) noexcept = default;
CrossSection( Section&& section ) noexcept;
CrossSection( CrossSection& initial_model,
Section&& section,
const ModelGenericMapping& initial_to_section_mappings ) noexcept;

CrossSection clone() const;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <geode/model/mixin/core/surface.h>
#include <geode/model/mixin/core/surface_collection.h>
#include <geode/model/representation/core/brep.h>
#include <geode/model/representation/core/mapping.h>

#include <geode/geosciences/explicit/mixin/core/fault_blocks.h>
#include <geode/geosciences/explicit/mixin/core/faults.h>
Expand Down Expand Up @@ -150,6 +151,9 @@ namespace geode
StructuralModel() = default;
StructuralModel( StructuralModel&& ) noexcept = default;
StructuralModel( BRep&& brep ) noexcept;
StructuralModel( StructuralModel& initial_model,
BRep&& brep,
const ModelGenericMapping& initial_to_brep_mappings ) noexcept;

StructuralModel clone() const;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ namespace geode
ImplicitCrossSection();
ImplicitCrossSection( ImplicitCrossSection&& implicit_model ) noexcept;
ImplicitCrossSection( CrossSection&& cross_section ) noexcept;
ImplicitCrossSection( ImplicitCrossSection& initial_model,
Section&& section,
const ModelGenericMapping& initial_to_section_mappings ) noexcept;
virtual ~ImplicitCrossSection();

ImplicitCrossSection clone() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,9 @@ namespace geode
ImplicitStructuralModel(
ImplicitStructuralModel&& implicit_model ) noexcept;
ImplicitStructuralModel( StructuralModel&& structural_model ) noexcept;
ImplicitStructuralModel( ImplicitStructuralModel& initial_model,
BRep&& brep,
const ModelGenericMapping& initial_to_brep_mappings ) noexcept;
virtual ~ImplicitStructuralModel();

ImplicitStructuralModel clone() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ namespace geode
StratigraphicModel(
ImplicitStructuralModel&& structural_model ) noexcept;
StratigraphicModel( StructuralModel&& structural_model ) noexcept;
StratigraphicModel( StratigraphicModel& initial_model,
BRep&& brep,
const ModelGenericMapping& initial_to_brep_mappings ) noexcept;
~StratigraphicModel();

StratigraphicModel clone() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ namespace geode
StratigraphicSection(
ImplicitCrossSection&& implicit_section ) noexcept;
StratigraphicSection( CrossSection&& cross_section ) noexcept;
StratigraphicSection( StratigraphicSection& initial_model,
Section&& section,
const ModelGenericMapping& initial_to_section_mappings ) noexcept;
~StratigraphicSection();

StratigraphicSection clone() const;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ namespace geode

CrossSection::HorizonItemRange::~HorizonItemRange() = default;

auto CrossSection::HorizonItemRange::begin() const
-> const HorizonItemRange&
auto
CrossSection::HorizonItemRange::begin() const -> const HorizonItemRange&
{
return *this;
}
Expand Down Expand Up @@ -149,7 +149,7 @@ namespace geode
const CrossSection& cross_section,
const StratigraphicUnit2D& stratigraphic_unit )
: Relationships::ItemRangeIterator(
cross_section, stratigraphic_unit.id() ),
cross_section, stratigraphic_unit.id() ),
cross_section_( cross_section )
{
}
Expand Down Expand Up @@ -194,6 +194,80 @@ namespace geode
{
}

CrossSection::CrossSection( CrossSection& initial_model,
Section&& section,
const ModelGenericMapping& initial_to_section_mappings ) noexcept
: Section{ std::move( section ) }
{
CrossSectionBuilder builder{ *this };
ModelCopyMapping mappings;
detail::add_geology_clone_mapping( mappings, *this );
builder.copy_geological_components( mappings, *this );
const auto& line_mappings =
initial_to_section_mappings.at( Line3D::component_type_static() );
const auto& surface_mappings = initial_to_section_mappings.at(
Surface3D::component_type_static() );
for( const auto& fault : initial_model.faults() )
{
const auto& this_fault = this->fault( fault.id() );
for( const auto& fault_line : initial_model.fault_items( fault ) )
{
for( const auto& out_line_id :
line_mappings.in2out( fault_line.id() ) )
{
builder.add_line_in_fault(
this->line( out_line_id ), this_fault );
}
}
}
for( const auto& horizon : initial_model.horizons() )
{
const auto& this_horizon = this->horizon( horizon.id() );
for( const auto& horizon_line :
initial_model.horizon_items( horizon ) )
{
for( const auto& out_line_id :
line_mappings.in2out( horizon_line.id() ) )
{
builder.add_line_in_horizon(
this->line( out_line_id ), this_horizon );
}
}
}
for( const auto& fault_surface : initial_model.fault_blocks() )
{
const auto& this_fault_surface =
this->fault_block( fault_surface.id() );
for( const auto& fault_surface_surface :
initial_model.fault_block_items( fault_surface ) )
{
for( const auto& out_surface_id :
surface_mappings.in2out( fault_surface_surface.id() ) )
{
builder.add_surface_in_fault_block(
this->surface( out_surface_id ), this_fault_surface );
}
}
}
for( const auto& stratigraphic_unit :
initial_model.stratigraphic_units() )
{
const auto& this_stratigraphic_unit =
this->stratigraphic_unit( stratigraphic_unit.id() );
for( const auto& stratigraphic_unit_surface :
initial_model.stratigraphic_unit_items( stratigraphic_unit ) )
{
for( const auto& out_surface_id :
surface_mappings.in2out( stratigraphic_unit_surface.id() ) )
{
builder.add_surface_in_stratigraphic_unit(
this->surface( out_surface_id ),
this_stratigraphic_unit );
}
}
}
}

CrossSection CrossSection::clone() const
{
CrossSection model_clone{ Section::clone() };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ namespace geode
const StructuralModel& structural_model,
const FaultBlock3D& fault_block )
: Relationships::ItemRangeIterator(
structural_model, fault_block.id() ),
structural_model, fault_block.id() ),
structural_model_( structural_model )
{
}
Expand Down Expand Up @@ -154,7 +154,7 @@ namespace geode
const StructuralModel& structural_model,
const StratigraphicUnit3D& stratigraphic_unit )
: Relationships::ItemRangeIterator(
structural_model, stratigraphic_unit.id() ),
structural_model, stratigraphic_unit.id() ),
structural_model_( structural_model )
{
}
Expand Down Expand Up @@ -200,6 +200,80 @@ namespace geode
{
}

StructuralModel::StructuralModel( StructuralModel& initial_model,
BRep&& brep,
const ModelGenericMapping& initial_to_brep_mappings ) noexcept
: BRep{ std::move( brep ) }
{
StructuralModelBuilder builder{ *this };
ModelCopyMapping mappings;
detail::add_geology_clone_mapping( mappings, *this );
builder.copy_geological_components( mappings, *this );
const auto& surface_mappings =
initial_to_brep_mappings.at( Surface3D::component_type_static() );
const auto& block_mappings =
initial_to_brep_mappings.at( Block3D::component_type_static() );
for( const auto& fault : initial_model.faults() )
{
const auto& this_fault = this->fault( fault.id() );
for( const auto& fault_surface :
initial_model.fault_items( fault ) )
{
for( const auto& out_surface_id :
surface_mappings.in2out( fault_surface.id() ) )
{
builder.add_surface_in_fault(
this->surface( out_surface_id ), this_fault );
}
}
}
for( const auto& horizon : initial_model.horizons() )
{
const auto& this_horizon = this->horizon( horizon.id() );
for( const auto& horizon_surface :
initial_model.horizon_items( horizon ) )
{
for( const auto& out_surface_id :
surface_mappings.in2out( horizon_surface.id() ) )
{
builder.add_surface_in_horizon(
this->surface( out_surface_id ), this_horizon );
}
}
}
for( const auto& fault_block : initial_model.fault_blocks() )
{
const auto& this_fault_block =
this->fault_block( fault_block.id() );
for( const auto& fault_block_block :
initial_model.fault_block_items( fault_block ) )
{
for( const auto& out_block_id :
block_mappings.in2out( fault_block_block.id() ) )
{
builder.add_block_in_fault_block(
this->block( out_block_id ), this_fault_block );
}
}
}
for( const auto& stratigraphic_unit :
initial_model.stratigraphic_units() )
{
const auto& this_stratigraphic_unit =
this->stratigraphic_unit( stratigraphic_unit.id() );
for( const auto& stratigraphic_unit_block :
initial_model.stratigraphic_unit_items( stratigraphic_unit ) )
{
for( const auto& out_block_id :
block_mappings.in2out( stratigraphic_unit_block.id() ) )
{
builder.add_block_in_stratigraphic_unit(
this->block( out_block_id ), this_stratigraphic_unit );
}
}
}
}

StructuralModel StructuralModel::clone() const
{
StructuralModel model_clone{ BRep::clone() };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,20 @@ namespace geode
impl_->initialize_implicit_query_trees( *this );
}

ImplicitCrossSection::ImplicitCrossSection(
ImplicitCrossSection& initial_model,
Section&& section,
const ModelGenericMapping& initial_to_section_mappings ) noexcept
: CrossSection{ initial_model, std::move( section ),
initial_to_section_mappings }
{
impl_->initialize_implicit_query_trees( *this );
ModelCopyMapping mappings;
detail::add_geology_clone_mapping< CrossSection >( mappings, *this );
ImplicitCrossSectionBuilder builder{ *this };
builder.copy_implicit_information( mappings, *this );
}

ImplicitCrossSection::~ImplicitCrossSection() = default;

ImplicitCrossSection ImplicitCrossSection::clone() const
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,20 @@ namespace geode
impl_->initialize_implicit_query_trees( *this );
}

ImplicitStructuralModel::ImplicitStructuralModel(
ImplicitStructuralModel& initial_model,
BRep&& brep,
const ModelGenericMapping& initial_to_brep_mappings ) noexcept
: StructuralModel{ initial_model, std::move( brep ),
initial_to_brep_mappings }
{
impl_->initialize_implicit_query_trees( *this );
ModelCopyMapping mappings;
detail::add_geology_clone_mapping< StructuralModel >( mappings, *this );
ImplicitStructuralModelBuilder builder{ *this };
builder.copy_implicit_information( mappings, *this );
}

ImplicitStructuralModel::~ImplicitStructuralModel() = default;

ImplicitStructuralModel ImplicitStructuralModel::clone() const
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,7 @@ namespace geode
const Block3D& block,
index_t tetrahedron_id )
: indices_{ block.mesh().polyhedron_vertices(
tetrahedron_id ) },
tetrahedron_id ) },
positive_tetra_{
model.stratigraphic_coordinates( block, indices_[0] )
.stratigraphic_coordinates(),
Expand Down Expand Up @@ -503,6 +503,15 @@ namespace geode
impl_->initialize_stratigraphic_query_trees( *this );
}

StratigraphicModel::StratigraphicModel( StratigraphicModel& initial_model,
BRep&& brep,
const ModelGenericMapping& initial_to_brep_mappings ) noexcept
: ImplicitStructuralModel{ initial_model, std::move( brep ),
initial_to_brep_mappings }
{
impl_->initialize_stratigraphic_query_trees( *this );
}

StratigraphicModel::~StratigraphicModel() = default;

StratigraphicModel StratigraphicModel::clone() const
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,16 @@ namespace geode
impl_->initialize_stratigraphic_query_trees( *this );
}

StratigraphicSection::StratigraphicSection(
StratigraphicSection& initial_model,
Section&& section,
const ModelGenericMapping& initial_to_section_mappings ) noexcept
: ImplicitCrossSection{ initial_model, std::move( section ),
initial_to_section_mappings }
{
impl_->initialize_stratigraphic_query_trees( *this );
}

StratigraphicSection::~StratigraphicSection() = default;

StratigraphicSection StratigraphicSection::clone() const
Expand Down

0 comments on commit 9e97f86

Please sign in to comment.