libMVRgdtf 40bc00a
A library for GDTF and MVR
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
VWPoint3D.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 {
15 // --------------------------------------------------------------------------------
16 class VWLine3D;
17
19 {
20 public:
21 VWPoint3D();
22 VWPoint3D(const WorldPt3& pt);
23 VWPoint3D(double x, double y, double z=0);
24 VWPoint3D(const VWPoint2D& pt, double z=0);
25 VWPoint3D(const VWPoint3D& src);
26 ~VWPoint3D();
27
28 public:
29
30 void SetPoint(const WorldPt3& pt);
31 void SetPoint(double x, double y, double z=0);
32 void SetPoint(const VWPoint2D& pt, double z=0);
33
34 bool operator==(const VWPoint3D& p) const;
35 bool operator!=(const VWPoint3D& p) const;
36 bool operator==(const VWPoint2D& p) const;
37 bool operator!=(const VWPoint2D& p) const;
38
39 VWPoint3D operator+(const VWPoint3D& p) const;
40 VWPoint3D operator-(const VWPoint3D& p) const;
41 VWPoint3D operator*(double scalar) const;
42 VWPoint3D operator/(double scalar) const;
43 VWPoint3D operator-(void) const;
44 // cross product
45 VWPoint3D operator*(const VWPoint3D& p) const;
46 // dot product
47 double operator%(const VWPoint3D& p) const;
48
49 VWPoint3D& operator=(const WorldPt3& p);
50 VWPoint3D& operator=(const VWPoint3D& p);
51 VWPoint3D& operator=(const VWPoint2D& p);
56
57 VWPoint3D& operator*=(double s);
58 VWPoint3D& operator/=(double s);
59 // cross product
61
62 // get projected on XY point
63 operator VWPoint2D() const;
64 // compatibility with SDK
65 operator const WorldPt3&() const;
66
67 // Math functions
68 public:
69 // return the distance from (0,0,0) to this point
70 double Magnitude() const;
71 // return the squared distance from (0,0,0) to this point
72 double MagnitudeSquared() const;
73 // return true if the specified point is equal within the given epsilon to this point
74 bool Equal(const VWPoint3D& pt, double dEpsilon) const;
75 bool Equal(const VWPoint2D& pt, double dEpsilon) const;
76 // calculate the distance from the specified point to this point
77 double DistanceTo(double x, double y, double z);
78 double DistanceTo(const VWPoint3D& pt) const;
79 //calculate the squared distance from the spcified point to this point
80 double DistanceSquaredTo(double x, double y, double z);
81 double DistanceSquaredTo(const VWPoint3D& pt) const;
82 // cross product
83 VWPoint3D Cross(const VWPoint3D& pt) const;
84 // dot product
85 double DotProduct(const VWPoint3D& pt) const;
86 // normalize this vector
88 // get normalized of this vector.
90
91 // checks whether the point lies on plane defined by point and two vectors lying on it.
92 bool IsOnPlane(const VWPoint3D& planePt, const VWPoint3D& planeVec0, const VWPoint3D& planeVec1,
93 double coordEpsilon, double radEpsilon) const;
94
95 // checks whether a point lies inside a triangle (lies on triangle's plane and is inside triangle's area).
96 bool IsOnTriangle(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2,
97 double coordEpsilon, double radEpsilon) const;
98
99 // Tools
100 public:
101 // area is negative if the triangle is CCW
102 static double TriArea(const VWPoint3D& pt1, const VWPoint3D& pt2, const VWPoint3D& pt3);
103 // area is negative if the triangle is CCW
104 static double TriArea(double pt1x, double pt1y, double pt1z,
105 double pt2x, double pt2y, double pt2z,
106 double pt3x, double pt3y, double pt3z);
107
108 // find the center and squared radius of triangle circumcircle. return whether it exists (triangle points are not collinear).
109 static bool GetTriCircumCircle(const VWPoint3D& pt0, const VWPoint3D& pt1, const VWPoint3D& pt2, VWPoint3D& outCenPt, double& outSqrRad);
110 // find the squared radius of triangle inscribed circle. return whether it exists.
111 static bool GetTriInscribedCircleRadius(const VWPoint3D& pt0, const VWPoint3D& pt1, const VWPoint3D& pt2, double& outSqrRad);
112 // find the center of triangle inscribed circle.
113 static void GetTriInscribedCircleCenter(const VWPoint3D& pt0, const VWPoint3D& pt1, const VWPoint3D& pt2, VWPoint3D& outCenPt);
114 // get an estimation of the triangle aspect ratio. ratio can not be estimated for degenerate triangles.
115 static bool TriAspectRatioEval(const VWPoint3D& pt0, const VWPoint3D& pt1, const VWPoint3D& pt2, double& ratioEval);
116
117 // check if given 3 points are collinear.
118 static bool ArePointsCollinear(const VWPoint3D& pt0, const VWPoint3D& pt1, const VWPoint3D& pt2, double dEpsilon);
119
120 // get longest triangle's edge.
121 static VWLine3D GetTriLongestEdge(const VWPoint3D& triPt0, const VWPoint3D& triPt1, const VWPoint3D& triPt2);
122
123 // data
124 public:
125 double x, y, z;
126
127 // static point defs
128 public:
129 // default epsilon for operator==
130 static double sEpsilon;
131 // squared default epsilon.
132 static double sSqrEpsilon;
133 // raw (bigger) epsilon.
134 static double sRawEpsilon;
135 // default epsilon for checking collinearity.
136 static double sEpsilonCollinear;
137 // default epsilon for checking nearness between angles in radians.
138 static double sEpsilonRadians;
139
140 private:
141 WorldPt3 fPoint;
142 };
143
144 // array of point defintion
145 typedef std::vector<VWPoint3D> TSTLPoints3DArray;
146 }
147 }
148}
Definition VWLine3D.h:16
Definition VWPoint2D.h:17
Definition VWPoint3D.h:19
VWPoint3D operator*(double scalar) const
Definition VWPoint3D.cpp:118
double x
Definition VWPoint3D.h:125
static double TriArea(const VWPoint3D &pt1, const VWPoint3D &pt2, const VWPoint3D &pt3)
Definition VWPoint3D.cpp:446
VWPoint3D Cross(const VWPoint3D &pt) const
Definition VWPoint3D.cpp:302
static bool ArePointsCollinear(const VWPoint3D &pt0, const VWPoint3D &pt1, const VWPoint3D &pt2, double dEpsilon)
Definition VWPoint3D.cpp:582
~VWPoint3D()
Definition VWPoint3D.cpp:63
double DistanceSquaredTo(double x, double y, double z)
Definition VWPoint3D.cpp:288
double y
Definition VWPoint3D.h:125
static bool GetTriInscribedCircleRadius(const VWPoint3D &pt0, const VWPoint3D &pt1, const VWPoint3D &pt2, double &outSqrRad)
Definition VWPoint3D.cpp:515
static double sRawEpsilon
Definition VWPoint3D.h:134
VWPoint3D GetNormalized() const
Definition VWPoint3D.cpp:329
VWPoint3D()
Definition VWPoint3D.cpp:28
VWPoint3D & operator/=(double s)
Definition VWPoint3D.cpp:196
double Magnitude() const
Definition VWPoint3D.cpp:246
VWPoint3D & Normalize()
Definition VWPoint3D.cpp:316
VWPoint3D operator+(const VWPoint3D &p) const
Definition VWPoint3D.cpp:108
VWPoint3D operator-(void) const
Definition VWPoint3D.cpp:128
void SetPoint(const WorldPt3 &pt)
Definition VWPoint3D.cpp:81
double z
Definition VWPoint3D.h:125
VWPoint3D & operator+=(const VWPoint3D &p)
Definition VWPoint3D.cpp:157
static double sSqrEpsilon
Definition VWPoint3D.h:132
VWPoint3D & operator*=(double s)
Definition VWPoint3D.cpp:188
bool operator!=(const VWPoint3D &p) const
Definition VWPoint3D.cpp:93
static bool TriAspectRatioEval(const VWPoint3D &pt0, const VWPoint3D &pt1, const VWPoint3D &pt2, double &ratioEval)
Definition VWPoint3D.cpp:557
static double sEpsilon
Definition VWPoint3D.h:130
bool operator==(const VWPoint3D &p) const
Definition VWPoint3D.cpp:88
bool Equal(const VWPoint3D &pt, double dEpsilon) const
Definition VWPoint3D.cpp:258
double DistanceTo(double x, double y, double z)
Definition VWPoint3D.cpp:274
double operator%(const VWPoint3D &p) const
Definition VWPoint3D.cpp:221
VWPoint3D & operator=(const WorldPt3 &p)
Definition VWPoint3D.cpp:133
VWPoint3D operator/(double scalar) const
Definition VWPoint3D.cpp:123
static double sEpsilonRadians
Definition VWPoint3D.h:138
static VWLine3D GetTriLongestEdge(const VWPoint3D &triPt0, const VWPoint3D &triPt1, const VWPoint3D &triPt2)
Definition VWPoint3D.cpp:603
double MagnitudeSquared() const
Definition VWPoint3D.cpp:252
static bool GetTriCircumCircle(const VWPoint3D &pt0, const VWPoint3D &pt1, const VWPoint3D &pt2, VWPoint3D &outCenPt, double &outSqrRad)
Definition VWPoint3D.cpp:481
bool IsOnTriangle(const VWPoint3D &triPt0, const VWPoint3D &triPt1, const VWPoint3D &triPt2, double coordEpsilon, double radEpsilon) const
Definition VWPoint3D.cpp:377
static void GetTriInscribedCircleCenter(const VWPoint3D &pt0, const VWPoint3D &pt1, const VWPoint3D &pt2, VWPoint3D &outCenPt)
Definition VWPoint3D.cpp:536
VWPoint3D & operator-=(const VWPoint3D &p)
Definition VWPoint3D.cpp:172
double DotProduct(const VWPoint3D &pt) const
Definition VWPoint3D.cpp:310
static double sEpsilonCollinear
Definition VWPoint3D.h:136
bool IsOnPlane(const VWPoint3D &planePt, const VWPoint3D &planeVec0, const VWPoint3D &planeVec1, double coordEpsilon, double radEpsilon) const
Definition VWPoint3D.cpp:339
std::vector< VWPoint3D > TSTLPoints3DArray
Definition VWPoint3D.h:145
Definition CieColor.h:9
Definition MCCoordTypes.h:1053