NuTo
Numerics Tool
CollidableWallBase.h
Go to the documentation of this file.
1 /*
2  * CollidableWallBase.h
3  *
4  * Created on: 17 Jan 2014
5  * Author: ttitsche
6  */
7 
8 #pragma once
9 
11 #include <Eigen/Core>
12 
13 namespace NuTo
14 {
15 class SubBox;
16 class CollidableParticleSphere;
17 
18 namespace Visualize
19 {
20 class UnstructuredGrid;
21 }
24 {
25 public:
30  CollidableWallBase(Eigen::VectorXd rPosition, Eigen::VectorXd rDirection, int rIndex);
31 
33  virtual ~CollidableWallBase();
34 
38  void SetBoxes(SubBox& rInsideBox, SubBox& rOutsideBox);
39 
42  void PerformCollision(CollidableBase& rCollidable) override;
43 
46  virtual void PerformCollision(CollidableParticleSphere& rSphere) override = 0;
47 
50  void PerformCollision(CollidableWallBase& rWall) override;
51 
56  double PredictCollision(CollidableBase& rCollidable, int& rType) override;
57 
62  virtual double PredictCollision(CollidableParticleSphere& rSphere, int& rType) override = 0;
63 
68  double PredictCollision(CollidableWallBase& rWall, int& rType) override;
69 
71  void MoveAndGrow(double) override
72  {
73  }
74 
76  virtual bool IsPhysical() const = 0;
77 
80  virtual void VisualizationStatic(Visualize::UnstructuredGrid& rVisualizer) const;
81 
83  void GetLocalEventsToDelete(LocalEvents&) const override
84  {
85  }
86 
89  virtual bool IsInside(const CollidableParticleSphere& rSphere) const;
90 
92  const Eigen::Vector3d& GetDirection() const;
93 
95  const Eigen::Vector3d& GetPosition() const;
96 
97 protected:
99  Eigen::Vector3d mPosition;
100 
102  Eigen::Vector3d mDirection;
103 
106 
109 
112  virtual void Print(std::ostream& rReturnStream) const override;
113 
114 
117 
120 
121 private:
123  int GetNonNullAxis();
124 };
125 
126 } /* namespace NuTo */
Eigen::Vector3d mDirection
normal vector of the point-and-normal-vector plane definition
Definition: CollidableWallBase.h:102
void GetLocalEventsToDelete(LocalEvents &) const override
does nothing as all other wall events are still legal
Definition: CollidableWallBase.h:83
bool mIsAxisAligned
true –> calculations without vector calculations
Definition: CollidableWallBase.h:119
int mNonNullAxis
index of the direction component that is != 0
Definition: CollidableWallBase.h:116
class for spherical collidables
Definition: CollidableParticleSphere.h:28
class for sub box handing -> improves the performance without changing the physics ...
Definition: SubBox.h:20
visualization of unstructured grids
Definition: UnstructuredGrid.h:18
Base class for all collidables.
Definition: CollidableBase.h:22
SubBox * mOutsideBox
box on the outer side of the wall
Definition: CollidableWallBase.h:108
void MoveAndGrow(double) override
walls to neither grow nor move, do nothing
Definition: CollidableWallBase.h:71
Definition: Exception.h:6
base class for walls
Definition: CollidableWallBase.h:23
SubBox * mInsideBox
box on the inner side of the wall
Definition: CollidableWallBase.h:105
std::vector< Event * > LocalEvents
Definition: CollidableBase.h:17
Eigen::Vector3d mPosition
point of the point-and-normal-vector plane definition
Definition: CollidableWallBase.h:99
def Visualize(structure, file)
Definition: Truss1D2N.py:63