PLaSK library
Loading...
Searching...
No Matches
transform_space_cylindric.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__TRANSFORM_SPACE_CYLINDRIC_H
15
#define PLASK__TRANSFORM_SPACE_CYLINDRIC_H
16
17
#include "
transform.hpp
"
18
19
namespace
plask
{
20
27
struct
PLASK_API
Revolution
:
public
GeometryObjectTransformSpace
<3, 2> {
28
unsigned
rev_max_steps
;
29
double
rev_min_step_size
;
30
35
Revolution
(shared_ptr<ChildType> child = shared_ptr<ChildType>(),
bool
auto_clip
=
false
)
36
:
GeometryObjectTransformSpace
<3, 2>(child),
37
rev_max_steps(
PLASK_GEOMETRY_MAX_STEPS
),
38
rev_min_step_size(
PLASK_GEOMETRY_MIN_STEP_SIZE
) {
39
if
(!
auto_clip
&& childIsClipped())
40
throw
Exception
(
41
"Child of Revolution must have bounding box with positive tran. coordinates (when auto clipping is "
42
"off)."
);
43
}
44
45
static
const
char
*
NAME
;
46
48
void
setRevMaxSteps
(
unsigned
long
value) {
49
rev_max_steps = value;
50
fireChanged(
GeometryObject::Event::EVENT_STEPS
);
51
}
52
54
void
setRevMinStepSize
(
double
value) {
55
rev_min_step_size = value;
56
fireChanged(
GeometryObject::Event::EVENT_STEPS
);
57
}
58
59
std::string getTypeName()
const override
;
60
61
bool
contains(
const
DVec& p)
const override
;
62
63
// TODO good but unused
64
// virtual bool intersects(const Box& area) const;
65
66
shared_ptr<Material>
getMaterial(
const
DVec& p)
const override
;
67
68
Box fromChildCoords(
const
typename
ChildType::Box&
child_bbox
)
const override
;
69
70
shared_ptr<GeometryObject>
shallowCopy()
const override
;
71
72
using
GeometryObjectTransformSpace
<3, 2>::getPathsTo;
73
74
GeometryObject::Subtree
getPathsAt(
const
DVec& point,
bool
all
=
false
)
const override
;
75
76
void
getPositionsToVec(
const
GeometryObject::Predicate
& predicate,
77
std::vector<DVec>&
dest
,
78
const
PathHints
* path = 0)
const override
;
79
80
// virtual void extractToVec(const GeometryObject::Predicate& predicate, std::vector< shared_ptr<const
81
// GeometryObjectD<dim> > >& dest, const PathHints* = 0) const;
82
88
static
Vec<2, double>
childVec
(
const
Vec<3, double>
&
v
) {
return
rotateToLonTranAbs(
v
); }
89
90
/*
91
* Convert rectangle @p r to space of child.
92
* @param r cuboid in parent (this) space
93
* @return rectangle in child space
94
*/
95
// static ChildBox childBox(const Box& r);
96
101
bool
childIsClipped()
const
;
102
103
private
:
109
static
Box parentBox(
const
ChildBox& r);
110
111
void
addPointsAlongToSet(std::set<double>& points,
112
Primitive<3>::Direction
direction,
113
unsigned
max_steps,
114
double
min_step_size)
const override
;
115
116
void
addLineSegmentsToSet(std::set<
typename
GeometryObjectD<3>::LineSegment
>& segments,
117
unsigned
max_steps,
118
double
min_step_size)
const override
;
119
};
120
121
}
// namespace plask
122
123
#endif
// PLASK__TRANSFORM_SPACE_CYLINDRIC_H
plask
geometry
transform_space_cylindric.hpp
Generated by
1.9.8