SolidWorks 使い方 入門

ソリッドワークス

株式会社 サンエツ

SolidWorks API 使い方入門
SolidWorks API 簡単な部品表の作成と利用(その2)
簡単な部品表を図面に添付して部品表の内容を保存します。
コードを作成する前にアセンブリーを作成して、部品表を作成できる図面を作成しておいてください。
作成できたら図面は開いたままにしておいてください。 この図面の中のビューを部品表を作成するために利用します。
  1. 「マクロ編集」をクリックして先ほど保存したファイルを開きます。
  2. VB.NETで保存した場合は「partcount.vbproj」C#で保存した方は「partcount.csproj」を選択します。
  3. コードはインポート分とメインメソッドとソリッドワークスの入れ物の変数しかありません。
  4. Public swApp As  SldWorks」の分をフィールドの先頭に移動してコメントは 削除してください。
  5. フィールドに部品表の値をしまっておくリストのコードを入れましょう。
    Shared _ar  As New  Collections.Generic.List( Of String)
  6. C#のリストは下記のようになります。
    「 System.Collections.Generic.< string > _ar  
    new  System.Collections.Generic.< string>();
  7. 「Visual Studio」と違って名前空間を入れないとエラーになります。先回も書きましたが インテリセンスが出なかったり、説明文が訳のわからない英語だったり「Visual Studio」 と比べるとかなり使い勝手がよくありません。
  8. リストは「Shared」で宣言してありますので、コードが実行されるたびに追加されて しまうので実行したらクリアしてください。
コードはこのようになります。VB.NET
Imports SolidWorks.Interop.sldworks
Imports  SolidWorks.Interop.swconst
Imports  System.Runtime.InteropServices
Imports System
Partial Class  SolidWorksMacro 
   
Public swApp  As SldWorks 
   
Shared  _ar As New  Collections.Generic.List(Of String
   
Public Sub main() 
       _ar.Clear() 
   
End Sub
End Class

コードの編集の続きです。例外処理は一切入れていませんので、 トライ構文などを使って例外をキャッチする必要があります。

お決まりの文句をいれます。

 Dim swDoc  As ModelDoc2 =  Nothing 
 Dim 
swDrawing As  DrawingDoc = Nothing 
 Dim 
boolstatus  As Boolean  False 
 Dim 
longstatus As Integer  = 0 
 swDoc = 
CType (swApp.ActiveDoc, ModelDoc2) 
 swDrawing = 
CType (swDoc, DrawingDoc)

図面上の「図面ビュー1」を選択状態にします。「図面ビュー1」が無いとエラーになります。

boolstatus = swDrawing.ActivateView("図面ビュー1")

選択した図面ビューの入れ物の作成

Dim swActiveView  As View =  Nothing

「ModelDoc2」を図面操作ができるように「DrawingDoc」に変換します。

swDrawing = CType (swDoc, DrawingDoc)

選択状態の「DrawingDoc」を先ほど作成した「View」に変換します。

swActiveView = CType (swDrawing.ActiveDrawingView, View)

部品表を作成するための入れ物の作成をします。

Dim swBOMTable  As  BomTableAnnotation =  Nothing

図面ビューの部品表を挿入します。引数がいっぱいあります。

1番目の引数:  Falseを指定すると引数に指定したX、Y座標に部品表が設置されます。
2番目の引数:  配置するX座標(座標は適当に図面の角になるように入れました)
3番目の引数:  配置するY座標(座標は適当に図面の角になるように入れました)
4番目の引数:  アンカーの種類
5番目の引数:  BOMテーブルの種類
6番目の引数:  コンフィギュレーションの名前
7番目の引数:  使いたいテンプレートのパスとファイル名(下記のパスは私の環境です)

 swBOMTable = CType (swActiveView.InsertBomTable2(False , _ 
0.318, 0.287, 
CType (swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft,  Integer), _ 
CType (swBomType_e.swBomType_PartsOnly,  Integer), "デフォルト" , _ 
"C:\ProgramData\SolidWorks\SolidWorks 2014\templates\PartPlate.sldbomtbt" ), BomTableAnnotation)


部品表の値を取得するために「TableAnnotation」を作成します。

 Dim swtable  As  TableAnnotation = swBOMTable

あとは取得した値をリストごと別クラス(次のページで作成します)に渡します。

'部品表の値をリストにcsv形式でadd 
For  As Integer  = 0 To  swtable.RowCount - 1 
 _ar.Add(swtable.Text(i, 0)  & "," &  swtable.Text(i, 3)) 
Next 
Dim 
fd As New  fildata
'Class fildataにリストごと渡す 
fd.writfle(_ar)
「Class SolidWorksMacro」のコード全文です。
Imports SolidWorks.Interop.sldworks
Imports  SolidWorks.Interop.swconst
Imports  System.Runtime.InteropServices
Imports System
Partial Class  SolidWorksMacro 
   
Public swApp  As SldWorks 
   
Shared  _ar As New  Collections.Generic.List(Of String
   
Public Sub main() 
       _ar.Clear() 
       
Dim  swDoc As  ModelDoc2 = Nothing 
       Dim 
swDrawing As  DrawingDoc = Nothing 
       Dim 
boolstatus As Boolean  False 
       Dim 
longstatus As Integer  = 0 
       swDoc = 
CType (swApp.ActiveDoc, ModelDoc2) 
       swDrawing = 
CType(swDoc, DrawingDoc) 
       boolstatus = swDrawing.ActivateView("図面ビュー1") 
       
Dim  swActiveView As  View = Nothing 
       
swDrawing =  CType(swDoc, DrawingDoc) 
       swActiveView = 
CType (swDrawing.ActiveDrawingView, View) 
       
Dim  swBOMTable As  BomTableAnnotation =  Nothing 
       
swBOMTable = CType (swActiveView.InsertBomTable2(False , _ 
       0.318, 0.287, 
CType (swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft,         Integer), _ 
       
CType (swBomType_e.swBomType_PartsOnly,  Integer),"デフォルト" , _ 
        "C:\ProgramData\SolidWorks\SolidWorks2014\templates\PartPlate.sldbomtbt" ),
       BomTableAnnotation) 
       
Dim  swtable As  TableAnnotation = swBOMTable 
       
'部品表の値をリストにcsv形式でadd 
       
For  As Integer  = 0 To  swtable.RowCount - 1 
           _ar.Add(swtable.Text(i, 0)  & "," &  swtable.Text(i, 3)) 
       
Next 
       Dim 
fd  As New fildata 
       
'Class fildataにリストごと渡す 
       
fd.writfle(_ar) 
   
End Sub
End Class
今回は「Class SolidWorksMacro」の編集をしました。全部を解説できませんでしたので必要なところ はヘルプを見てください。但し英語ですので「ビーング君」や「グーグル君」に翻訳してもらってください。 本来はデータ処理のクラスから作成する方がわかりやすかったのですが、次のページでデータ処理 のクラスを作成します。
前のページに戻る場合はコチラ↓
基本操作編INDEXに戻る場合はコチラ↓
株式会社 サンエツ
〒252-113 神奈川県綾瀬市小園883-1
TEL :0467-76-7228
FAX :0467-77-3448
E-mail :info@sanetu.main.jp
URL : http://sanetu.main.jp