iCAx开思网

标题: 关于CATIA宏程式 [打印本页]

作者: kinvenyao    时间: 2010-5-21 22:56
标题: 关于CATIA宏程式
最近在网上找了一个零件转装配的宏程序,运行过程是将零件模块里的每一个几何体单独复制到一个新PART,再组成一个装配,但此程序是把所有几何体都复制一个,能不能设成只复制显示的几何体呢?请大大们帮帮忙。
源程式如下:

Sub CATMain()
Dim i, n As Integer
Dim name, prt As String
Dim BodyName() As String
Dim partDocument1 As PartDocument
On Error Resume Next
Set partDocument1 = CATIA.ActiveDocument
    If Err.Description = "Type mismatch" Then
        MsgBox "You must have a CATPart as active document"
        Exit Sub
    End If
name = partDocument1.FullName
Dim part1 As part
Set part1 = partDocument1.part
Dim bodies1 As Bodies
Set bodies1 = part1.Bodies
Dim body1 As Body
Dim sel As Selection
Set sel = partDocument1.Selection
Dim documents2 As Documents
Dim partDocument2 As PartDocument
Dim part2 As part
Dim specsAndGeomWindow1 As SpecsAndGeomWindow
n = bodies1.Count
If n = 1 Then
    MsgBox "There is only one body in:" & Chr(13) & name & Chr(13) & "Part MUST have at least 2 Body's" & Chr(13) & "Macro will end now!!!", vbExclamation, "Warning"
Exit Sub
End If
prt = Left(partDocument1.name, Len(partDocument1.name) - 8)
For i = 1 To n
    ReDim Preserve BodyName(i)
    BodyName(i) = prt & "_" & bodies1.Item(i).name
    Set partDocument1 = CATIA.ActiveDocument
    sel.Clear
    sel.Add bodies1.Item(i)
    sel.Copy
    Set documents2 = CATIA.Documents
    Set partDocument2 = documents2.Add("Part")
    partDocument2.Product.PartNumber = BodyName(i)
    Set partDocument2 = CATIA.ActiveDocument
    Set specsAndGeomWindow1 = CATIA.ActiveWindow
    Set part2 = partDocument2.part
    sel.Add part2
    sel.PasteSpecial ("CATPrtResult")
    part2.Update
    Set partDocument2 = CATIA.ActiveDocument
    partDocument2.SaveAs Left(name, Len(name) - Len(partDocument1.name)) & BodyName(i) & ".CATPart"
    specsAndGeomWindow1.Close
    partDocument2.Close
Next i
Dim documents1 As Documents
Set documents1 = CATIA.Documents
Dim productDocument1 As ProductDocument
Set productDocument1 = documents1.Add("Product")
productDocument1.Product.PartNumber = "Product_From_Part_" & Left(partDocument1.name, Len(partDocument1.name) - 8)
Dim product1 As Product
Set product1 = productDocument1.Product
Dim products1 As Products
Set products1 = product1.Products
Dim arrayOfVariantOfBSTR1(0)
Dim constraints1 As Constraints
Set constraints1 = product1.Connections("CATIAConstraints")
Dim reference1 As Reference
Dim constraint1 As Constraint
Dim ConString As String
For i = 1 To n
    ConString = ""
    ConString = "Product_From_Part_" & prt & "/" & BodyName(i) & ".1/!" & "Product_From_Part_" & prt & "/" & BodyName(i) & ".1/"
    arrayOfVariantOfBSTR1(0) = Left(name, Len(name) - Len(partDocument1.name)) & BodyName(i) & ".CATPart"
    Set products1Variant = products1
    StrConstrain = "Product_From_Part_" & Left(partDocument1.name, Len(partDocument1.name) - 8) & "/" & Left(partDocument1.name, Len(partDocument1.name) - 8) & "_PartBody.1/!" & "Product_From_Part_" & Left(partDocument1.name, Len(partDocument1.name) - 8) & "/" & Left(partDocument1.name, Len(partDocument1.name) - 8) & "_PartBody.1/"
    products1Variant.AddComponentsFromFiles arrayOfVariantOfBSTR1, "All"
    Set reference1 = product1.CreateReferenceFromName(ConString)
    Set constraint1 = constraints1.AddMonoEltCst(catCstTypeReference, reference1)
Next i
End Sub
作者: CAACATIA    时间: 2010-7-16 12:08
判断一下所选东东的现实状态
Sub CATMain()
dim res as string

dim cdoc as partdocument
set cdoc = catia.activedocument
dim mysel as selection
set mysel = cdoc.selection
for i = 1 to cdoc.part.bodies.count
        mysel.clear
        mysel.add cdoc.part.bodies.item(i)
        Dim showstate As CatVisPropertyShow
        mysel.VisProperties.getshow showstate
        res = res & cdoc.part.bodies.item(i).name & "::" & showstate & chr(13)
        mysel.clear
        for j=1 to cdoc.part.bodies.item(i).shapes.count
                dim myshape as CATIAShape
                set myshape = cdoc.part.bodies.item(i).shapes.item(j)
                mysel.clear
                mysel.add myshape
                mysel.VisProperties.getshow showstate
                res = res & myshape.name & "::" & showstate & chr(13)
                mysel.clear
        next
next

msgbox res
End Sub
[attach]1017591[/attach]

本帖最后由 CAACATIA 于 2010-7-16 12:13 编辑
作者: leihaizhe    时间: 2012-10-17 09:15
下来看看




欢迎光临 iCAx开思网 (https://www.icax.org/) Powered by Discuz! X3.3