/// <summary> /// 導波管幅(E面解析用)の有効・無効設定 /// </summary> private void setEnableGUI() { // モード区分 FemSolver.WaveModeDV waveModeDv = WaveModeDv; foreach (RadioButton rbtn in RadioBtnModeDvs) { if (rbtn.Checked) { waveModeDv = (FemSolver.WaveModeDV)rbtn.Tag; break; } } // 導波路構造区分 if (cboxWGStructureDv.SelectedItem == null) { return; } WGStructureDVStruct wgStructureDvStruct = (WGStructureDVStruct)cboxWGStructureDv.SelectedItem; // 導波管幅(E面解析用) bool enabled; enabled = (wgStructureDvStruct.WGStructureDv == FemSolver.WGStructureDV.EPlane2D || (wgStructureDvStruct.WGStructureDv == FemSolver.WGStructureDV.HPlane2D && waveModeDv == FemSolver.WaveModeDV.TM) ); this.textBoxWaveguideWidthForEPlane.ReadOnly = !enabled; // 無効の時ReadOnlyはtrue //this.textBoxWaveguideWidthForEPlane.Visible = enabled; //this.labelWaveguideWidthForEPlane.Visible = enabled; //this.labelWaveguideWidthUnit.Visible = enabled; // TMモードは平行平板のみ対応 enabled = (wgStructureDvStruct.WGStructureDv == FemSolver.WGStructureDV.ParaPlate2D); foreach (RadioButton rbtn in RadioBtnModeDvs) { //rbtn.Enabled = enabled; rbtn.Visible = enabled; } labelWaveModeDv.Visible = enabled; }
/// <summary> /// [実行]ボタンクリックイベントハンドラ /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnRun_Click(object sender, EventArgs e) { // GUIからデータを取得 // 計算範囲 double minFreq = double.Parse(textBoxMinFreq.Text); double maxFreq = double.Parse(textBoxMaxFreq.Text); double deltaFreq = double.Parse(textBoxDeltaFreq.Text); FemSolver.WaveModeDV waveModeDv = WaveModeDv; foreach (RadioButton rbtn in RadioBtnModeDvs) { if (rbtn.Checked) { waveModeDv = (FemSolver.WaveModeDV)rbtn.Tag; break; } } // 導波路構造区分 WGStructureDVStruct wgStructureDvStruct = (WGStructureDVStruct)cboxWGStructureDv.SelectedItem; double waveguideWidthForEPlane = double.Parse(textBoxWaveguideWidthForEPlane.Text); // 要素形状・次数 ElemShapeStruct selectedEs = (ElemShapeStruct)cboxElemShapeDv.SelectedItem; // 線形方程式解法 LinearSystemEqnSolverStruct selectedLs = (LinearSystemEqnSolverStruct)cboxLsEqnSolverDv.SelectedItem; if (maxFreq - minFreq < Constants.PrecisionLowerLimit) { MessageBox.Show("開始と終了が同じか逆転しています"); return; } if (deltaFreq < Constants.PrecisionLowerLimit) { MessageBox.Show("計算間隔が設定されていません"); return; } if (wgStructureDvStruct.WGStructureDv == FemSolver.WGStructureDV.EPlane2D && Math.Abs(waveguideWidthForEPlane) < Constants.PrecisionLowerLimit) { MessageBox.Show("導波路幅(E面解析用)が指定されていません"); return; } //int cnt = (int)((double)(maxFreq - minFreq) / deltaFreq); int cnt = (int)Math.Ceiling((double)(maxFreq - minFreq) / deltaFreq); if (cnt < 2) { //return; cnt = 1; // 1箇所で計算 } // TMモードは平行平板以外では計算できない --> TEモードをセットする if (wgStructureDvStruct.WGStructureDv != FemSolver.WGStructureDV.ParaPlate2D) { if (waveModeDv == FemSolver.WaveModeDV.TM) { //MessageBox.Show("TMモードでは計算できません。TEモードに変更します。", "", MessageBoxButtons.OK); waveModeDv = FemSolver.WaveModeDV.TE; } } // 設定された計算範囲を格納 CalcFreqCnt = cnt; NormalizedFreq1 = minFreq; NormalizedFreq2 = maxFreq; WGStructureDv = wgStructureDvStruct.WGStructureDv; WaveModeDv = waveModeDv; ElemShapeDv = selectedEs.ElemShapeDv; ElemOrder = selectedEs.Order; LsEqnSolverDv = selectedLs.LsEqnSolverDv; WaveguideWidthForEPlane = waveguideWidthForEPlane; DialogResult = DialogResult.OK; }