Реализация RectangularPatternFeatures.Add

Автор Тема: Реализация RectangularPatternFeatures.Add  (Прочитано 9421 раз)

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

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

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Мне в детали нужно сделать массив пробивки, но в описании слишком много параметров и нет примера реализации...
Использую следующий код:
...
Dim oEdge As Edge
Dim oPunchTool As PunchToolFeature
Dim oSMFeatures As SheetMetalFeatures
Set oSMFeatures = oPartCompDef.Features
...
Dim oRectan As RectangularPatternFeature
Set oRectan = oSMFeatures.RectangularPatternFeatures.Add(oPunchTool, oEdge, True, 2, 3)
Достаточно ли параметров я указал и можно ли использовать, в качестве направления ребро от Face?

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Реализация RectangularPatternFeatures.Add
« Ответ #1 : 09-04-2015, 12:14:44 »
Достаточно ли параметров я указал и можно ли использовать, в качестве направления ребро от Face?
Достаточно, можно использовать, НО в качестве первого параметра нужно использовать ObjectCollection...

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #2 : 10-04-2015, 11:05:33 »
Я добавил выштамповку в ObjectCollection - проверил, что добавление выполняется:
Dim oRectan As RectangularPatternFeature
Dim oObCol As ObjectCollection
Set oObCol = ThisApplication.TransientObjects.CreateObjectCollection
oObCol.Add oPunchTool
Set oRectan = oSMFeatures.RectangularPatternFeatures.Add(oObCol, oEdge, True, 2, 3)
Но массив все равно не создается, и ошибок не выдает

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #3 : 15-04-2015, 10:31:33 »
Нашел! После выполнения строки создания пробивки:
Set oPunchTool = oSMFeatures.PunchToolFeatures.Add(oPoints, oiFeatureDef, ugol)Стераются значения переменной oEdge (см. скин)

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #4 : 15-04-2015, 12:54:49 »
Может ли переменная "сбрасываться" из-за увеличения коллекции поверхностей, в следствии выполнения пробивки?

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Реализация RectangularPatternFeatures.Add
« Ответ #5 : 15-04-2015, 18:18:47 »
Но массив все равно не создается, и ошибок не выдает
filat!Я взял пример из АПИ, добавил твои 5 строк, вроде все работает:
Код - Visual Basic [Выбрать]
  1. Public Sub PlacePunchFeature()
  2.     ' Get the active sheet metal document and component
  3.    ' definition of the active document.
  4.    On Error Resume Next
  5.     Dim oPartDoc As PartDocument
  6.     Set oPartDoc = ThisApplication.ActiveDocument
  7.     If Err Then
  8.         MsgBox "A part must be active."
  9.         Exit Sub
  10.     End If
  11.     Dim oSMDef As SheetMetalComponentDefinition
  12.     Set oSMDef = oPartDoc.ComponentDefinition
  13.  
  14.     ' Get the selected face that will be used for the creation
  15.    ' of the sketch that will contain the sketch points.
  16.    Dim oFace As Face
  17.     Set oFace = oPartDoc.SelectSet.Item(1)
  18.     If Err Then
  19.         MsgBox "A planar face must be selected."
  20.         Exit Sub
  21.     End If
  22.     On Error GoTo 0
  23.    
  24.     Dim oEdge As Edge
  25.     Set oEdge = oFace.Edges.Item(1)
  26.    
  27. '    If oFace.SurfaceType = kPlaneSurface Then
  28. '        MsgBox "A planar face must be selected."
  29. '        Exit Sub
  30. '    End If
  31.  
  32.     ' Create a sketch on the selected face.
  33.    Dim oSketch As PlanarSketch
  34.     Set oSketch = oSMDef.Sketches.Add(oFace)
  35.  
  36.     ' Create some points on the sketch.  The model will need to
  37.    ' be of a size that these points lie on the model.
  38.    Dim oPoints As ObjectCollection
  39.     Set oPoints = ThisApplication.TransientObjects.CreateObjectCollection
  40.    
  41.     Dim oTG As TransientGeometry
  42.     Set oTG = ThisApplication.TransientGeometry
  43.  
  44.     Dim oPoint As SketchPoint
  45.     Set oPoint = oSketch.SketchPoints.Add(oTG.CreatePoint2d(-2, -2), True)
  46.     Call oPoints.Add(oPoint)
  47.  
  48.     Dim oSMFeatures As SheetMetalFeatures
  49.     Set oSMFeatures = oSMDef.Features
  50.  
  51.     ' Create an iFeatureDefinition object for a punch tool.
  52.    Dim oiFeatureDef As iFeatureDefinition
  53.     Set oiFeatureDef = oSMFeatures.PunchToolFeatures.CreateiFeatureDefinition( _
  54.         "C:\Users\Public\Documents\Autodesk\Inventor 2015\Catalog\Punches\keyhole.ide")
  55.  
  56.     ' Set the input.
  57.    Dim oInput As iFeatureInput
  58.     For Each oInput In oiFeatureDef.iFeatureInputs
  59.         Dim oParamInput As iFeatureParameterInput
  60.         Select Case oInput.Name
  61.             Case "Length"
  62.                 Set oParamInput = oInput
  63.                 oParamInput.Expression = "1 in"
  64.             Case "Hole_Diameter"
  65.                 Set oParamInput = oInput
  66.                 oParamInput.Expression = "0.5 in"
  67.             Case "Slot_Width"
  68.                 Set oParamInput = oInput
  69.                 oParamInput.Expression = "0.3875 in"
  70.             Case "Fillet"
  71.                 Set oParamInput = oInput
  72.                 oParamInput.Expression = "0.0625 in"
  73.             Case "Thickness"
  74.                 Set oParamInput = oInput
  75.                 oParamInput.Expression = "0.125 in"
  76.         End Select
  77.     Next
  78.  
  79.     Dim oPunchTool As PunchToolFeature
  80.     Set oPunchTool = oSMFeatures.PunchToolFeatures.Add(oPoints, oiFeatureDef, 0#)
  81.    
  82.     Dim oObCol As ObjectCollection
  83.     Set oObCol = ThisApplication.TransientObjects.CreateObjectCollection
  84.     Call oObCol.Add(oPunchTool)
  85.    
  86.     Dim oRectan As RectangularPatternFeature
  87.     Set oRectan = oSMFeatures.RectangularPatternFeatures.Add(oObCol, oEdge, True, 2, 3)
  88.  
  89. End Sub

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #6 : 16-04-2015, 08:03:00 »
Да, приведенный пример отлично работает!
Но как мне выяснить почему в моем коде после пробивки убиваются переменные Edge и Face?
Ведь до выполнения пробивки они полноценно существуют:

Оффлайн Алексей Романов

  • ADN Club
  • **
  • Сообщений: 87
  • Карма: 20
Re: Реализация RectangularPatternFeatures.Add
« Ответ #7 : 16-04-2015, 13:25:44 »
Но как мне выяснить почему в моем коде после пробивки убиваются переменные Edge и Face?
Может просто объекты изменяются? Там геометрия, свойства... Может переменные нужно обновлять?

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #8 : 22-04-2015, 07:51:29 »
Может просто объекты изменяются? Там геометрия, свойства... Может переменные нужно обновлять?
А что означает обновлять? После пробивки поновой получать Edge из ComponentDefinition? Или для обновления переменной есть какая-то другая процедура?

Отмечено как Решение filat 24-04-2015, 13:55:42

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #9 : 24-04-2015, 13:55:37 »
Разобрался! В начале кода была строка  Set sbs = oDoc.ComponentDefinition.SurfaceBodies  - и, почему-то именно она и приводила к убиванию переменных... Переместив ее в конец кода все заработало ногрмально :)

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #10 : 24-04-2015, 14:13:10 »
Но следом за решением предыдущей задачи, появилась следующая: как правильно формулировать команду для создания двух мерного массива?
Так может быть правильно:
Set oRectan = oSMFeatures.RectangularPatternFeatures.Add(oObCol, oEdge, True, 2, 3,,,oEdge, True, 2, 1)Если в качестве тогоже направления использовать тоже ребро, но с другим шагом...

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

  • ADN Club
  • ****
  • Сообщений: 265
  • Карма: 2
Re: Реализация RectangularPatternFeatures.Add
« Ответ #11 : 27-04-2015, 09:30:24 »
Да. я подтверждаю, что данная форма является достаточной!
И мой код полностью работает!