/*****************************************************************//** * @file FITKAbsGeoSketch2D.h * @brief 2D平面草绘数据抽象类。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-03 *********************************************************************/ #ifndef FITKABSGEOSKETCH2D_H #define FITKABSGEOSKETCH2D_H #include "FITK_Kernel/FITKCore/FITKAbstractNDataObject.h" #include "FITKGeoEnum.h" #include "FITKAbsGeoCommand.h" #include "FITKInterfaceGeometryAPI.h" namespace Interface { /** * @brief 2D平面草绘数据抽象类。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-03 */ class FITKInterfaceGeometryAPI FITKAbsGeoSketch2D : public Interface::FITKAbsGeoCommand, public FITKGeoCommandManager { FITKCLASS(Interface, FITKAbsGeoSketch2D); public: /** * @brief 构造函数。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-03 */ FITKAbsGeoSketch2D(); /** * @brief 析构函数。[虚函数] * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-03 */ virtual ~FITKAbsGeoSketch2D(); /** * @brief 获取数据类型。[重写] * @return 数据类型 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-04 */ FITKGeoEnum::FITKGeometryComType getGeometryCommandType() override; /** * @brief 获取数据类型。[重写] * @return 是否更新成功 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-04 */ bool update() override; /** * @brief 设置草图平面信息。 * @param pos:面中心点坐标 * @param normal:面法向 * @param up:面向上方向 * @return 是否为有效平面 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ void setPlane(double* pos, double* normal, double* up); /** * @brief 获取草图平面信息。 * @param pos:面中心点坐标 * @param normal:面法向 * @param up:面向上方向 * @return 是否为有效平面 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ void getPlane(double* pos, double* normal, double* up); /** * @brief 设置基准元素位置。 * @param pos:坐标 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ void setPosition(double* pos); /** * @brief 获取基准元素位置。 * @param pos:坐标 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ void getPosition(double* pos); /** * @brief 设置基准面法向。 * @param nor:法向 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ void setNormal(double* nor); /** * @brief 获取基准面法向。 * @param nor:法向 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ void getNormal(double* nor); /** * @brief 设置基准面向上方向。 * @param up:向上方向 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ void setUp(double* up); /** * @brief 获取基准面向上方向。 * @param up:向上方向 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ void getUp(double* up); /** * @brief 内部子命令撤销。 * @return 是否执行成功 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ bool undoInternal(); /** * @brief 内部子命令重做。 * @return 是否执行成功 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ bool redoInternal(); /** * @brief 重写添加数据对象功能。(添加命令并清空RedoList)[虚函数][重写] * @param obj:数据对象 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ virtual void appendDataObj(Core::FITKAbstractDataObject* obj) override; /** * @brief 获取是否可以执行撤销操作。[虚函数] * @return 是否可以撤销 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ virtual bool canUndo(); /** * @brief 获取是否可以执行重做操作。[虚函数] * @return 是否可以重做 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ virtual bool canRedo(); /** * @brief 获取撤销列表。 * @return 撤销列表 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ FITKGeoCommandManager* getUndoList(); /** * @brief 获取重做列表。 * @return 重做列表 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ FITKGeoCommandManager* getRedoList(); protected: /** * @brief 位置坐标。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ double m_pos[3]{ 0., 0., 0. }; /** * @brief 基准面法向。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ double m_nor[3]{ 0., 0., 1. }; /** * @brief 基准面向上方向。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-05 */ double m_up[3]{ 0., 1., 0. }; /** * @brief 子命令重做列表。 * @author ChengHaotian (yeguangbaozi@foxmail.com) * @date 2024-09-20 */ FITKGeoCommandManager* m_redoList{ nullptr }; }; } #endif // !FITKABSGEOSKETCH2D_H