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

Автор Тема: Ошибка при создание эскиза на созданной рабочей плоскости  (Прочитано 1549 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Dmitriy045Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Здравствуйте.
В 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 [Выбрать]
  1. Dim oApp As Inventor.Application
  2. ''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИ
  3. Dim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,
  4.                                                                oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)
  5. ''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИ
  6. Dim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition
  7. ''СОЗДАНИЕ НОВОГО ЭСКИЗА В ПЛОСКОСТИ XY
  8. Dim oSketch As Inventor.PlanarSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(3))
  9. ''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮ
  10. Dim oTG As Inventor.TransientGeometry = oApp.TransientGeometry
  11.  
  12. ''ПРЯМОУГОЛЬНИК
  13. Dim oRectangel As Inventor.SketchEntitiesEnumerator = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(0, 0),
  14.                                                                                                  oTG.CreatePoint2d(6, 4))
  15. ''СОЗДАДИМ ПРОФИЛЬ ДЛЯ ВЫДАВЛИВАНИЯ ПРЯМОУГОЛЬНИКА
  16. Dim oProfile As Inventor.Profile = oSketch.Profiles.AddForSolid
  17. ''ВЫДАВЛИВАНИЕ ПРЯМОУГОЛЬНИКА
  18. Dim oExtrusion As Inventor.ExtrudeFeature = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(
  19.                  oProfile, 4, Inventor.PartFeatureExtentDirectionEnum.kPositiveExtentDirection,
  20.                  Inventor.PartFeatureOperationEnum.kJoinOperation)
  21. '' СОЗДАНИЕ НОВОЙ РАБОЧЕЙ ПЛОСКОСТИ
  22. Dim oWorkPlaneCircle As Inventor.WorkPlane = oDocDef.WorkPlanes.AddByPlaneAndOffset(oDocDef.WorkPlanes(3), 2)
  23. '' СОЗДАНИЕ ЭСКИЗА НА НОВОЙ ПЛОСКОСТИ
  24. Dim oSketchCircle As Inventor.PlanarSketch = oDocDef.Sketches.Add(oWorkPlaneCircle)
  25. '' ОКРУЖНОСТЬ
  26. Dim oCircle As Inventor.SketchCircle = oSketchCircle.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5)
  27.  

Пример 2:
Код - Visual Basic [Выбрать]
  1. Dim oApp As Inventor.Application
  2. ''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИ
  3. Dim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,
  4.                                                                oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)
  5. ''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИ
  6. Dim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition
  7. ''СОЗДАНИЕ НОВОГО ЭСКИЗА В ПЛОСКОСТИ XY
  8. Dim oSketch As Inventor.PlanarSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(3))
  9. ''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮ
  10. Dim oTG As Inventor.TransientGeometry = oApp.TransientGeometry
  11.  
  12. ''ПРЯМОУГОЛЬНИК
  13. Dim oRectangel As Inventor.SketchEntitiesEnumerator = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(0, 0),
  14.                                                                                                  oTG.CreatePoint2d(6, 4))
  15. ''СОЗДАДИМ ПРОФИЛЬ ДЛЯ ВЫДАВЛИВАНИЯ ПРЯМОУГОЛЬНИКА
  16. Dim oProfile As Inventor.Profile = oSketch.Profiles.AddForSolid
  17. ''ВЫДАВЛИВАНИЕ ПРЯМОУГОЛЬНИКА
  18. Dim oExtrusion As Inventor.ExtrudeFeature = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(
  19.                  oProfile, 4, Inventor.PartFeatureExtentDirectionEnum.kPositiveExtentDirection,
  20.                  Inventor.PartFeatureOperationEnum.kJoinOperation)
  21. ''СОЗДАНИЕ ЭСКИЗА В ПЛОСКОСТИ YZ
  22. oSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(1))
  23. '' ОКРУЖНОСТЬ
  24. Dim oCircle As Inventor.SketchCircle = oSketch.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5)
  25.  

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 658
  • Карма: 169
  • Skype: mikazakov@mail.ru
Не понятно в чем проблема
вот код совершенно работоспособный, создается плоскость и на ней рисуется окружность без проблем
Код - vb.net [Выбрать]
  1. Module Module1
  2.     Sub Main()
  3.         Dim oApp As Inventor.Application = GetInventorApplication()
  4.         ''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИ
  5.         Dim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,
  6.                                                                        oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)
  7.         ''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИ
  8.         Dim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition
  9.  
  10.         ''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮ
  11.         Dim oTG As Inventor.TransientGeometry = oApp.TransientGeometry
  12.  
  13.         '' СОЗДАНИЕ НОВОЙ РАБОЧЕЙ ПЛОСКОСТИ
  14.         Dim oWorkPlaneCircle As Inventor.WorkPlane = oDocDef.WorkPlanes.AddByPlaneAndOffset(oDocDef.WorkPlanes(3), 2)
  15.  
  16.         '' СОЗДАНИЕ ЭСКИЗА НА НОВОЙ ПЛОСКОСТИ
  17.         Dim oSketchCircle As Inventor.PlanarSketch = oDocDef.Sketches.Add(oWorkPlaneCircle)
  18.  
  19.         '' ОКРУЖНОСТЬ
  20.         Dim oCircle As Inventor.SketchCircle = oSketchCircle.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5)
  21.  
  22.         Exit Sub
  23.     End Sub
  24.  
  25.     'Функция получения ссылки на Inventor
  26.     Function GetInventorApplication() As Inventor.Application
  27.         Dim InvApp As Inventor.Application
  28.         Try
  29.             'Попытка присоединится к загруженному в память Inventor
  30.             InvApp = CType(Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"), Inventor.Application)
  31.         Catch ex As Exception
  32.             'Загрузка Inventor в память и присоединение к нему
  33.             Dim InvType As Type = Type.GetTypeFromProgID("Inventor.Application")
  34.             InvApp = CType(Activator.CreateInstance(InvType), Inventor.Application)
  35.             InvApp.Visible = True
  36.         End Try
  37.         Return InvApp
  38.     End Function
  39.  
  40. End Module

У вас точно приложение NET framework,  а не NET Core?

Оффлайн Dmitriy045Автор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
У вас точно приложение NET framework,  а не NET Core?
Точно

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

Вот весь мой код:
Код - vb.net [Выбрать]
  1. Imports System.Runtime.InteropServices
  2.  
  3. Public Class Form1
  4.  
  5.     Dim oApp As Inventor.Application
  6.  
  7.     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  8.         Try
  9.             oApp = GetObject(, "Inventor.Application")
  10.             oApp = Marshal.GetActiveObject("Inventor.Application")
  11.             MessageBox.Show("Inventor is found", "WinFormTestApp", MessageBoxButtons.OK, MessageBoxIcon.Information)
  12.         Catch ex As Exception
  13.             MessageBox.Show("Inventor is not found", "WinFormTestApp", MessageBoxButtons.OK, MessageBoxIcon.Error)
  14.         End Try
  15.     End Sub
  16.  
  17.     Private Sub Create_Botton(sender As Object, e As EventArgs) Handles Botton.Click
  18.  
  19.         Call createExtrudedPart_1()
  20.     End Sub
  21.  
  22.     Sub createExtrudedPart_1()
  23.         ''СОЗДАНИЕ НОВОГО ДОКУМЕНТА ДЕТАЛИ, ВИДИМЫЙ РЕЖИМ
  24.         Dim oDoc As Inventor.PartDocument = oApp.Documents.Add(Inventor.DocumentTypeEnum.kPartDocumentObject,
  25.                                                                oApp.FileManager.GetTemplateFile(Inventor.DocumentTypeEnum.kPartDocumentObject), True)
  26.         ''ОПРЕДЕЛЕНИЕ ДОКУМЕНТА ДЕТАЛИ
  27.         Dim oDocDef As Inventor.PartComponentDefinition = oDoc.ComponentDefinition
  28.         ''СОЗДАНИЕ НОВОГО ЭСКИЗА В ПЛОСКОСТИ XY
  29.         Dim oSketch As Inventor.PlanarSketch = oDocDef.Sketches.Add(oDocDef.WorkPlanes(3))
  30.         ''ССЫЛКА НА ВСПОМОГАТЕЛЬНУЮ ГЕОМЕТРИЮ
  31.         Dim oTG As Inventor.TransientGeometry = oApp.TransientGeometry
  32.         ''ПРЯМОУГОЛЬНИК
  33.         Dim oRectangel As Inventor.SketchEntitiesEnumerator = oSketch.SketchLines.AddAsTwoPointRectangle(oTG.CreatePoint2d(0, 0),
  34.                                                                                                          oTG.CreatePoint2d(6, 4))
  35.         ''СОЗДАДИМ ПРОФИЛЬ ДЛЯ ВЫДАВЛИВАНИЯ ПРЯМОУГОЛЬНИКА
  36.         Dim oProfile As Inventor.Profile = oSketch.Profiles.AddForSolid
  37.         ''ВЫДАВЛИВАНИЕ ПРЯМОУГОЛЬНИКА
  38.         Dim oExtrusion As Inventor.ExtrudeFeature = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(
  39.                          oProfile, 4, Inventor.PartFeatureExtentDirectionEnum.kPositiveExtentDirection,
  40.                          Inventor.PartFeatureOperationEnum.kJoinOperation)
  41.         '' СОЗДАНИЕ НОВОЙ РАБОЧЕЙ ПЛОСКОСТИ
  42.         Dim oWorkPlaneCircle As Inventor.WorkPlane = oDocDef.WorkPlanes.AddByPlaneAndOffset(oDocDef.WorkPlanes(3), 2)
  43.         ''СОЗДАНИЕ ЭСКИЗА НА НОВОЙ ПЛОСКОСТИ
  44.         Dim oSketchCircle As Inventor.PlanarSketch = oDocDef.Sketches.Add(oWorkPlaneCircle)
  45.         '' ОКРУЖНОСТЬ
  46.         Dim oCircle As Inventor.SketchCircle = oSketchCircle.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(3, 2), 0.5)
  47.         '' ВЫЧИТАНИЕ ОКРУЖНОСТИ
  48.         oProfile = oSketchCircle.Profiles.AddForSolid
  49.         oExtrusion = oDocDef.Features.ExtrudeFeatures.AddByDistanceExtent(
  50.                          oSketchCircle, 2, Inventor.PartFeatureExtentDirectionEnum.kSymmetricExtentDirection,
  51.                          Inventor.PartFeatureOperationEnum.kCutOperation)
  52.     End Sub
  53. End Class
  54.  
« Последнее редактирование: 06-06-2021, 13:06:33 от Dmitriy045 »

Отмечено как Решение Dmitriy045 07-06-2021, 14:52:11

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 658
  • Карма: 169
  • Skype: mikazakov@mail.ru
Смотрю сигнатуру 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