[C# SolidWorks API] 材料特性を指定する
SolidWorksで材料特性を指定する方法は,大きく分けて次の2つがあります.
1.材料ライブラリを利用する方法
2.個別に材料定数を設定する方法
2つの方法は,互いに独立したものではなく組み合わせて用いることもできます.たとえば,弾性係数だけを個別に指定して,その他の材料特性は材料ライブラリを利用して設定することも可能です.
APIを利用して,それぞれの方法で材料特性を指定する方法をみていきましょう.
以下では,Simulation スタディにアクセスするためのICWStudy型のメンバ変数をstudyとしています.Simulation スタディの作成方法については,[C# SolidWorks API] Simulation スタディを作るを参考にしてください.
1.材料ライブラリを利用する方法
コンポーネントの番号[componentNum],部品番号[bodyNum]と材料の名前[materialName]を指定して,選択した部品に材料特性を指定するapplyMaterialメソッドを定義してみましょう.
(注:コンポーネントとは,複数のソリッドボディからなる部品(マルチボディ部品)のことだと思います.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
void applyMaterial(int componentNum, int bodyNum, string materialName) { string materialLibrary = swApp.GetExecutablePath() + @"\lang\english\sldmaterials\solidworks materials.sldmat"; ICWSolidManager SolidMgr = (ICWSolidManager)study.SolidManager; int errorCode = 0; ICWSolidComponent SolidComponent = SolidMgr.GetComponentAt(componentNum, out errorCode); if (errorCode == 0) { ICWSolidBody SolidBody = (ICWSolidBody)SolidComponent.GetSolidBodyAt(bodyNum, out errorCode); errorCode = (int)SolidBody.SetLibraryMaterial(materialLibrary, materialName); } else { checkStatus("applyMaterial", errorCode); } } |
3行目
材料特性ライブラリの場所(パス)を指定しています.
5行目
ソリットボディとコンポーネント(Component)にアクセスするためのオブジェクトを取得しています.
ICWSolidManager
8行目
指定した番号[ComponentNum]に対応する要素(Component)を取得しています.
指定した要素が取得できた場合,errorCodeは0となります.
GetComponentAt(int componentNum, out int errorCode)
12行目
コンポーネントの中から,指定した番号[bodyNum]に対応する個体部品(SolidBody)を取得しています.
指定した要素が取得できた場合,errorCodeは0となります.
GetSolidBodyAt(int bodyNum, out int errorCode)
14行目
材料ライブラリの場所[materialLibrary]と材料名[materialName]を指定して材料特性を設定しています.
材料が設定できると,errorCodeは1になります.(なぜ,これだけ成功すると1?)
SetLibraryMaterial(string materialLibrary, string materialName)
checkStatusは,どのメソッドでどんなerrorCodeが返されたのかチェックするために定義したメソッドです.
2.個別に材料定数を設定する方法
コンポーネントの番号[componentNum],部品番号[bodyNum]を指定して,選択した部品に材料特性を設定するapplyNewMaterialメソッドを定義してみましょう.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
void applyNewMaterial(int componentNum, int bodyNum) { ICWSolidManager SolidMgr = (ICWSolidManager)study.SolidManager; int errorCode = 0; ICWSolidComponent SolidComponent = SolidMgr.GetComponentAt(componentNum, out errorCode); if (errorCode == 0) { ICWSolidBody SolidBody = (ICWSolidBody)SolidComponent.GetSolidBodyAt(bodyNum, out errorCode); CWMaterial CWMat = (CWMaterial)SolidBody.GetDefaultMaterial(); CWMat.MaterialUnits = 0; CWMat.MaterialName = "Alloy Steel"; CWMat.SetPropertyByName("EX", 210000000000.0, 0); CWMat.SetPropertyByName("NUXY", 0.28, 0); CWMat.SetPropertyByName("GXY", 79000000000.0, 0); CWMat.SetPropertyByName("DENS", 7700, 0); CWMat.SetPropertyByName("SIGXT", 723825600, 0); CWMat.SetPropertyByName("SIGYLD", 620422000, 0); CWMat.SetPropertyByName("ALPX", 1.3E-05, 0); CWMat.SetPropertyByName("KX", 50, 0); CWMat.SetPropertyByName("C", 460, 0); errorCode = SolidBody.SetSolidBodyMaterial(CWMat); checkStatus("material@applyMaterial", errorCode); } else { checkStatus("component@applyMaterial", errorCode); } } |
材料ライブラリを利用する場合と同様にして,10行目で材料特性を設定するソリットボディのオブジェクトを取得しています.
12行目
材料特性を設定するためにICWMaterial型のオブジェクト取得しています.
GetDefaultMaterial
13行目
材料定数の単位を指定しています.
MaterialUnits
指定できる単位の種類は,swsUnitSystem_eに定義されています.
15行目
定義する材料の名前を設定しています.
MaterialName
16行目 – 24行目
材料定数を名前と値のペアで設定しています.
3つ目の引数は,材料定数の温度依存性の有無を指定しています(swsMaterialTemperature_e).
SetPropertyByName
26行目
材料特性をソリッドボディに適用しています.
SetSolidBodyMaterial
errorCodeについては,swsMaterialErrorWarning_eを参照してください.
どのような材料定数が設定できるのかについては,GUIで確認するのが簡単かと思います.Partを右クリックして,設定/編集 材料特性を選択します.
材料特性のリストが表示されます.
材料定数の名前は,材料ライブラリsolidworks materials.sldmatをテキストエディタで開くと見つけることができます.
ファイルの中身は,次のようになっています.
<EX displayname=”Elastic modulus” value=”204999998381.838750″ />
<NUXY displayname=”Poisson’s ratio” value=”0.290000″ />
この記述から,EXが弾性係数,NUXYがポアソン比を表す名前であることがわかります.(もっと賢い方法があるかもしれません.)
まとめ
材料ライブラリから材料特性を設定する方法を説明しました.
個別に材料定数を設定する方法を説明しました.
材料定数の名前は,solidworks materials.sldmatファイルを開くことで確認できました.
Post Thumbnail by Geoff Hutchison