SolidWorks 使い方 入門
ソリッドワークス3Dプリンターのデータ作成、修正、造形 株式会社 サンエツ
図面に同じ注記を連続記入(その2)解説編
前回作成した「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));
「class Form1」を開いてください。 class Form1のフィールドに変数を用意しておきます。
//記録用のファイルを定数にする
conststringOFIILE=
@"\drawdata.txt";
ListViewItemlvi;
//Shift_JISエンコード変換
EncodingsjisEnc=
Encoding.GetEncoding(
"Shift_JIS");
//ブーリアン値
Booleanbl1;
「Form1_Shown」イベントプロシージャの中で、一番はじめに「規格」「コメント」「親番号」のデータファイルを読み込んで、 行ごとに配列にしておきます。
//ファイルを読み込んで配列にする
string[]line1=
File.ReadAllLines(
Application
.StartupPath+OFIILE,sjisEnc);
さらに一行をカンマで区切って配列変数「itm」に格納します。 これを行の数だけループしながら配列にしていきます。
//ファイルの一行をカンマで区切ったら配列に組み込む
string
[] itm;
//
for
(int
i = 0; i <= line1.Length - 1; ++i)
{
//ファイルの一行を配列にする
itm = line1[i].Split();
配列にした値を「listshow」に渡して「listView1」に表示する準備をします。
//falseにしてlistshowのファイルの書き込みを実行しない
bl1=false
;
//配列の各値をメソッド「listshow」に渡してlistView1に表示
listshow(itm[0], itm[1], itm[2], bl1);
新規の文字列の場合、 「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);
}
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();
}
}
フィールドに「class SolidWorksMacro」に渡すプロパティの値の変数とForm2のインスタンスを記入しておきます。 もちろんコチラはプログラムの先頭のフィールドに書いても構いません。
//プロパティに格納する変数
string _mn1;
string _sub1;
string _sub2;
//Form2のインスタンス
Form2 f2 =
new Form2
();
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();
}
各プロパティに値を入力していきます。 サンプルはすべて分けて記入しましたが、 全部stringですから一つにまとめる方がいいでしょう。 これで、図面に挿入する注記の値が決まりました。
public string
mn
{
get
{return
_mn1;}
}
public string sub1
{
get {
return _sub1;}
}
public string sub2
{
get {
return _sub2;}
}
500ミリ秒ごとにtimer1_Tickが呼び出されます。 但しここにクローズのメソッドを書いていますので、 一回呼び出されると終了です。
private void
timer1_Tick(object
sender, EventArgs
e)
{
timer1.Enabled =
false;
this
.Close();
f2.Close();
}