Chi-Tech
BooleanLogicalVolume.cc
Go to the documentation of this file.
2
3#include "ChiObjectFactory.h"
4
5namespace chi_mesh
6{
7
9
14
16{
18
19 // clang-format off
20 params.SetDocGroup("LuaLogicVolumes\n");
21 // clang-format on
22
24 "parts",
25 "Array of combinatorial logic each entry has the following required params "
26 "<TT>chi_mesh::BooleanLogicalVolumeArgumentPair</TT>");
27
28 params.LinkParameterToBlock("parts",
29 "chi_mesh::BooleanLogicalVolumeArgumentPair");
30
31 return params;
32}
33
35 const chi::InputParameters& params)
36 : LogicalVolume(params)
37{
38 const auto& input_parts = params.GetParam("parts");
40
41 for (size_t p = 0; p < input_parts.NumParameters(); ++p)
42 {
43 const auto& part = input_parts.GetParam(p);
44 part.RequireBlockTypeIs(chi::ParameterBlockType::BLOCK);
45
46 auto part_params = BooleanLogicalVolumeArgumentPair();
47
48 part_params.AssignParameters(part);
49
50 const size_t lv_handle = part_params.GetParamValue<size_t>("lv");
51 auto lv_ptr = Chi::GetStackItemPtrAsType<LogicalVolume>(
52 Chi::object_stack, lv_handle, __FUNCTION__);
53
54 parts.emplace_back(part_params.GetParamValue<bool>("op"), lv_ptr);
55 }
56}
57
59{
61
62 params.SetDocGroup("chi_mesh__BooleanLogicalVolume");
63
64 params.AddRequiredParameter<bool>(
65 "op",
66 "Boolean value indicating the volume sense. True means inside, False means "
67 "outside");
68 params.AddRequiredParameter<size_t>("lv", "Handle to a logical volume.");
69
70 return params;
71}
72
74{
75 for (const auto& part : parts)
76 {
77 if (part.first != part.second->Inside(point)) return false;
78 }
79
80 return true;
81}
82
83} // namespace chi_mesh
static std::vector< ChiObjectPtr > object_stack
Definition: chi_runtime.h:96
void SetDocGroup(const std::string &doc_group)
void AddRequiredParameter(const std::string &name, const std::string &doc_string)
void AddRequiredParameterArray(const std::string &name, const std::string &doc_string)
void LinkParameterToBlock(const std::string &param_name, const std::string &block_name)
void RequireBlockTypeIs(ParameterBlockType type) const
ParameterBlock & GetParam(const std::string &param_name)
bool Inside(const chi_mesh::Vector3 &point) const override
BooleanLogicalVolume(const chi::InputParameters &params)
std::vector< std::pair< bool, std::shared_ptr< const LogicalVolume > > > parts
static chi::InputParameters GetInputParameters()
static chi::InputParameters GetInputParameters()
Definition: LogicalVolume.cc:6
chi::InputParameters BooleanLogicalVolumeArgumentPair()
RegisterSyntaxBlock(chi_mesh, BooleanLogicalVolumeArgumentPair, BooleanLogicalVolumeArgumentPair)
RegisterChiObject(chi_mesh, BooleanLogicalVolume)