libMVRgdtf 40bc00a
A library for GDTF and MVR
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
VWLine3D.h
Go to the documentation of this file.
1//
2// Copyright Nemetschek Vectorworks, Inc.
3// Use of this file is governed by the Nemetschek Vectorworks SDK License Agreement
4// http://developer.vectorworks.net/index.php?title=Vectorworks_SDK_License
5//
6
7#pragma once
8
9namespace VectorworksMVR
10{
11 namespace VWFC
12 {
13 namespace Math
14 {
16 {
17 public:
18 VWLine3D();
19 VWLine3D(const VWPoint3D& begPt, const VWPoint3D& endPt);
20 VWLine3D(const VWLine3D& src);
21 virtual ~VWLine3D();
22
23 VWLine3D& operator=(const VWLine3D& src);
24
25 const VWPoint3D& GetStart() const;
27 const VWPoint3D& GetEnd() const;
29 void GetLine(VWPoint3D& outPtStart, VWPoint3D& outPtEnd) const;
30
31
32 void SetStart(const VWPoint3D& pt);
33 void SetEnd(const VWPoint3D& pt);
34 void SetLine(const VWPoint3D& ptStart, const VWPoint3D& ptEnd);
35
36 void ReverseSides();
37
38 VWLine3D operator+(const VWPoint3D& p) const;
39 VWLine3D operator-(const VWPoint3D& p) const;
40 VWLine3D operator*(double scalar) const;
41 VWLine3D operator/(double scalar) const;
42
43 VWLine3D& operator+=(const VWPoint3D& p);
44 VWLine3D& operator-=(const VWPoint3D& p);
45 VWLine3D& operator*=(double scalar);
46 VWLine3D& operator/=(double scalar);
47
48 // math functions
49 public:
50 // return the center point of the line
51 VWPoint2D CenterPt() const;
52 // return a point at a relative position on the line
53 VWPoint3D GetPointOnLine( double position );
54 // return the length of the line
55 double GetLength() const;
56 // min distance from a point to this line
57 // this is the distance from the point to the nearest point on the line
58 // which is the line perpendicular to the given one trough the specified point
59 double GetDistance(const VWPoint3D& pt) const;
60 // get vertical distance from the point to the line
61 // NOTE! no check if the point is on the projection of the line is check
62 double GetVerticalDistance(const VWPoint3D& pt) const;
63 // return the direction vector of the line (end - start)
65 // return true if the specified point is on the line within an epsilon
66 bool PtOnLine(const VWPoint3D& pt, double dEpsilon, bool bIncludeLinePoints = true) const;
67 bool PtOnLineStart(const VWPoint3D& pt, double dEpsilon) const;
68 bool PtOnLineEnd(const VWPoint3D& pt, double dEpsilon) const;
69 bool PtOnLinePoints(const VWPoint3D& pt, double dEpsilon) const;
70 bool IsPtOnLine(const VWPoint3D& pt, double coordEpsilon, double radEpsilon) const;
71
72 // checks whether the line intersects plane defined by point and two vectors lying on it.
73 // returns if the line lies on the plane and the intersection line/point.
74 bool IntersectPlane(const VWPoint3D& planePt, const VWPoint3D& planeVec0, const VWPoint3D& planeVec1,
75 VWLine3D& outIntersLine, bool& outLineOnPlane, double coordEpsilon, double radEpsilon) const;
76 // checks whether the line intersects plane defined by point and two vectors lying on it.
77 bool IntersectPlane(const VWPoint3D& planePt, const VWPoint3D& planeVec0, const VWPoint3D& planeVec1,
78 double coordEpsilon, double radEpsilon) const;
79
80 // checks whether the line intersects another line.
81 // returns if the two lines overlap and the intersection line/point.
82 bool IntersectLine(const VWLine3D& line, VWLine3D& outIntersLine, bool& outLinesOverlap,
83 double coordEpsilon, double radEpsilon) const;
84 // checks whether the line intersects another line.
85 bool IntersectLine(const VWLine3D& line, double coordEpsilon, double radEpsilon) const;
86
87 // checks whether the line (line segment) intersects the triangle.
88 // returns if the line lies on the triangle's plane and the intersection line/point.
89 bool IntersectTriangle(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2,
90 VWLine3D& outIntersLine, bool& outLineOnTriPlane, double coordEpsilon, double radEpsilon) const;
91 // checks whether the line (line segment) intersects the triangle.
92 bool IntersectTriangle(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2,
93 double coordEpsilon, double radEpsilon) const;
94
95 // providing that this line and the triangle lie on same 3D plane, checks whether the line intersects the triangle.
96 // returns the intersection line/point.
97 bool IntersectTriangleOnSamePlane(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2,
98 VWLine3D& outIntersLine, double coordEpsilon, double radEpsilon) const;
99 // providing that this line and the triangle lie on same 3D plane, checks whether the line intersects the triangle.
100 bool IntersectTriangleOnSamePlane(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2,
101 double coordEpsilon, double radEpsilon) const;
102
103 // checks whether a line segment lies in the triangle (both line ends are in the triangle).
104 bool IsOnTriangle(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2,
105 double coordEpsilon, double radEpsilon) const;
106
107 // tools
108 public:
109 static double GetVerticalDistance( double ax, double ay, double az,
110 double bx, double by, double bz,
111 double px, double py);
112
113 protected:
116 };
117 }
118 }
119}
Definition VWLine3D.h:16
VWPoint3D m_ptStart
Definition VWLine3D.h:114
double GetLength() const
Definition VWLine3D.cpp:162
void SetEnd(const VWPoint3D &pt)
Definition VWLine3D.cpp:69
VWPoint3D m_ptEnd
Definition VWLine3D.h:115
VWPoint3D GetDirectionVector() const
Definition VWLine3D.cpp:206
bool IntersectLine(const VWLine3D &line, VWLine3D &outIntersLine, bool &outLinesOverlap, double coordEpsilon, double radEpsilon) const
Definition VWLine3D.cpp:559
const VWPoint3D & GetStart() const
Definition VWLine3D.cpp:38
void GetLine(VWPoint3D &outPtStart, VWPoint3D &outPtEnd) const
Definition VWLine3D.cpp:58
VWLine3D operator/(double scalar) const
Definition VWLine3D.cpp:108
bool PtOnLineStart(const VWPoint3D &pt, double dEpsilon) const
Definition VWLine3D.cpp:311
bool PtOnLine(const VWPoint3D &pt, double dEpsilon, bool bIncludeLinePoints=true) const
Definition VWLine3D.cpp:242
VWLine3D()
Definition VWLine3D.cpp:11
VWLine3D & operator/=(double scalar)
Definition VWLine3D.cpp:136
VWLine3D operator-(const VWPoint3D &p) const
Definition VWLine3D.cpp:94
bool IntersectPlane(const VWPoint3D &planePt, const VWPoint3D &planeVec0, const VWPoint3D &planeVec1, VWLine3D &outIntersLine, bool &outLineOnPlane, double coordEpsilon, double radEpsilon) const
Definition VWLine3D.cpp:378
void SetLine(const VWPoint3D &ptStart, const VWPoint3D &ptEnd)
Definition VWLine3D.cpp:74
bool PtOnLinePoints(const VWPoint3D &pt, double dEpsilon) const
Definition VWLine3D.cpp:321
VWLine3D operator+(const VWPoint3D &p) const
Definition VWLine3D.cpp:87
VWPoint3D GetPointOnLine(double position)
Definition VWLine3D.cpp:152
bool IntersectTriangle(const VWPoint3D &triPt0, const VWPoint3D &triPt1, const VWPoint3D &triPt2, VWLine3D &outIntersLine, bool &outLineOnTriPlane, double coordEpsilon, double radEpsilon) const
Definition VWLine3D.cpp:861
VWLine3D & operator-=(const VWPoint3D &p)
Definition VWLine3D.cpp:122
bool IsPtOnLine(const VWPoint3D &pt, double coordEpsilon, double radEpsilon) const
Definition VWLine3D.cpp:328
virtual ~VWLine3D()
Definition VWLine3D.cpp:27
double GetVerticalDistance(const VWPoint3D &pt) const
Definition VWLine3D.cpp:213
VWLine3D & operator*=(double scalar)
Definition VWLine3D.cpp:129
void ReverseSides()
Definition VWLine3D.cpp:80
bool IsOnTriangle(const VWPoint3D &triPt0, const VWPoint3D &triPt1, const VWPoint3D &triPt2, double coordEpsilon, double radEpsilon) const
Definition VWLine3D.cpp:1155
void SetStart(const VWPoint3D &pt)
Definition VWLine3D.cpp:64
VWLine3D operator*(double scalar) const
Definition VWLine3D.cpp:101
double GetDistance(const VWPoint3D &pt) const
Definition VWLine3D.cpp:170
const VWPoint3D & GetEnd() const
Definition VWLine3D.cpp:48
VWLine3D & operator+=(const VWPoint3D &p)
Definition VWLine3D.cpp:115
VWLine3D & operator=(const VWLine3D &src)
Definition VWLine3D.cpp:31
bool PtOnLineEnd(const VWPoint3D &pt, double dEpsilon) const
Definition VWLine3D.cpp:316
bool IntersectTriangleOnSamePlane(const VWPoint3D &triPt0, const VWPoint3D &triPt1, const VWPoint3D &triPt2, VWLine3D &outIntersLine, double coordEpsilon, double radEpsilon) const
Definition VWLine3D.cpp:1012
VWPoint2D CenterPt() const
Definition VWLine3D.cpp:147
Definition VWPoint2D.h:17
Definition VWPoint3D.h:19
Definition CieColor.h:9