iCAx开思工具箱

标题: CATIA装配树遍历提取属性做BOM [打印本页]

作者: 一朵梨花    时间: 2010-6-29 15:25
标题: CATIA装配树遍历提取属性做BOM
小弟想将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
------------------
(, 下载次数: 1)
作者: dufeng999    时间: 2010-8-15 18:13
qq群:CATIA交流  14722616
作者: gelvshi782    时间: 2013-6-19 10:10
很好的想法
作者: 圈圈眉    时间: 2013-6-19 14:46
正好我也是在做这个,CAA的思路是通过document访问到RootProduct,再调用GetAllChildren得到子Product进行循环遍历,
实例是Product就继续调用Product的相关函数访问,
如果是Part,就调用GetReferenceProduct(),同样也可以访问到part;

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

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


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

不好意思,好久没上了,当前的 实例CATIProduct   *piProductGetChildren() 不为NULL,说明还未Product,否则为Part,纯属个人理解:
CATListValCATBaseUnknown_var* ListChildren = piProduct->GetChildren();
if(NULL == ListChildren)
{
//part
}
else
{
//product
}

作者: 一朵梨花    时间: 2013-12-11 20:08
'*************************************
很长时间没有研究这个了:love:
递归可以实现,有些重复输出,缺一些控制手段

'*************************************
  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

作者: murongjun    时间: 2015-8-10 17:20
这个我早就做好了,VBA的做成功了,CAA的也做成功了




欢迎光临 iCAx开思工具箱 (https://t.icax.org/) Powered by Discuz! X3.3