Workbench 工作台
类简介
gui::Workbench 是工作台抽象基类(继承自 base::IPlugin),定义了工作台的生命周期、UI构建、命令注册等标准接口。
Dev::DevWorkbench 是具体实现类,继承自 gui::Workbench,展示了如何实现自定义工作台。
继承关系:
base::IPlugin → gui::Workbench (抽象类) → Dev::DevWorkbench (具体实现)
核心成员
基本信息
std::string Version() const override;
返回工作台版本号
std::string PluginName() const override;
返回插件唯一标识名
QString Label() const override;
返回工作台显示标签
QString Pixmap() const override;
返回工作台图标资源路径
QString GroupName() const override;
返回工作台分组名称
int BaseIndex() override;
返回工作台基础索引,用于排序
int BaseNavIndex() override;
返回导航栏索引
生命周期
激活工作台并更新GUI界面(由框架调用)
virtual void Activated();
工作台激活时的回调钩子
virtual void Deactivated();
工作台停用时的回调钩子
加载工作台初始化内容(首次加载时调用)
virtual void InitData(app::Document* doc);
初始化文档相关数据
UI构建
virtual gui::MenuItem* SetupMenuBar() const = 0;
构建工作台的菜单栏结构,返回菜单项树的根节点
virtual gui::ToolBarItem* SetupToolBars() const = 0;
构建工作台的工具栏结构,返回工具栏项树的根节点
virtual void RegistCommand() = 0;
注册工作台的所有命令
virtual std::vector<gui::Navigator*> GetNavigatorList() const;
返回工作台的导航栏列表
virtual void CreateMainWindowPopupMenu(gui::MenuItem* item) const;
创建主窗口的右键菜单
Navigator 导航栏
类简介
gui::Navigator 是导航栏抽象基类(继承自 QWidget),定义了导航栏的基本接口和生命周期管理。
Dev::PartNavigator 是部件导航栏的具体实现,继承自 gui::Navigator,提供对象树视图和图层管理功能。
继承关系:
QWidget → gui::Navigator (基类) → Dev::PartNavigator (具体实现)
核心成员
Navigator(std::string name, QString label = "");
构造函数,设置导航栏名称和显示标签
std::string Name() const;
返回导航栏唯一标识名
返回导航栏显示标签
void SetName(const std::string& name);
设置导航栏名称
返回导航栏图标
void SetupDocument(app::Document* doc);
设置当前文档并初始化主Widget
返回导航栏的主Widget
virtual QWidget* InitMainWidget(app::Document* doc) = 0;
初始化并返回导航栏的主Widget,可按需添加Tab、表格等控件
刷新导航栏内容
导航栏主Widget指针
Tab容器Widget(PartNavigator)
ShapeTreeWidget* shapebase;
对象树Widget,用于显示文档中的几何对象(PartNavigator)
Command 命令
类简介
gui::Command 是命令抽象基类,定义了用户操作的执行接口。所有命令都需要注册到 gui::CommandManager 进行统一管理。
继承关系:
gui::CommandBase → gui::Command (抽象类) → Dev::CreateBox等具体命令实现
核心成员
Command(std::string const& name);
构造函数,设置命令名称,内部唯一id标识符
virtual void Activated(int index) = 0;
命令执行的核心函数,必须实现
判断命令是否可执行
std::string const& GetName() const;
返回命令名称
void SetMenuText(std::string const&);
设置菜单显示文本
void SetToolTipText(std::string const&);
设置工具提示文本
void SetPixmap(std::string const&);
设置命令图标路径
void SetAccel(std::string const&);
设置快捷键
返回关联的Action对象
常用宏定义
定义标准命令,只需实现 Activated()
定义命令,需实现 Activated() 和 IsActive()
定义命令,需实现 Activated()、IsActive() 和 CreateAction()
CommandManager 命令管理器
static CommandManager& GetInstance();
获取单例实例
void AddCommand(Command* command);
注册命令到管理器
Command* GetCommandByName(std::string const& name) const;
根据名称获取命令
void RunCommandByName(std::string const& name) const;
根据名称执行命令
DocumentObject 文档对象
类简介
app::DocumentObject 是文档对象基类,表示文档中的一个数据实体。 Dev::BoxObject 继承自 DevObject,用于创建立方体几何对象。
继承关系:
app::PropertyContainer → app::TransactionalObject → app::DocumentObject → app::DocumentObjectTopoShape → Dev::DevObject → Dev::BoxObject
基类 PropertyContainer 提供了属性操作接口,如 AddPropertyFloat、AddPropertyString、AddPropertyInteger、GetPropertyFloat 等属性读写函数。
核心成员
对象标识
std::string GetFullName() const override;
按 DocName.ObjName 的形式返回对象的完整名字(唯一标识,可做 ID 使用)
std::string GetFullLabel() const;
按 DocLabel#ObjLabel 的形式返回对象的标签,用于显示
virtual std::string_view GetViewProviderClassName() const;
返回关联的 ViewProvider 类名(BoxObject 返回 "Dev::ViewProviderBox")
父子关系
std::vector<std::pair<app::DocumentObject*, std::string>> GetParents(int depth = 0) const;
返回指定深度的父对象,以及此对象在父对象中的名称
app::DocumentObject* GetFirstParent() const;
获取第一个父对象
子元素可见性
virtual int SetElementVisible(std::string_view subname, bool visible);
设置子元素可见性,返回值:-1 不支持,0 子元素不存在,1 设置成功(注意:subname 不能包含 '.')
virtual int IsElementVisible(std::string_view subname) const;
获取子元素可见性,返回值:-1 不支持或不存在,0 不可见,1 可见
对象状态
检查对象是否处于错误状态
检查对象是否有效(非错误状态)
ObjectStatus 状态机制: 当前框架使用 ObjectStatus枚举定义了包括 TOUCH(需要重新计算)、RECOMPUTE(重新计算中)、RESTORING(恢复中)、ERROR_(错误)、FREEZE(冻结)等状态标志,通过封装好的函数获取相关状态。
信号
boost::signals2::signal<void(const DocumentObject&, const Property&)> SignalPropertyChanged;
属性改变信号
ViewProvider 视图提供者
类简介
gui::ViewProvider 是视图提供者基类,负责DocumentObject在3D视图中的渲染和交互。 Dev::ViewProviderBox 继承自 ViewProviderDocumentObjectTopoShape,实现立方体的渲染和参数交互。
继承关系:
app::TransactionalObject → gui::ViewProvider → gui::ViewProviderDocumentObjectTopoShape → Dev::ViewProviderBox
核心成员
构造函数
virtual QIcon GetIcon() const;
返回对象图标
显示对象
隐藏对象
virtual bool IsShow() const;
返回对象可见状态
virtual QWidget* GetTaskView() const;
返回任务面板Widget,用于参数编辑
删除对象前的回调