PLaSK library
Loading...
Searching...
No Matches
clip.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_CLIP_H
15
#define PLASK__GEOMETRY_CLIP_H
16
17
#include "
transform.hpp
"
18
19
namespace
plask
{
20
25
template
<
int
dim>
struct
PLASK_API
Clip
:
public
GeometryObjectTransform
<dim> {
26
static
const
char
*
NAME
;
27
28
std::string
getTypeName
()
const override
{
return
NAME; }
29
30
typedef
typename
GeometryObjectTransform<dim>::ChildType
ChildType
;
31
33
typedef
typename
GeometryObjectTransform<dim>::DVec
DVec
;
34
36
typedef
typename
GeometryObjectTransform<dim>::Box
Box
;
37
38
using
GeometryObjectTransform
<dim>::getChild;
39
43
Box
clipBox
;
44
45
// Clip(const Clip<dim>& tocpy) = default;
46
51
explicit
Clip
(shared_ptr<
GeometryObjectD<dim>
> child = shared_ptr<
GeometryObjectD<dim>
>(),
52
const
Box
& clipBox =
Primitive<dim>::INF_BOX
)
53
:
GeometryObjectTransform
<dim>(child), clipBox(clipBox) {}
54
55
explicit
Clip
(
GeometryObjectD<dim>
& child,
const
Box
& clipBox =
Primitive<dim>::INF_BOX
)
56
:
GeometryObjectTransform
<dim>(child), clipBox(clipBox) {}
57
58
shared_ptr<Material>
getMaterial(
const
DVec& p)
const override
;
59
60
bool
contains(
const
DVec& p)
const override
;
61
62
using
GeometryObjectTransform
<dim>::getPathsTo;
63
64
GeometryObject::Subtree
getPathsAt(
const
DVec& point,
bool
all
=
false
)
const override
;
65
66
Box fromChildCoords(
const
typename
ChildType::Box&
child_bbox
)
const override
;
67
68
virtual
void
getPositionsToVec(
const
GeometryObject::Predicate
& predicate,
69
std::vector<DVec>&
dest
,
70
const
PathHints
* path = 0)
const override
;
71
76
shared_ptr<Clip<dim>
>
copyShallow
()
const
{
return
plask::make_shared<Clip<dim>
>(getChild(), clipBox); }
77
78
shared_ptr<GeometryObject>
shallowCopy()
const override
;
79
85
shared_ptr<Clip<dim>
>
copyShallow
(
const
Box
&
new_clip
)
const
{
86
return
plask::make_shared<Clip<dim>
>(getChild(),
new_clip
);
87
}
88
89
void
addPointsAlongToSet(std::set<double>& points,
90
Primitive<3>::Direction
direction,
91
unsigned
max_steps,
92
double
min_step_size)
const override
;
93
94
void
addLineSegmentsToSet(std::set<
typename
GeometryObjectD<dim>::LineSegment
>& segments,
95
unsigned
max_steps,
96
double
min_step_size)
const override
;
97
98
protected
:
99
void
writeXMLAttr
(
XMLWriter::Element
&
dest_xml_object
,
const
AxisNames
& axes)
const override
;
100
101
private
:
102
void
addClippedSegment(std::set<
typename
GeometryObjectD<dim>::LineSegment
>& segments,
DVec
p0,
DVec
p1)
const
;
103
};
104
105
template
<>
void
Clip<2>::writeXMLAttr
(
XMLWriter::Element
&
dest_xml_object
,
const
AxisNames
& axes)
const
;
106
template
<>
void
Clip<3>::writeXMLAttr
(
XMLWriter::Element
&
dest_xml_object
,
const
AxisNames
& axes)
const
;
107
108
PLASK_API_EXTERN_TEMPLATE_STRUCT
(
Clip<2>
)
109
PLASK_API_EXTERN_TEMPLATE_STRUCT
(
Clip<3>
)
110
111
}
// namespace plask
112
113
#endif
// PLASK__GEOMETRY_CLIP_H
plask
geometry
clip.hpp
Generated by
1.9.8