前言:我们所知道的几何尺寸和三维尺寸可以连接到表格单元格里的数值,其实,属性面板里的任何值都可以关联过去,即body、part等体的各种属性都能根据需要关联,表达式里输入part或body,就会出现一些提示。
属性面板可以鼠标右键——弹窗菜单里选择显示全部,则会看到更多的属性。

多组数据的切换Configuration tables

场景:比如要绘制法兰系列的参数化模型,每一个尺寸(型号)对应一组数据,假如有20组数据的话,第一行作为当前使用的参数,按照传统的,每次修改一个型号的法兰,就要拷贝对应的数据替换第一行数据。
在比如,我们常常在excel表格中,通过单元格下拉选择砼强度等级(利用excel的“数据验证”——序列 来实现),而某个单元格里的砼抗压强度设计值随着改变,用的是if嵌套来判断。
这里类似的就可以用到FC的表格中的Configuration tables功能了。
如下图,当在body属性面板中的configuration后面下拉菜单选择conf2时,第3行里的数据自动切换为第5行数据。从而达到了改变一个字符,切换整个参数组的目的。
https://forum.freecad.org/viewtopic.php?p=583483

如何通过修改表格内一个参数达到切换整组数据?

详见3.1.1节,忽略下面的步骤!

  1. 表格必须是横向设计的,即所有参数都是按行排列,例如长宽高等数据是按行排列。多组数据放在多行。
  2. 按上述方法设置好configuration tables后,在上图中,右键点击body的属性面板中的configuration——表达式

    在表达式里输入<<Spreadsheet>>.B3,那么,我们用python代码修改B3里的数值,就能改变整个第3行里的数值了。
  3. 零件的各种尺寸关联第三行的各个数值即可。这样用户不用输入那么多数据了。

详见:https://wiki.freecad.org/Spreadsheet_Workbench
https://forum.freecad.org/viewtopic.php?t=42183

目前这种方式只支持按行布置多组数据,提出了issue不知道能否得到竖向的支持。
参数多了,横向排列是很辛苦的,需要鼠标拖动下方的滚动条来左右移动,整个表格水平向很长,不紧凑,而竖向排列就紧凑多了。
https://github.com/realthunder/FreeCAD_assembly3/issues/1334
https://forum.freecad.org/viewtopic.php?p=749161

这个A3组装工作台又实现了组合表格单元功能:https://github.com/realthunder/FreeCAD_assembly3/wiki/Expression-and-Spreadsheet#combo-box-edit-mode

表格数据绑定Cell binding

场景:一个模型文件有多个表格的时候,可以将其他表格数据绑定到一个表格中来,即当前表格引用了其他表格中的数据。当其他表格数据变化时,当前表格也随着改变。
详见上述表格工作台wiki。
不能跨文件,意义不算大。

在参数中做出三元判断

这个仅能判断2个,意义不大。
如下图所示,用户只要在单元格B5里输入A或者B,则立方体模型长度尺寸自动改为42.5或50mm,模型上的文字,等于号后面的值也随着改变。

首先,如何在表格中做出判断(三元运算),也就是说,通过改变一个参数,让某个单元格里的数据变化,这个很有用,比如我们常常在excel表格中,通过单元格下拉选择砼强度等级(利用excel的“数据验证”——序列 来实现),而某个单元格里的砼抗压强度设计值随着改变。
参数化建模也一样,对于某些特定有限的的数值——叫枚举,就不必用户手动输入具体数值,而是输入某些名称,自动改变数值。
上图无论是表格中还是模型参数里,都是典型的javascript的条件(三元)运算符
一个条件后跟一个问号(?),如果条件为真值,则执行冒号(:)前的表达式;若条件为假值,则执行最后的表达式
condition ? exprIfTrue : exprIfFalse

const age = 26;
const beverage = age >= 21 ? "Beer" : "Juice";
console.log(beverage); // "Beer"
// 解释:如果age大于等于21,则beverage等于冒号前的值,否则等于冒号后面的值

表格中B7单元格=B5 == <<%s>> % A2 ? C2 : C3,它的目的是通过B5单元格里用户输入A还是B,与A2单元格的值对比,从而本单元格(B7)的数值等于C2还是C3单元格的值。
再来仔细看这个表达式,第一个等于号是惯例。
第二个是双等于号,我猜是作为相等判断的意思?JavaScript等一些语言代码里做判断的时候必须用双等于号或三个等于号,以便区别单等于号,单等于号用于赋值,双等于号或三等于号用于判断(js里三等于号用于绝对相等,双等于号仅仅是相等,比如字符”3”和数值3,双等于号相等,三等于号就不相等),反正改为单等于号就失效。
第三个双尖括号里面为%加字母s,意思是替换字符吧,被谁替换呢,被后面的%加空格加A2单元格里的值来替换。
如果A2单元格里的值等于前面B5单元格的值,则本单元格(B7)的值取冒号前面的值即C2单元格的值,如果不等,则取冒号后面的即C3单元格的值。
再来看模型里的参数表达式<<MyPart ref:%s>> % Spreadsheet.A7 + << / L = %g mm>> % Spreadsheet.B7
同样,双尖括号里的%加s是替换符号,用后面的%加空格加Spreadsheet.A7单元格的值替换;替换符前面的MyPart ref:这些是固定字母。
第二个双尖括号里的%加g同样是替换符,用后面%加空格加Spreadsheet.B7单元格的值替换
%s和%g分别是python等语言的格式输出符号
Python格式化字符 %s %d %f %g实例讲解
格式 描述
%% 百分号标记 #就是输出一个%
%c 字符及其ASCII码
%s 字符串
%d 有符号整数(十进制)
%u 无符号整数(十进制)
%o 无符号整数(八进制)
%x 无符号整数(十六进制)
%X 无符号整数(十六进制大写字符)
%e 浮点数字(科学计数法)
%E 浮点数字(科学计数法,用E代替e)
%f 浮点数字(用小数点符号)
%g 浮点数字(根据值的大小采用%e或%f)
%G 浮点数字(类似于%g)
%p 指针(用十六进制打印值的内存地址)
%n 存储输出字符的数量放进参数列表的下一个变量中
%格式化符也可用于字典,可用%(name)引用字典中的元素进行格式化输出。
负号指时数字应该是左对齐的,“0”告诉Python用前导0填充数字,正号指时数字总是显示它的正负(+,-)符号,即使数字是正数也不例外。
可指定最小的字段宽度,如:”%5d” % 2。也可用句点符指定附加的精度,如:”%.3d” % 3。
e.g.

例:数字格式化

nYear = 2018
nMonth = 8
nDay = 18

格式化日期 %02d数字转成两位整型缺位填0

print '%04d-%02d-%02d'%(nYear,nMonth,nDay)
>> 2018-08-18 # 输出结果
fValue = 8.123
print '%06.2f'%fValue # 保留宽度为6的2位小数浮点型
>> 008.12 # 输出
print '%d'%10 # 输出十进制
>> 10
print '%o'%10 # 输出八进制
>> 12
print '%02x'%10 # 输出两位十六进制,字母小写空缺补零
>> 0a
print '%04X'%10 # 输出四位十六进制,字母大写空缺补零
>> 000A
print '%.2e'%1.2888 # 以科学计数法输出浮点型保留2位小数
>> 1.29e+00

格式化操作符辅助指令

符号 作用
* 定义宽度或者小数点精度
- 用做左对齐
+ 在正数前面显示加号( + )
在正数前面显示空格
# 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于
用的是'x'还是'X')
0 显示的数字前面填充‘0’而不是默认的空格
% '%%'输出一个单一的'%'
(var) 映射变量(字典参数)
m.n m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

————————————————
版权声明:本文为CSDN博主「qq_41895190」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41895190/article/details/90301184

作者:秦晓川  创建时间:2023-07-21 22:50
最后编辑:秦晓川  更新时间:2024-04-27 14:09