SolidWorks 使い方 入門

ソリッドワークス
メール

3Dプリンターのデータ作成、修正、造形 株式会社 サンエツ

SolidWorks 図面に注記を入れます。
マクロで図面に注記を入れよう。(その2)
前回は主に「class SolidWorksMacro」の解説でした、 今回はFormを追加して使い勝手のよい方向に作成します。
先に動作の確認を動画で見てください。

図面に同じ注記を連続記入(その2)解説編

  1. 前回作成した「class SolidWorksMacro」のコードを下記のように変更してください。 「f1.mn」「f1.sub1」「f1.sub2」は「class Form1」のリストビューで選択した値です。 「System.Environment.NewLine」を入れることにより改行して3行になります。

    myNote = (Note)(swDoc.InsertNote(f1.mn + System.Environment.NewLine + f1.sub1 + System.Environment.NewLine + f1.sub2));


  2. 「class Form1」を開いてください。 class Form1のフィールドに変数を用意しておきます。

    //記録用のファイルを定数にする
    conststringOFIILE= @"\drawdata.txt";
    ListViewItemlvi;
    //Shift_JISエンコード変換
    EncodingsjisEnc= Encoding.GetEncoding( "Shift_JIS");
    //ブーリアン値
    Booleanbl1;


  3. 「Form1_Shown」イベントプロシージャの中で、一番はじめに「規格」「コメント」「親番号」のデータファイルを読み込んで、 行ごとに配列にしておきます。

    //ファイルを読み込んで配列にする
    string[]line1=
    File.ReadAllLines( Application .StartupPath+OFIILE,sjisEnc);


  4. さらに一行をカンマで区切って配列変数「itm」に格納します。 これを行の数だけループしながら配列にしていきます。

      //ファイルの一行をカンマで区切ったら配列に組み込む 
        
    string [] itm;           
         
    // 
         
    for  (int  i = 0; i <= line1.Length - 1; ++i) 
         { 
         
    //ファイルの一行を配列にする 
         
    itm = line1[i].Split();


  5. 配列にした値を「listshow」に渡して「listView1」に表示する準備をします。

        //falseにしてlistshowのファイルの書き込みを実行しない 
       
    bl1=false
       
    //配列の各値をメソッド「listshow」に渡してlistView1に表示 
       
    listshow(itm[0], itm[1], itm[2], bl1); 


  6. 新規の文字列の場合、 「button1_Click」イベントハンドラで各「textBox」に入力した値をlistshowメソッドの引数に割り当てて listView1に表示とともにファイルに書き込んで次回に表示できるようにします。

      private void  button1_Click(object  sender, EventArgs  e) 
      { 
       
    string  str1 = textBox1.Text; 
       
    string  str2 = textBox2.Text; 
       
    string  str3 = textBox3.Text; 
       
    //bl1をtrueにしてlistshowの書き込みを実行する 
       
    bl1 =  true
       
    //listView1を操作するメソッド 
       
    listshow(str1, str2, str3, bl1); 
       }


  7. textBoxの値を新規に表示します。 さらにブール値が「true」の場合はファイルの末尾に書き込みます。

    重要:「Application.StartupPath」のパスは前回も記入しましたが 「C:\Program Files (x86)\Common Files\microsoft shared\VSTA\8.0\x64」 です。

      private void  listshow(string  st1, string  st2, string  st3, Boolean  bl) 
      { 
       ListViewItem  lvi = new  ListViewItem();
       lvi = listView1.Items.Add(st1); 
       lvi.SubItems.Add(st2);
       lvi.SubItems.Add(st3); 
       
    if (bl ==  true
        { 
    //ファイルの書き込み 
          
    StreamWriter  writer = new  StreamWriter( Application .StartupPath + OFIILE,  
          
    true , sjisEnc); 
          
    //ファイルの末尾に以下の項目を追加 
          
    writer.WriteLine(st1 +  + st2 +  + st3); 
          writer.Close(); 
        } 
     }


  8. フィールドに「class SolidWorksMacro」に渡すプロパティの値の変数とForm2のインスタンスを記入しておきます。 もちろんコチラはプログラムの先頭のフィールドに書いても構いません。

      //プロパティに格納する変数 
     
    string _mn1; 
     
    string _sub1; 
     
    string _sub2; 
     
    //Form2のインスタンス 
     
    Form2 f2 =  new Form2 ();


  9. listView1_DoubleClickイベントハンドラの中でダブルクリックすると変数「listvewnum」にインデックスが入力されますので 「listView1.Items」のインデックスとして利用します。 またこのイベントハンドラの中でタイマーを起動して「Form2」の表示時間を決めます、 サンプルでは500ミリ秒にしてあります。

      private void  listView1_DoubleClick(object  sender, EventArgs  e) 
     { 
       
    //一番目の列が選択されたらインデックスをを取得する 
       
    int  listvewnum = listView1.SelectedItems[0].Index; 
       
    //取得したインデックスでアイテムを取得,プロパティ変数に書き込む           
       
    _mn1 = listView1.Items[listvewnum].Text; 
       _sub1 = listView1.Items[listvewnum].SubItems[1].Text; 
       sub2 = listView1.Items[listvewnum].SubItems[2].Text; 
       timer1.Interval = 500; 
       timer1.Enabled = 
    true
       f2.Show();             
     }


  10. 各プロパティに値を入力していきます。 サンプルはすべて分けて記入しましたが、 全部stringですから一つにまとめる方がいいでしょう。 これで、図面に挿入する注記の値が決まりました。

           public string  mn  
         { 
           
    get {return  _mn1;} 
         } 
           
    public string sub1 
         { 
           
    get  return _sub1;} 
         } 
           
    public string sub2 
         { 
           
    get  return _sub2;} 
         }  


  11. 500ミリ秒ごとにtimer1_Tickが呼び出されます。 但しここにクローズのメソッドを書いていますので、 一回呼び出されると終了です。

      private void  timer1_Tick(object  sender, EventArgs  e) 
       { 
          timer1.Enabled = 
    false
          
    this .Close(); 
          f2.Close(); 
       } 

完成したら以下の動画と比べてみてください。
今回は図面に注記を自動挿入するコードを書いてみました。 このコードも、項目の追加はできても削除の機能がありません。 改良のよちが山ほどありますので、時間のある方は改造してみてください。 また例外処理は何もしてありませんのでこちらも付けたほうがいいですね。
前のページに戻る場合はコチラ↓
基本操作編INDEXに戻る場合はコチラ↓
LINEで送る