跳转到内容

橱柜视觉:最后一英里/用户控制标准技术

来自维基教科书,开放世界的开放书籍

介绍 ULUCVUCS

[编辑 | 编辑源代码]

六角形没有为用于编写 UCS 的语言提供名称。名称是有用的速记,因此,本文档将 UCS 语言称为 "ULUCVUCS",它是 "用于橱柜视觉的用户创建标准的未命名语言" 的首字母缩写。

变量(自定义参数)的技术和约定

[编辑 | 编辑源代码]

系统参数与自定义参数

[编辑 | 编辑源代码]

系统参数是橱柜视觉提供的对象树的数据成员。它们中的大多数列在帮助文件的 "用户创建标准 | 系统参数" 或 "用户创建标准 | 材料参数" 页面中。自定义参数是用户发明的名称和用户指定的类型的参数。自定义参数永远不会改变模型的状态,除非它们的价值(或从一个或多个它们的价值计算出的表达式)被分配给系统参数。从这个意义上说,它们几乎总是类似于 "临时" 变量。主要的例外情况是当它们用于 "延迟评估" 或通过 Part.Parameters 字段将它们的价值传递到报表中心时。

数据类型

[编辑 | 编辑源代码]

最佳实践是在创建或分配自定义参数时始终声明其数据类型,除非您希望它成为浮点 <meas> 值(当未指定类型时,这是默认类型)。在 CV 12 之前,CV 对未声明数据类型的自定义参数比在更高版本中更加宽容。因此,例如,当循环遍历索引参数名称(例如 FS@{fs_index}.DY)时,CV 过去允许创建和分配索引器(在本例中为 "fs_index"),而无需数据类型。在较新的版本中,如果索引器没有声明数据类型,则上述表达式将在循环的第一次执行时计算为 "[email protected]",而不是 "[email protected]"。由于没有名为 "[email protected]" 的系统参数,因此此表达式将引用一个空参数。系统参数永久保留其数据类型。在分配给系统参数时,无需声明数据类型。

请记住,与大多数其他语言相比,参数(即变量)不会在随后的分配中自动保留首次声明的数据类型。因此,当您声明并分配 my_param<deg> = 90,然后稍后重新分配为 my_param = 80 时,在这两个分配中的第二个分配中,CV 会将其数据类型更改为默认类型 <meas>。因此,即使您已经为自定义参数建立了数据类型,您也必须在随后的值分配中重复指定其数据类型,除非您希望其数据类型更改为 <meas>。

删除临时参数

[编辑 | 编辑源代码]

CV 中的对象树可能会变得杂乱,当这种情况发生时,评估它所描述的模型的状态会变得更加困难和容易出错。自定义参数主要用于保存临时值,这些值后来为系统参数提供值。实际上,您通常可以在声明自定义参数的同一个 UCS 中删除它们,这样做是一个好习惯。唯一的例外是当使用 "延迟评估" 时。为了帮助确定哪些自定义参数应该被删除,最好给它们一个特殊的 前缀,比如 "t_",这样它们在对象树中就会分组在一起。这样,如果您忘记删除一些,您就不会让对象树被各种参数污染,而您不确定是否可以安全地删除它们。

"这个参数来自哪里?"

[编辑 | 编辑源代码]

很难找到您在 UCS 中声明和分配参数的位置。在报表中心中,有一个有用的 CV 报表称为 "用户创建标准列表"。您可以运行该报表,单击其内容显示的窗口内部,按 CTRL-F,输入您感兴趣的参数的名称,然后反复单击 "查找下一个" 以扫描所有出现的位置列表。

命名约定

[编辑 | 编辑源代码]

以一种允许您在对象树中轻松扫描它们的方式命名自定义参数,并按关注领域进行分组。第一个目标是将所有自定义参数与系统参数分开分组。由于 CV 使用前导下划线 "_" 来命名大约一半的系统参数,因此一种技术是将前导下划线加倍。在一些未编译的语言(如 VBScript)中,有一种命名变量的传统,使用前缀来指示其预期的数据类型。例如,一个整型变量可以被命名为 "int_my_variable",这样当它在以后被引用时,就不会混淆它应该包含什么数据类型,也不需要跟踪其初始声明和值分配来确定此信息。在 CV 中,遵循这种传统没有益处,因为(如上所述)数据类型在每次对自定义参数的值分配时都是必需的,除非需要默认类型 <meas>。

=== 之间的区别

[编辑 | 编辑源代码]

决定如何使用两者中最简单的方法是

  • 如果您需要**分配**,请使用=
  • 如果您需要**引用**,请使用==

例如

If cab.DX == 20 THEN
  someparameter = cab.dx
End If

=:= 之间的区别

[编辑 | 编辑源代码]

决定如何使用两者中最简单的方法是

  • 如果您需要将代码分配给参数,请使用=
  • 如果您需要使用代码将值分配给参数,请使用:=

例如

someparameter := temporaryvariable + cab.dx  ;will assign the value of the equation to the parameter

someparameter = cab.dx + 2  ;will assign the equation to the parameter

Null 和 0 之间的区别

[编辑 | 编辑源代码]
  • 如果参数不存在,则它为 Null。
  • 如果参数存在,但其值设置为 0,则它不为 Null,而是 0。

示例

If someparameter == Null Then
  (Do Something)
End If

如果参数不存在,则此条件将触发(执行操作)。

如果参数存在且设置为 0,则条件将不会触发。

  • 但如果参数不存在,并且您测试它的值,则它的值为 0。

示例

If someparameter == 0 Then
  (Do Something)
End If

如果参数不存在,则此条件将触发(执行操作)。

如果参数存在且设置为 0,则条件也会触发。

正确使用 Exit 语句

[编辑 | 编辑源代码]

对于 EXIT 语句,您需要对要包含的所有内容使用!= AND,对要排除的所有内容使用= OR

这将使 UCS 排除门型 2、3、119、511 和 1

If DoorstyleID = 2 OR DoorstyleID = 3 OR DoorstyleID = 119 OR DoorsstyleID = 511 OR DoorstyleID = 1 Then
Exit 
End If

这将仅包含门型 15、36、17 和 4

IF DoorstyleID != 15 AND DoorstyleID != 36 AND DoorstyleID != 17 AND DoorstyleID != 4 THEN
EXIT
END IF
华夏公益教科书