Inventor / iLogic : 二面幅の作成ルール
スパナ掛けに用いられる2面幅の形状を作成するiLogicルールを作りました。
軸方向の位置を示す面と、軸径を表すエッジを選択すると、自動的に2面幅を作成します。まず、2面幅用のiFeatureが配置されます。その後、選択した軸の径から規格で決められた寸法にiFeatureのサイズを更新します。2面幅のサイズ公差も同時に設定しています。
図面に寸法を入れる時に「モデル注記を取得」を使うと、サイズ公差付きの寸法が配置されます。
操作手順は、動画をご覧ください。
iFeatureのモデルなどのデータセットは、こちらから。
iLogic のコードは、こちら
Sub Main
' yFeature001_二面幅
' Ver 1.0 By Yoji Tanaka At 21/06/27
' 二面幅の iFeature を配置するルール
' ピックした軸の軸径から表を検索し、他のパラメータを取り出し、設定する。二面幅の公差も設定する。
' 図面ドキュメント作成時、モデル注記を取得を使えば、公差の入った寸法が挿入される
Dim invApp As Inventor.Application = ThisApplication
Dim oPartDoc As Inventor.PartDocument = invApp.ActiveDocument
Dim oUOM As Inventor.UnitsOfMeasure = oPartDoc.UnitsOfMeasure
iLogicVb.UpdateWhenDone = True 'ルールを実行した後でUPDATE
'ドキュメント定義オブジェクトの取得
Dim oPartDef As Inventor.PartComponentDefinition = oPartDoc.ComponentDefinition
'フィーチャコレクションオブジェクトの取得
Dim oFeatures As Inventor.PartFeatures = oPartDef.Features
'iFeatureのユーザルートパスを取得
Dim iFeaturesUserRoutePath As String = invApp.iFeatureOptions.UserRootPath
' 二面幅のiFeatureのパスを設定
Dim iFeatureName As String = "yFeature001.ide"
Dim iFeaturePath As String = iFeaturesUserRoutePath + "\" + iFeatureName
' Create an iFeatureDefinition object.
Dim oiFeatureDef As Inventor.iFeatureDefinition = oFeatures.iFeatures.CreateiFeatureDefinition(iFeaturePath)
'平面1のジオメトリInputを取得
Dim oInput_Plane As Inventor.iFeatureSketchPlaneInput = GetInputByName("平面1", oiFeatureDef)
oInput_Plane.PlaneInput = invApp.CommandManager.Pick(SelectionFilterEnum.kAllPlanarEntities, oInput_Plane.Prompt)
'軸径を取得(cm)
Dim oCirEdge As Inventor.Edge = invApp.CommandManager.Pick(SelectionFilterEnum.kAllCircularEntities, "軸径エッジを選択")
Dim ShaftDir As Double = Math.Round(oCirEdge.Geometry.Radius * 2, 2)
'EXCELの表からパラメータを取得する
Dim SheetFileName As String = "iFeatureTable_二面幅.xlsx"
Dim SheetPath= iFeaturesUserRoutePath + "\" + SheetFileName
Dim i As Integer = GoExcel.FindRow(SheetPath, "2面幅表", "DD", "=", ShaftDir*10)
Dim DD As String = GoExcel.CurrentRowValue("DD")
Dim WIDTH As String = GoExcel.CurrentRowValue("WIDTH")
Dim LENGTH As String= GoExcel.CurrentRowValue("LENGTH")
Dim UPPER As String= GoExcel.CurrentRowValue("UPPER")
Dim LOWER As String = GoExcel.CurrentRowValue("LOWER")
Dim ANGLE As String = GoExcel.CurrentRowValue("ANGLE")
' Create the iFeature.
Dim oiFeature As Inventor.iFeature = oFeatures.iFeatures.Add(oiFeatureDef)
'軸径(DD)を変更
Dim oPara As Inventor.Parameter
Dim oParaName As String = oiFeature.Name + ":DD"
For Each oPara In oiFeature.Parameters
If oPara.Name = oParaName Then
oPara.Expression= DD
Exit For
End If
Next
'LENGTHを変更
oParaName = oiFeature.Name + ":LENGTH"
For Each oPara In oiFeature.Parameters
If oPara.Name = oParaName Then
oPara.Expression = LENGTH
Exit For
End If
Next
'ANGLE を変更
oParaName = oiFeature.Name + ":ANGLE"
For Each oPara In oiFeature.Parameters
If oPara.Name = oParaName Then
oPara.Expression = ANGLE
Exit For
End If
Next
'二面幅(WIDTH)を変更
oParaName = oiFeature.Name + ":WIDTH"
For Each oPara In oiFeature.Parameters
If oPara.Name = oParaName Then
oPara.Expression = WIDTH
oPara.Tolerance.SetToDeviation(UPPER, LOWER)
Exit For
End If
Next
End Sub
Private Function GetInputByName(InputName As String, oiFeatureDef As Inventor.iFeatureDefinition) As iFeatureInput
' iFeature のInputオブジェクトを名前で検索して返す関数
Dim oInput As iFeatureInput = Nothing
For Each oInput In oiFeatureDef.iFeatureInputs
'Dim oParamInput As iFeatureParameterInput
Select Case oInput.Name
Case InputName
GetInputByName = oInput
Exit Function
End Select
Next
GetInputByName = Nothing
End Function
役に立った!という記事にはぜひサポートお願いします。サポート頂けると大変に励みになります。