零件库的族添加自定义行

前阵子碰到一个需求,我先是发表在了全球博客。

http://adndevblog.typepad.com/manufacturing/2012/10/add-one-custom-row-to-an-existing-content-centre-family.html

该需求基于这样一个问题:一般从内容中心(或叫做零件库)插入零件,Inventor会列出一个族里所有可用的行,每行代表不同参数的零件。但有时并不是所有我们关心的参数搭配都在其中,例如,有这样的搭配

Diameter     Length 
10              1000 
20              1000 
30              1000

但没有 diameter =  10 且 length = 2000的搭配

API有方法!ContentFamily.TableRows.Add可添加行(只适用于自定义的零件库,Inventor本身提供的库不能修改)。该方法定义是:  

Sub Add(ByRef RowData As SAFEARRAY(BSTR), 
        ByRef Position As [defaultvalue(-1)] long, 
        Result As [out, retval] ContentTableRow*)

RowData:  提供字串数组,即该行的数据。必须和列的数量一样,且顺序一样。
Position:  可选参数,规定新的行放置位置。如果不规定,则会作为最后一行 

另外注意,大多数零件库的API做了修改后,必须调用ContentFamily.Save, 否则修改无法保存。以下简单代码演示如何解决前面的需求。

Sub addCCFamilyRow()

 

    ' 假定通过访问当前运行的Inventor

     Dim m_inventorApp As Inventor.Application = Nothing        

     m_inventorApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application") 

 

    ' 获取内容中心

    Dim oContentCenter As ContentCenter

    oContentCenter = m_inventorApp.ContentCenter

 

    ' 获取节点 "Fasteners:Bolts:Hex Head"

    Dim oContentNode As ContentTreeViewNode

    oContentNode =

        oContentCenter.TreeViewTopNode.ChildNodes.Item("Fasteners").

        ChildNodes.Item("Bolts").

        ChildNodes.Item​("Hex Head")

 

    ' 获取 "ISO 4015" 族

    Dim oFamily As ContentFamily

    For Each oFamily In oContentNode.Families

        If oFamily.DisplayName = "ISO 4015" Then

            Exit For

        End If

    Next

 

    ' 获取第一行

    Dim oOneRow As ContentTableRow

    oOneRow = oFamily.TableRows(1)

 

    '为了演示,重用第一行的大部分数据,只修改其中一个数据

 

    ' 定义一个动态数组

    Dim oNewRow()  As String 

    Dim oCell As ContentTableCell

    Dim i As Integer

    i = 0

    For Each oCell In oOneRow

        ' 每个数据

        ReDim Preserve oNewRow(i)

        oNewRow(i) = oCell.Value

 

 

        ' 本例中 

        'Fa​steners >>Bolts>>Hex Head

        '修改第10列[Bolt Length]        

 

        ' 注意,数组从0开始序号 

 

        If i = 10 Then

         ' 设置新的值   

         oNewRow(i) = "10.11111"

        End If

 

        i = i + 1

    Next

 

    '添加新行

    oFamily.TableRows.Add( oNewRow)

    '保存修改

    oFamily.Save

End Sub


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值