PLaSK library
Loading...
Searching...
No Matches
separator.hpp
Go to the documentation of this file.
1/*
2 * This file is part of PLaSK (https://plask.app) by Photonics Group at TUL
3 * Copyright (c) 2022 Lodz University of Technology
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 3.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 */
14#ifndef PLASK__GEOMETRY_SEPARATOR_H
15#define PLASK__GEOMETRY_SEPARATOR_H
16
21#include "object.hpp"
22
23namespace plask {
24
36template <int dim> struct PLASK_API GeometryObjectSeparator : public GeometryObjectD<dim> {
39 using GeometryObjectD<dim>::getBoundingBox;
41
42 GeometryObject::Type getType() const override;
43
44 static const char* NAME;
45
46 std::string getTypeName() const override;
47
53 shared_ptr<Material> getMaterial(const DVec& p) const override;
54
55 // void getLeafsInfoToVec(std::vector<std::tuple<shared_ptr<const GeometryObject>, Box, DVec>>& dest, const
56 // PathHints* path = 0) const override;
57
58 void getBoundingBoxesToVec(const GeometryObject::Predicate& predicate,
59 std::vector<Box>& dest,
60 const PathHints* path = 0) const override;
61
62 void getObjectsToVec(const GeometryObject::Predicate& predicate,
64 const PathHints* path = 0) const override;
65
66 void getPositionsToVec(const GeometryObject::Predicate& predicate,
67 std::vector<DVec>& dest,
68 const PathHints* = 0) const override;
69
70 /* inline void getLeafsToVec(std::vector< shared_ptr<const GeometryObject> >& dest) const override {
71 dest.push_back(this->shared_from_this());
72 }
73
74 inline std::vector< shared_ptr<const GeometryObject> > getLeafs() const override {
75 return { this->shared_from_this() };
76 }*/
77
78 bool hasInSubtree(const GeometryObject& el) const override;
79
80 GeometryObject::Subtree getPathsTo(const GeometryObject& el, const PathHints* path = 0) const override;
81
82 GeometryObject::Subtree getPathsAt(const DVec& point, bool = false) const override;
83
84 std::size_t getChildrenCount() const override { return 0; }
85
86 shared_ptr<GeometryObject> getChildNo(std::size_t child_no) const override;
87
89 Vec<3, double>* translation = 0) const override;
90
91 // void extractToVec(const GeometryObject::Predicate& predicate, std::vector< shared_ptr<const GeometryObjectD<dim>
92 // > >& dest, const PathHints* = 0) const {
93 // if (predicate(*this)) dest.push_back(static_pointer_cast< const GeometryObjectD<dim>
94 // >(this->shared_from_this()));
95 // }
96
98 std::map<const GeometryObject*, shared_ptr<GeometryObject>>& copied) const override;
99
100 bool contains(const DVec& p) const override;
101
102 void addPointsAlongToSet(std::set<double>& points,
103 Primitive<3>::Direction direction,
104 unsigned max_steps,
105 double min_step_size) const override {}
106
108 unsigned max_steps,
109 double min_step_size) const override {}
110
111 /*bool intersects(const Box& area) const override {
112 return this->getBoundingBox().intersects(area); //TODO ?? maybe set area to empty
113 }*/
114};
115
118
119
125template <int dim, int direction> struct Gap1D : public GeometryObjectSeparator<dim> {
126 static_assert(direction < dim, "direction must be from 0 to dim-1");
127
129
130 typedef typename BaseClass::DVec DVec;
131 typedef typename BaseClass::Box Box;
132
133 static constexpr const char* NAME = "gap";
134 static constexpr const char* XML_SIZE_ATTR = "size";
135
136 std::string getTypeName() const override { return NAME; }
137
139 double size;
140
145 Gap1D(double size = 0.0) : size(size) {}
146
147 Box getBoundingBox() const override {
149 size_vec[direction] = size;
151 }
152
157 void setSize(double new_size) {
158 size = new_size;
159 this->fireChanged(GeometryObject::Event::EVENT_RESIZE);
160 }
161
162 void writeXMLAttr(XMLWriter::Element& dest_xml_object, const AxisNames& axes) const override {
163 BaseClass::writeXMLAttr(dest_xml_object, axes);
164 dest_xml_object.attr(XML_SIZE_ATTR, size);
165 }
166
168};
169
170} // namespace plask
171
172#endif // PLASK__GEOMETRY_SEPARATOR_H