49 lines
2 KiB
C
49 lines
2 KiB
C
|
// This source code is property of the Computer Graphics and Visualization
|
||
|
// chair of the TU Dresden. Do not distribute!
|
||
|
// Copyright (C) CGV TU Dresden - All Rights Reserved
|
||
|
|
||
|
#pragma once
|
||
|
#include "Box.h"
|
||
|
#include "util/OpenMeshUtils.h"
|
||
|
|
||
|
|
||
|
/*
|
||
|
a triangle primitive which can be used with the AABBTree and the HashGrid data structure
|
||
|
*/
|
||
|
class Triangle
|
||
|
{
|
||
|
//internal storage of the first vertex position of the triangle
|
||
|
Eigen::Vector3f v0;
|
||
|
//internal storage of the second vertex position of the triangle
|
||
|
Eigen::Vector3f v1;
|
||
|
//internal storage of the third vertex position of the triangle
|
||
|
Eigen::Vector3f v2;
|
||
|
//internal storage of the optional face handle to identify the originating face in a half edge mesh instance
|
||
|
OpenMesh::FaceHandle h;
|
||
|
|
||
|
public:
|
||
|
|
||
|
//default constructor
|
||
|
Triangle();
|
||
|
//constructs a triangle using the vertex positions v0,v1 and v2
|
||
|
Triangle(const Eigen::Vector3f& v0, const Eigen::Vector3f& v1,const Eigen::Vector3f& v2);
|
||
|
//constructs a triangle from the face f of the given halfedge mesh m
|
||
|
Triangle(const HEMesh&m, const OpenMesh::FaceHandle& f);
|
||
|
//returns the axis aligned bounding box of the triangle
|
||
|
Box ComputeBounds() const;
|
||
|
//returns true if the triangle overlaps the given box b
|
||
|
bool Overlaps(const Box& b) const;
|
||
|
//returns the barycentric coordinates of the point with thesmallest distance to point p which lies on the triangle
|
||
|
void ClosestPointBarycentric(const Eigen::Vector3f& p, float& l0, float& l1, float& l2) const;
|
||
|
//returns the point with smallest distance to point p which lies on the triangle
|
||
|
Eigen::Vector3f ClosestPoint(const Eigen::Vector3f& p) const;
|
||
|
//returns the squared distance between point p and the triangle
|
||
|
float SqrDistance(const Eigen::Vector3f& p) const;
|
||
|
//returns the euclidean distance between point p and the triangle
|
||
|
float Distance(const Eigen::Vector3f& p) const;
|
||
|
//returns a reference point which is on the triangle and is used to sort the primitive in the AABB tree construction
|
||
|
Eigen::Vector3f ReferencePoint() const;
|
||
|
|
||
|
};
|
||
|
|