11 #include <corsika/framework/geometry/IVolume.hpp> 12 #include <corsika/media/IEmpty.hpp> 18 template <
typename TModelProperties = IEmpty>
22 using IModelProperties = TModelProperties;
24 using VTNUPtr = std::unique_ptr<VTN_type>;
25 using IMPSharedPtr = std::shared_ptr<IModelProperties>;
26 using VolUPtr = std::unique_ptr<IVolume>;
29 : geoVolume_(std::move(pVolume)) {}
46 template <
typename TCallable,
bool preorder = true>
47 void walk(TCallable func)
const;
49 void addChild(VTNUPtr pChild);
51 void excludeOverlapWith(VTNUPtr
const& pNode);
53 VTN_type const* getParent()
const {
return parentNode_; };
55 auto const& getChildNodes()
const {
return childNodes_; }
57 auto const& getExcludedNodes()
const {
return excludedNodes_; }
59 auto const& getVolume()
const {
return *geoVolume_; }
61 auto const& getModelProperties()
const {
return *modelProperties_; }
63 bool hasModelProperties()
const {
return modelProperties_.get() !=
nullptr; }
65 template <
typename ModelProperties,
typename... Args>
66 auto setModelProperties(Args&&... args) {
69 modelProperties_ = std::make_shared<ModelProperties>(std::forward<Args>(args)...);
70 return modelProperties_;
73 void setModelProperties(IMPSharedPtr ptr) { modelProperties_ = ptr; }
79 std::vector<VTNUPtr> childNodes_;
80 std::vector<VTN_type const*> excludedNodes_;
81 VTN_type const* parentNode_ =
nullptr;
83 IMPSharedPtr modelProperties_;
88 #include <corsika/detail/media/VolumeTreeNode.inl> void walk(TCallable func) const
Traverses the VolumeTree pre- or post-order and calls the functor func for each node.
bool contains(Point const &p) const
convenience function equivalent to Volume::isInside
`, since they are used everywhere as integral part of the framework.