private static void BuildGauges(string[] Raw) { foreach (var Gauge in Raw) { var Components = Gauge.Split(','); GaugeData Data = new GaugeData(); Data.MeterId = Int32.Parse(Components[0]); Data.Name = Components[1]; Data.Latitude = float.Parse(Components[2]); Data.Longitude = float.Parse(Components[3]); var Lines = File.ReadAllLines("../../Data/Rainfall/Raw/" + Components[1] + "_rain.csv"); float Total = 0; Int32 Count = Lines.Length; while (Count-- > 1) { var Parts = Lines[Count].Split(','); Total += float.Parse(Parts[2]); } Data.RainfallTotal = Total; Gauges.Add(Data); } }
private void AssignGaugeDlg_Load(object sender, EventArgs e) { try { int module_id; theUfSession.UF.AskApplicationModule(out module_id); if (module_id != UFConstants.UF_APP_DRAFTING) { MessageBox.Show("請先轉換為製圖模組後再執行!"); this.Close(); } Is_Local = Environment.GetEnvironmentVariable("UGII_ENV_FILE"); if (Is_Local != null) { //取得AssignGaugeData status = CaxGetDatData.GetAssignGaugeData(out AGData); if (!status) { CaxLog.ShowListingWindow("GetAssignGaugeData失敗,請檢查MEConfig是否有檔案"); return; } //取得圖紙範圍資料Data status = CaxGetDatData.GetDraftingCoordinateData(out cCoordinateData); //取得PRODUCT資料(未完成,資料庫還沒建立) ISession session = MyHibernateHelper.SessionFactory.OpenSession(); IList <Sys_Product> sysProduct = session.QueryOver <Sys_Product>().List <Sys_Product>(); foreach (Sys_Product i in sysProduct) { listProduct.Add(i.productName); } } else { //取得AssignGaugeData string AssignGaugeData_dat = "AssignGaugeData.dat"; string AssignGaugeData_Path = string.Format(@"{0}\{1}", "D:", AssignGaugeData_dat); AGData = System.IO.File.ReadAllLines(AssignGaugeData_Path); //取得圖紙範圍資料Data string DraftingCoordinate_dat = "DraftingCoordinate.dat"; string DraftingCoordinate_Path = string.Format(@"{0}\{1}", "D:", DraftingCoordinate_dat); if (!System.IO.File.Exists(DraftingCoordinate_Path)) { MessageBox.Show("路徑:" + DraftingCoordinate_Path + "不存在"); return; } CaxPublic.ReadCoordinateData(DraftingCoordinate_Path, out cCoordinateData); } //預設關閉選擇物件 //SelectDimen.Enabled = false; #region 存AGData到DicGaugeData中 foreach (string Row in AGData) { string[] splitRow = Row.Split(','); if (splitRow.Length == 0) { continue; } GaugeData cGaugeData = new GaugeData(); status = DicGaugeData.TryGetValue(splitRow[1], out cGaugeData); if (status) { continue; } cGaugeData = new GaugeData(); cGaugeData.Color = splitRow[0]; try { cGaugeData.EngName = splitRow[2]; } catch (System.Exception ex) { cGaugeData.EngName = ""; } DicGaugeData.Add(splitRow[1], cGaugeData); } #endregion //填檢具到下拉選單中 //Gauge.Items.Add(""); //Gauge.Items.AddRange(DicGaugeData.Keys.ToArray()); //填檢具到SelfCheck下拉選單中 //SelfCheckGauge.Items.Add(""); //foreach (KeyValuePair<string,GaugeData> kvp in DicGaugeData) //{ // if (kvp.Key.Contains("T")) // { // continue; // } // SelfCheckGauge.Items.Add(kvp.Key); //} //取得sheet並填入下拉選單中 int SheetCount = 0; NXOpen.Tag[] SheetTagAry = null; theUfSession.Draw.AskDrawings(out SheetCount, out SheetTagAry); for (int i = 0; i < SheetCount; i++) { NXOpen.Drawings.DrawingSheet CurrentSheet = (NXOpen.Drawings.DrawingSheet)NXObjectManager.Get(SheetTagAry[i]); ListSheet.Items.Add(CurrentSheet.Name); } //預設開啟sheet1圖紙 NXOpen.Drawings.DrawingSheet DefaultSheet = (NXOpen.Drawings.DrawingSheet)NXObjectManager.Get(SheetTagAry[0]); ListSheet.Text = DefaultSheet.Name; //取得圖紙長寬 SheetLength = DefaultSheet.Length; SheetHeight = DefaultSheet.Height; //填入IQC、IPQC與SelfCheck的單位 //string[] CheckUnits = new string[] { "HRS", "PCS", "100%" }; //Freq_Units.Items.AddRange(CheckUnits.ToArray()); //SelfCheck_Units.Items.AddRange(CheckUnits.ToArray()); } catch (System.Exception ex) { MessageBox.Show(ex.ToString()); } }
private void AssignGaugeDlg_Load(object sender, EventArgs e) { /* * //取回目前泡泡最大值 * try * { * BallonNum = Convert.ToInt32(workPart.GetStringAttribute(CaxME.DimenAttr.BallonNum)); * } * catch (System.Exception ex) * { * BallonNum = 0; * } */ //預設關閉選擇物件 SelectObject.Enabled = false; //取得AssignGaugeData string[] AGData = new string[] { }; status = CaxGetDatData.GetAssignGaugeData(out AGData); if (!status) { CaxLog.ShowListingWindow("GetAssignGaugeData失敗,請檢查MEConfig是否有檔案"); return; } #region 存AGData到DicGaugeData中 foreach (string Row in AGData) { string[] splitRow = Row.Split(','); if (splitRow.Length == 0) { continue; } GaugeData cGaugeData = new GaugeData(); status = DicGaugeData.TryGetValue(splitRow[1], out cGaugeData); if (status) { continue; } cGaugeData = new GaugeData(); cGaugeData.Color = splitRow[0]; try { cGaugeData.EngName = splitRow[2]; } catch (System.Exception ex) { cGaugeData.EngName = ""; } DicGaugeData.Add(splitRow[1], cGaugeData); } #endregion //填檢具到IQC、IPQC下拉選單中 Gauge.Items.Add(""); Gauge.Items.AddRange(DicGaugeData.Keys.ToArray()); //填檢具到SelfCheck下拉選單中 SelfCheckGauge.Items.Add(""); foreach (KeyValuePair <string, GaugeData> kvp in DicGaugeData) { if (kvp.Key.Contains("T")) { continue; } SelfCheckGauge.Items.Add(kvp.Key); } //取得sheet並填入下拉選單中 int SheetCount = 0; NXOpen.Tag[] SheetTagAry = null; theUfSession.Draw.AskDrawings(out SheetCount, out SheetTagAry); for (int i = 0; i < SheetCount; i++) { NXOpen.Drawings.DrawingSheet CurrentSheet = (NXOpen.Drawings.DrawingSheet)NXObjectManager.Get(SheetTagAry[i]); ListSheet.Items.Add(CurrentSheet.Name); } //預設開啟sheet1圖紙 NXOpen.Drawings.DrawingSheet DefaultSheet = (NXOpen.Drawings.DrawingSheet)NXObjectManager.Get(SheetTagAry[0]); ListSheet.Text = DefaultSheet.Name; //取得圖紙長寬 SheetLength = DefaultSheet.Length; SheetHeight = DefaultSheet.Height; //填入IQC、IPQC與SelfCheck的單位 string[] CheckUnits = new string[] { "HRS", "PCS", "100%Check" }; Freq_Units.Items.AddRange(CheckUnits.ToArray()); SelfCheck_Units.Items.AddRange(CheckUnits.ToArray()); //取得圖紙範圍資料Data CaxGetDatData.GetDraftingCoordinateData(out cCoordinateData); }
private void OK_Click(object sender, EventArgs e) { if (DicSelDimension.Keys.Count == 0) { CaxLog.ShowListingWindow("請使用【選擇物件】選擇標註尺寸!"); return; } #region 選擇Assign if (chb_Assign.Checked == true) { if (FAIcheckBox.Checked == false & IQCcheckBox.Checked == false & IPQCcheckBox.Checked == false & FQCcheckBox.Checked == false) { CaxLog.ShowListingWindow("請先選擇一種檢驗報告格式!"); return; } if (Gauge.Text == "" && SelfCheckGauge.Text == "") { CaxLog.ShowListingWindow("資料不足,請先填寫【IQC】或【IPQC】或【SelfCheck】!"); return; } if (Gauge.Text != "" && (Freq_0.Text == "" || Freq_1.Text == "" || Freq_Units.Text == "")) { CaxLog.ShowListingWindow("IQC尚未填寫完畢!"); return; } if (SelfCheckGauge.Text != "" && (SelfCheck_0.Text == "" || SelfCheck_1.Text == "" || SelfCheck_Units.Text == "")) { CaxLog.ShowListingWindow("SelfCheck尚未填寫完畢!"); return; } foreach (KeyValuePair <NXObject, string> kvp in DicSelDimension) { //取得原始顏色 int oldColor = CaxME.GetDimensionColor(kvp.Key); if (oldColor == -1) { oldColor = 125; } //取得檢具顏色 GaugeData cGaugeData = new GaugeData(); if (SelfCheckGauge.Text != "") { status = DicGaugeData.TryGetValue(SelfCheckGauge.Text, out cGaugeData); if (!status) { CaxLog.ShowListingWindow("此檢具資料可能有誤"); return; } } if (Gauge.Text != "") { status = DicGaugeData.TryGetValue(Gauge.Text, out cGaugeData); if (!status) { CaxLog.ShowListingWindow("此檢具資料可能有誤"); return; } } //改變標註尺寸顏色 CaxME.SetDimensionColor(kvp.Key, Convert.ToInt32(cGaugeData.Color)); //塞屬性 kvp.Key.SetAttribute(CaxME.DimenAttr.OldColor, oldColor.ToString());//舊顏色 if (Gauge.Text != "") { if (FAIcheckBox.Checked == true) { kvp.Key.SetAttribute(CaxME.DimenAttr.FAI_Gauge, Gauge.Text);//檢具名稱 kvp.Key.SetAttribute(CaxME.DimenAttr.FAI_Freq, Freq_0.Text + "PC/" + Freq_1.Text + Freq_Units.Text); } if (IQCcheckBox.Checked == true) { kvp.Key.SetAttribute(CaxME.DimenAttr.IQC_Gauge, Gauge.Text);//檢具名稱 kvp.Key.SetAttribute(CaxME.DimenAttr.IQC_Freq, Freq_0.Text + "PC/" + Freq_1.Text + Freq_Units.Text); } if (IPQCcheckBox.Checked == true) { kvp.Key.SetAttribute(CaxME.DimenAttr.IPQC_Gauge, Gauge.Text);//檢具名稱 kvp.Key.SetAttribute(CaxME.DimenAttr.IPQC_Freq, Freq_0.Text + "PC/" + Freq_1.Text + Freq_Units.Text); } if (FQCcheckBox.Checked == true) { kvp.Key.SetAttribute(CaxME.DimenAttr.FQC_Gauge, Gauge.Text);//檢具名稱 kvp.Key.SetAttribute(CaxME.DimenAttr.FQC_Freq, Freq_0.Text + "PC/" + Freq_1.Text + Freq_Units.Text); } } if (SelfCheckGauge.Text != "") { kvp.Key.SetAttribute(CaxME.DimenAttr.SelfCheck_Gauge, SelfCheckGauge.Text); //檢具名稱 kvp.Key.SetAttribute(CaxME.DimenAttr.SelfCheck_Freq, SelfCheck_0.Text + "PC/" + SelfCheck_1.Text + SelfCheck_Units.Text); //SelfCheck } /* * //泡泡順序增加 * BallonNum++; * //取得泡泡的座標 * CaxME.BoxCoordinate TextCoordi = new CaxME.BoxCoordinate(); * Point3d CreateBallonPt = new Point3d(); * CaxME.GetTextBoxCoordinate(kvp.Key.Tag, out TextCoordi); * if (Math.Abs(TextCoordi.upper_left[0] - TextCoordi.lower_left[0]) < 0.01) * { * CreateBallonPt.X = (TextCoordi.upper_left[0] + TextCoordi.lower_left[0]) / 2 - 2; * CreateBallonPt.Y = (TextCoordi.upper_left[1] + TextCoordi.lower_left[1]) / 2; * } * else * { * CreateBallonPt.X = (TextCoordi.upper_left[0] + TextCoordi.lower_left[0]) / 2; * CreateBallonPt.Y = (TextCoordi.upper_left[1] + TextCoordi.lower_left[1]) / 2 - 2; * } * //插入泡泡 * CaxME.CreateBallonOnSheet(BallonNum.ToString(), CreateBallonPt); * //取得泡泡在圖紙的區域 * string SheetNum = ListSheet.Text, RegionX = "", RegionY = ""; * for (int i = 0; i < cCoordinateData.DraftingCoordinate.Count;i++ ) * { * string SheetSize = cCoordinateData.DraftingCoordinate[i].SheetSize; * if (Math.Ceiling(SheetHeight) != Convert.ToDouble(SheetSize.Split(',')[0]) || Math.Ceiling(SheetLength) != Convert.ToDouble(SheetSize.Split(',')[1])) * { * continue; * } * //比對X * for (int j = 0; j < cCoordinateData.DraftingCoordinate[i].RegionX.Count;j++ ) * { * string X0 = cCoordinateData.DraftingCoordinate[i].RegionX[j].X0; * string X1 = cCoordinateData.DraftingCoordinate[i].RegionX[j].X1; * if (CreateBallonPt.X >= Convert.ToDouble(X0) && CreateBallonPt.X <= Convert.ToDouble(X1)) * { * RegionX = cCoordinateData.DraftingCoordinate[i].RegionX[j].Zone; * } * } * //比對Y * for (int j = 0; j < cCoordinateData.DraftingCoordinate[i].RegionY.Count; j++) * { * string Y0 = cCoordinateData.DraftingCoordinate[i].RegionY[j].Y0; * string Y1 = cCoordinateData.DraftingCoordinate[i].RegionY[j].Y1; * if (CreateBallonPt.Y >= Convert.ToDouble(Y0) && CreateBallonPt.Y <= Convert.ToDouble(Y1)) * { * RegionY = cCoordinateData.DraftingCoordinate[i].RegionY[j].Zone; * } * } * } * //塞泡泡屬性 * kvp.Key.SetAttribute(CaxME.DimenAttr.BallonNum, BallonNum.ToString()); * kvp.Key.SetAttribute(CaxME.DimenAttr.BallonLocation, SheetNum + "-" + RegionY + RegionX); */ } } #endregion #region 選擇Remove if (chb_Remove.Checked == true) { foreach (KeyValuePair <NXObject, string> kvp in DicSelDimension) { //恢復原始顏色 string oldColor = ""; try { //第二次以上指定顏色的話,抓出來的顏色就不是內建顏色EX:125->108->186,抓到的是108 oldColor = kvp.Key.GetStringAttribute(CaxME.DimenAttr.OldColor); //內建原始顏色 oldColor = "125"; } catch (System.Exception ex) { oldColor = "125"; } CaxME.SetDimensionColor(kvp.Key, Convert.ToInt32(oldColor)); //取得泡泡資訊 string BallonNum = ""; try { BallonNum = kvp.Key.GetStringAttribute(CaxME.DimenAttr.BallonNum); } catch (System.Exception ex) { BallonNum = ""; } if (BallonNum != "") { CaxME.DeleteBallon(BallonNum); } kvp.Key.DeleteAllAttributesByType(NXObject.AttributeType.String); } } #endregion SelectObject.Text = "選擇物件(0)"; }
/// <summary> /// Constantly checks if the game has provided new telemetry data. If it has, an event is fired. /// </summary> private void UpdateGauge() { bool loaded = NR2003Binding.Setup(); OnAddressSpaceLoadedOrThrewError(loaded); if (NR2003Binding.WaitForSimToRun()) { OnNR2003LoadedOrThrewError(true); TimeSpan lap = new TimeSpan(0, 0, 0, 0, 0); LapCrossing lapCache = new LapCrossing() { carIdx = new byte[] { 0, 0, 0, 0 }, lapNum = new byte[] { 0, 0, 0, 0 }, flags = new byte[] { 0, 0, 0, 0 }, crossedAt = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }, }; GaugeData gaugeCache = new GaugeData(); while (true) { NR2003Binding.RequestData(); IntPtr gd = NR2003Binding.GetGaugeData(); if (gd != IntPtr.Zero) { GaugeData gauge = (GaugeData)Marshal.PtrToStructure(gd, typeof(GaugeData)); if (gauge != gaugeCache) { OnGaugeUpdate(new GaugeUpdatedEventArgs { _gaugeData = gauge }); } } IntPtr ptrlap = NR2003Binding.GetLapCrossing(); if (ptrlap != IntPtr.Zero) { LapCrossing _lap = (LapCrossing)Marshal.PtrToStructure(ptrlap, typeof(LapCrossing)); if (_lap != lapCache) { double crossed = BitConverter.ToDouble(_lap.crossedAt, 0); int seconds = Convert.ToInt32(Math.Truncate(crossed)); int milliseconds = Convert.ToInt32((crossed - seconds) * 1000); TimeSpan crossedAt = new TimeSpan(0, 0, 0, seconds, milliseconds); int carIdx = BitConverter.ToInt32(_lap.carIdx, 0); if (carIdx == 0 && crossedAt > lap) { OnLapTimeUpdate(new LapTimeUpdatedEventArgs { lapTime = string.Format("{0:0.000}", (crossedAt - lap).TotalSeconds) }); lap = crossedAt; lapCache = _lap; } else if (carIdx == 0) { lap = crossedAt; lapCache = _lap; } } } //game only provides data at 36 hz Thread.Sleep(20); } } else { OnNR2003LoadedOrThrewError(false); } }