Пример #1
0
        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;
        }
Пример #2
0
        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;
                    }
                }
            }
        }
Пример #3
0
        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;
                }
            }
        }
Пример #4
0
        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)));
        }