BOM 函数
Creo Elements/Direct Annotation 中的 BOM 功能可由一些函数进行控制。这些函数中,最重要的是加载 BOM 布局和注册属性以及文本参考。当 WorkManager 数据库是 BOM 信息的唯一来源时,也可以禁用“扫描模型”按钮。
以下部分将对这些函数进行解释:
加载 BOM 标题、组成部分以及标志布局。
布局就是用于确定 BOM 表和位置标志外观的模板。您可以将任意的 MI 文件加载和注册为 BOM 布局。三种不同的 BOM 布局如下:
用于 BOM 表标题的标题布局。该布局可包含关于 BOM 根装配的信息。
表中各行的组成部分布局。
* 
一个有效的表布局既需要有标题布局又需要有组成部分布局,且两者应具有相同的 UI-NAME 选项
BOM 位置标志的标志布局。
值可填充到应用于 BOM 布局自定义菜单中的布局的特殊注册 BOM 属性及文本参考 (不使用 WorkManager)。可在临时页面 0 中对加载的布局进行编辑,然后使用常用的“保存草绘”命令将其存储到文件中。下图显示的是典型的 BOM 布局。
BOM 布局
第一个图表显示的是表标题布局 (顶部) 和组成部分布局 (底部),第二个图表显示的是标志布局。
下面列出的是布局函数及其选项。请参见各个链接,以获得对应的信息。以下给出的是示例
语法
(DOCU-LOAD-BOM-HEAD-LAYOUT --+-->UI-NAME 选项---->+--->
| ^
`-->FILE 选项------->'
(DOCU-LOAD-BOM-COMP-LAYOUT --+-->UI-NAME 选项---->+--->
| ^
`-->FILE 选项------->'
(DOCU-LOAD-BOM-FLAG-LAYOUT --+-->UI-NAME 选项---->+--->
| ^
`-->FILE 选项------->'DOCU-UNLOAD-ALL-BOM-LAYOUTS 函数
UI-NAME 选项
:UI-NAME 指定将在“草绘布局”或“标志布局”表中显示的布局名称。相关的标题和组成部分布局必须拥有相同的 UI-NAME 字符串以定义整个表布局。标志布局是独立的,无需共享表布局名称。
语法
-->(:UI-NAME)----->|"interface name"|------->
FILE 选项
:FILE 指定用作布局的 MI 文件。通常,该文件将为用“保存草绘”命令保存的布局草绘。Creo Elements/Direct Annotation 在启动时会自动加载指定的文件。
语法
-->(:FILE)----->|"filename"|------->
DOCU-UNLOAD-ALL-BOM-LAYOUTS 函数
DOCU-UNLOAD-ALL-BOM-LAYOUTS 函数用于卸载 (和取消注册) 先前已加载的布局。在 am_customize 文件 (或某个单独文件) 中,如果不想使用默认布局,则可在 (DOCU-LOAD-BOM-...-LAYOUT ...) 实例前使用此函数。
示例
下面是一个有关布局注册的示例:
(docu-load-bom-head-layout
:ui-name "Example1"
:file "/bom/head1.mi")
(docu-load-bom-comp-layout
:ui-name "Example1"
:file "/bom/comp1.mi")
(docu-load-bom-flag-layout
:ui-name "Example1"
:file "/bom/flag1.mi")
注册 BOM 属性及文本参考 (不使用 WorkManager)
在不使用 WorkManager 时,可使用如下所述的函数。有关特定于 WorkManager 的信息,请参阅注册 BOM 属性以及文本参考 (使用 WorkManager)
Creo Elements/Direct Annotation 提供了一个简单的 BOM 生成器。它可以从指定的装配扫描模型树并为找到的每个对象生成 BOM 数据。可以利用相关值函数注册特定属性以定义 BOM 的内容。
下面列出的是属性函数函数、选项及相关函数。请参见各个链接,以获得对应的信息。以下给出的是示例
ATTR-TYPE 选项
:ATTR-TYPE 指定用于确定目标文本参考类型的属性类型。另请参阅DOCU-REGISTER-BOM-TR-GROUP 函数
语法
-->(:ATTR-TYPE)----->|"text reference type"|------->
ATTR-TITLE 选项
:ATTR-TITLE 指定如“当前 BOM 表”中所示的 BOM 属性名称。
语法
-->(:ATTR-TITLE)----->|"name in table"|------->
ATTR-DISPLAY 选项
:ATTR-DISPLAY 指定是否应在“当前 BOM 表”中显示 BOM 属性。如有必要,可以“隐藏”属性,但在扫描期间仍然会对其进行确定。
语法
-->(:ATTR-DISPLAY)----->|t or nil|------->
ATTR-VALUE-FNC 选项
:ATTR-VALUE-FNC 指定用于确定 BOM 属性值的函数。必须先对值函数进行定义才能对其进行注册。该函数包含一个用于描述选择项零件或装配的参数,其返回包含要填充到 BOM 中的值的字符串。
有关 BOM 属性值函数的相关信息,另请参阅使用 Integration Kit 功能的完整的 BOM 注册示例
语法
-->(:ATTR-VALUE-FNC)----->|#'value-function-name|------->
注意:对于系统定义的属性,如 DOCU_BOM_QUANTITY,将使用系统值函数。不过,若要在 BOM 表中显示属性仍需先对其进行注册。在这些情况下,对值函数使用 nil
-->(:ATTR-VALUE-FNC)----->|nil|------->
(注意:系统属性 DOCU_BOM_POS_NO 自动处于可用状态,无需对其进行注册。)
另请参阅下面的示例
DOCU-UNREGISTER-BOM-ATTR-ALL 函数
DOCU-UNREGISTER-BOM-ATTR-ALL 函数用于取消注册先前注册的所有 BOM 属性。在 am_customize 文件 (或某个单独文件) 中,如果不想使用默认 BOM 属性,则可在 (DOCU-REGISTER-BOM-ATTR ...) 实例前使用此函数。
DOCU-UNREGISTER-BOM-ATTR 函数
DOCU-UNREGISTER-BOM-ATTR 函数用于取消注册先前定义的 BOM 属性。可以指定任何现有属性的 ATTR-TYPE 选项值,并用双引号将其括起。
语法
(DOCU-UNREGISTER-BOM-ATTR "attribute type")
DOCU-REGISTER-BOM-TR-GROUP 函数
Creo Elements/Direct Annotation BOM 生成器可计算共享零件的出现次数并在名为 "DOCU_BOM_QUANTITY" 的系统 BOM 属性中提供此数据。BOM 文本参考的默认文本参考组为 "BFG"。可以使用 DOCU-REGISTER-BOM-TR-GROUP 函数指定其他参考组。
所有已注册的 BOM 属性会在该组中自动生成新的文本参考类型 (具有相同名称)。您可以在 BOM 布局自定义菜单中找到这些文本参考类型。
请注意,系统文本参考 "DOCU_BOM_POS_NO" 用于显示位置编号,系统会自动提供此参考。
语法
(DOCU-REGISTER-BOM-TR-GROUP "group name")
注册 BOM 属性以及文本参考 (使用 WorkManager)
下列函数可与 WorkManager 配合使用。
DOCU-REGISTER-WMBOM-TR-GROUP 函数
WorkManager 提供了在标题列中定义 BOM 属性和在各行中定义数据的表。配置表用于指定将在 BOM 显示表中显示哪些属性。因此,大多数的自定义操作必须在 WorkManager 中完成。
WorkManager BOM 属性的默认文本参考组为 "BFG"。通过 DOCU-REGISTER-WMBOM-TR-GROUP 函数可对此默认组进行更改。
系统会在此名称下自动获得一列 WorkManager 属性并在此组中自动生成新的文本参考类型 (具有相同名称)。您可以在 BOM 布局自定义菜单中找到这些文本参考类型。
请注意,系统文本参考 "DOCU_BOM_POS_NO" 用于显示位置编号,系统会自动提供此参考。
语法
(DOCU-REGISTER-WMBOM-TR-GROUP "WorkManager group name")
示例
下面是一个有关 BOM 属性注册的示例:
(defun docu-bom-attr-part-name (selitem)
(let ((contents-name (oli::sd-inq-obj-contents-name selitem)))
(if contents-name contents-name (oli::sd-inq-obj-basename selitem))
)
)
(docu-unregister-bom-attr-all)
(docu-register-bom-attr :attr-type "PART_NAME"
:attr-title "Part Name"
:attr-display t
:attr-value-fnc #'docu-bom-attr-part-name)
(docu-unregister-bom-attr "PART_NAME")
(docu-register-bom-attr :attr-type "DOCU_BOM_QUANTITY"
:attr-title "Quantity"
:attr-display t
:attr-value-fnc nil) ;; system BOM attribute
(docu-register-bom-attr :attr-type "PART_NAME"
:attr-title "Part Name"
:attr-display t
:attr-value-fnc #'docu-bom-attr-part-name)
设置默认的附加模式和增长方向
附加模式
可以设置在定位 BOM 表时使用的默认光标附加点。该点默认位于表的中心 (MIDDLE_MIDDLE)。
语法
(DOCU::DOCU-SET-CURRENT-BOM-ATTACH-MODE "position")
该位置可以是下列位置中的一个:左上、中上、右上、左中、中间、右中、左下、中下或右下。注意:这些选项区分大小写,必须以大写字母形式输入。
增长方向
同样可以设置 BOM 表的默认增长方向。该设置用于确定 BOM 信息是从上至下列出还是从下至上列出。
语法
(DOCU::DOCU-SET-CURRENT-BOM-GROWTH-DIR :GROW-UPWARD or :GROW-DOWNWARD)
完整的 BOM 注册示例
下列示例演示的是如何向模型附加属性,以及如何将这些属性检索至 BOM。
;;-----------------------------------------------------------------------------
;; simple example how to implement BOM attributes using IK functions
;;-----------------------------------------------------------------------------
(in-package :my-special-bom-attr)
(use-package '( :oli ))
;;-----------------------------------------------------------------------------
;; functions to inquire attached BOM information of an SD part or assembly
;;-----------------------------------------------------------------------------
(defun bomattr-get-material (object)
(let ((attr (sd-inq-item-attribute object "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :material) nil)
)
)
(defun bomattr-get-partno (object)
(let ((attr (sd-inq-item-attribute object "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :part-number) nil)
)
)
;;-----------------------------------------------------------------------------
;; dialog to attach BOM information to an SD part or assembly
;;-----------------------------------------------------------------------------
(sd-defdialog 'my_special_bom_attr
:dialog-title "BOM Attr"
:start-variable 'object
:variables
'(
(OBJECT
:value-type :part-assembly
:modifies :contents
:title "Part/Assy"
:prompt-text "Select a part or assembly."
:after-input
(progn
(setq material (bomattr-get-material object))
(setq partno (bomattr-get-partno object))
)
)
(MATERIAL
:range ("Steel" "Aluminium" "Brass")
:title "Material"
:prompt-text "Enter material info."
)
(PARTNO
:value-type :string
:title "Part No"
:prompt-text "Enter part number info."
)
)
:ok-action
'(progn
(sd-attach-item-attribute object "MY_SPECIAL_BOM_ATTR"
:attachment :contents
:on-copy :copy
:on-merge :maintain
:on-split :copy
:on-xform :maintain
:filing '(:sd-file)
:values
`(
:material ,material
:part-number ,partno
)
)
)
)
;;-----------------------------------------------------------------------------
;; convenience functions to inquire attached BOM information
;;-----------------------------------------------------------------------------
(defun bomattr-get-material (selitem)
(let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :material) nil)
)
)
(defun bomattr-get-partno (selitem)
(let ((attr (sd-inq-item-attribute selitem "MY_SPECIAL_BOM_ATTR"
:values :attachment :contents)))
(if attr (getf attr :part-number) nil)
)
)
;;-----------------------------------------------------------------------------
;; examples of how to customize some simple BOM attributes
;;-----------------------------------------------------------------------------
(defun my-bom-attr-part-name (selitem)
(let ((contents-name (oli::sd-inq-obj-contents-name selitem)))
(if contents-name contents-name (oli::sd-inq-obj-basename selitem))
)
)
(defun my-bom-attr-part-no (selitem)
(let ((part-no (bomattr-get-partno selitem)))
(if part-no part-no "")
)
)
(defun my-bom-attr-material (selitem)
(let ((material (bomattr-get-material selitem)))
(if material material "")
)
)
(docu::docu-unregister-bom-attr-all)
(docu::docu-register-bom-attr :attr-type "DOCU_BOM_QUANTITY"
:attr-title "Quantity"
:attr-display t
:attr-value-fnc nil) ;; system bom attribute
(docu::docu-register-bom-attr :attr-type "PART_NAME"
:attr-title "Part Name"
:attr-display t
:attr-value-fnc #'my-bom-attr-part-name)
(docu::docu-register-bom-attr :attr-type "PART_NO"
:attr-title "Part No"
:attr-display t
:attr-value-fnc #'my-bom-attr-part-no)
(docu::docu-register-bom-attr :attr-type "MATERIAL"
:attr-title "Material"
:attr-display t
:attr-value-fnc #'my-bom-attr-material)
这对您有帮助吗?