Публикации и опубликованные элементы

Программирование для CATIA.

Публикации и опубликованные элементы

Сообщение VladimirVladimirovich » 08 дек 2014 12:31

Доброго времени суток!
Подскажите, пожалуйста, есть ли возможность узнать какой элемент опубликован в Part'е через Automation?
Мне необходимо проверить правильный ли элемент опубликован. Я получаю список публикаций и хочу узнать, что опубликовано, в частности интересует основное твердое тело MainBody.
Вот только не могу найти каким образом это определить. Получаю доступ к публикации, вытягиваю reference, но вот что дальше делать не пойму. Прямое сравнение не проходит, т.к. body и reference не могут сравниваться, а как из reference вытянуть элемент тоже не понятно.

Код: Выделить всё
Sub CATMain()
Dim oDocument As Document
Set oDocument = CATIA.ActiveDocument

Dim oPartDocument As PartDocument
Set oPartDocument = oDocument

Dim oPart As Part
Set oPart = oPartDocument.Part

Dim oPartProduct As Product
Set oPartProduct = oPartDocument.Product

Dim oPublications As Publications
Set oPublications = oPartProduct.Publications

Dim oPublication As Publication
Dim oReference As Reference
Dim oMainBody As Body
Dim oAnyObject As AnyObject

On Error GoTo errorcode

If oPublications.Count > 0 Then
    For iPub = 1 To oPublications.Count
        Set oPublication = oPublications.Item(iPub)
        Set oReference = oPublication.Valuation
        Err.Clear
        Set oAnyObject = oReference
        Set oMainBody = oAnyObject
        If oMainBody = oPart.MainBody Then
            MsgBox "Опубликовано MainBody"
        Else
         GoTo errorcode
        End If
    Next iPub
End If
Exit sub

ErrorCode:
MsgBox "Ошибка"
End Sub
Всё, что не делается - всё к лучшему!!
VladimirVladimirovich
Новичок
Новичок
 
Сообщения: 16
Зарегистрирован: 21 сен 2012 00:12
Откуда: г. Жуковский

Re: Публикации и опубликованные элементы

Сообщение Artem » 09 дек 2014 11:34

например через select или findobject (минусы - первый не работает с powercopy, а второй гипотетически может выдать не тот результат)
Код: Выделить всё
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
                   (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function GetMem4 Lib "msvbvm60" (ByVal pSrc As Long, ByVal pDst As Long) As Long
Sub CATMain()
Dim oDocument As Document
Set oDocument = CATIA.ActiveDocument

Dim oPartDocument As PartDocument
Set oPartDocument = oDocument

Dim oPart As Part
Set oPart = oPartDocument.Part

Dim oPartProduct As Product
Set oPartProduct = oPartDocument.Product

Dim oPublications As Publications
Set oPublications = oPartProduct.Publications

Dim oPublication As Publication
Dim oReference As Reference
Dim oMainBody As Body
Dim oAnyObject As AnyObject
Dim ee As AnyObject
Dim ee2 As AnyObject
Dim ww As SelectedElement
Dim eet As String
On Error GoTo ErrorCode
Set oAnyObject = oPart.MainBody
Dim PtrSL As Long
Dim PtrFO As Long
Dim PtrPB As Long
Dim myObjFO As Long
Dim myObjPB As Long
Dim myObjSL As Long
If oPublications.Count > 0 Then
    For iPub = 1 To oPublications.Count
        Set oPublication = oPublications.Item(iPub)
        CATIA.ActiveDocument.Selection.Clear
        CATIA.ActiveDocument.Selection.Add oPublication.Valuation
        Set ww = CATIA.ActiveDocument.Selection.Item(1)
        Set ee2 = ww.Value
        'MsgBox ee2.Name + "  " + ww.Type
        PtrSL = VarPtr(ee2)
        Set oReference = oPublication.Valuation
        eet = Right(oReference.DisplayName, Len(oReference.DisplayName) - InStr(oReference.DisplayName, "/!") - 1)
        Set ee = oPart.FindObjectByName(eet)
        PtrFO = VarPtr(ee)
        PtrPB = VarPtr(oAnyObject)
        GetMem4 PtrFO, VarPtr(myObjFO)
        GetMem4 PtrPB, VarPtr(myObjPB)
        GetMem4 PtrSL, VarPtr(myObjSL)
        If (ee2 Is oAnyObject) Then MsgBox "Опубликовано MainBody sel"
        If (myObjSL = myObjPB) Then MsgBox "Опубликовано MainBody pointer sel"
        'по невыясненным причинам FindObjectByName!=Part.MainBody 
        If (ee.Name = oAnyObject.Name) And (TypeName(ee) = TypeName(oAnyObject)) Then MsgBox "Опубликовано MainBody findob"
   Next iPub
End If
Exit Sub
End Sub

animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot и гости: 2