0 前言
在FreeCAD入门指南(一)内,介绍了两种创建工字钢的方法:第一种,通过鼠标操作创建;第二种,通过代码实现。点击“工字钢”物体,在data属性面板可以看到“工字钢”具有哪些属性。
接下来仍以“工字钢”为例,讲述如何在data属性面板新增物体属性,并且实现当属性值发生改变时,物体会随之发生变化的效果。
1 源码分析
通过python console显示的代码,发现创建三维物体的关键是“Arch.makeStructure”函数。该函数源码在ArchStructure.py文件内(该文件所在位置:FreeCAD安装目录→Mod→Arch→ArchStructure.py或者在github上搜索)。决定物体属性的是“Arch.makeStructure”函数内的“_Structure(obj)”。“_Structure”是一个class,源码组成部分如下(源码在ArchStructure.py):与物体属性密切相关的是“setProperties”和“execute”两个函数。“setProperties”决定了物体的具体属性;“execute”函数的作用是,当data属性面板任一属性值发生变化时,将对物体进行重新计算。
2 属性
2.1 新增属性
从setProperties函数中,总结归纳新增属性的伪代码如下:
obj.addProperty(属性类别, 属性名称, 属性所在组的名称, 对属性的介绍)
#示例
#obj.addProperty("App::PropertyLength","Height","Structure","App::Property","The height or extrusion depth of this element. Keep 0 for automatic")
addProperty函数需要传入四个参数。其中,**“属性类别”**名称固定,具体详见FreeCAD属性介绍https://wiki.freecad.org/Property;除特殊情况外,其余三个参数自定。
需要注意:新增物体属性并非一定要写在“setProperties”函数内,写在__init__内也行。
2.2 扩展“execute”函数
FreeCAD对物体进行重新计算是根据“execute”函数,因此,如果希望新增的属性值参与重计算,那么需要根据实际改写“execute”函数。
以上内容是本人学习总结,如有错误,敬请谅解!