/** * @file FITKAbsGeoModelPoint.h * @brief 抽象点. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ #ifndef FITKABSGEOMODELPOINT_H #define FITKABSGEOMODELPOINT_H #include "FITKInterfaceGeometryAPI.h" #include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h" #include #include namespace Interface { /** * @brief 坐标点. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelPoint : public FITKAbsGeoCommand { public: FITKAbsGeoModelPoint() = default; FITKAbsGeoModelPoint(double x, double y, double z); virtual ~FITKAbsGeoModelPoint() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; double x() const; void setX(double x); double y() const; void setY(double y); double z() const; void setZ(double z); void setCoord(double x, double y, double z); protected: double m_X{ 0.0 }; double m_Y{ 0.0 }; double m_Z{ 0.0 }; }; /** * @brief 曲线的端点. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelCurveEnd : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelCurveEnd() = default; virtual ~FITKAbsGeoModelCurveEnd() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourceCurve() const; void setSourceCurve(VirtualShape curve); bool useStartEnd() const; void setUseStartEnd(bool use); protected: VirtualShape m_SourceCurve{}; bool m_UseStartEnd{ true }; }; /** * @brief 距离曲线的端点指定距离. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelCurveEndDistance : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelCurveEndDistance() = default; virtual ~FITKAbsGeoModelCurveEndDistance() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourceCurve() const; void setSourceCurve(VirtualShape curve); bool useStartEnd() const; void setUseStartEnd(bool use); double distance() const; void setDistance(double distance); protected: VirtualShape m_SourceCurve{}; bool m_UseStartEnd{ true }; double m_Distance{}; }; /** * @brief 指定曲线比例创建点. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelCurveRadio : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelCurveRadio() = default; virtual ~FITKAbsGeoModelCurveRadio() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourceCurve() const; void setSourceCurve(VirtualShape curve); double radio() const; void setRadio(double radio); protected: VirtualShape m_SourceCurve{}; double m_Radio{}; }; /** * @brief 点在线上的投影. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelPointProjectionOnCurve : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelPointProjectionOnCurve() = default; virtual ~FITKAbsGeoModelPointProjectionOnCurve() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourcePoint() const; void setSourcePoint(VirtualShape point); VirtualShape sourceCurve() const; void setSourceCurve(VirtualShape curve); QVector> getResultPoints() { return m_Projections; }; protected: VirtualShape m_SourcePoint{}; VirtualShape m_SourceCurve{}; QVector> m_Projections{}; }; /** * @brief 两条线的交点. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelTwoCurveIntersection : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelTwoCurveIntersection() = default; virtual ~FITKAbsGeoModelTwoCurveIntersection() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourceCurve1() const; VirtualShape sourceCurve2() const; void setSourceCurve(VirtualShape curve1, VirtualShape curve2); QVector> getResultPoints() { return m_Intersections; }; protected: VirtualShape m_SourceCurve1{}; VirtualShape m_SourceCurve2{}; QVector> m_Intersections{}; }; /** * @brief 点在面上的投影. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelPointProjectionOnSurface : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelPointProjectionOnSurface() = default; virtual ~FITKAbsGeoModelPointProjectionOnSurface() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourcePoint() const; void setSourcePoint(VirtualShape point); VirtualShape sourceSurface() const; void setSourceSurface(VirtualShape surface); QVector> getResultPoints() { return m_Projections; }; protected: VirtualShape m_SourcePoint{}; VirtualShape m_SourceSurface{}; QVector> m_Projections{}; }; /** * @brief 线和面的交点. * @author YanZhiHui (chanyuantiandao@126.com) * @date 2024-08-27 */ class FITKInterfaceGeometryAPI FITKAbsGeoModelCurveIntersectionSurface : public FITKAbsGeoModelPoint { public: FITKAbsGeoModelCurveIntersectionSurface() = default; virtual ~FITKAbsGeoModelCurveIntersectionSurface() = default; FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; VirtualShape sourceCurve() const; void setSourceCurve(VirtualShape curve); VirtualShape sourceSurface() const; void setSourceSurface(VirtualShape surface); QVector> getResultPoints() { return m_Intersections; }; protected: VirtualShape m_SourceCurve{}; VirtualShape m_SourceSurface{}; QVector> m_Intersections{}; }; } #endif // !FITKABSGEOMODELPOINT_H