FreeCAD 工作台(Workbench)开发笔记『一』

前言

工作台(Workbench)是 FreeCAD 重要的组成部分,比如 Part 工作台,FEM 工作台,每个工作台用于处理不同的任务。

工作台定义 https://zh.wikipedia.org/wiki/%E5%B7%A5%E4%BD%9C%E5%8F%B0

FreeCAD 工作台可以使用 Python、C++ 或两者的混合进行编码,但作为外部(第三方)工作台,按官方的说法,仅能使用 Python 来开发,所以需要了解一些 Python 知识。

目前,FreeCAD 工作台开发标准有两个:

传统工作台 (https://wiki.freecad.org/Workbench_creation)

新的标准工作台 (https://github.com/FreeCAD/freecad.workbench_starterkit)

这里仅学习新标准的工作台开发。

一、目录构成

/Mod/
  └─ MyWorkbench/
      ├─ freecad/
      │  └─ workbench_starterkit/
      │      ├─ __init__.py
      │      └─ init_gui.py
      ├─ setup.py
      └─ 其他文件
  • 文件说明
    • __init__.py 这个是在 FreeCAD 启动时候执行,不与界面交互,后台执行,在工作台开发时,内容可为空。

    • init_gui.py 这个是在工作台被加载时执行,主要用于界面交互,比如添加菜单、工具栏等。

    • setup.py 用于注册工作台。

二、工作台相关概念

  • 命令 (command)
    • 可由 FreeCAD 调用的指令;一般是一个 Python 类,只需要定义一次,使用 FreeCADGui.addCommand(name, command) 来向 FreeCAD 注册
  • 菜单项 (menu item)
    • 显示在 FreeCAD 菜单栏里的菜单项,可进行分组,一个命令可用在多个菜单
  • 工具栏按钮 (toobar button)
    • 和菜单项类似,工具栏按钮可以进行分组,也可以用在多个工具栏中

注:
菜单和工具按钮的点击,都可以调用 命令

三、简单代码实现

  • 要达到的目的:

    • FreeCAD 启动时加载一个自定义的工作台;
    • 切换到当前工作台时,在 FreeCAD报告浏览器 中显示一句话:迷宫工作台已加载。
    • 同时在工具栏上添加一个功能按钮:创建迷宫
    • 当点击 创建迷宫 ,在 报告浏览器 中显示一句话:迷宫已创建。
  • 需要准备的资料

    • 准备一个 svg 格式的图标文件,命名为 maze.svg
    • 将该图标文件放到 ./resource/icons 目录下;
    • 该文件将被用作工作台和功能的图标。
  • 创建以下目录结构

    freecad-maze/
    ├─ freecad/
    │  └─ maze/
    │    ├─ resources/
    │    │  └─ icons/
    │    │     └─ maze.svg
    │    ├─ __init__.py
    │    └─ init_gui.py
    └─ setup.py
    
  • init_gui.py 文件代码

# -*- coding: utf-8 -*-
from freecad import app, gui
import os

ROOTPATH = os.path.join(os.path.dirname(__file__))
ICONPATH = os.path.join(ROOTPATH, "resources/icons")
APPICON = os.path.join(ICONPATH, "maze.svg")

class MazeWorkbench(gui.Workbench):
    '''
    迷宫插件,主要用于生成迷宫的三维模型
    '''
    # 插件名称
    MenuText = "迷宫"
    # 插件提示,在参数设置的工作台列表中显示
    ToolTip = "这是一个迷宫工作台"
    # 插件图标
    Icon = APPICON

    def GetClassName(self):
        return "Gui::PythonWorkbench"

    def Initialize(self):
        '''
        初始化时执行,可以在这里初始化菜单、工具栏
        '''
        app.Console.PrintMessage("迷宫工作台已加载。\n")
        # 向FreeCAD添加指令
        gui.addCommand("CreateMaze", CreateMaze())
        # 向当前工作台添加一个命令按钮
        self.appendToolbar("Maze", ["CreateMaze"])

    def Activated(self):
        '''
        切换到(变为活动)当前工作台时执行
        '''
        pass

    def Deactivated(self):
        '''
        当前工作台从活动变为不活动时执行
        '''
        pass


class CreateMaze():
    def GetResources(self):
        return {"Pixmap"  : APPICON,  
                "MenuText": "创建迷宫",
                "ToolTip" : "创建一个3D迷宫"}

    def Activated(self):
        app.Console.PrintMessage("迷宫已创建完成\n")
        return

    def IsActive(self):
        '''
        判断当前命令是否可用
        '''
        return True

gui.addWorkbench(MazeWorkbench())

  • setup.py 代码
from setuptools import setup
__version__ = '0.0.1'

setup(name='freecad.maze',
      version=str(__version__),
      packages=['freecad',
                'freecad.maze'],
      maintainer="作者名称",
      maintainer_email="作者邮箱",
      url="项目主页",
      description="迷宫",
      install_requires=[],
      include_package_data=True)

四、在 FreeCAD 中进行测试

  • 当以上代码都准备完成后,就可以准备进行测试了;
  • 可以有两种方式进行测试:
    1. 将代码直接复制到 FreeCADMod 目录下;
    2. 使用 软链接 将当前目录链接到 Mod 目录下;
  • 这里采用第二种方式
  • 默认情况下,FreeCAD 的插件安装在 Mod 目录下,如 PartDesign 工作台:C:\Program Files\FreeCAD 0.21\Mod\PartDesign
  • 可使用以下命令创建一个软链接
    • Windows

      mklink /J "C:\Program Files\FreeCAD 0.21\Mod\freecad-maze" X:\SourceCode\freecad-maze
      
    • Mac

      sudo ln -s /SourceCode/freecad-maze /Applications/FreeCAD.app/Contents/Resources/Mod/freecad-maze
      
  • 创建完成后,启动 FreeCAD ,如果代码无误,可以在工作台列表中看到一个 迷宫 工作台

小结

参考内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容