VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
GbObject3D.h
Go to the documentation of this file.
1//=======================================================================================
2// ____ ____ __ ______ __________ __ __ __ __
3// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4// \ \ | | | | | |_) | | | | | | | / \ | |
5// \ \ | | | | | _ / | | | | | | / /\ \ | |
6// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8// \ \ | | ________________________________________________________________
9// \ \ | | | ______________________________________________________________|
10// \ \| | | | __ __ __ __ ______ _______
11// \ | | |_____ | | | | | | | | | _ \ / _____)
12// \ | | _____| | | | | | | | | | | \ \ \_______
13// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14// \ _____| |__| |________| \_______/ |__| |______/ (_______/
15//
16// This file is part of VirtualFluids. VirtualFluids is free software: you can
17// redistribute it and/or modify it under the terms of the GNU General Public
18// License as published by the Free Software Foundation, either version 3 of
19// the License, or (at your option) any later version.
20//
21// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
22// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24// for more details.
25//
26// SPDX-License-Identifier: GPL-3.0-or-later
27// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
28//
33//=======================================================================================
34#ifndef GBOBJECT3D_H
35#define GBOBJECT3D_H
36
37#include <string>
38#include <vector>
39
45
46class GbPoint3D;
47class GbLine3D;
48class GbTriangle3D;
50
51#include <PointerDefinitions.h>
52
53
54
62
63class GbObject3D : public ObObject
64{
65public:
66 virtual ~GbObject3D() = default;
67 // abstract Methods
68 virtual void finalize() = 0; // destroys also all dynamic objects (e.g. GbPoints in GbLine)
73 virtual double getX1Centroid() = 0;
78 virtual double getX1Minimum() = 0;
83 virtual double getX1Maximum() = 0;
88 virtual double getX2Centroid() = 0;
93 virtual double getX2Minimum() = 0;
98 virtual double getX2Maximum() = 0;
99
100 virtual double getX3Centroid() = 0;
105 virtual double getX3Minimum() = 0;
110 virtual double getX3Maximum() = 0;
111
112 /*=======================================================*/
113 double getLengthX1() { return (getX1Maximum() - getX1Minimum()); }
114 double getLengthX2() { return (getX2Maximum() - getX2Minimum()); }
115 double getLengthX3() { return (getX3Maximum() - getX3Minimum()); }
116
117 virtual void setCenterX1Coordinate(const double & /*value*/)
118 {
119 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
120 }
121 virtual void setCenterX2Coordinate(const double & /*value*/)
122 {
123 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
124 }
125 virtual void setCenterX3Coordinate(const double & /*value*/)
126 {
127 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
128 }
129 virtual void setCenterCoordinates(const double & /*x1*/, const double & /*x2*/, const double & /*x3*/)
130 {
131 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
132 }
133 virtual void setCenterCoordinates(const UbTupleDouble3 & /*position*/)
134 {
135 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
136 }
137
138 // Rotates the Point in relation to the origen.
139 // Parameters must be radian measure.
140 virtual void rotate(const double & /*rx1*/, const double & /*rx2*/, const double & /*rx3*/)
141 {
142 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
143 }
144 virtual void translate(const double & /*x1*/, const double & /*x2*/, const double & /*x3*/)
145 {
146 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
147 }
148 virtual void scale(const double & /*sx1*/, const double & /*sx2*/, const double & /*sx3*/)
149 {
150 throw UbException(UB_EXARGS, "not implemented for " + (std::string) typeid(*this).name());
151 }
152
153 virtual bool isPointInGbObject3D(GbPoint3D *p);
154 virtual bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3, bool &pointIsOnBoundary) = 0;
155 virtual bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3) = 0;
156
157 virtual bool isCellInsideGbObject3D(const double &x1a, const double &x2a, const double &x3a, const double &x1b,
158 const double &x2b, const double &x3b);
159 virtual bool isCellCuttingGbObject3D(const double &x1a, const double &x2a, const double &x3a, const double &x1b,
160 const double &x2b, const double &x3b);
161 virtual bool isCellInsideOrCuttingGbObject3D(const double &x1a, const double &x2a, const double &x3a,
162 const double &x1b, const double &x2b, const double &x3b);
163 virtual double getCellVolumeInsideGbObject3D(const double & /*x1a*/, const double & /*x2a*/, const double & /*x3a*/,
164 const double & /*x1b*/, const double & /*x2b*/, const double & /*x3b*/)
165 {
166 return -1.0;
167 };
168
169 virtual bool isInsideCell(const double &minX1, const double &minX2, const double &minX3, const double &maxX1,
170 const double &maxX2, const double &maxX3);
171
173 virtual std::vector<GbTriangle3D *> getSurfaceTriangleSet() = 0;
174
175 virtual void addSurfaceTriangleSet(std::vector<UbTupleFloat3> & /*nodes*/, std::vector<UbTupleInt3> & /*triangles*/)
176 {
177 throw UbException("GbObject3D::addSurfaceTriangleSet - not implemented for " +
178 (std::string) typeid(*this).name());
179 }
180
181 virtual bool hasRaytracing() { return false; }
182 virtual bool raytracingSupportsPointsInside() { return false; }
183 //|r| must be 1! einheitsvector!!
184 // return negativ value oder zero if no intersection
185 virtual double getIntersectionRaytraceFactor(const double & /*x1*/, const double & /*x2*/, const double & /*x3*/,
186 const double & /*rx1*/, const double & /*rx2*/, const double & /*rx3*/)
187 {
188 throw UbException("GbObject3D::getIntersectionRaytraceFactor - not implemented");
189 }
190};
191/*=========================================================================*/
192
193#endif
194
This Class provides basic 3D line objects.
Definition GbLine3D.h:59
This Interface provides basic 3D geometry objects methods.
Definition GbObject3D.h:64
virtual double getX1Maximum()=0
virtual void translate(const double &, const double &, const double &)
Definition GbObject3D.h:144
virtual bool raytracingSupportsPointsInside()
Definition GbObject3D.h:182
virtual double getX2Centroid()=0
virtual bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3)=0
virtual void finalize()=0
virtual void setCenterX1Coordinate(const double &)
Definition GbObject3D.h:117
virtual void setCenterCoordinates(const double &, const double &, const double &)
Definition GbObject3D.h:129
virtual void rotate(const double &, const double &, const double &)
Definition GbObject3D.h:140
virtual double getX3Minimum()=0
virtual void scale(const double &, const double &, const double &)
Definition GbObject3D.h:148
double getLengthX1()
Definition GbObject3D.h:113
virtual double getIntersectionRaytraceFactor(const double &, const double &, const double &, const double &, const double &, const double &)
Definition GbObject3D.h:185
virtual bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3, bool &pointIsOnBoundary)=0
virtual double getX1Centroid()=0
double getLengthX2()
Definition GbObject3D.h:114
virtual void setCenterX3Coordinate(const double &)
Definition GbObject3D.h:125
virtual double getCellVolumeInsideGbObject3D(const double &, const double &, const double &, const double &, const double &, const double &)
Definition GbObject3D.h:163
virtual ~GbObject3D()=default
virtual GbLine3D * createClippedLine3D(GbPoint3D &point1, GbPoint3D &point2)=0
virtual std::vector< GbTriangle3D * > getSurfaceTriangleSet()=0
virtual double getX2Minimum()=0
double getLengthX3()
Definition GbObject3D.h:115
virtual void setCenterX2Coordinate(const double &)
Definition GbObject3D.h:121
virtual double getX2Maximum()=0
virtual void setCenterCoordinates(const UbTupleDouble3 &)
Definition GbObject3D.h:133
virtual bool hasRaytracing()
Definition GbObject3D.h:181
virtual double getX1Minimum()=0
virtual void addSurfaceTriangleSet(std::vector< UbTupleFloat3 > &, std::vector< UbTupleInt3 > &)
Definition GbObject3D.h:175
virtual double getX3Centroid()=0
virtual double getX3Maximum()=0
This Class provides basic 3D point objects.
Definition GbPoint3D.h:49
This Class provides basic 3D triangle objects.
A class implements a tuple.
Definition UbTuple.h:477
std::shared_ptr< T > SPtr
virtual bool isCellInsideGbObject3D(const double &x1a, const double &x2a, const double &x3a, const double &x1b, const double &x2b, const double &x3b)
virtual bool isPointInGbObject3D(GbPoint3D *p)
virtual bool isCellCuttingGbObject3D(const double &x1a, const double &x2a, const double &x3a, const double &x1b, const double &x2b, const double &x3b)
virtual bool isInsideCell(const double &minX1, const double &minX2, const double &minX3, const double &maxX1, const double &maxX2, const double &maxX3)
virtual bool isCellInsideOrCuttingGbObject3D(const double &x1a, const double &x2a, const double &x3a, const double &x1b, const double &x2b, const double &x3b)
#define UB_EXARGS
Definition UbException.h:73