1.模块初始化及图标设置

本文档详述了如何模仿FreeCAD的ReverseEngineering模块来创建PersonalReverse,并进行初始化设置和Workbench图标的配置。通过修改CmakeLists.txt,添加option命令,以及处理Gui相关代码,成功编译并解决了Qt资源文件导致的图标问题。最后,介绍了如何设置Command命令的图标。
摘要由CSDN通过智能技术生成

0.前言

本文将分析和模仿FreeCAD的官方模块ReverseEngineering来开发PersonalReverse模块

该仿造仅为学习FreeCAD,请遵守FreeCAD的开发许可证规定:FreeCAD/LICENSE
参考链接:
FreeCAD_modular_design


1.PersonalReverse初始化

  1. 进入源码的src/Tools目录下,打开终端,运行python fcbt.py,使用CM命令,创建PersonalReverse模块,如图所示:
    1的说明
    此时,进入到src/Mod目录下,将会发现新增了一个PersonalReverse目录

  2. 修改src/Mod目录下的CmakeLists.txt,将我们的新模块添加到整个解决方案中

option(BUILD_PERREVERSE "Build PersonalReverse" ON)
if(BUILD_PERREVERSE)
  add_subdirectory(PersonalReverse)
endif(BUILD_PERREVERSE)

这里添加option命令是为了方便在cmake-gui中编译。wiki教程中使用cmake -DBUILD_FEM=OFF -DBUILD_MESH=OFF ../freecad-source命令,可以将某些不需要的模块移除,这样可以简化程序,加快编译。当然,你也可以在cmake-gui中将对应模块的BUILD命令反勾选。


2.初始化文件分析+Workbench图标

进入PersonalReverse目录,终端中输入tree /F打印如下(注释为作者键入):

PersonalReverse:
│  CMakeLists.txt #该目录的编译规则
│  Init.py #定义输入输出文件类型
│  InitGui.py #定义workbench图标等信息,需要在Gui/CMakeLists.txt中添加资源
│  PersonalReverse.dox #定义了加载Workbench的规范,必不可少
│
├─App
│      AppPersonalReverse.cpp
│      CMakeLists.txt
│      PreCompiled.cpp
│      PreCompiled.h
│
└─Gui
    │  AppPersonalReverseGui.cpp
    │  CMakeLists.txt
    │  Command.cpp
    │  PreCompiled.cpp
    │  PreCompiled.h
    │  Workbench.cpp
    │  Workbench.h
    │
    └─Resources
        │  PersonalReverse.qrc #资源文件
        │
        └─icons #该文件夹为手动创建,用于存储svg图标及翻译文件

模板模块的组织方式与FreeCAD源代码文件夹中的其他官方模板类似。Gui相关的c++代码放在Gui文件夹中,非Gui代码放在App子文件夹中。生成模块将处于最小的可运行/可编译状态。

注意到,本文在PersonalReverse/Gui/Resources中添加了icons文件夹,现在我们来修改一下该模块的图标。

  1. icons文件夹下添加PersonalReverseWorkbench.svg(可以从其他Mod中复制一个图标改名,也可以去网上下载)
  2. 在InitGui.py中添加Icon=...【请注意,python文件对缩进很敏感,可以使用vscode等专业的代码编辑器以保证代码为统一缩进】
class PersonalReverseWorkbench ( Workbench ):
	"PersonalReverse workbench object"
    Icon = FreeCAD.getResourceDir() + "Mod/PersonalReverse/Resources/icons/PersonalReverseWorkbench.svg"
	MenuText = "PersonalReverse"
	ToolTip = "PersonalReverse workbench"
	def Initialize(self):
		# load the module
		import PersonalReverseGui
	def GetClassName(self):
		return "PersonalReverseGui::Workbench"

Gui.addWorkbench(PersonalReverseWorkbench())

至此,我们已经可以使用cmake和visual studio来编译整个FreeCAD项目,请参考FreeCAD编译教程
不幸的是,编译运行后,我们会发现workbench的图标出现了问题,这是因为Qt的资源文件没有被编译,FreeCAD无法加载我们设置的图标。

  1. Workbench图标编译
  • 打开Gui/CMakeLists.txt文件,设置PersonalReverseGui_SVG路径变量
SET(PersonalReverseGui_SVG
	Resources/icons/PersonalReverseWorkbench.svg
)
  • PersonalReverseGui_SVG添加到PersonalReverseGui库中:
add_library(PersonalReverseGui SHARED ${PersonalReverseGui_SRCS} ${PersonalReverseGui_SVG})
  • 接下来两行命令将资源拷贝到build目录中:
fc_copy_sources(PersonalReverseGui "${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_DATADIR}/Mod/PersonalReverse" ${PersonalReverseGui_SVG})
install(FILES ${PersonalReverseGui_SVG} DESTINATION "${CMAKE_INSTALL_DATADIR}/Mod/PersonalReverse/Resources/icons")
  • 修改并保存Gui/CMakeLists.txt后,右键PersonalReverseGui项目下的CMakeLists.txt,点击编译。提示外部环境变化,则点击全部重新加载。此时,我们会发现该项目目录下多了一个PersonalReverseWorkbench.svg文件

此时运行FreeCAD,发现我们的模块已经有了正确的图标。fcbt.py创建模板模块时,为我们提供了一个Test的测试命令,我们会发现切换到PersonalReverse工作台后,有一个×号的按钮,且控制台提示Cannot find icon: Test1。下面来解决一下Workbench内部命令的图标问题。

  1. Command图标
  • Gui/Resources/icons文件夹下新建actions文件夹,里面添加一个SVG文件
  • 打开PersonalReverseGui项目下的PersonalReverse.qrc,添加该图标资源并保存【你需要有Qt Vs Tools,相关问题见第5点】
  • 右键PersonalReverse.qrc,编译
  • Command.cpp文件中有一个测试命令:CmdPersonalReverseTest,修改sPixmap为在qrc文件中添加过的图标:e.g.: sPixmap="actions/FitSurface";(qrc中已经添加编译了actions文件夹下的FitSurface.svg文件)
  • 右键PersonalReverseGui项目,生成(注意,点击生成而不是重新生成,我们只需要编译该项目即可,重新生成会浪费大量时间)

至此,我们有了一个自己的模块PersonalReverse。打开FreeCAD,切换到该模块,会发现有一个测试图标,点击该图标会在FreeCAD的控制台中打印Hello World!\n。接下来我们将结合ReverseEngineering模块中的代码来进一步完善我们的PersonalReverse模块,深入了解App和Gui的开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骨骼建模师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值