Michaël Lemaire
9a096ec329
Conflicts: src/basics/Disk.cpp src/basics/Disk.h src/basics/SpaceSegment.cpp src/definition/DefinitionNode.cpp src/definition/DefinitionNode.h src/definition/Scenery.cpp src/definition/Scenery.h src/definition/SurfaceMaterial.cpp src/definition/SurfaceMaterial.h src/definition/TextureLayerDefinition.cpp src/definition/definition_global.h src/interface/commandline/tests.cpp src/render/opengl/OpenGLRenderer.cpp src/render/software/SoftwareCanvasRenderer.cpp src/render/software/SoftwareCanvasRenderer.h src/render/software/SoftwareRenderer.h src/render/software/TerrainRasterizer.cpp src/render/software/TerrainRasterizer.h src/render/software/TerrainRenderer.h src/render/software/software_global.h
43 lines
885 B
C++
43 lines
885 B
C++
#ifndef DISK_H
|
|
#define DISK_H
|
|
|
|
#include "basics_global.h"
|
|
|
|
#include "InfinitePlane.h"
|
|
|
|
namespace paysages {
|
|
namespace basics {
|
|
|
|
/**
|
|
* Geometric plane disk.
|
|
*/
|
|
class BASICSSHARED_EXPORT Disk : public InfinitePlane {
|
|
public:
|
|
Disk() = default;
|
|
Disk(const Vector3 &point, const Vector3 &normal, double radius);
|
|
|
|
inline double getRadius() const {
|
|
return radius;
|
|
}
|
|
|
|
/**
|
|
* Check the intersection between the disk and an infinite ray.
|
|
*
|
|
* Returns the number of intersections (0, 1), and fill the intersection point.
|
|
*
|
|
* Returns -1 if the ray shares a segment with the disk.
|
|
*/
|
|
int checkRayIntersection(const InfiniteRay &ray, Vector3 *intersection) const;
|
|
|
|
void save(PackStream *stream) const override;
|
|
void load(PackStream *stream) override;
|
|
|
|
private:
|
|
double radius;
|
|
double radius2;
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif // DISK_H
|