-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFOR DEVELOPERS.txt
127 lines (101 loc) · 8.12 KB
/
FOR DEVELOPERS.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
連絡は9期近藤恵休(LINE:えきゅー)まで
とりあえずプログラム本体だけ入れましたが、もしなにかが足りないとか有れば教えて下さい。
C#あんまり使ったことなかったのでかなり無駄のあるプログラムだと思います。
多分C#触ったことある人(しかもGUI制作)はほぼいないと思いますが、Cさえ知っていれば大丈夫なはずです。Cに対応した関数や表記法があるはずなのでググれば出ると思います。
○実行環境
言語はC#、実行環境はVisualStudio2017です。
授業では多分コマンドラインからプログラム実行してると思いますが、VisualStudioという統合開発環境をインストールするのがおすすめです。C,C++,pythonなどをこのソフトだけで簡単に開発できます。
○プログラムの概要
using.... Cでいうところの#include、これがないと動かない関数が多々ある。
namespace FTE_EngineCEA
{
class main
{
... ここでソフトを初期化やら起動やらしてる。自分でなにか書き換える事はまず無い。
}
class Window : Form
{
... 諸々の変数などを定義
public Window()
{
... ここでGUIの基本骨格を決めてる。ボタンを押すと何かが起きるやつはイベントという処理で関数を呼び出して行う。
}
... 諸々の関数など
}
}
○レイアウトの変更(ボタン・テキストボックスの移動・追加など)
まず、変数の定義をしているところに
//ボタン
const int buttonNum = 5;
Button[] button = new Button[buttonNum];
みたいなやつがあると思います。基本的には、const int numとnum個の要素をもった配列になってます。
numはそのままそのオブジェクトの個数、配列はオブジェクトそのものです。
次に、public Window()内の
//ボタン
this.button[].Location=...
this.button[].Text=...
と書いてあるところを見ます。
これは見たままで、Locationでオブジェクトのx-y座標を指定していて、Textでオブジェクトに表示する文字を指定しています。
型によっては.Fontとかあったりしますが、多分見ればわかります。
つまり、オブジェクトを追加するならnumを増やして、.Locationなどを追加していく。
移動するなら、.Locationなどの値を変えることでできます。
ただし、ラジオボタンだけはグループボックスとセットで使います。グループボックスでラジオボタンを2つで1組として管理できるようになります。
○主要関数
ボタンを押すことで実行される関数は、
//イベント
this.button[0].Click += new EventHandler(saveINP);
this.button[1].Click += new EventHandler(runCEA);
this.button[2].Click += new EventHandler(saveAsXLSX);
this.button[3].Click += new EventHandler(calcIndividually);
this.button[4].Click += new EventHandler(openFileByExcel);
と書いてある通りです。それぞれの関数について軽く解説します。
オブジェクトを配列で処理したせいでかなり見にくいところがあります。すいません。
・saveINP
テキストボックスに入力された数値や文字列を元に.inpファイルを作成します。
流れとしては、変数定義→例外処理(数値入力欄に数値以外が入力されてるなど)→(問題があればエラー表示して終わり)→数値、文字列の処理→.inpで保存 となっています。
テキストボックスに入力されたものはそれが数値であっても文字列として処理されるので、double.Parseなどで数値に変換して使います。
・runCEA
NASA-CEAを起動します。
ファイル名が指定されていれば、cea起動→ceaのウィンドウをアクティブに→ファイル名を入力、エンター
という処理をすることで、わざわざ手動でcea上でファイル指定をする必要がなくなります。
これによりファイル名.inpを元にした計算結果が書かれたファイル名.outが作成されます。
.inp→.outでの計算は完全にNASA-CEAで完結しているので、中で何をしているかは全くわかりません。
・saveAsXLSX
.out内のデータから必要なデータを取り出して.xlsxとして保存します。
ここが一番めんどいとこです。getReadingIndex(),makeCalcTemplate(),inputDatasToCells()を含んでます。これらの中身についてはここでは触れないでおきます。
まず、どうやって.outから必要なデータを取り出すかと言うと、例えばo/fの値が知りたい時、
getReadingIndexに"o/f=",OUTfileAllDataを指定します。OUTfileAllDataには.outの全データ(文字列)が入ってます。
すると、getReadingIndexは"o/f="という文字列の"="が全データ内の何番目に位置しているかを返します。
そしてその位置を元にsaveAsXLSXはo/f=1,2,3,4...みたいに続いているところを見て、コンマがいくつあるかを計算します。コンマ数はo/fの値の数と比例しているので、それを元にo/fの値を格納する配列を作成します。その後、コンマで区切りながら愛列に数値を格納していきます。
barについても同じように処理します。
その後、makeCalcTemplate()で計算シートを作成し、inputDatasToCells()でそれぞれのo/f,barに対応したCSTAR,GAMMAの値を取り出し、xlsxで保存します。
・calcIndividually
o/f,barを1つずつしか指定してないのにxlsxをわざわざ作るのは嫌なので直接メッセージボックスで表示します。
1つずつしか指定せずに.inp,.outを作成しているという前提なので、.outの全データ内で"CSTAR","GAMMA"を見つけて値を持ってきてるだけです。
・openFileByExcel
ファイル名.xlsxをexcelで開きます。
ファイルがなければ当然エラーなので例外処理とエラー表示をしてます。
○その他の関数
・getReadingIndex
検索したい文字列、.outのデータ、何番目に出てくる物を探すか、を与えるとその文字列の位置を返します。
.outのデータと検索したい文字列を1文字ずつ見ていき、連続で合えばOKになります。
CSTARやGAMMAはデータ内に何回も出てくるので、dataStartingNumで何番目に出てくるものを探すかを指定します。
・inputToCells
与えた文字列を、シートの(x,y)に入力します。
あまり意味のない関数。
・makeCalcTemplate
テンプレファイルを複製して計算シートの作成と初期値の自動入力をしています。
・inputDatasToCells
.outファイルからCSTAR,GAMMAの値を取り出してセルに入れる。自動入力のための数値調整をして計算シートに入力する。計算条件を入力する。xlsxファイルに罫線をかけたりなどの調整をする。などをしています。
CSTAR,GAMMAでそれぞれ1回ずつsaveAsXLSXから呼び出されています。
今見たら僕ですらアルゴリズムがよくわかりませんでしたが、多分ここいじることはないと思うので大丈夫だと思います。(新しく別の値が欲しいとかがない限り)
多分欲しいデータ別にgetReadingIndexを呼んで' 'や'\n'で区切ってデータ取ってるんだと思います。
・radioButtonState
ラジオボタンが押されたときに呼び出され、radioButtonManagerをよぶ。
ラジオボタンが押されるとテキストボックスなどのレイアウトが変わるので、それを管理するradioButtonManagerをきれいに書くための関数です。(多分)
・radioButtonManager
ラジオボタンの行、列を与えると今選択されているラジオボタンに応じてレイアウトを変更します。
・readSettings
DefaultSettings.txtを読み込みます。本当はiniでしたかったけどできなかった記憶。
・toolTipInitialize
ツールチップの表示時間とかの設定。