· 错误 - 发生语法错误;例如,出现没有定义的参数。计算关系以获得错误并编辑。
注意:这种错误检查捕捉不到约束冲突。如果联立关系不能成立,则在消息区出现警告。如果遇到不确定的联立关系,则在最后一个关系行下的空行上出现出错消息。
提示:修改单位将如何影响关系
修改模型的单位可使关系无效,因为它们没有随该模型缩放。 曲线表计算
曲线表计算使用户能用曲线表特征,通过关系来驱动尺寸。尺寸可以是草绘器、零件或组件尺寸。格式如下: evalgraph(\
- 其中 graph_name 是图形的名称,x 是沿图形 x 轴的值,返回 y 值。 对于扫描特征,可指定轨迹参数 trajpar 作为该函数的第二个自变量。 注意:曲线表特征通常是用于计算 x 轴上所定义范围内 x 值对应的 y 值。当超出范围时,y 值是通过外推的方法来计算的。对于小于初值的 x 值,系统通过将切线从起始点往回延伸计算外推值。同样,对于大于终值的 x 值,系统通过将切线从终点往外延伸计算外推值。 复合曲线轨道函数
可在关系中使用复合曲线的轨迹参数 trajpar_of_pnt。 下列函数返回一个 0.0 和 1.0 之间的值: trajpar_of_pnt(\
- 其中 trajname 是复合曲线名称,pointname 是基准点名称。
轨线是一个沿复合曲线的参数,在它上面垂直于曲线切线的平面通过基准点。因此,基准点不必位于曲线上;在曲线上距基准点最近的点上计算该参数值。 如果复合曲线被用作多轨迹扫描的骨架,则 trajpar_of_pnt 要么与该平面上的参数 trajpar 一致,要么与 1.0 – trajpar 一致(取决于为扫描特征选择的起点)。 ** 天使补充:
原贴:http://bbs.icax.cn/viewthread.php?tid=180726 http://bbs.icax.cn/viewthread.php?tid=245223
1.trajpar_of_pnt不是VSS里的内容,VSS里用到的是trajpar。trajpar是个变量,从0到1,trajpar_of_pnt是个函数,其值是一个0到1里的一个定值。 2.假如曲线名为CURVE1,基准点名为PNT1,通常我们用到的都是点在曲线上的情况,不在曲线上时取过点PNT1的曲线的法线(切线垂直线)与曲线的交点来算结果。此函数的结果是:曲线起点到PNT1之间的这一段曲线长度与曲线全长的比值,如果pnt1与曲线起点重合,值为0,如果pnt1与曲线终点重合,值为1。
因此,在某些情况下,trajpar_of_pnt与trajpar或1.0 - trajpar一致. 3.点的位置由其它的东西控制,当点位置变更时,这个函数的结果反映点的变化,其结果用于扫描等(如截面尺寸)。因此,这个函数的作用是实现用一个点的位置变化来控制其它的东西,而不能反过来用函数的值去驱动点,点必须是由其它东西驱动的。
4.如果想用一个点沿一曲线连续运动以取trajpar_of_pnt去控制VSS截面尺寸的话,还是用graph比较好。
目前trajpar_of_pnt比较成功的用法是用于随意阵列。
5.冰大的随意阵列是目前用此函数最成功的例子(冰大:关于珍珠项链的阵列思想 任意曲线上的等距离点的阵列方法) 来自其它:
6.问:a=trajpar_of_pnt(\后面+itos(2*idx1-1)是什么意思?还有一个函数是
loc=itos(1000*trajpar_of_pnt(\表达的是什么意思?
答:“itos(2*idx1-1)”是把阵列的项数转换成字符串,再与之前的基准点名合并,以符合你的实际基准点名称。
“loc=itos(1000*trajpar_of_pnt(\转换成字符串。
7.trajpar是一个从0到1递增的函数,起始为0结束为1,比如
sd#=sin(trajpar*360)+2,就是一个起始高度为2正弦函数从0度角到360度角变化。
将字符串作为关系的自变量来传递 下列函数允许用户使用串作为自变量:
· string_length() - 返回参数中字符的个数。例如,如果串参数 material 的值定义为 steel,则 string_length(material) 等于 5,因为 \有 5 个字母。
· rel_model_name() - 返回当前模型名。例如,如果当前正在处理零件 A,则 rel_model_name() 等于 A。要在组件的关系中使用该函数,关系如下所示: name = rel_model_name:2() 注意括号 () 内是空的。
· rel_model_type() - 返回当前模型的类型。如果正在“组件”模式中工作,则 rel_model_type() 等于组件。
· exists() - 判断某个项目(如参数、尺寸)是否存在。该函数适用于正在计算关系的模型,或任何模型\\元件或子模型结构。 例如:
o if exists(\检查运行时间 ID 为 20 的模型其尺寸是否为 d5 o if exists (\检查元件 ID 12 中特征 ID 为 25 的特征是否有参数 par。
这允许进行基于参数的决策,该参数只存在于大型组件的一个零件中。例如,假设在大型组件中有若干系统(诸如液压的、气动的、电子的系统),但大多数对象不属于任何系统。
在这种情况下,为了进行基于参数的计算评估,只需要给系统中所属的模型指派适当的参数。例如,如果电子系统中的项目需要使用 BOM 报表中的零件号,而不是模型名,则可以创建一个报表参数 bom_name,并写出如下关系: if exists(\bom_name = part_no else
bom_name = asm_mbr_name endif
示例:曲线表计算
曲线表计算使用户能用曲线表特征,通过关系来驱动尺寸。尺寸可以是草绘器、零件或组件尺寸。格式如下: evalgraph(“graph_name”,x)
- 其中 graph_name 是图形的名称,x 是沿图形 x 轴的值,返回 y 值。见下图。
图形名称:拉伸 · d1=0.5 · d2=1.5
· d1=evalgraph (\· d2=evalgraph (\
对于扫描特征,可指定轨迹参数 trajpar 作为该函数的第二个自变量。 示例:用注释批注关系
可以使用注释评注关系。每一个注释行必须以一个斜杠和一个星号开始。关系中的注释举例如下:
/* Width is equal to 2*height d1 = 2*d2
注释必须在所应用的关系之前出现。当排序关系时,注释将随关系一起移动,并附加在关系之上。
提示:使用关系中的注释。在关系中使用注释是一个好习惯,这样做,总能够记住有哪些关系及为什么在模型中使用它。注释也会有益于使用模型的其他用户。
关系中的联立方程组
联立方程组是这样的若干关系,在其中必须联立解出若干变量或尺寸。例如,假设有一个宽为 d1、高为 d2 的盒子,并要指定下列条件: · 其面积等于 100 · 其周长等于 50 可以键入下列方程组: SOLVE d1*d2 = 100 2*(d1+d2) = 50
FOR d1 d2 ...or...FOR d1,d2
所有 SOLVE 和 FOR 语句之间的行成为方程组的一部分。FOR 行列出要求解的变量。所有在联立方程组中出现而在 FOR 列表中不出现的变量被解释为常数。故也可以键入: area = 100 perimeter = 50 SOLVE d1*d2 = area
2*(d1 + d2) = perimeter FOR d1 d2
用在联立方程组中的变量必须预先初始化。例如,在上一个关系中省略 area = 100 时会引起错误。
由联立方程组定义的关系可以同单变量关系自由混合。选取“显示”(Show) 时两者都显示,并可使用“关系”(Relations) 对话框中的“编辑”(Edit) 进行编辑。
注意: 即使方程组有多组解,也只返回一组。
可在联立方程组后面添加额外的代码,以便在解多于一组时指定一组解。例如,在上一个例子中,两组可能的解为 d1=5,d2=20 和 d1=20,d2=5。 或许要通过添加下列条件码来添加约束 d1 <= d2: IF d1 >d2 temp = d1 d1 = d2 d2 = temp ENDIF
关系中的条件语句 IF 语句
IF 语句可以加到关系中以形成条件语句。例如, IF d1 > d2 length = 14.5
ENDIF
IF d1 <= d2 length = 7.0 ENDIF
条件是一个值为 TRUE(或 YES)或 FALSE (或 NO)的表达式。这些值可以用于条件语句中。例如,下列语句都可以用同样的方式计算: IF ANSWER == YES IF ANSWER == TRUE IF ANSWER ELSE 语句
即使再复杂的条件结构都可以通过在分支中使用 ELSE 语句来实现。用这一语句,前一个关系可以修改成如下这个样子: IF d1 > d2 length = 14.5 ELSE length = 7.0 ENDIF
在 IF、ELSE 和 ENDIF 语句之间可以有若个特征。此外,IF-ELSE-ENDIF 结构还可以嵌套在特征序列(它们是其它 IF-ELSE-ENDIF 结构的模型)内。IF 子句的语法如下: IF <条件>
顺序 0 或更多关系或 IF 子句 ELSE <可选>
顺序 0 或更多关系或 IF 子句 <可选> ENDIF 注意:
· ENDIF 必须作为一个字来拼写。 · ELSE 必须本身占一行。
· 条件语句中的相等必须使用两个等号 (==)。赋值号必须是一个等号(=)。 条件语句的排序
不对包含条件语句的关系进行排序。 参数的串值
可以给参数键入字符串值。字符串值被键入在双引号之间。例如,取决于特征参数大小的绘图中的参考。绘图注释使用注释内的参数名,模型关系如下所示: IF d1 > d2
MIL_REF = \ELSE
MIL_REF = \ENDIF
字符串运算符和函数
串可以使用下列运算符和函数: == 比较字符串相等。
!=, <>, ~= 比较字符串的不等。 + 合并字符串。
itos(int) 将整数转换为字符串。其中,int 可以是一个数字或表达式。非整数将被舍入。
search(string, substring) 搜索子串。结果值是子串在串中的位置(如未找到,返回 0)。
extract(string, position, length) 提取一个子串。 例如:
如果 param = abcdef,则:
· flag = param == abcdef - 返回 TRUE。 · flag = abcdef != ghi - 返回 TRUE。 · new = param + ghi - new 的值为 abcdefghi。 · new = itos(10 + 7) - new 的值为 17。
· new = param + itos(1.5) - new 的值为 abcdef2。 · where = search(param, bcd) - where 的值为 2。 · where = search(param, bcd) - where 的值为 0。 · new = extract(param,2,3) - new 的值为 bcd。