private void ComputeDistances() { var distances = ZoneArray.CreateSquareTwinArray <float>(); var flatDistnaces = distances.GetFlatData(); var zones = ZoneArray.GetFlatData(); var length = zones.Length; Parallel.For(0, flatDistnaces.Length, delegate(int i) { var row = flatDistnaces[i]; for (int j = 0; j < length; j++) { row[j] = (i == j) ? zones[i].InternalDistance : CalcDistance(zones[i], zones[j]); } }); Distances = distances; }
private void LoadDistances() { if (DistanceMatrix == null) { var distances = ZoneArray.CreateSquareTwinArray <float>(); var flatDistnaces = distances.GetFlatData(); var zones = ZoneArray.GetFlatData(); var length = zones.Length; Parallel.For(0, flatDistnaces.Length, delegate(int i) { var row = flatDistnaces[i]; for (int j = 0; j < length; j++) { row[j] = (i == j) ? zones[i].InternalDistance : CalcDistance(zones[i], zones[j]); } }); Distances = distances; } else { if (!DistanceMatrix.Loaded) { DistanceMatrix.LoadData(); Distances = DistanceMatrix.GiveData(); DistanceMatrix.UnloadData(); } else { Distances = DistanceMatrix.GiveData(); } var flatDistances = Distances.GetFlatData(); if (SetInternalDistances) { var flatZones = ZoneArray.GetFlatData(); for (int i = 0; i < flatDistances.Length; i++) { flatDistances[i][i] = flatZones[i].InternalDistance; } } } }
private void LoadDistancesFromFile() { if (!DistanceMatrix.Loaded) { DistanceMatrix.LoadData(); Distances = DistanceMatrix.GiveData(); DistanceMatrix.UnloadData(); } else { Distances = DistanceMatrix.GiveData(); } var flatDistances = Distances.GetFlatData(); if (SetInternalDistances) { var flatZones = ZoneArray.GetFlatData(); for (int i = 0; i < flatDistances.Length; i++) { flatDistances[i][i] = flatZones[i].InternalDistance; } } }
public static SySal.DAQSystem.Scanning.ZoneDesc[] CalculateZones(long brickid, long plateid) { System.Data.DataSet ds = new System.Data.DataSet(); new SySal.OperaDb.OperaDbDataAdapter("select minx-zerox, maxx-zerox, miny-zeroy, maxy-zeroy from tb_eventbricks where id = " + brickid, Conn).Fill(ds); double local_brick_minx = Convert.ToDouble(ds.Tables[0].Rows[0][0], System.Globalization.CultureInfo.InvariantCulture); double local_brick_maxx = Convert.ToDouble(ds.Tables[0].Rows[0][1], System.Globalization.CultureInfo.InvariantCulture); double local_brick_miny = Convert.ToDouble(ds.Tables[0].Rows[0][2], System.Globalization.CultureInfo.InvariantCulture); double local_brick_maxy = Convert.ToDouble(ds.Tables[0].Rows[0][3], System.Globalization.CultureInfo.InvariantCulture); System.Collections.ArrayList newZoneArray = new ArrayList(); string EventType = Convert.ToString(new SySal.OperaDb.OperaDbCommand("select DISTINCT type from vw_local_predictions where id_cs_eventbrick = " + brickid, Conn).ExecuteScalar()); //TODO: improve this part: multi-zone for CC-like events if (EventType.Equals("CC") || EventType.Equals("NC")) { ds = new System.Data.DataSet(); new SySal.OperaDb.OperaDbDataAdapter("select pred_localx, pred_localy, POSTOL1, POSTOL2 from vw_local_predictions where id_cs_eventbrick = " + brickid, Conn).Fill(ds); double posx, posy, postolx, postoly; SySal.DAQSystem.Scanning.ZoneDesc zone = new SySal.DAQSystem.Scanning.ZoneDesc(); posx = Convert.ToDouble(ds.Tables[0].Rows[0][0], System.Globalization.CultureInfo.InvariantCulture); posy = Convert.ToDouble(ds.Tables[0].Rows[0][1], System.Globalization.CultureInfo.InvariantCulture); postolx = (ds.Tables[0].Rows[0][2] != DBNull.Value) ? Convert.ToDouble(ds.Tables[0].Rows[0][2], System.Globalization.CultureInfo.InvariantCulture) : ProgSettings.PositionToleranceX; postoly = (ds.Tables[0].Rows[0][3] != DBNull.Value) ? Convert.ToDouble(ds.Tables[0].Rows[0][3], System.Globalization.CultureInfo.InvariantCulture) : ProgSettings.PositionToleranceY; zone.MinX = posx - postolx; zone.MaxX = posx + postolx; zone.MinY = posy - postoly; zone.MaxY = posy + postoly; foreach (System.Data.DataRow dr in ds.Tables[0].Rows) { posx = Convert.ToDouble(dr[0], System.Globalization.CultureInfo.InvariantCulture); posy = Convert.ToDouble(dr[1], System.Globalization.CultureInfo.InvariantCulture); postolx = (dr[2] != DBNull.Value) ? Convert.ToDouble(dr[2], System.Globalization.CultureInfo.InvariantCulture) : ProgSettings.PositionToleranceX; postoly = (dr[3] != DBNull.Value) ? Convert.ToDouble(dr[3], System.Globalization.CultureInfo.InvariantCulture) : ProgSettings.PositionToleranceY; zone.MinX = Math.Min(zone.MinX, posx - postolx); zone.MaxX = Math.Max(zone.MaxX, posx + postolx); zone.MinY = Math.Min(zone.MinY, posy - postoly); zone.MaxY = Math.Max(zone.MaxY, posy + postoly); } newZoneArray.Add(zone); } foreach (SySal.DAQSystem.Scanning.ZoneDesc z in newZoneArray) { if (z.MinX < local_brick_minx) { z.MinX = local_brick_minx; } if (z.MaxX > local_brick_maxx) { z.MaxX = local_brick_maxx; } if (z.MinY < local_brick_miny) { z.MinY = local_brick_miny; } if (z.MaxY > local_brick_maxy) { z.MaxY = local_brick_maxy; } } System.Collections.ArrayList ZoneArray = null; if (ProgSettings.SkipMeasuredAreas == true) { ZoneArray = new ArrayList(); ds = new System.Data.DataSet(); new SySal.OperaDb.OperaDbDataAdapter("SELECT a.id_processoperation, MIN(a.minx) as minx, MAX(a.maxx) as maxx, MIN(a.miny) as miny, MAX(a.maxy) as maxy FROM tb_zones a INNER JOIN tb_proc_operations b ON(b.id = a.id_processoperation) WHERE a.id_eventbrick = " + brickid + " AND b.id_plate = " + plateid + " AND b.success = 'Y' GROUP BY a.id_processoperation", Conn).Fill(ds); if (ds.Tables[0].Rows.Count > 0) { SySal.DAQSystem.Scanning.ZoneDesc[] oldZones = new SySal.DAQSystem.Scanning.ZoneDesc[ds.Tables[0].Rows.Count]; for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { oldZones[i] = new SySal.DAQSystem.Scanning.ZoneDesc(); oldZones[i].Series = Convert.ToInt64(ds.Tables[0].Rows[0][0]); oldZones[i].MinX = Convert.ToDouble(ds.Tables[0].Rows[0][1], System.Globalization.CultureInfo.InvariantCulture); oldZones[i].MaxX = Convert.ToDouble(ds.Tables[0].Rows[0][2], System.Globalization.CultureInfo.InvariantCulture); oldZones[i].MinY = Convert.ToDouble(ds.Tables[0].Rows[0][3], System.Globalization.CultureInfo.InvariantCulture); oldZones[i].MaxY = Convert.ToDouble(ds.Tables[0].Rows[0][4], System.Globalization.CultureInfo.InvariantCulture); } foreach (SySal.DAQSystem.Scanning.ZoneDesc n in newZoneArray) { foreach (SySal.DAQSystem.Scanning.ZoneDesc o in oldZones) { } } } } else { ZoneArray = newZoneArray; } return((SySal.DAQSystem.Scanning.ZoneDesc[])ZoneArray.ToArray(typeof(SySal.DAQSystem.Scanning.ZoneDesc))); }