tge/lib/maxsdk40/point4.h
2025-02-17 23:17:30 -06:00

147 lines
4.0 KiB
C++
Executable File

/**********************************************************************
*<
FILE: point4.h
DESCRIPTION: Class definitions for Point4
CREATED BY: Dan Silva
HISTORY:
*> Copyright (c) 1994, All Rights Reserved.
**********************************************************************/
#ifndef _POINT4_H
#define _POINT4_H
#include "point3.h"
class DllExport Point4 {
public:
float x,y,z,w;
// Constructors
Point4(){}
Point4(float X, float Y, float Z, float W) { x = X; y = Y; z = Z; w = W; }
Point4(double X, double Y, double Z, double W) { x = (float)X; y = (float)Y; z = (float)Z; w = (float)W; }
Point4(int X, int Y, int Z, int W) { x = (float)X; y = (float)Y; z = (float)Z; w = (float)W; }
Point4(const Point3& a, float W=0.0f) { x = a.x; y = a.y; z = a.z; w = W; }
Point4(const Point4& a) { x = a.x; y = a.y; z = a.z; w = a.w; }
Point4(float af[4]) { x = af[0]; y = af[1]; z = af[2]; w = af[3]; }
// Data members
static const Point4 Origin;
static const Point4 XAxis;
static const Point4 YAxis;
static const Point4 ZAxis;
static const Point4 WAxis;
// Access operators
float& operator[](int i) { return (&x)[i]; }
const float& operator[](int i) const { return (&x)[i]; }
// Conversion function
operator float*() { return(&x); }
// Unary operators
Point4 operator-() const { return(Point4(-x,-y,-z, -w)); }
Point4 operator+() const { return *this; }
// Assignment operators
inline Point4& operator-=(const Point4&);
inline Point4& operator+=(const Point4&);
inline Point4& operator*=(float);
inline Point4& operator/=(float);
inline Point4& operator*=(const Point4&); // element-by-element multiply.
inline Point4& Set(float X, float Y, float Z, float W);
// Test for equality
int operator==(const Point4& p) const { return ((p.x==x)&&(p.y==y)&&(p.z==z)&&(p.w==w)); }
int operator!=(const Point4& p) const { return ((p.x!=x)||(p.y!=y)||(p.z!=z)||(p.w!=w)); }
int Equals(const Point4& p, float epsilon = 1E-6f);
// Binary operators
inline Point4 operator-(const Point4&) const;
inline Point4 operator+(const Point4&) const;
inline Point4 operator/(const Point4&) const;
inline Point4 operator*(const Point4&) const;
};
// Inlines:
inline Point4& Point4::operator-=(const Point4& a) {
x -= a.x; y -= a.y; z -= a.z; w -= a.w;
return *this;
}
inline Point4& Point4::operator+=(const Point4& a) {
x += a.x; y += a.y; z += a.z; w += a.w;
return *this;
}
inline Point4& Point4::operator*=(float f) {
x *= f; y *= f; z *= f; w *= f;
return *this;
}
inline Point4& Point4::operator/=(float f) {
if (f==0.0f) f = .000001f;
x /= f; y /= f; z /= f; w /= f;
return *this;
}
inline Point4& Point4::operator*=(const Point4& a) {
x *= a.x; y *= a.y; z *= a.z; w *= a.w;
return *this;
}
inline Point4& Point4::Set(float X, float Y, float Z, float W) {
x = X;
y = Y;
z = Z;
w = W;
return *this;
}
inline Point4 Point4::operator-(const Point4& b) const {
return(Point4(x-b.x,y-b.y,z-b.z, w-b.w));
}
inline Point4 Point4::operator+(const Point4& b) const {
return(Point4(x+b.x,y+b.y,z+b.z, w+b.w));
}
inline Point4 Point4::operator/(const Point4& b) const {
return Point4(x/b.x,y/b.y,z/b.z,w/b.w);
}
inline Point4 Point4::operator*(const Point4& b) const {
return Point4(x*b.x, y*b.y, z*b.z,w*b.w);
}
inline Point4 operator*(float f, const Point4& a) {
return(Point4(a.x*f, a.y*f, a.z*f, a.w*f));
}
inline Point4 operator*(const Point4& a, float f) {
return(Point4(a.x*f, a.y*f, a.z*f, a.w*f));
}
inline Point4 operator/(const Point4& a, float f) {
return(Point4(a.x/f, a.y/f, a.z/f, a.w/f));
}
inline Point4 operator+(const Point4& a, float f) {
return(Point4(a.x+f, a.y+f, a.z+f, a.w+f));
}
inline int Point4::Equals(const Point4& p, float epsilon) {
return (fabs(p.x - x) <= epsilon && fabs(p.y - y) <= epsilon
&& fabs(p.z - z) <= epsilon && fabs(p.w - w) <= epsilon);
}
#endif