private void button3_Click(object sender, EventArgs e) { Bmodel MM = CurModel; CheckRes CR = CheckTable; string Cursec = cb_secs.SelectedItem.ToString(); int iSec = 5; if (Cursec.Contains(" ")) { string temp = Cursec.Remove(Cursec.IndexOf(' ')); iSec = Convert.ToInt32(temp);//取得截面号 } FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "请选择文件存储位置"; if (fbd.ShowDialog() == DialogResult.OK) { string curPath = fbd.SelectedPath; int i = 0; foreach (BSections sec in CurModel.sections.Values) { List <int> curElems = CheckTable.GetElemsBySec(ref MM, sec.Num);//当前截面信息 if (curElems.Count == 0) { continue; } string FileName = Path.Combine(curPath, sec.Name + ".txt"); CodeCheck.WriteSecCheckRes(ref MM, ref CR, FileName, sec.Num); i++; } MessageBox.Show(i.ToString() + "个截面数据输出完成。"); } }
//---------------------------------------------------------------------- // 押されたキーを拾う // (KeyPressは特殊キーは拾えない) private void Form_KeyPress(object sender, KeyPressEventArgs e) { if (hangul_keyboard_instance == null) { // Hangul keyboard未表示 if (CodeCheck.IsAlpah(e.KeyChar)) { if (this.inputArea.Focused == true) { // NOP } else { // 入力エリアにフォーカスがなくとも英数字は // 入力可能とする this.inputArea.Text += e.KeyChar; } } return; // Hangul keyboard未表示時はかならずここで抜ける } // Hangul keyboardが表示されていて,かつ本体側にフォーカスがある場合 // キーを拾う処理 if (CodeCheck.IsAlpah(e.KeyChar)) { inputKey += e.KeyChar; } else { return; } this.inputArea.Text = HYAM.Lingua.Hangul.KeyString2Hangul(inputKey);; }
private void bt_CheckGo_Click(object sender, EventArgs e) { MainForm mmf = this.Owner as MainForm;//主窗口 ModelForm1 mf = mmf.ModelForm; TextBox messagebox = mmf.MessageTool.Tb_out; MidasGenModel.model.Bmodel mm = mf.CurModel; if (tb_Elems.Text.Length == 0) { lb_out.Text = "提示:没有指定单元号!"; } List <int> eles = SelectCollection.StringToList(tb_Elems.Text); int num = eles.Count;//选择单元数 int i = 1; mmf.MessageTool.Tb_out.AppendText(Environment.NewLine + "************单元验算开始************"); mmf.MessageTool.Tb_out.AppendText(Environment.NewLine + " 开始验算"); foreach (int ele in eles) { //mf.CheckTable.CheckElemByNum(ref mm, ele); CodeCheck.RefreshDesignPara(ref mm, mf.CheckModel, ele); CodeCheck.CalDesignPara_lemda(ref mm, ele); CodeCheck.CalDesignPara_phi(ref mm, ele, 1); //计算y向轴压稳定系数 CodeCheck.CalDesignPara_phi(ref mm, ele, 2); //计算z向轴压稳定系数 mf.CheckTable.CheckElemByNum_N(ref mm, ele, ref mf.CheckModel); string info = " " + i.ToString() + " of " + num.ToString() + " 验算完成!"; //ReplaceLastLine(ref messagebox, info); mmf.MessageTool.Tb_out.AppendText(Environment.NewLine + info); i++; } mmf.MessageTool.Tb_out.AppendText(Environment.NewLine + "************单元验算结束************"); }
/// <summary> /// 按单元更新截面设计参数 /// </summary> /// <param name="iEle">单元号</param> public void UpdataDesignPara(int iEle) { Bmodel MM = CurModel; CheckRes CR = CheckTable; int num = iEle;//单元号 double len_y = Convert.ToDouble(tb_leng1.Text); double len_z = Convert.ToDouble(tb_leng2.Text); double Net_r = Convert.ToDouble(tb_Net_r.Text); double Gamma_y = Convert.ToDouble(tb_gamma1.Text); double Gamma_z = Convert.ToDouble(tb_gamma2.Text); double Betla_my = Convert.ToDouble(tb_betla1.Text); double Betal_mz = Convert.ToDouble(tb_betla2.Text); double Betal_ty = Convert.ToDouble(tb_betla3.Text); double Betal_tz = Convert.ToDouble(tb_betla4.Text); double Phi_by = Convert.ToDouble(tb_phibx.Text); double Phi_bz = Convert.ToDouble(tb_phiby.Text); double F = Convert.ToDouble(tb_f.Text); //强度设计值 double Gamma_re = Convert.ToDouble(tb_GammaRe.Text); //承载力调整系数 double Xita = Convert.ToDouble(tb_Xita.Text); //截面影响系数 SecCategory cat = SecCategory.b; switch (comboBox1.SelectedIndex) { case 0: cat = SecCategory.a; break; case 1: cat = SecCategory.b; break; case 2: cat = SecCategory.c; break; case 3: cat = SecCategory.d; break; default: break; } //更新其它参数 FrameElement fele = CurModel.elements[num] as FrameElement; fele.DPs.SecCat_y = cat;//截面类别 fele.DPs.SecCat_z = cat; fele.DPs.Ratio_Anet = Net_r; fele.DPs.Gamma_y = Gamma_y; fele.DPs.Gamma_z = Gamma_z; fele.DPs.Belta_my = Betla_my; fele.DPs.Belta_mz = Betal_mz; fele.DPs.Belta_ty = Betal_ty; fele.DPs.Belta_tz = Betal_tz; fele.DPs.fy = F;//强度设计值 fele.DPs.Gamma_re_1 = Gamma_re; fele.DPs.Gamma_re_2 = Gamma_re; fele.DPs.Yita = Xita;//截面影响系数 //更新长细比 CodeCheck.CalDesignPara_lemda(ref MM, num, len_y, len_z); //更新受压稳定系数 CodeCheck.CalDesignPara_phi(ref MM, num, 1); CodeCheck.CalDesignPara_phi(ref MM, num, 2); }
// (*1) this.htmltext // true : <br> は1個のwordTable // false : <, br, > と3個のwordTableになる //---------------------------------------------------- // 文字種を判定 private CharCategory GetCharCategory(Char ch) { // 例外的な判定 if (ch == '-') { return(CharCategory.Letter); // ハイフンは英字扱い } if (CodeCheck.IsHangul(ch)) { return(CharCategory.Hangul); } else if (CodeCheck.IsKanji(ch)) { return(CharCategory.Kanji); } else if (CodeCheck.IsKatakana(ch)) { return(CharCategory.Katakana); } else if (CodeCheck.IsPunctuation(ch)) { return(CharCategory.Punctuation); } else if (CodeCheck.IsHiragana(ch)) { if (ch == 'を') { return(CharCategory.HiraganaWo); // "を"は単独で分離。特別扱い } else { return(CharCategory.Hiragana); } } else if (Char.IsSeparator(ch)) { return(CharCategory.Separator); } else if (Char.IsControl(ch)) { return(CharCategory.Control); } else if (Char.IsDigit(ch)) { return(CharCategory.Digit); } else if (Char.IsLetter(ch)) { return(CharCategory.Letter); } return(CharCategory.Other); }
//---------------------------------------------------------------------- private bool InputTextIsHangul(string searchword) { // if( CodeCheck.IsAlpah(searchword) || CodeCheck.IsHangul(searchword) ){ // return true; // }else{ // return false; // } // OSの言語依存にする(2008.12.30) // 入力がハングルなら InputTextIsHangul true // 入力が漢字・ひらがな・カタカナならfalse // // 入力が数字・英語の場合は,OSに依存。 // ・OSが"ja-JP"ならtrue(ハングル扱い) // ・OSが"ja-JP"以外ならfalse if (CodeCheck.IsHangul(searchword)) { return(true); } if (this.cultureName == "ja-JP") { if (CodeCheck.IsAlpah(searchword) || CodeCheck.IsDigit(searchword) ) { return(true); } if (CodeCheck.IsHiragana(searchword) || CodeCheck.IsKanji(searchword) || CodeCheck.IsKatakana(searchword) ) { return(false); } } else { if (CodeCheck.IsAlpah(searchword) || CodeCheck.IsDigit(searchword) ) { return(false); } if (CodeCheck.IsHiragana(searchword) || CodeCheck.IsKanji(searchword) || CodeCheck.IsKatakana(searchword) ) { return(false); } } return(true); }
private void TSMI_WriteEleRes_byEle_Click(object sender, EventArgs e) { Bmodel mm = this.ModelForm.CurModel; CheckRes CR = this.ModelForm.CheckTable; string CurDir = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName; string myFile = Path.Combine(CurDir, "CodeCheck_byEle.txt"); //输出验算结果 CodeCheck.WriteAllCheckRes2(ref mm, ref CR, myFile); MessageTool.Tb_out.AppendText(Environment.NewLine + "验算文件写出到:" + myFile); //用记事本打开 System.Diagnostics.Process.Start("notepad.exe", myFile); }
private void button5_Click(object sender, EventArgs e) { BLoadComb com = CurModel.LoadCombTable.getLoadComb(LCKind.STEEL, "sGen2"); ElemForce ef = CurModel.CalElemForceComb(com, 4); SecForce sf = ef.Force_i; FrameElement fe = CurModel.elements[4] as FrameElement; BSections sec = CurModel.sections[fe.iPRO]; double s1 = CodeCheck.CalPointStrength_YW(sf, sec, 1, fe.DPs); double s2 = CodeCheck.CalPointStrength_YW(sf, sec, 2, fe.DPs); double s3 = CodeCheck.CalPointStrength_YW(sf, sec, 3, fe.DPs); double s4 = CodeCheck.CalPointStrength_YW(sf, sec, 4, fe.DPs); return; }
//输出所有构件验算参数设置 private void bt_ParaOut_Click(object sender, EventArgs e) { Bmodel MM = CurModel; CheckRes CR = CheckTable; SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "请输入结果文件存储位置"; sfd.Filter = "txt 文件(*.txt)|*.txt|All files (*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { CodeCheck.WriteCheckPara(ref MM, ref CR, sfd.FileName); } }
//读取截面设计设置参数 private void button7_Click(object sender, EventArgs e) { Bmodel MM = CurModel; CheckRes CR = CheckTable; OpenFileDialog OPD = new OpenFileDialog(); OPD.Title = "选择截面验算参数文件路径"; OPD.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);//获取我的文档 OPD.Filter = "txt 文件(*.txt)|*.txt|All files (*.*)|*.*"; if (OPD.ShowDialog() == DialogResult.OK) { CodeCheck.ReadCheckPara(ref MM, ref CR, OPD.FileName); } }
//------------------------------------------------------------------------ // 押されたキーを拾う private void Form_KeyPress(object sender, KeyPressEventArgs e) { if (CodeCheck.IsAlpah(e.KeyChar)) { // this.kj_form.inputKey = // HYAM.Lingua.Hangul.Hangul2KeyString(this.kj_form.inputArea.Text); this.kj_form.inputKey += e.KeyChar; } else { return; } this.kj_form.inputArea.Text = HYAM.Lingua.Hangul.KeyString2Hangul(this.kj_form.inputKey);; }
//---------------------------------------------------------------------- // 押されたキーを拾う // (KeyPressは特殊キーは拾えない) private void Form_KeyPress(object sender, KeyPressEventArgs e) { if (CodeCheck.IsAlpah(e.KeyChar)) { if (this.inputArea.Focused == true) { // NOP (普通に入力できるため,ここでは何もしない) } else { // 入力エリアにフォーカスがなくとも英数字は // 入力可能とする this.inputArea.Text += e.KeyChar; } } }
private void button1_Click(object sender, EventArgs e) { Bmodel MM = CurModel; CheckRes CR = CheckTable; SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "请输入结果文件存储位置"; sfd.Filter = "txt 文件(*.txt)|*.txt|All files (*.*)|*.*"; if (sfd.ShowDialog() == DialogResult.OK) { int num = Convert.ToInt32(textBox12.Text); //UpdataDesignPara(num);//更新单元设计参数 CodeCheck.WriteElemCheckRes(ref MM, ref CR, sfd.FileName, num); } }
//------------------------------------------------------------------ private WordChain WordDivider(WordTable wTable) { WordChain wc1 = null; #if DEBUG_LOG KJ_Analyzer.WriteDebugLog("WordDivider"); #endif // 辞書検索なしの助詞チェック if (KJ_dict.inputIsHangul) { wc1 = KJ_pp.CheckPPwithoutDictKr(wTable); } // 3文字の「ハングルまたは漢字」なら特別チェック if (wTable.word.Length == 3 && (CodeCheck.IsHangul(wTable.word) || CodeCheck.IsKanji(wTable.word)) ) { WordChain wcThree = Check3Chars(wTable); if (wcThree != null) { return(wcThree); } } // 全体でmatchしないなら部分文字列で検索(再起 語分解あり) WordChain wc2 = null; wc2 = WordPartProc(wTable); // wtは最後の語テーブル。未変換なら再調査 // WordChain wc3 = CheckLastWord(wChain, wTable); // costが小さい方を採用 WordChain rtnWc = WordChain.GetMinimunCostChain(wc1, wc2); return(rtnWc); }
//------------------------------------------------------------------------ // 辞書に見つからなかった語を自動変換する // ハングル <---> カタカナ private WordTable ConvAutoConv(WordTable wt) { if (wt.IsTranslated()) { return(wt); // 変換済みなら何もしない } if (!this.sTrans.AutoConv) { return(wt); // AutoConvをoffにしている場合は何もせず抜ける。 } if (KJ_dict.inputIsHangul) { // K-->J方向 if (CodeCheck.IsHangul(wt.word)) { wt.transWord = Hangul.Hangul2Kana(wt.word); } } else { // J-->方向 if (wt.charCategory == CharCategory.Katakana) { // カタカナの場合 wt.transWord = Kana.Kana2Hangul(wt.word); } else { if (wt.charCategory == CharCategory.Hiragana) { // ひらがなの場合 wt.transWord = Kana.Hira2Hangul(wt.word); } } } return(wt); }
//-------------------------------------------------------------------- // 語の変換 (語の分解あり) // 語分解で翻訳済み末尾がずれることがあるのでWordTableを返す // ABCDEF という語に対し、 // ABCDE + F // ABCD + EF // ABC + DEF // : : // と調べていき、最小コストの訳語がとれる分割を採用する // static public WordChain WordPartProc(WordTable wt) { SearchResult sResult; String str = wt.word; if (wt == null) { return(null); } if (wt.word != null && wt.word.Length == 1) // 1文字検索はしない { return(null); } if (wt.IsTranslated() || wt.IsDigit()) { return(null); // 翻訳済みまたは 数字なら 何もしない } #if DEBUG_LOG KJ_Analyzer.WriteDebugLog("WordPartProc:" + wt.word); #endif // 再起に備え,まず完全一致で検索 sResult = KJ_dict.SearchFull(str); if (sResult != null) { wt.SetResult(sResult); // 全体でmatch WordChain wc = new WordChain(wt); return(wc); } // 部分語の2文字は分割しない if (wt.word != null && wt.word.Length == 2 && wt.divided != Divided.Non) { return(null); } // 3文字の「ハングルまたは漢字」なら特別チェック if (wt.word != null && wt.word.Length == 3 && wt.divided != Divided.Non && // 部分語の3文字語は除外 (CodeCheck.IsHangul(wt.word) || CodeCheck.IsKanji(wt.word)) ) { WordChain wc3 = Check3Chars(wt); if (wc3 != null) { return(wc3); } } // int target_len=2; // 2005.09.03 やっぱり1文字まで切らないとだめだ int target_len = 1; int str_len = str.Length; int minimumCost = 9999; WordChain minimumCostChain = null; // 前から1文字ずつ落としつつ,検索。 while (true) { int start = str_len - target_len; // if( start <= 1 ){ // 2005.09.03 if (start <= 0) { break; } // 文字列を分割する // str --> str2 + str3 // String str2 = str.Remove (start, target_len ); // String str3 = str.Substring(start, target_len ); // 前から分割に変えた(2005.08) String str2 = str.Remove(target_len, start); String str3 = str.Substring(target_len, start); //あとできれいに // 前と後ろを、それぞれ検索 WordChain wc2 = DividedWordSearch(str2); WordChain wc3 = DividedWordSearch(str3); #if DEBUG_LOG KJ_Analyzer.WriteDebugLog("str2/str3:" + str2 + "/" + str3); #endif WordTable wt2, wt3; if (wc2 == null) { wt2 = new WordTable(str2); wc2 = new WordChain(wt2); } if (wc3 == null) { wt3 = new WordTable(str3); wc3 = new WordChain(wt3); } // 分割情報設定 if (wt.divided == Divided.Non) { wc2.Head.divided = Divided.Lead; wc3.Head.divided = Divided.Trail; } if (wt.divided == Divided.Lead) { wc2.Head.divided = Divided.Lead; wc3.Head.divided = Divided.Middle; } if (wt.divided == Divided.Middle) { wc2.Head.divided = Divided.Middle; wc3.Head.divided = Divided.Middle; } if (wt.divided == Divided.Trail) { wc2.Head.divided = Divided.Middle; wc3.Head.divided = Divided.Trail; } // wc2とwc3をつなぐ wc2.Add(wc3); // wc2---wc3 のコストを計算 int divChainCost = wc2.GetChainCost(); if (minimumCost >= divChainCost) { minimumCostChain = wc2; minimumCost = divChainCost; //最小コストの更新 } #if DEBUG_LOG KJ_Analyzer.WriteDebugLog("wc2:" + wc2.Head.word + "," + wc2.Head.Cost); KJ_Analyzer.WriteDebugLog("wc3:" + wc3.Head.word + "," + wc3.Head.Cost); KJ_Analyzer.WriteDebugLog("divChainCost:" + divChainCost); #endif target_len++; } // end of while // Chain中のwordが全て翻訳できていない if (minimumCostChain == null || (minimumCostChain != null && !minimumCostChain.IsTranslated())) { return(null); } // 翻訳できていない部分chainを再起実行 WordTable subT = minimumCostChain.Head; while (subT != null) { if (!subT.IsTranslated()) { WordChain subWc = WordPartProc(subT); if (subWc != null) { WordTable wNext = subT.next; minimumCostChain.Swap(subT, subWc); subT = wNext; continue; } } subT = subT.next; } return(minimumCostChain); }
//---------------------------------------------------------------------- // 1つの語のデータの表示 (通常のKJ_dict用) // private string DisplayResult(string searchword, DocumentData sd) { StringBuilder rtn_str = new StringBuilder(); rtn_str.Length = 0; string key_from = ""; // 検索語 string key_to = ""; string word_from = ""; string word_to = ""; string detail = ""; string ex = ""; string cost = ""; string src = ""; string pos = ""; // 品詞情報、格変化 (暫定) String indent = ""; // 入力がハングルならfromがkey1(ハングル) // 入力が漢字・ひらがな・カタカナならfromがkey2(日本語) // // 入力が数字・英語の場合は,OSに依存。 // ・OSが"ja-JP"ならfromがkey1(ハングル) // ・OSが"ja-JP"以外ならfromがkey2(日本語) if (this.inputIsHangul) { key_from = sd.GetData("key1"); key_to = sd.GetData("key2"); word_from = sd.GetData("word1"); word_to = sd.GetData("word2"); ex = sd.GetData("ex1"); cost = sd.GetData("cost2"); } else { key_from = sd.GetData("key2"); // Jp key_to = sd.GetData("key1"); // Kr word_from = sd.GetData("word2"); word_to = sd.GetData("word1"); ex = sd.GetData("ex2"); cost = sd.GetData("cost1"); } // 表示の見た目を整える。インデントつけたり、括弧をつけたり。 // 入力語の表示 rtn_str.Append(key_from); if (word_from != "") { // 詳細情報は以下の場合だけ // ・韓国OSのとき // または // ・デバッグ情報表示時 if (this.cultureName == "ko-KR" || CodeCheck.IsKanji(word_from) || Setting.debugInfo) { // 詳細情報。ハングルの旧漢字、日本語の読み rtn_str.Append(" 〔 " + word_from + " 〕"); } } rtn_str.Append("\n"); // K-->Jの時の入力ハングルのカナ表記の表示 if (this.Setting.withPronunciation) { if (this.inputIsHangul) { if (this.Setting.PronunciationType == 1) { string kana = Hangul.Hangul2Kana(key_from); rtn_str.Append(" (" + kana + ")\n"); } else { rtn_str.Append(indent + " (" + sd.GetData("pronun1") + ")\n"); } } } // もしあれば品詞情報 pos = MakePosString(sd); if (pos != null && pos != "") { rtn_str.Append(indent + "【 " + pos + " 】\n"); } // もしあれば原形表示 string root = ""; if (inputIsHangul) { root = sd.GetData("root1"); } else { root = sd.GetData("root2"); } if (root != "") { string rootname = Pos.conjugationName("conjugation_root"); rtn_str.Append(indent + "〔(" + rootname + ") " + root + "〕\n"); } // 結果の表示 rtn_str.Append(indent + key_to); // 詳細情報は以下の場合だけ // ・韓国OSのとき // または // ・デバッグ情報表示時 if (word_to != "") { if (this.cultureName == "ko-KR" || CodeCheck.IsKanji(word_to) || Setting.debugInfo) { rtn_str.Append(" 〔 " + word_to + " 〕"); // 詳細情報。ハングルの旧漢字、日本語の読み } } rtn_str.Append("\n"); // J-->Kの時の結果ハングルのカナ表記の表示 if (this.Setting.withPronunciation) { // 表示の設定がされているときだけ if (!this.inputIsHangul) { if (this.Setting.PronunciationType == 1) { string kana = Hangul.Hangul2Kana(key_to); rtn_str.Append(indent + " (" + kana + ")\n"); } else { rtn_str.Append(indent + " (" + sd.GetData("pronun1") + ")\n"); } } } // その他付加情報 detail = MakeDetailString(sd); if (detail != null && detail != "") { rtn_str.Append(indent + "( " + detail + " )\n"); } if (ex != "") { rtn_str.Append(indent + "Ex. " + ex + "\n"); } // 「デバッグ情報表示」 を選んだ場合 if (Setting.debugInfo) { src = sd.GetData("src"); if (src != "") { rtn_str.Append(indent + "src:" + src + "\n"); } if (cost != "") { rtn_str.Append(indent + "cost:" + cost + "\n"); } string pos2 = sd.GetPos(); // posの生データ if (pos2 != "") { rtn_str.Append(indent + "pos:" + pos2 + "\n"); } } rtn_str.Append("\n"); prev_keyword = key_from; // 記憶 return(rtn_str.ToString()); }
//--------------------------------------------------------------------- // 完全一致で辞書を引く // hashがあればそちら優先 // // dict_small_w.Searchのラッパー。 // KJ_trans(KJ_form2/KJ_browser)用 // static public SearchResult SearchFull(String str) { if (inputIsHangul) { // K-->Jモードの時はひらがなカタカナ漢字はそのまま返す。 // KJ_form2/KJ_browserで韓日翻訳方向でひらがなをハングル化しないように if (CodeCheck.IsHiragana(str) || CodeCheck.IsKatakana(str) || CodeCheck.IsKanji(str)) { return(null); // そのまま返す } } else { if (CodeCheck.IsHangul(str)) { return(null); // そのまま返す } } if (KJ_dict.HashAvailable) { // Hashを使用する場合 SearchResult hashedResult = (SearchResult)KJ_dict.dictHash[str]; if (hashedResult == null) { // nop } else { // 既に辞書引き済み if (hashedResult.return_code == -1) { return(null); } else { return(hashedResult); } } } // 本当の辞書引き SearchResult result = dict_instance_w.Search(SearchType.full, str); if (KJ_dict.HashAvailable) { // Hashを使用する場合, 結果を記憶する KJ_dict.dictHash[str] = result; } if (result.return_code == -1) { return(null); // not found } // 完全一致で見つかった return(result); // 検索結果を返す }