SolidWorks 使い方 入門

ソリッドワークス

株式会社 サンエツ

class SolidWorksMacroの解説と編集
少し役に立ちそうなアプリケーションの作成(その2)
前回下準備したコードを編集します。保存しておいた図面テンプレートを開いて「マクロの編集」 で「updatewrite.csproj」を選択してください。
  1. いつも通りオブジェクトの作成と変数の分を記入します。

    ModelDoc2 swDoc = null;
    DrawingDoc swDrawing = null;
    bool boolstatus = false;
    int longstatus = 0;

  2. のちほどリビジョンテーブルの追加日時を取得するために、 テーブルアノテーションを作成しておきます。

    TableAnnotation myTable = null;;

  3. 変数 swDocに現在アクティブなドキュメントを代入します。

    swDoc = ((ModelDoc2)(swApp.ActiveDoc));
  4. シート情報を入手したり設定したりするための入れ物の作成です。

    Sheet currentSheet = null;
  5. リビジョンテーブルのアノテートアイテムを入手するための入れ物を作成します。

    RevisionTableAnnotation myRevisionTable = null;
  6. 現在のアクティブな図面操作を可能にします。

    swDrawing = ((DrawingDoc)(swDoc));
  7. 「GetCurrentSheet()」このメソッドは現在アクティブな図面シートを取得します。

    currentSheet = ((Sheet)(swDrawing.GetCurrentSheet()));
  8. 「RevisionTable」このプロパティはこの図面シートのリビジョンテーブルを入手します。

    myRevisionTable = ((RevisionTableAnnotation)(currentSheet.RevisionTable));
  9. 「AddRevision("")」はリビジョンテーブルにリビジョンを付加するメソッドです。

    longstatus = myRevisionTable.AddRevision("");
  10. 「Note」は注記オブジェクトです。注記の情報を入手することができます。 ここで注記オブジェクトを作成します。

    Note myNote = null;
  11. アノテートアイテムのオブジェクトを作成します。

    Annotation myAnnotation = null;
  12. 図面にリビジョン記号を挿入します。「InsertRevisionSymbol(0, 0)」の第一引数はX座標、第二引数 はY座標です。

    myNote = ((Note)(swDrawing.InsertRevisionSymbol(0, 0)));
  13. リビジョンの値(注記)をアノテートアイテムに変換して変数に格納します。

    myAnnotation = ((Annotation)(myNote.GetAnnotation()));
  14. リビジョンテーブルを選択出来たらboolstatusにtrueを代入します。メモ帳に記録したSelectByID2 の名前を第一引数に入れてください。私の環境では「"詳細アイテム17@シート1"」になっています。

    boolstatus = swDoc.Extension.SelectByID2("詳細アイテム17@シート1", "REVISIONTABLE", 0, 0, 0, false, 0, null, 0);
  15. 最初のほうで作成した「myTable」は以下のコードで作成するようです、 調べてみましたがよくわかりませんでした。サンプルをコピペしました。都合のよいときに私に教えてください。

    myTable = (TableAnnotation)(swDoc.ISelectionManager.GetSelectedObject5(1));
  16. myTableに値が入ったらテーブルの行数を調べて最後の行の文字列を取得します。

    int rowcount = myTable.RowCount;
    string dt = myTable.get_Text(rowcount - 1, 2);
  17. アノテーションテーブルを選択します。選択が完了するとboolstatusがtrueになります。 コチラもメモ帳で保存した名前を記入してください。ちなみに私の環境では「"詳細アイテム21@シート1",」 になっています。

    boolstatus = swDoc.Extension.SelectByID2("詳細アイテム21@シート1", "ANNOTATIONTABLES", 0, 0, 0, false, 0, null, 0);
  18. 今度はカスタムテーブルですのでTableAnnotationの入れ物を初期化します。S

    TableAnnotation myTable1 = null;
  19. 次のコードもサンプルをコピペしました。よくわかりませんが、このコードがないと動きません。

    myTable1 = ((TableAnnotation)(swDoc.ISelectionManager.GetSelectedObject5(1)));
  20. myTable1に先ほど取得した文字列を表示します。「set_Text」メソッドは文字列をセットします、 第一引数は行のインデックス、第二引数はコラムのインデックス、第三引数に文字列をセットします。

    myTable1.set_Text(1, 0, dt);
  21. 選択状態を解除します。

    swDoc.ClearSelection2(true);
コードの全文を掲載しておきます。
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;
using System;
using System.Windows.Forms;
namespace updatewrite.csproj
{
  public partial class SolidWorksMacro
  {
    public SldWorks swApp;
    public void Main()
    {
   //メッセージボックスを表示する
   DialogResult result = MessageBox.Show("更新日を変更しますか?",
    "確認",MessageBoxButtons.YesNo,
    MessageBoxIcon.Exclamation);
   if (result ==DialogResult.Yes )
    {
      //何もしない
    }
   else if (result == DialogResult.No)
    {
      return;
    }
    try
    {
    ModelDoc2 swDoc = null;
   DrawingDoc swDrawing = null;
    bool boolstatus = false;
    int longstatus = 0;
    //TableAnnotationの入れ物を作成します。
    TableAnnotation myTable = null;
    //現在アクティブなドキュメントを返します。
    swDoc = ((ModelDoc2))(swApp.ActiveDoc));
    //シート情報を入手、設定し、部品表(BOM)
    //のようなシート上のオブジェクトにアクセスする関数を提供します。
    Sheet currentSheet = null;
    //リビジョンテーブルアノテートアイテムにアクセスできます。
   RevisionTableAnnotation myRevisionTable = null;
    //DrawingDocオブジェクトはModelDoc2 オブジェクトにあるすべての関数にアクセスします。
    swDrawing = ((DrawingDoc))(swDoc));
    //GetCurrentSheetは現在アクティブな図面シートを取得します。
    currentSheet = ((Sheet))(swDrawing.GetCurrentSheet()));
    //RevisionTableはこの図面シートのリビジョンテーブルを入手します。
    myRevisionTable = ((RevisionTableAnnotation))(currentSheet.RevisionTable));
    //リビジョンテーブルにリビジョンを付加します。
    longstatus = myRevisionTable.AddRevision("");
    //標準注記の情報を入手することができます。
    Note myNote = null;
     //アノテートアイテム
    Annotation myAnnotation = null;
    //図面に改訂記号を挿入します。
   myNote = ((Note))(swDrawing.InsertRevisionSymbol(0, 0)));
    //特定のアノテートアイテムのアノテーション(Annotation)オブジェクトを返します。
    myAnnotation = ((Annotation))(myNote.GetAnnotation()));
    //リビジョンテーブルを選択出来たらboolstatusにtrueを代入
    boolstatus = swDoc.Extension.SelectByID2("詳細アイテム17@シート1", "REVISIONTABLE", 0, 0, 0,
    false, 0, null, 0);
    if (boolstatus == false)
    {
    MessageBox.Show("リビジョンテーブルが見つかりませんでした。");
    }
    //myTableを定義します。
    myTable = (TableAnnotation)(swDoc.ISelectionManager.GetSelectedObject5(1));
    //リビジョンテーブルの行数を変数に代入します。
    int rowcount = myTable.RowCount;
    string dt = myTable.get_Text(rowcount - 1, 2);
    //今までの選択を解除します。
    swDoc.ClearSelection2(true);
    //アノテーションテーブルを選択します。
   boolstatus = swDoc.Extension.SelectByID2("詳細アイテム21@シート1", "ANNOTATIONTABLES",
    0, 0, 0,     false, 0, null, 0);
    if (boolstatus == false)
    {
    MessageBox.Show("カスタムテーブルが見つかりませんでした。");
    }
    //TableAnnotationの入れ物の作成
    TableAnnotation myTable1 = null;
    //myTable1の定義
    myTable1 = ((TableAnnotation)(swDoc.ISelectionManager.GetSelectedObject5(1)));
    //アノテーションテーブルのdtに日付を入力
    myTable1.set_Text(1, 0, dt);
    //今までの選択状態を解除
    swDoc.ClearSelection2(true);
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
   }
  }
 }
「文字、文字、文字、文字、文字~~~~」で非常につまらないページになってしまいました。 次のページでは、今回作成したコードを設置して実際に使用できるようにします。
前のページに戻る場合はコチラ↓
基本操作編INDEXに戻る場合はコチラ↓
株式会社 サンエツ
〒252-1121 神奈川県綾瀬市小園883-1
TEL :0467-76-7228
FAX :0467-77-3448
E-mail :info@sanetu.main.jp
URL : http://sanetu.main.jp