找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 25300|回复: 6
打印 上一主题 下一主题

[讨论] CATIA装配树遍历提取属性做BOM

[复制链接]
跳转到指定楼层
1
发表于 2010-6-29 15:25:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟想将CATIA装配树遍历提取属性做BOM,用Bill Of Material只录下了如下的代码,
遍历的语句没有体现出来,不知道如何编写,哪位达人指导一下小弟,谢谢!
-----------------------
Language="VBSCRIPT"
Sub CATMain()
Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Set assemblyConvertor1 = product1.GetItem("BillOfMaterial")
Dim arrayOfVariantOfBSTR1(4)
arrayOfVariantOfBSTR1(0) = "Quantity"
arrayOfVariantOfBSTR1(1) = "Part Number"
arrayOfVariantOfBSTR1(2) = "Type"
arrayOfVariantOfBSTR1(3) = "Nomenclature"
arrayOfVariantOfBSTR1(4) = "Revision"
assemblyConvertor1.SetCurrentFormat arrayOfVariantOfBSTR1
Dim arrayOfVariantOfBSTR2(1)
arrayOfVariantOfBSTR2(0) = "Quantity"
arrayOfVariantOfBSTR2(1) = "Part Number"
assemblyConvertor1.SetSecondaryFormat arrayOfVariantOfBSTR2
assemblyConvertor1.Print "XLS", "C:\Documents and Settings\yanghaiting\桌面\2.xls", product1
End Sub
------------------

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 赞一下!赞一下!
头像被屏蔽
2
发表于 2010-8-15 18:13:40 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
3
发表于 2013-6-19 10:10:17 | 只看该作者
很好的想法
4
发表于 2013-6-19 14:46:26 | 只看该作者
正好我也是在做这个,CAA的思路是通过document访问到RootProduct,再调用GetAllChildren得到子Product进行循环遍历,
实例是Product就继续调用Product的相关函数访问,
如果是Part,就调用GetReferenceProduct(),同样也可以访问到part;

VB帮不了你了
5
发表于 2013-10-3 10:12:29 | 只看该作者
圈圈眉 发表于 2013-6-19 14:46
正好我也是在做这个,CAA的思路是通过document访问到RootProduct,再调用GetAllChildren得到子Product进行循 ...

圈圈眉,不知道你做成功没有,能否把这段发来参考一下。
我也在做这个,GetAllChildren得到子Product进行循环遍历,
遍历实例是如何判断子Product的类型?
实例是Product就继续调用Product的相关函数访问,
如果是Part,就调用GetReferenceProduct(),同样也可以访问到part;

6
发表于 2013-10-8 00:52:16 | 只看该作者
murongjun 发表于 2013-10-3 10:12
圈圈眉,不知道你做成功没有,能否把这段发来参考一下。
我也在做这个,GetAllChildren得到子Product进行 ...

不好意思,好久没上了,当前的 实例CATIProduct   *piProductGetChildren() 不为NULL,说明还未Product,否则为Part,纯属个人理解:
CATListValCATBaseUnknown_var* ListChildren = piProduct->GetChildren();
if(NULL == ListChildren)
{
//part
}
else
{
//product
}
7
发表于 2013-12-11 20:08:51 | 只看该作者
'*************************************
很长时间没有研究这个了
递归可以实现,有些重复输出,缺一些控制手段

'*************************************
  Sub CATMain()

    Set oDocuments = CATIA.Documents

    Set oPartDoc = oDocuments.Add("art")
   

    Set oPart = oPartDoc.GetItem("art1")

   ' oPart.PartNumber = "2A"
   ' oPart.Definition = "   "
   ' oPart.Revision = "   "
   ' oPart.Nomenclature = "    "
   ' oPart.DescriptionRef = "    "
   
   
   
    Set oParam = oPart.UserRefProperties
   

    Set strName = oParam.CreateString("    ", "")

    strName.Value = ""
   
    Set intAmount = oParam.CreateInteger("    ", 0)
   
    intAmount.Value = 0
   

    Set strMaterial = oParam.CreateString("    ", "")
   
    strMaterial.Value = ""
   
    Set strMatSTD = oParam.CreateString("    ", "")
   
    strMatSTD.Value = ""



    Set massWeight = oParam.CreateDimension("   ", "MASS", 0)
   
    massWeight.Value = 0
   
    Set lenthThick = oParam.CreateDimension("    ", "LENGTH", 0#)

    lenthThick.ValuateFromString "0mm"
   
    Set strTolerance = oParam.CreateString("    ", "")
      
    strTolerance.Value = ""
   
     
    Set strMirror = oParam.CreateString("    ", "")
      
    strMirror.Value = ""
   
    Set strType = oParam.CreateString("    ", "")
   
    strType.Value = ""
   
    Set StrBuy = oParam.CreateString("    ", "")
   
    StrBuy.Value = ""
     

End Sub
--------------------------------------------------------------------
'**************************************************************************************************************

'  '

'**************************************************************************************************************

Sub CATMain()

    Dim oProductDoc As ProductDocument
   
    Set oProductDoc = CATIA.ActiveDocument
   
    Dim oRootProduct As Product
   
    Set oRootProduct = oProductDoc.Product
   
   
   
   
    Call asmRetrieve(oRootProduct)
   
     MsgBox "Root_Last   " + CStr(oRootProduct.Name)
      
     
               
End Sub


'-----------------------------------------------------------------
     Function asmRetrieve(myRootProduct As Product)
            
           
           
           Set myRootChildren = myRootProduct.Products
           
           Dim nCount As Integer
      
           nCount = myRootChildren.Count
           
           
           If nCount > 0 Then
               
                                 
                For i = 1 To nCount
                           
                  
                    Call asmRetrieve(myRootChildren.Item(i))
                    
                 
                    
                         If myRootChildren.Item(i).Products.Count > 0 Then
                    
                                          
                                        ' MsgBox "Root+++++" + CStr(myRootChildren.Item(i).Name)
                                         
                                          MsgBox "Root+++++" + CStr(myRootChildren.Item(i).PartNumber)
                           
                         End If
                    
                                                                  
                 Next i
                 
                 
               
                 
            Else
            
                         ' MsgBox "Leaf*****" + CStr(myRootProduct.Parameters.Item(1).Value)
                                    
                          For j = 1 To myRootProduct.Parameters.Count
     
                               MsgBox "Leaf*****" + CStr(myRootProduct.Parameters.Item(j).Value)
                        
                          Next j
                          
                                             
                          
             End If

    End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-1-24 14:49 , Processed in 0.033221 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表