見出し画像

Inventor / iLogic : 二面幅の作成ルール

スパナ掛けに用いられる2面幅の形状を作成するiLogicルールを作りました。

軸方向の位置を示す面と、軸径を表すエッジを選択すると、自動的に2面幅を作成します。まず、2面幅用のiFeatureが配置されます。その後、選択した軸の径から規格で決められた寸法にiFeatureのサイズを更新します。2面幅のサイズ公差も同時に設定しています。

画像1

図面に寸法を入れる時に「モデル注記を取得」を使うと、サイズ公差付きの寸法が配置されます。

操作手順は、動画をご覧ください。

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

役に立った!という記事にはぜひサポートお願いします。サポート頂けると大変に励みになります。