#pragma once #include "MLMicroStructureExport.h" class MLBox; class MLLine; class MLMICROSTRUCTURE_EXPORT MLVector { public: MLVector(void); MLVector(double vx, double vy, double vz = 0.0, bool valid_in = true); ~MLVector(void); static const MLVector invalid; static const MLVector nullVector; // ÔªËØÊý __declspec(property(get=getX, put = setX)) double x; __declspec(property(get=getY, put = setY)) double y; __declspec(property(get=getZ, put = setZ)) double z; __declspec(property(get=getValid, put = setValid)) bool valid; public: // Sets new values for the vector and makes the vector valid. inline void set(double vx, double vy, double vz = 0.0) ; void setPolar(double radius, double angle); bool isValid() const; bool isInside(const MLBox& b) const; //bool equalsFuzzy(const MLVector& v, double tol = MLCore::PointTolerance) const; double getDistanceTo(const MLVector& v) const; double getDistanceTo2d(const MLVector& v) const; void setAngle(double a); double getAngle() const; double getAngleToPlaneXY() const; double getAngleTo(const MLVector& v) const; void setMagnitude2d(double m); double getMagnitude() const; double getSquaredMagnitude() const; double getMagnitude2d() const; MLVector getLerp(const MLVector& v, double t) const; MLVector getUnitVector() const; void setX(double x); double getX() const; double& getX(); void setY(double y); double getY() const; double& getY(); void setZ(double z); double getZ() const; double& getZ(); void setValid(bool valid); bool getValid() const; bool isInWindow(const MLVector& firstCorner, const MLVector& secondCorner); MLVector operator + (const MLVector& v) const; MLVector operator - (const MLVector& v) const; MLVector operator * (double s) const; MLVector operator / (double s) const; MLVector operator - () const; void operator += (const MLVector& v); void operator -= (const MLVector& v); void operator *= (double s); void operator /= (double s); bool operator ==(const MLVector& v) const; bool operator !=(const MLVector& v) const; MLVector getNegated() const; MLVector normalize(); MLVector getNormalized() const; MLVector getFloor() const; MLVector getCeil() const; MLVector move(const MLVector& offset); static MLVector getCrossProduct(const MLVector& v1, const MLVector& v2); static double getDotProduct(const MLVector& v1, const MLVector& v2); static MLVector createPolar(double radius, double angle); static MLVector getMinimum(const MLVector& v1, const MLVector& v2); static MLVector getMaximum(const MLVector& v1, const MLVector& v2); static MLVector getAverage(const MLVector& v1, const MLVector& v2); MLVector rotate(double rotation); MLVector rotate(double rotation, const MLVector& center); MLVector rotate3d(const MLLine& axis, double rotation); //MLVector rotate3d(const QQuaternion& quaternion); MLVector scale(double factor, const MLVector& center=nullVector); MLVector scale(const MLVector& factors, const MLVector& center=nullVector); MLVector mirror(const MLLine& axis); MLVector mirror(const MLVector& axis1, const MLVector& axis2); MLVector flipHorizontal(); MLVector flipVertical(); //MLVector stretch(const MLPolyline& area, const MLVector& offset); /* static void moveList(std::vector& list, const MLVector& offset); static void rotateList(std::vector& list, double rotation); static void rotateList(std::vector& list, double rotation, const MLVector& center); static void scaleList(std::vector& list, double factor, const MLVector& center=nullVector); static void scaleList(std::vector& list, const MLVector& factors, const MLVector& center=nullVector); */ protected: double m_x; double m_y; double m_z; bool m_valid; };