Перестроение детали после изменения параметров через интерфейс детали в API7

Автор А8208, 02.12.11, 16:39:08

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

А8208

Здравствуйте!
Необходимо получить размеры заготовки листовой детали входящей в состав сборки.
Выполнил развёртку листовой детали.
Пытаюсь методом Update применить изменения, реакция о. И определяются габариты гнутой детали.
При этом когда вручную открываешь дерево построения сборки и детали там появляется значок, что деталь развёрнута. А модель не изменилась. Изменяется только после нажатия кнопки перестроить в модели детали.
После этого уже начинают определяться габаритные размеры развёртки (заготовки листовой детали).

метод rebuildmodelEx применим только для АРI5?

как интерфейс АРI7 перевести в АPI5 если без этого не обойтись конечно?


If kompas Is Nothing Then
            kompas = CreateObject("KOMPAS.Application.7")
            If Not Kompas Is Nothing Then
                Kompas.Visible = True
                'начало цикла обработки сборочных единиц
                For i = 0 To coll.Count
                    'Kompas.ksYesNo(1)
                    Dim Document As IDocuments
                    Document = kompas.Documents
                    Document.Open(coll(i))
                    Dim doc3D As IKompasDocument3D
                    Dim name_SB, oboznach_SB As String
                    Dim name_detal, oboznach_detal As String
                    Dim i_detal As Integer
                    Dim material_det As String
                    Dim iTopPart As IPart7
                    Dim Massive_detalei As System.Object
                    Dim Parametrs_detail As ISourcePart7Params
                    Dim ifeature As IFeature7
                    Dim result_detail As IBody7
                    Dim sheet_bodys As ISheetMetalContainer
                    Dim sheet_body As ISheetMetalBodies
                    Dim sheet_body_1 As ISheetMetalBody

                    Dim XGabaritSize, YGabaritSize, ZGabaritSize As Double
                    Dim X1, Y1, Z1, X2, Y2, Z2 As Double 'координаты первой и второй точки габаритного параллелепипеда

                    doc3D = kompas.ActiveDocument
                    iTopPart = doc3D.TopPart 'верхний элемент дерева сборочного чертежа
                    name_SB = iTopPart.Name 'наименование сборочного чертежа
                    oboznach_SB = iTopPart.Marking 'обозначение сборочного чертежа
                    'Обработка элементов содержащихся в сборке
                    Massive_detalei = iTopPart.PartsEx(1) ' Массив оригинальных деталей (сборок) сборки
                    For j = 0 To Massive_detalei.length() - 1
                        i_detal = iTopPart.InstanceCount(Massive_detalei(j)) 'кол-во деталей в сборке
                        material_det = Massive_detalei(j).material 'наименование детали
                        Parametrs_detail = Massive_detalei(j) 'дополнительный интерфейс детали
                        oboznach_detal = Parametrs_detail.SourceMarking ' обозначение детали
                        name_detal = Parametrs_detail.SourceName 'наименование детали
                        ' определение габаритов детали
                        ifeature = Massive_detalei(j)
                        result_detail = ifeature.ResultBodies
                        'для листовых деталей перевод в развёрнутое состояние для определения габаритов листа
                        sheet_bodys = Massive_detalei(j)
                        sheet_body = sheet_bodys.SheetMetalBodies
                        sheet_body_1 = sheet_body.SheetMetalBody(0)
                        If IsNothing(sheet_body_1) = False Then
                            sheet_body_1.Straighten = True 'развёртка детали
                            'перестроить деталь

'КАК ПЕРЕСТРОИТЬ ДЕТАЛЬ?                           

'sheet_body_1.rebuildmodelex(True)
                        End If
                        If result_detail.GetGabarit(X1, Y1, Z1, X2, Y2, Z2) Then 'координаты получены
                            XGabaritSize = System.Math.Abs((X2 - X1) / 1000) 'габаритный размер по оси X
                            YGabaritSize = System.Math.Abs((Y2 - Y1) / 1000) 'габаритный размер по оси Y
                            ZGabaritSize = System.Math.Abs((Z2 - Z1) / 1000) 'габаритный размер по оси Z
                        Else
                            XGabaritSize = 0
                            YGabaritSize = 0
                            ZGabaritSize = 0
                        End If


                    Next j


                Next i
        End If
        End If

ksTransferInterface
Преобразовать интерфейсный объект одного типа API в интерфейсный объект API другого типа.

А8208



А8208

Судя по SDK у этих интерфейсов указанных вами методов нет. Их нет вообще в API7.
Даже если записать в теле программы эти методы выдаётся ошибка (пишет у объекта нет такого метода).

chelkar

А какая у Вас версия КОМПАСа?
Эти методы появились в V13.
Если версия ниже, то придется делать преобразование в API 5.

А8208

у меня V12.
Нужно преобразовать только необходимый объекта или надо весь API7 в API5 перевести?

ainis

Наверное, достаточно будет преобразовать Ваш doc3D в Kompas6API5.ksDocument3D с помощью ksTransferInterface, а потом применить метод RebuildDocument.