Day14

ブロック積擁壁(後編)

Topへ

Day13へ

Day15へ

はじめに

ブロック積擁壁の計算ソフト作成の続きです。
今回は、重量式擁壁にはなかった新機能を搭載しようと思います。
ただ、その前に乗り越えなければならない壁が・・・

Step1

地獄のExcel出力

image

ついにこの作業が来てしまいました。しかし避けるわけにはいかないので頑張るしかないです。
では早速、フォームデザインです。
画像のとおりメニューバーに追加することにし、名前を「eOutputM」に変更しました。

image

次にエクセルの機能を使えるようにします。
ソリューションエクスプローラーの参照上で右クリックし「参照の追加」を選択します。

image

「COM」を選択し、「Micorosoft Excel --- Object Library」を選択し「OK」ボタンを押します。

image

設定の追加が完了したら、Form1のコードの初めに下記内容を追加します。
「using Excel = Microsoft.Office.Interop.Excel;」
これで、エクセルの操作が可能になります。

image

フォームのメニューバーのファイル・エクセル出力をダブルクリックします。
そうすると、コードが書ける画面になりますので、画像のとおりエクセルに出力するコードを入力します。
コードは、
Excel.Application excelApp = new Excel.Application();
Excel.Workbooks excelBooks = excelApp.Workbooks;
Excel.Workbook excelBook = excelBooks.Add();
Excel.Worksheet sheet = excelBook.Worksheets["sheet1"];
excelApp.Visible = true;
になります。おまじないです。

image

予期せぬエラーが発生してもソフトが強制終了しないように処理します。
「try~catch」文をあらかじめ書いておきます。

image

ここからは、エクセル出力のコードを記載します。
地獄のロードの始まりです。

image

続きになります。
すでに前回のトラウマが襲ってきています。

image

かなりスピードが減退しております。

image

面倒くさい!!!

image

いや----!!

image

ぜんぜん先が見えません。

image

・・・

image

・・・・

image

・・・・・・

image

先が見えてきました。あと少し。

image

もうちょい。

image

ゴー------ル!!!
ということでエクセル出力はここまでになります。

Step2

CAD図の出力

image

今回は、新たな試みとして、CAD図の出力に挑もうと思います。
具体的にはDXFファイルの作成をしていこうと思います。
まずはDXFファイルの中身を知る必要があります。
ということで、今回はフリーソフトのjwcadを使用し、進めていきますので、ソフトのインストールを行います。
jwcadで検索すると、画像のホームページにたどり着きますので、ダウンロードを選択します。

image

画像の赤線部分の「jwcad_net」を今回はインストールしようと思います。

image

「jwcad_net」を選択すると「ダウンロード」フォルダにインストール用の実行ファイルがダウンロードされます。
これをダブルクリックしてインストールします。後の作業割愛します。

image

インストールが完了したら、実際にDXFファイルを一度作成していこうと思います
jwcadを起動させます。

image

jwcadが開いたら、1本適当に線を引いてみます。この状態でDXF形式で保存しようと思います。

image

メニューバーの「ファイル」の中の「DXF形式で保存」を選択します。
後は、名前を付けて保存するだけになります。名前はとりあえず「test.dxf」にしました。

image

保存したDXFファイルをメモ帳などのテキストエディタで開きます。
おいさんの場合はサクラエディタというソフトを使用しています。
開くと文字が画像のように表示されます。

image

最後尾まで移動させると、なんと1180行あります。
しかし、この中で線の描く命令文は、画像の赤の範囲だけのようです。
なので、他の文はそのまま引用し、画像の赤部分のみを設定していけば良いようです。

image

中身の内容確認をしていこうと思いますが、まずこの中の数字の意味を知る必要があります。
これについては、 グループコード に掲載されていますので、一度確認してみてください。

image

このグループコードに照らし合わせて確認すると、線を引く内容は画像のとおりになるようです。
とにかく、ルールとしては、グループコードの番号を指定したあとに、その内容を指定する形式のようで、2行で1セットのようです。

image

次は、2本以上の線がある場合の確認をしてみます。

image

これをテキストエディタで確認してみます。
そうすると、座標の違う3つのグループが出来ていました。

image

次に文字の確認をします。今回は、大きさが異なる2つの文字を確認します。

image

テキストエディタで表示すると画像のとおりになります。
文字サイズは40番で表されるようです。

image

最後に寸法線の確認をしてみます。

image

新たにポイントという図形タイプがありますが、あとは線と文字の組み合わせで構成されています。
なので図形タイプで寸法という種類はないことがわかります。

image

メニューバーの「ファイル」に「DXF出力」を追加します。
名前を「dxfOutM」に変更します。

image

ダブルクリックしコードの画面を表示させます。
まずは、テキストエディタで見た恐ろしく長い「ENTITIES」までのコードを変数に格納していきます。
ここは、気合いの作業になります・・・・

image

画像は最後の格納作業になります。
変数はすでに、1160個になります。

image

テストで、線を1つ描くコードも追加します。
先程のつづきに、画像のとおり変数を追加していきます。

image

これから、ファイルの保存作業をていきます。
そのコード入力作業を楽にするため「Form1」の上部に「using System.IO;」を追記します。

image

今回は、保存先を決めるのにセーブダイアログを使用します。
なので、まずセーブダイアログをインスタンスします。
その下に、ダイアログの条件を設定します。

image

ファイル名とパスが決定している場合、「result == DialogResult.OK」内に移ります。
その中で、「StreamWriter」を使用し、データを保存していきます。
データ数が多いので、繰り返し文を使い1行ごと書き込むコードにしています。

image

この段階で実行してみます。今回はデスクトップ上に保存することにしました。
画像のとおり、「dxf」ファイルが無事作成されました。

image

できた「dxf」ファイルをjw_cadで実行してみます。
無事、線が描けていることが確認できました。

image

確認が出来たので、実際のブロック積擁壁の描画コードを作成していこうと思います。
まず、同じコードを何回も書かなくて済むように、準備として、線、文字及びマークの関数を作ろうと思います。
最初は、線描画関数を作成していきます。
その前に、変数を二つ宣言します。宣言する変数は、dxfファイルの現時点までで使用されている行数を格納する変数と dxfファイルの保存先のパスとファイル名を格納する変数になります。

image

それでは、線描画関数を作成していきます。
まず、関数名ですが、ここはシンプルに「lineDrawing」にしました。
また、この関数の引数は、各端点のXY座標と現時点でのdxfファイルで使用されている行数とdxf ファイルの保存先のパスとファイル名になります。
また、この関数をint型にしている理由は、この関数で使用した行数を含んだ値を戻り値として返したいためにこの型にしました。
関数の中身は、画像のとおりで、この関数内で直接dxfファイルにデータを保存する作業をすることにしました。

image

一度、この関数を使用するための流れを確認するため、「DXF出力」コードを変更していきます。
まず、「dxfDat[1160]」以下を消します。
次に、ファイルダイアログコマンド内で、「sFilename」に保存先のパスとファイル名を格納します。
これで、別の関数内でもこのパスとファイル名を使用することができます。

image

先程消した「dxfDat[1160]」以降の分を再設定します。
線描画の部分は関数を使用し、最後の4行は追加で最後に保存することにします。
以上で、コードの変更が完了となり、同様に線描画をするコードになりました。
これに、その他の描画関数を追加していきます。

image

ここでは、文字描画をする関数を作成します。
内容は、線描画とほぼ同じになります。

image

最後にマークを描画する関数を作成します。
他の関数と内容はほぼ同じになります。

image

関数がすべて揃いましたので、本格的に擁壁描画のコードを書いていきます。
書いていく場所は、「DXF出力」の線描画関数の箇所になります。
ただし、まだ画像の青のプロット箇所の座標計算ができていません。
なので、先にその計算をしていきます。

image

追加座標を格納する変数を宣言します。
宣言場所はいつもの所になります。

image

躯体座標をmm単位に変更したいので、新しく躯体座標格納用の変数も宣言します。

image

と、ここで、一つ変数に格納をしていない躯体寸法を発見してしまいました。
なので、先のその処理をします。
格納していなかった変数は天端コンクリート厚の「topConH5」でした。 「Form2」に移動し、画像のコードを付け加えます。

image

「Form1」の「DXF出力」に戻ります。
躯体座標をmm単位に変更し、新しい変数に格納します。
また、これまで躯体の左下端は座標(0,0)でしたが、基礎の左下端を(0,0)にしたいので 100移動させることにしました。

image

ここでは追加座標を計算し、変数に格納します。

image

座標の再設定が完了しましたので、線描画関数を使用し、作図するコードを入力します。
コードは画像のとおりとなります。

image

この時点で、dxfファイルを確認してみます。
jwcadで開くと、無事作図されていることが確認できました。

image

作図が出来たので、これに引き出し線と文字を追加していきます。
まずは、引き出し線の座標を格納する変数を宣言します。

image

宣言した変数に、計算した座標値を格納します。
引き出し線なので、適当に座標値を決めております。

image

自作の関数を使用して、dxfデータを作成していきます。
今回は、線描画関数だけではなく、マーク描画関数と文字描画関数も使用します。

image

コードの続きになります。

image

引き出し線と文字のコードが完成したので、実際にjwcadで開いてみます。
画像のとおり、うまく描画出来ていると思います。
後は寸法線になるのですが、かなりしんどそうなのでやめることにしました。すみません。

Step3

数量計算書の出力

image

数量計算書をエクセルで出力できるようにしたいと思います。
数量は他の擁壁工と比較できるようにしたいので、20m当たりで算出したいと思います。
では、フォームデザインを行います。
メニューバーの「ファイル」に「数量計算書出力」を追加します。
名前を「quantityOutM」に変更します。

image

フォームのメニューバーのファイル・数量計算書出力をダブルクリックします。
コードが書ける画面になりますので、画像のとおりエクセルに出力するコードを入力します。
コードは、いつもの
Excel.Application excelApp = new Excel.Application();
Excel.Workbooks excelBooks = excelApp.Workbooks;
Excel.Workbook excelBook = excelBooks.Add();
Excel.Worksheet sheet = excelBook.Worksheets["sheet1"];
excelApp.Visible = true;
になります。

image

ここでも、予期せぬエラーが発生してもソフトが強制終了しないように処理しておきます。
「try~catch」文を書いておきます。

image

ここからは、エクセル出力のコードを記載します。
まずは、ページ全体のレイアウトを作成していくことにしました。
画像は、セルの結合→文字入力→罫線表示の順で処理しています。

image

罫線処理の続きです。
まだ途中です。

image

罫線処理の続きです。
これで最後になります。

image

一度実行してみます。
数量計算書のレイアウトの完成になります。

image

ここからは計算内容を表示するコードを入力していきます。
画像は、ブロック積自体の数量計算を表示するコードになります。

image

ここでは胴込コンクリートの数量計算表示のコードを入力していきますが、ブロックの種類によりコンクリート量は変わります。
なので、標準的な控35cmのみ数量計算表示をするようにし、その他はブランクにするようにします。
標準的な数量は、 参考資料 より0.22m3/m2を使用することにします。
画像は、胴込コンクリートの数量計算を表示するコードになります。

image

続いて裏込コンクリートの数量計算を表示するコードに移ります。
裏込コンクリートの断面積の計算は面倒なので座標法で求めることにします。
具体的には、以前使用した「 CoordinateMethod」クラスで面積を求めるようにします。
ただし、その前に座標を改めて計算しておく必要があります。計算は「DXF出力」と同様の計算を します。

image

裏込めコンクリートの数量計算のコードになります。

image

天端めコンクリートの数量計算のコードになります。

image

基礎コンクリートの数量計算のコードになります。

image

裏込材の数量計算のコードになります。

image

擁壁工指針によると水抜きパイプは、2~3m2に1箇所の割合で設けることが望ましいとされている。
なので、今回は、3m2ごとに水抜きパイプを設ける計算としています。
画像がそのコードになります。

image

吸出防止材の数量計算のコードになります。
水抜きパイプの設置箇所数により求まる数量になります。

image

伸縮目地の数量計算のコードになります。
擁壁工指針によると、無筋コンクリート構造の場合、10m以下の間隔で設けることとされています。
なので、今回は10mごとに設ける計算としています。

image

基礎砕石の数量計算のコードになります。

image

数量計算のコードはすべて完了したので、出来映えを確認してみます。
あっさりしていますが、しっかり数量が表示されています。

Step4

ツールストリップ

image

「Form1」のデザイン画面に戻り、フォーム上部によく見る小さなアイコンを作成しようと思います。
ツールボックスの「toolStrip」を選択し、フォーム上にドラックアンドドロップします。

image

「Button」を選択します。

image

ボタン表示に変わりましたので、そのプロパティの「image」を変更します。
アイコン画像はフリー素材をWebページで探して使用しています。

image

作成したボタンにコードを入力します。
コードは、すでに作成されているコードを転用するだけなので、その関数を指定すれば終了になります。
画像は例として「計算実行」を転用する場合のコードになります。

Step5

実行ファイルの作成

image

実行ファイル化(exe化)をしていきます。その前に、アイコンの設定をします。
画面右上のソリューションエクスプローラー内にある「ProPerties」を開きます。
その中の「アイコンとマニフェスト」に自分で作成したアイコン画像を指定します。
これをしておかないと、実行ファイルアイコンが表示されません。

image

画面中央上部にある部分を「Release」に変えます。
それから、メニューバーのビルドから「ブロック積擁壁のリビルド」を選択します。
これで、実行ファイル化が行われます。
作成された実行ファイルは、リビルド後に自動作成されている「binフォルダ」内の「Releaseフォルダ」内にあります。
以上ですべての作業が終了になります。かなり時間がかかり疲れました・・・