ADN Club > Inventor API

Ошибка при создание эскиза на созданной рабочей плоскости

(1/1)

Dmitriy045:
Здравствуйте.
В Inventor API VBA я новичок. Подскажите, как решить такую проблему?
Ошибка возникает при создание эскиза на созданной рабочей плоскости (Пример 1), но если создавать эскиз на уже существующих плоскостях, т.е. YZ, XZ, XY, то ошибка не появляется (Пример 2). Мне нужно создать эскиз именно на новой рабочей поверхности. Эта ошибка также возникает если создавать эскиз на любой поверхности детали.
Находил подобные темы, но решения в них не нашёл.

Текст ошибки: System.InvalidCastException: "Невозможно привести COM-объект типа "System.__ComObject" к интерфейсному типу "Inventor.Profile". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{8006A03A-ECC4-11D4-8DE9-0010B541CAA8}" возвратил следующую ошибку: Интерфейс не поддерживается (Исключение из HRESULT: 0x80004002 (E_NOINTERFACE))."

Пример 1:

--- Код - Visual Basic [Выбрать] ---Dim oApp As Inventor.Application''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИDim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,                                                               oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИDim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition''СОЗДАНИЕ НОВОГО ЭСКИЗА В ПЛОСКОСТИ XYDim oSketch As Inventor.PlanarSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(3))''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮDim oTG As Inventor.TransientGeometry = oApp.TransientGeometry ''ПРЯМОУГОЛЬНИКDim oRectangel As Inventor.SketchEntitiesEnumerator = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(0, 0),                                                                                                 oTG.CreatePoint2d(6, 4))''СОЗДАДИМ ПРОФИЛЬ ДЛЯ ВЫДАВЛИВАНИЯ ПРЯМОУГОЛЬНИКАDim oProfile As Inventor.Profile = oSketch.Profiles.AddForSolid''ВЫДАВЛИВАНИЕ ПРЯМОУГОЛЬНИКАDim oExtrusion As Inventor.ExtrudeFeature = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(                 oProfile, 4, Inventor.PartFeatureExtentDirectionEnum.kPositiveExtentDirection,                 Inventor.PartFeatureOperationEnum.kJoinOperation)'' СОЗДАНИЕ НОВОЙ РАБОЧЕЙ ПЛОСКОСТИDim oWorkPlaneCircle As Inventor.WorkPlane = oDocDef.WorkPlanes.AddByPlaneAndOffset(oDocDef.WorkPlanes(3), 2)'' СОЗДАНИЕ ЭСКИЗА НА НОВОЙ ПЛОСКОСТИDim oSketchCircle As Inventor.PlanarSketch = oDocDef.Sketches.Add(oWorkPlaneCircle)'' ОКРУЖНОСТЬDim oCircle As Inventor.SketchCircle = oSketchCircle.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5) 
Пример 2:

--- Код - Visual Basic [Выбрать] ---Dim oApp As Inventor.Application''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИDim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,                                                               oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИDim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition''СОЗДАНИЕ НОВОГО ЭСКИЗА В ПЛОСКОСТИ XYDim oSketch As Inventor.PlanarSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(3))''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮDim oTG As Inventor.TransientGeometry = oApp.TransientGeometry ''ПРЯМОУГОЛЬНИКDim oRectangel As Inventor.SketchEntitiesEnumerator = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(0, 0),                                                                                                 oTG.CreatePoint2d(6, 4))''СОЗДАДИМ ПРОФИЛЬ ДЛЯ ВЫДАВЛИВАНИЯ ПРЯМОУГОЛЬНИКАDim oProfile As Inventor.Profile = oSketch.Profiles.AddForSolid''ВЫДАВЛИВАНИЕ ПРЯМОУГОЛЬНИКАDim oExtrusion As Inventor.ExtrudeFeature = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(                 oProfile, 4, Inventor.PartFeatureExtentDirectionEnum.kPositiveExtentDirection,                 Inventor.PartFeatureOperationEnum.kJoinOperation)''СОЗДАНИЕ ЭСКИЗА В ПЛОСКОСТИ YZoSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(1))'' ОКРУЖНОСТЬDim oCircle As Inventor.SketchCircle = oSketch.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5) 

mikazakov:
Не понятно в чем проблема
вот код совершенно работоспособный, создается плоскость и на ней рисуется окружность без проблем

--- Код - vb.net [Выбрать] ---Module Module1    Sub Main()        Dim oApp As Inventor.Application = GetInventorApplication()        ''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИ        Dim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,                                                                       oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)        ''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИ        Dim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition         ''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮ        Dim oTG As Inventor.TransientGeometry = oApp.TransientGeometry         '' СОЗДАНИЕ НОВОЙ РАБОЧЕЙ ПЛОСКОСТИ        Dim oWorkPlaneCircle As Inventor.WorkPlane = oDocDef.WorkPlanes.AddByPlaneAndOffset(oDocDef.WorkPlanes(3), 2)         '' СОЗДАНИЕ ЭСКИЗА НА НОВОЙ ПЛОСКОСТИ        Dim oSketchCircle As Inventor.PlanarSketch = oDocDef.Sketches.Add(oWorkPlaneCircle)         '' ОКРУЖНОСТЬ        Dim oCircle As Inventor.SketchCircle = oSketchCircle.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5)         Exit Sub    End Sub     'Функция получения ссылки на Inventor    Function GetInventorApplication() As Inventor.Application        Dim InvApp As Inventor.Application        Try            'Попытка присоединится к загруженному в память Inventor            InvApp = CType(Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"), Inventor.Application)        Catch ex As Exception            'Загрузка Inventor в память и присоединение к нему            Dim InvType As Type = Type.GetTypeFromProgID("Inventor.Application")            InvApp = CType(Activator.CreateInstance(InvType), Inventor.Application)            InvApp.Visible = True        End Try        Return InvApp    End Function End Module
У вас точно приложение NET framework,  а не NET Core?

Dmitriy045:

--- Цитата: mikazakov от 06-06-2021, 09:04:28 ---У вас точно приложение NET framework,  а не NET Core?
--- Конец цитаты ---
Точно

Немного запутался в коде.
Я не добавил сюда часть кода.
Ошибка появляется при вычитание окружности из прямоугольника.

Вот весь мой код:

--- Код - vb.net [Выбрать] ---Imports System.Runtime.InteropServices Public Class Form1     Dim oApp As Inventor.Application     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load        Try            oApp = GetObject(, "Inventor.Application")            oApp = Marshal.GetActiveObject("Inventor.Application")            MessageBox.Show("Inventor is found", "WinFormTestApp", MessageBoxButtons.OK, MessageBoxIcon.Information)        Catch ex As Exception            MessageBox.Show("Inventor is not found", "WinFormTestApp", MessageBoxButtons.OK, MessageBoxIcon.Error)        End Try    End Sub     Private Sub Create_Botton(sender As Object, e As EventArgs) Handles Botton.Click         Call createExtrudedPart_1()    End Sub     Sub createExtrudedPart_1()        ''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИ, ВИДИМЫЙ РЕЖИМ        Dim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,                                                               oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)        ''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИ        Dim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition        ''СОЗДАНИЕ НОВОГО ЭСКИЗА В ПЛОСКОСТИ XY        Dim oSketch As Inventor.PlanarSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(3))        ''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮ        Dim oTG As Inventor.TransientGeometry = oApp.TransientGeometry        ''ПРЯМОУГОЛЬНИК        Dim oRectangel As Inventor.SketchEntitiesEnumerator = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(0, 0),                                                                                                         oTG.CreatePoint2d(6, 4))        ''СОЗДАДИМ ПРОФИЛЬ ДЛЯ ВЫДАВЛИВАНИЯ ПРЯМОУГОЛЬНИКА        Dim oProfile As Inventor.Profile = oSketch.Profiles.AddForSolid        ''ВЫДАВЛИВАНИЕ ПРЯМОУГОЛЬНИКА        Dim oExtrusion As Inventor.ExtrudeFeature = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(                         oProfile, 4, Inventor.PartFeatureExtentDirectionEnum.kPositiveExtentDirection,                         Inventor.PartFeatureOperationEnum.kJoinOperation)        '' СОЗДАНИЕ НОВОЙ РАБОЧЕЙ ПЛОСКОСТИ        Dim oWorkPlaneCircle As Inventor.WorkPlane = oDocDef.WorkPlanes.AddByPlaneAndOffset(oDocDef.WorkPlanes(3), 2)        ''СОЗДАНИЕ ЭСКИЗА НА НОВОЙ ПЛОСКОСТИ        Dim oSketchCircle As Inventor.PlanarSketch = oDocDef.Sketches.Add(oWorkPlaneCircle)        '' ОКРУЖНОСТЬ        Dim oCircle As Inventor.SketchCircle = oSketchCircle.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5)        '' ВЫЧИТАНИЕ ОКРУЖНОСТИ        oProfile = oSketchCircle.Profiles.AddForSolid        oExtrusion = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(                         oSketchCircle, 2, Inventor.PartFeatureExtentDirectionEnum.kSymmetricExtentDirection,                         Inventor.PartFeatureOperationEnum.kCutOperation)    End SubEnd Class 

mikazakov:
Смотрю сигнатуру AddByDistanceExtent:

       <DispId(83910913)> <TypeLibFunc(TypeLibFuncFlags.FHidden)>
        Function AddByDistanceExtent(Profile As Profile, Distance As Object, ExtentDirection As PartFeatureExtentDirectionEnum, Operation As PartFeatureOperationEnum, Optional TaperAngle As Object = Nothing) As ExtrudeFeature
     
Ну во первых в атрибутах написано TypeLibFunc(TypeLibFuncFlags.FHidden) это значит эта функция скрыта и не рекомендуется для использования, скорее всего устаревшая. На данный момент актуальна функция
 CreateExtrudeDefinition(Profile As Profile, Operation As PartFeatureOperationEnum) As ExtrudeDefinition
Во вторых в первом аргументе должен быть профиль Inventor.Profile, а вы вместо этого подсовываете oSketchCircle As Inventor.PlanarSketch

Навигация

[0] Главная страница сообщений

Перейти к полной версии