| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef LIBRECAD_LC_COORDINATES_MAPPER_H |
| | #define LIBRECAD_LC_COORDINATES_MAPPER_H |
| |
|
| | #include "rs_vector.h" |
| |
|
| | class QPointF; |
| |
|
| | class LC_CoordinatesMapper { |
| | public: |
| | LC_CoordinatesMapper(); |
| | void toUCSDelta(const RS_Vector& worldDelta, double& ucsDX, double &ucsDY) const; |
| | RS_Vector toUCSDelta(const RS_Vector& worldDelta) const; |
| | RS_Vector toWorldDelta(const RS_Vector& worldDelta) const; |
| | double toWorldAngle(double ucsAngle) const; |
| | double toWorldAngleDegrees(double ucsAngle) const; |
| | double toUCSAngle(double wcsAngle) const; |
| | double toUCSAngleDegrees(double wcsAngle) const; |
| | RS_Vector toUCS(const RS_Vector& wcsPos) const; |
| | void toUCS(const RS_Vector& wcsPos, double& ucsX, double &ucsY) const; |
| | RS_Vector toWorld(double ucsX, double ucsY) const; |
| | RS_Vector toWorld(const RS_Vector& ucsPos) const; |
| | bool hasUCS() const {return m_hasUcs;} |
| | void ucsBoundingBox(const RS_Vector& wcsMin, const RS_Vector&wcsMax, RS_Vector& ucsMin, RS_Vector& ucsMax) const; |
| | void worldBoundingBox(const RS_Vector& ucsMin, const RS_Vector &ucsMax, RS_Vector& worlMin, RS_Vector& worldMax) const; |
| | RS_Vector restrictHorizontal(const RS_Vector &baseWCSPoint, const RS_Vector& wcsCoord) const; |
| | RS_Vector restrictVertical(const RS_Vector &baseWCSPoint, const RS_Vector& wcsCoord) const; |
| |
|
| | double toUCSBasisAngle(double ucsAbsAngle, double baseAngle, bool counterclockwise); |
| | double toUCSAbsAngle(double ucsBasisAngle, double baseAngle, bool conterclockwise); |
| |
|
| | void apply(LC_CoordinatesMapper* other); |
| |
|
| | const RS_Vector &getUcsOrigin() const; |
| | void setUcsOrigin(const RS_Vector& origin); |
| | double getXAxisAngle() const{return xAxisAngle;} |
| | const RS_Vector& getUcsRotation() const |
| | { |
| | return m_ucsRotation; |
| | } |
| |
|
| | protected: |
| | void setXAxisAngle(double angle); |
| | double toUCSAngleDegree(double angle) const; |
| | void doWCS2UCS(double worldX, double worldY, double &ucsX, double &ucsY) const; |
| | RS_Vector doWCS2UCS(const RS_Vector &worldCoordinate) const; |
| | RS_Vector doWCSDelta2UCSDelta(const RS_Vector &worldDelta) const; |
| | void doWCSDelta2UCSDelta(const RS_Vector &worldDelta, double &ucsDX, double &ucsDY) const; |
| | RS_Vector doUCSDelta2WCSDelta(const RS_Vector &ucsDelta) const; |
| | void doUCSDelta2WCSDelta(const RS_Vector &ucsDelta, double &wcsDX, double &wcsDY) const; |
| | RS_Vector doUCS2WCS(const RS_Vector &ucsCoordinate) const; |
| | void doUCS2WCS(double ucsX, double ucsY, double &worldX, double &worldY) const; |
| | void update(const RS_Vector& origin, double angle); |
| | void useUCS(bool isUcs) |
| | { |
| | m_hasUcs = isUcs; |
| | } |
| |
|
| | private: |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | bool m_hasUcs = false; |
| | RS_Vector m_ucsOrigin{0., 0., 0.}; |
| | double xAxisAngle = 0.0; |
| | double xAxisAngleDegrees = 0.0; |
| | RS_Vector m_ucsRotation; |
| | double& sinXAngle = m_ucsRotation.y; |
| | double& cosXAngle = m_ucsRotation.x; |
| | RS_Vector m_AxisNegRotation; |
| | double& sinNegativeXAngle = m_AxisNegRotation.y; |
| | double& cosNegativeXAngle = m_AxisNegRotation.x; |
| | }; |
| |
|
| |
|
| | #endif |
| |
|