Создание местного разреза на основном виде чертежа

Автор Тема: Создание местного разреза на основном виде чертежа  (Прочитано 2749 раз)

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

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Добрый день. При создание местного разреза на главном виде столкнулся с проблемой назначения глубины сечения. Возможно кто сталкивался с такой проблемой подскажите как решить.
При добавление главного вида с основного ортогонального вида местный разрез создается почти всегда нормально, но при использование повернутого вида модели глубина сечения определяется не правильно, хотя при создание через пользовательский интерфейс с использованием тех же параметров все создается адекватно.
Код - vb.net [Выбрать]
  1. Dim cam As Camera
  2. cam = g_inventorApplication.TransientObjects.CreateCamera
  3. cam.SceneObject = oPartDoc.ComponentDefinition
  4. Dim x As Double
  5. Dim y As Double
  6. x = Math.Cos(Math.PI / 12)
  7. y = Math.Sin(Math.PI / 12)
  8. cam.Eye = oTG.CreatePoint(0, x, y)
  9. cam.Target = oTG.CreatePoint(0, -x, -y)
  10. cam.UpVector = oTG.CreateUnitVector(0, 0, -1)
  11. cam.ApplyWithoutTransition()
  12.  
  13. oView = oSheet.DrawingViews.AddBaseView(oPartDoc, oTG.CreatePoint2d(14.8, 10.5), scale, ViewOrientationTypeEnum.kArbitraryViewOrientation, DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle,, cam)
  14. 'oView = oSheet.DrawingViews.AddBaseView(oPartDoc, oTG.CreatePoint2d(14.8, 10.5), scale, ViewOrientationTypeEnum.kFrontViewOrientation, DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle)
  15.  
  16. oSketch = oView.Sketches.Add
  17. oSketch.Edit()
  18. Call oSketch.SketchLines.AddAsTwoPointCenteredRectangle(oTG.CreatePoint2d(0, 0), oTG.CreatePoint2d((oView.Width / oView.Scale / 2) + 1, (oView.Height / oView.Scale / 2) + 1))
  19. oSketch.ExitEdit()
  20.  
  21. Dim oProfile As Profile
  22. oProfile = oSketch.Profiles.AddForSolid
  23.  
  24. Dim oDCurve As DrawingCurve
  25. oDCurve= oView.DrawingCurves.item(1)
  26. Dim oPointIntent As Point2d
  27. oPointIntent = oDCurve1.StartPoint
  28. Dim oIntent1 As GeometryIntent
  29. oIntent1 = oSheet.CreateGeometryIntent(oDCurve1, oPointIntent)
  30. Call oView.BreakOutOperations.Add(oProfile, oIntent1, 0)
  31.  
  32.  

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Не понятна алгортмика действий создания видов.
Это на любых моделях так?

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
На моделях типа тел вращения из листового материала при выборе точки торцевой кромки для определения толщины. Я ковыряюсь с конусом. При выборе кривой образованной непосредственно конусом проблема исчезает.  Мне непонятно почему из пользовательского интерфейса данной проблемы нет, что сделать чтобы ее победить, иначе приходиться много фильтровать чтобы найти нужную кривую.
Код - vb.net [Выбрать]
  1. Dim oFace1, oFace2, oFace3, oFace4 As Face
  2.         oFace1 = oPartDoc.AttributeManager.FindObjects("OuterSurface").Item(1)
  3.         oFace2 = oPartDoc.AttributeManager.FindObjects("FirstEndface").Item(1)
  4.         oFace3 = oPartDoc.AttributeManager.FindObjects("SecondEndface").Item(1)
  5.  
  6.         Dim W As Boolean
  7.  
  8.         Dim oColor, oColor1, oColor2, oColor3 As Inventor.Color
  9.         'oColor = g_inventorApplication.TransientObjects.CreateColor(0, 0, 255) 'Синий
  10.         'oColor1 = g_inventorApplication.TransientObjects.CreateColor(255, 0, 0) 'Красный
  11.         'oColor2 = g_inventorApplication.TransientObjects.CreateColor(0, 255, 0) 'Зеленый
  12.         oColor3 = g_inventorApplication.TransientObjects.CreateColor(250, 250, 0) 'Желтый
  13.  
  14.         Dim oDCurve1, oDCurve2, oDCurve3, oDCurve4 As DrawingCurve
  15.         For Each oDCurve1 In oView.DrawingCurves(oFace1)
  16.             W = True
  17.             'oDCurve1.Color = oColor
  18.             For Each oDCurve2 In oView.DrawingCurves(oFace2)
  19.                 If oDCurve1 Is oDCurve2 Then
  20.                     'oDCurve2.Color = oColor1
  21.                     W = False
  22.                     Exit For
  23.                 End If
  24.             Next
  25.             If W = True Then
  26.                 For Each oDCurve3 In oView.DrawingCurves(oFace3)
  27.                     If oDCurve1 Is oDCurve3 Then
  28.                         'oDCurve3.Color = oColor2
  29.                         W = False
  30.                         Exit For
  31.                     End If
  32.                 Next
  33.  
  34.                 If W = True Then
  35.                     For i = 2 To oPartDoc.AttributeManager.FindObjects("OuterSurface").Count
  36.                         Try
  37.                             oFace4 = oPartDoc.AttributeManager.FindObjects("OuterSurface").Item(i)
  38.                         Catch ex As Exception
  39.                             MsgBox("Только одна наружная поверхность")
  40.                             Exit For
  41.                         End Try
  42.                         For Each oDCurve4 In oView.DrawingCurves(oFace4)
  43.                             If oDCurve1 Is oDCurve4 Then
  44.                                 'oDCurve2.Color = oColor1
  45.                                 W = False
  46.                                 Exit For
  47.                             End If
  48.                         Next
  49.                     Next i
  50.                 End If
  51.             End If
  52.  
  53.             If W = True Then
  54.                 Exit For
  55.             End If
  56.         Next
  57.         'oSketch.ExitEdit()
  58.         If W = True Then
  59.             oDCurve1.Color = oColor3
  60.             Dim oPointIntent As Point2d
  61.             oPointIntent = oDCurve1.StartPoint
  62.             Dim oIntent1 As GeometryIntent
  63.             oIntent1 = oSheet.CreateGeometryIntent(oDCurve1, oPointIntent)
  64.             Call oView.BreakOutOperations.Add(oProfile, oIntent1, 0)
  65.         End If
  66.  
  67.  


по синим строит адекватно по красным нет






Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Попробовал на повёрнутом конусе, нашел кромку спроецированную от основания, всё нормально рассеклось
В коде заранее построен эскиз и создан базовый вид, который подвергнут рассечению


Код был следующий
Код - vb.net [Выбрать]
  1.   Imports Inventor
  2. Module Module1
  3.     Sub Main()
  4.         'Получение объекта-Инвентора
  5.         Dim invApp As Application = getInventorApplication()
  6.  
  7.         Dim otg As TransientGeometry = invApp.TransientGeometry
  8.         Dim doc As DrawingDocument = invApp.ActiveEditDocument
  9.         Dim oSheet As Sheet = doc.ActiveSheet
  10.  
  11.         Dim oView As DrawingView
  12.         oView = oSheet.DrawingViews(1)
  13.  
  14.         Dim oSketch As DrawingSketch = oView.Sketches(1)
  15.  
  16.         Dim oProfile As Profile
  17.         oProfile = oSketch.Profiles.AddForSolid
  18.  
  19.         Dim curvs As DrawingCurvesEnumerator = oView.DrawingCurves
  20.         Dim cur As DrawingCurve = curvs(2)'Я заранее нашел номер ребра на чертеже
  21.  
  22.         Dim oIntent1 As GeometryIntent = oSheet.CreateGeometryIntent(cur)
  23.  
  24.  
  25.         oView.BreakOutOperations.Add(oProfile, oIntent1, 0)
  26.  
  27.     End Sub
  28.  
  29.     'Функция доступа к Инвентору
  30.     Private Function getInventorApplication() As Application
  31.         Dim invApp As Inventor.Application
  32.         Try 'Получение ссылки на объекта приложения Inventor
  33.             invApp = TryCast(Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"), Inventor.Application)
  34.         Catch 'Загрузка Inventor
  35.             invApp = TryCast(Activator.CreateInstance(Type.GetTypeFromProgID("Inventor.Application")), Inventor.Application)
  36.             invApp.Visible = True
  37.         End Try
  38.  
  39.         Return invApp
  40.     End Function
  41.  
  42. End Module
  43.  


P.S. Большая просьба: если хотите быстрый внятный ответ, нужно приготовить данные, "причёсаный" пример кода, где нет "вырванных" неизвестно откуда переменных, кучи назначенных заранее атрибутов и пр. а так же файлы моделей и чертежей если это нужно и порядок действий.
Я потратил 2,5 часа что бы понять что вам нужно и восстановить работающий тестовый код. И при этом я даже не уверен, в том что помог ли я вам или нет.

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Спасибо. Ваш код смогу посмотреть только в понедельник. На счёт замечаний постараюсь учесть. Код более 8000 строк старался показать только суть проблемы. Вы модель делали с разрывом для развертки? Я поворачивал модель для вида чтобы отобразить замыкающий шов на чертеже. Возможно есть способ для указания глубины использовать рабочие оси? (Мне пока это не удалось).

Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Как я понял Вы повернули конус не по его оси. Проблема возникает при повороте конуса по оси.

Код - vb.net [Выбрать]
  1. ''' <summary>
  2.     '''  Создание чертежа конуса (g_inventorApplication - доступ к инвентору)
  3.     ''' </summary>
  4.     ''' <param name="oPartDoc">
  5.     ''' модель конуса
  6.     ''' </param>
  7.     ''' <param name="oDrawingDoc">
  8.     ''' документ чертежа в котором надо создать вид
  9.     ''' </param>
  10.     Public Sub DrewingConicalShell(oPartDoc As Inventor.PartDocument, oDrawingDoc As Inventor.DrawingDocument)
  11.         Dim oSheet As Sheet
  12.         Dim oView As DrawingView
  13.         Dim scale As Double
  14.         Dim oSketch As Sketch
  15.         Dim oTG As TransientGeometry
  16.  
  17.         oTG = g_inventorApplication.TransientGeometry
  18.         oSheet = oDrawingDoc.Sheets.Item(1)
  19.  
  20.         'поворо камеры на 15 градусов по оси Х
  21.         Dim cam As Camera
  22.         cam = g_inventorApplication.TransientObjects.CreateCamera
  23.         cam.SceneObject = oPartDoc.ComponentDefinition
  24.         Dim x As Double
  25.         Dim y As Double
  26.         x = Math.Cos(Math.PI / 12)
  27.         y = Math.Sin(Math.PI / 12)
  28.         cam.Eye = oTG.CreatePoint(0, x, y)
  29.         cam.Target = oTG.CreatePoint(0, -x, -y)
  30.         cam.UpVector = oTG.CreateUnitVector(0, 0, -1)
  31.         cam.ApplyWithoutTransition()
  32.  
  33.         'Создание вида на чертеже с повернутой камеры
  34.         oView = oSheet.DrawingViews.AddBaseView(oPartDoc, oTG.CreatePoint2d(14.8, 10.5), 1 / 5, ViewOrientationTypeEnum.kArbitraryViewOrientation, DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle,, cam)
  35.         'Cоздание вида спереди на чертеже
  36.         'oView = oSheet.DrawingViews.AddBaseView(oPartDoc, oTG.CreatePoint2d(14.8, 10.5), 1 / 5, ViewOrientationTypeEnum.kFrontViewOrientation, DrawingViewStyleEnum.kHiddenLineRemovedDrawingViewStyle)
  37.  
  38.         ' Создание профиля для местного разреза
  39.         oSketch = oView.Sketches.Add
  40.         oSketch.Edit()
  41.         Call oSketch.SketchLines.AddAsTwoPointCenteredRectangle(oTG.CreatePoint2d(0, 0), oTG.CreatePoint2d((oView.Width / oView.Scale / 2) + 1, (oView.Height / oView.Scale / 2) + 1))
  42.         oSketch.ExitEdit()
  43.         Dim oProfile As Profile
  44.         oProfile = oSketch.Profiles.AddForSolid
  45.  
  46.         'выбор кривой для назначения глубины местного разреза
  47.         Dim oDCurve As DrawingCurve
  48.         oDCurve = oView.DrawingCurves.Item(1)
  49.         Dim oColor As Inventor.Color
  50.         oColor = g_inventorApplication.TransientObjects.CreateColor(0, 0, 255) 'Синий
  51.         oDCurve.Color = oColor
  52.         Dim oPointIntent As Point2d
  53.         oPointIntent = oDCurve.StartPoint
  54.         Dim oIntent1 As GeometryIntent
  55.         oIntent1 = oSheet.CreateGeometryIntent(oDCurve, oPointIntent)
  56.  
  57.         'создание местного разреза
  58.         Call oView.BreakOutOperations.Add(oProfile, oIntent1, 0)
  59.  
  60.     End Sub
  61.  




Ссылка на модель
https://yadi.sk/d/kOQZDzUCmsdJaQ

Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Файлы чертежа и модели тут
https://drive.google.com/open?id=1jM3V3DtAmF8jOxyk-kBWYEs7YWup0GUt
Откройте чертеж и запустите код
Дублирую предыдущий код

Код - vb.net [Выбрать]
  1. Imports Inventor
  2. Module Module1
  3.     Sub Main()
  4.         'Получение объекта-Инвентора
  5.         Dim invApp As Application = getInventorApplication()
  6.  
  7.         Dim otg As TransientGeometry = invApp.TransientGeometry
  8.         Dim doc As DrawingDocument = invApp.ActiveEditDocument
  9.         Dim oSheet As Sheet = doc.ActiveSheet
  10.  
  11.         Dim oView As DrawingView
  12.         oView = oSheet.DrawingViews(1)
  13.  
  14.         Dim oSketch As DrawingSketch = oView.Sketches(1)
  15.  
  16.         Dim oProfile As Profile
  17.         oProfile = oSketch.Profiles.AddForSolid
  18.  
  19.         Dim curvs As DrawingCurvesEnumerator = oView.DrawingCurves
  20.         Dim cur As DrawingCurve = curvs(2)
  21.  
  22.         Dim oIntent1 As GeometryIntent = oSheet.CreateGeometryIntent(cur)
  23.  
  24.  
  25.         oView.BreakOutOperations.Add(oProfile, oIntent1, 0)
  26.  
  27.     End Sub
  28.  
  29.  
  30.  
  31.     'Функция доступа к Инвентору
  32.     Private Function getInventorApplication() As Application
  33.         Dim invApp As Inventor.Application
  34.         Try 'Получение ссылки на объекта приложения Inventor
  35.             invApp = TryCast(Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"), Inventor.Application)
  36.         Catch 'Загрузка Inventor
  37.             invApp = TryCast(Activator.CreateInstance(Type.GetTypeFromProgID("Inventor.Application")), Inventor.Application)
  38.             invApp.Visible = True
  39.         End Try
  40.  
  41.         Return invApp
  42.     End Function
  43.  
  44. End Module
  45.  





Оффлайн anton.gorschnevАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 3
Проблемы пошли дальше, при попытке вытащить размеры с модели на повернутый вид.

Код - Visual Basic [Выбрать]
  1. Private Sub nev()
  2. Dim oDrawingDoc As DrawingDocument
  3. Set oDrawingDoc = ThisApplication.ActiveDocument
  4. Dim oSheet As Sheet
  5. Dim oView As DrawingView
  6. Set oSheet = oDrawingDoc.ActiveSheet
  7. Set oView = oSheet.DrawingViews.Item(2)
  8. Dim oDrawingDims As DrawingDimensions
  9. Set oDrawingDims = oSheet.DrawingDimensions
  10. Call oDrawingDims.GeneralDimensions.Retrieve(oView)
  11.  
  12. End Sub
  13.  

Возможно есть метод обновляющий вид на чертеже, после которого эти проблемы уйдут?
P.S. работаю на Inventor 2014


Оффлайн mikazakov

  • ADN
  • *
  • Сообщений: 751
  • Карма: 195
  • Skype: mikazakov@mail.ru
Проблемы пошли дальше, при попытке вытащить размеры с модели на повернутый вид.
Если эскиз откуда размеры извлекаются находится под углом к нашему взгляду, то так оно и будет получаться, хоть пользовательским интерфейсом, хоть через АПИ.
Так что по другому ни как