Exemple #1
0
        private void correctPoint(PointD point, PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
        {
            // 校正前的机械坐标
            PointD pMachine = (patternOldOrigin.ToSystem() + point).ToMachine();

            // 校正后的机械坐标
            pMachine = coordinateTransformer.Transform(pMachine);
            // 相对系统坐标
            point.X = (pMachine.ToSystem() - patternNewOrigin.ToSystem()).X;
            point.Y = (pMachine.ToSystem() - patternNewOrigin.ToSystem()).Y;
        }
Exemple #2
0
        /// <summary>
        /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
        /// </summary>
        /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
        /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
        /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
        public override void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
        {
            // 校正前的机械坐标
            PointD p = (patternOldOrigin.ToSystem() + Position).ToMachine();

            // 校正后的机械坐标
            p = coordinateTransformer.Transform(p);
            // 相对系统坐标
            Position.X = (p.ToSystem() - patternNewOrigin.ToSystem()).X;
            Position.Y = (p.ToSystem() - patternNewOrigin.ToSystem()).Y;
        }
Exemple #3
0
 /// <summary>
 /// 编程界面校准
 /// </summary>
 /// <param name="patternOldOrigin"></param>
 /// <param name="coordinateTransformer"></param>
 /// <param name="patternNewOrigin"></param>
 public void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
 {
     foreach (PointD item in this.symbolPoints)
     {
         // 校正前的机械坐标
         PointD newPoint = (patternOldOrigin.ToSystem() + item).ToMachine();
         // 校正后的机械坐标
         newPoint = coordinateTransformer.Transform(newPoint);
         // 相对系统坐标
         item.X = (newPoint.ToSystem() - patternNewOrigin.ToSystem()).X;
         item.Y = (newPoint.ToSystem() - patternNewOrigin.ToSystem()).Y;
     }
 }
Exemple #4
0
        /// <summary>
        /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
        /// </summary>
        /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
        /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
        /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
        public void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
        {
            // 校正前的机械坐标
            PointD pStart = (patternOldOrigin.ToSystem() + Start).ToMachine();
            PointD pEnd   = (patternOldOrigin.ToSystem() + End).ToMachine();

            // 校正后的机械坐标
            pStart = coordinateTransformer.Transform(pStart);
            pEnd   = coordinateTransformer.Transform(pEnd);
            // 相对系统坐标
            Start.X = (pStart.ToSystem() - patternNewOrigin.ToSystem()).X;
            Start.Y = (pStart.ToSystem() - patternNewOrigin.ToSystem()).Y;
            End.X   = (pEnd.ToSystem() - patternNewOrigin.ToSystem()).X;
            End.Y   = (pEnd.ToSystem() - patternNewOrigin.ToSystem()).Y;
        }
Exemple #5
0
        public override void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
        {
            PointD  oldPosMachine = (PosInPattern + patternOldOrigin.ToSystem()).ToMachine();
            PointD  newPosMachine = coordinateTransformer.Transform(oldPosMachine);
            VectorD v             = newPosMachine.ToSystem() - patternNewOrigin.ToSystem();

            this.PosInPattern.X = v.X;
            this.PosInPattern.Y = v.Y;
            if (this.MeasureContent.HasFlag(MeasureContents.GlueHeight) && this.MeasureHeightCmdLines != null && this.MeasureHeightCmdLines.Count == 2)
            {
                foreach (var item in this.MeasureHeightCmdLines)
                {
                    item.Correct(patternOldOrigin, coordinateTransformer, patternNewOrigin);
                }
            }
        }
        /// <summary>
        /// Adresse and location name search
        /// </summary>
        /// <param name="term">Search string (start of adress or location)</param>
        /// <returns>List of adresses and locations with geographical coordinates</returns>
        public IActionResult GeolocationByName(string term)
        {
            var locations = stedstjeneste.FinnLokalitet(term);

            foreach (var locality in locations)
            {
                locality.ProductTypeLevel = NavneTyper.GetLevelForType(locality.Product);

                //stedstjeneste.FinnLokalitet mixes up x and y
                // - cannot change stedstjeneste.FinnLokalitet because mobile app uses the service
                locality.Koordinat.SwapXAndY();

                locality.Koordinat =
                    (GoogleMercatorKoordinat)CoordinateTransformer.TransformCoordinate(locality.Koordinat, (int)Koordinatsystem.GoogleMercator);
            }
            return(Ok(locations));
        }
Exemple #7
0
 /// <summary>
 /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
 /// </summary>
 /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
 /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
 /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
 public override void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
 {
     foreach (var trace in this.traces)
     {
         this.correctPoint(trace.Start, patternOldOrigin, coordinateTransformer, patternNewOrigin);
         if (trace is TraceArc)
         {
             this.correctPoint((trace as TraceArc).Mid, patternOldOrigin, coordinateTransformer, patternNewOrigin);
         }
         //else
         //{
         //    this.correctPoint((trace as TraceArc).Start, patternOldOrigin, coordinateTransformer, patternNewOrigin);
         //    this.correctPoint((trace as TraceArc).Mid, patternOldOrigin, coordinateTransformer, patternNewOrigin);
         //    this.correctPoint((trace as TraceArc).End, patternOldOrigin, coordinateTransformer, patternNewOrigin);
         //}
         this.correctPoint(trace.End, patternOldOrigin, coordinateTransformer, patternNewOrigin);
     }
 }
Exemple #8
0
        /// <summary>
        /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
        /// </summary>
        /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
        /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
        /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
        public override void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
        {
            // 校正前的机械坐标
            PointD p1 = (patternOldOrigin.ToSystem() + point1).ToMachine();
            PointD p2 = (patternOldOrigin.ToSystem() + point2).ToMachine();
            PointD p3 = (patternOldOrigin.ToSystem() + point3).ToMachine();

            // 校正后的机械坐标
            p1 = coordinateTransformer.Transform(p1);
            p2 = coordinateTransformer.Transform(p2);
            p3 = coordinateTransformer.Transform(p3);
            // 相对系统坐标
            point1.X = (p1.ToSystem() - patternNewOrigin.ToSystem()).X;
            point1.Y = (p1.ToSystem() - patternNewOrigin.ToSystem()).Y;
            point2.X = (p2.ToSystem() - patternNewOrigin.ToSystem()).X;
            point2.Y = (p2.ToSystem() - patternNewOrigin.ToSystem()).Y;
            point3.X = (p3.ToSystem() - patternNewOrigin.ToSystem()).X;
            point3.Y = (p3.ToSystem() - patternNewOrigin.ToSystem()).Y;
        }
Exemple #9
0
        private PointD CalcuDotsCenter(List <DotCmdLine> dotCmdLines)
        {
            //double
            if (dotCmdLines.Count < 2)
            {
                return(null);
            }
            PointD center = new PointD();
            PointD org1   = dotCmdLines[0].OrgOffset;
            PointD real1  = dotCmdLines[0].Position;
            PointD org2   = dotCmdLines[1].OrgOffset;
            PointD real2  = dotCmdLines[1].Position;

            CoordinateTransformer transformer = new CoordinateTransformer();

            transformer.SetMarkPoint(org1, org2, real1, real2);
            center = transformer.Transform(new PointD(0, 0));
            return(center);
        }
        /// <summary>
        /// Gårds- og Bruksnummer search
        /// </summary>
        /// <param name="gbnrString">Gårds og bruksnummer in the format 'kommunenummer_gårdsnummer_bruksnummer</param>
        /// <returns>List of gårds og bruksnummer (0 or 1 items) with geographical coordinates</returns>
        public IActionResult GetRealEstateData(string gbnrString)
        {
            var values    = gbnrString.Split('_');
            var kommuneNr = int.Parse(values[0]);
            var gaardsnr  = int.Parse(values[1]);
            var bruksNr   = int.Parse(values[2]);
            var locations = stedstjeneste.GetRealEstateData(kommuneNr, gaardsnr, bruksNr, 0, 0);
            // (festNr = 0, seksjonsNr = 0);
            var location = locations.FirstOrDefault();
            var coords   = new List <Koordinat>();

            foreach (var coord in location.Koordinatliste)
            {
                coords.Add(
                    (GoogleMercatorKoordinat)
                    CoordinateTransformer.TransformCoordinate(coord, (int)Koordinatsystem.GoogleMercator));
            }
            location.Koordinatliste = coords;
            return(Ok(locations));
        }
 void IUpdatable.UpdateObject()
 {
     if (this.waitForDespawn)
     {
         if (!this.ent.gameObject.activeInHierarchy)
         {
             base.enabled        = false;
             this.waitForDespawn = false;
             this.DoRespawn();
         }
         return;
     }
     this.timer -= Time.deltaTime;
     if (this.backCam != null && this.fadeTimer > 0f)
     {
         this.fadeTimer -= Time.deltaTime;
         float num = Mathf.Max(0f, this.fadeTimer * this.fadeTimeScale);
         this.backCam.backgroundColor = Color.Lerp(this.startFadeColor, this._bgFadeColor, num);
     }
     if (this.timer <= 0f)
     {
         if (this.backCam != null)
         {
             this.backCam.backgroundColor = this.startFadeColor;
         }
         base.enabled = false;
         if (this.ShouldChangeLevels())
         {
             this.ChangeLevelRespawn();
         }
         else if (this._fadeOut != null && !this.noFadeOut)
         {
             Vector3 value = CoordinateTransformer.ToViewport("Main Camera", this.ent.WorldPosition);
             OverlayFader.StartFade(this._fadeOut, true, new OverlayFader.OnDoneFunc(this.StartSpawnWait), new Vector3?(value));
         }
         else
         {
             this.DoRespawn();
         }
     }
 }
 public void ForceRespawn()
 {
     if (this.inForceRespawn)
     {
         return;
     }
     this.inForceRespawn = true;
     if (this.WillChangeLevels())
     {
         this.localPauseTag = ObjectUpdater.Instance.RequestPause(null);
         Killable entityComponent = this.ent.GetEntityComponent <Killable>();
         if (entityComponent != null)
         {
             entityComponent.CurrentHp = entityComponent.MaxHp;
         }
         this.ChangeLevelRespawn();
         return;
     }
     ObjectUpdater.PauseTag  pauseTag   = ObjectUpdater.Instance.RequestPause(null);
     OverlayFader.OnDoneFunc onDoneFunc = delegate()
     {
         this.inForceRespawn = false;
         pauseTag.Release();
         Killable entityComponent2 = this.ent.GetEntityComponent <Killable>();
         if (entityComponent2 != null)
         {
             Killable.DeathData deathData = new Killable.DeathData(true);
             entityComponent2.ForceDeath(0f, deathData, true);
         }
     };
     if (this._fadeOut != null)
     {
         Vector3 value = CoordinateTransformer.ToViewport("Main Camera", this.ent.WorldPosition);
         OverlayFader.StartFade(this._fadeOut, true, onDoneFunc, new Vector3?(value));
     }
     else
     {
         onDoneFunc();
     }
 }
Exemple #13
0
        /// <summary>
        /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
        /// </summary>
        /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
        /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
        /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
        public override void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
        {
            // 校正前的机械坐标
            PointD pStart  = (patternOldOrigin.ToSystem() + start).ToMachine();
            PointD pMiddle = (patternOldOrigin.ToSystem() + middle).ToMachine();
            PointD pEnd    = (patternOldOrigin.ToSystem() + end).ToMachine();
            PointD pCenter = (patternOldOrigin.ToSystem() + center).ToMachine();

            // 校正后的机械坐标
            pStart  = coordinateTransformer.Transform(pStart);
            pMiddle = coordinateTransformer.Transform(pMiddle);
            pEnd    = coordinateTransformer.Transform(pEnd);
            pCenter = coordinateTransformer.Transform(pCenter);
            // 相对系统坐标
            start.X  = (pStart.ToSystem() - patternNewOrigin.ToSystem()).X;
            start.Y  = (pStart.ToSystem() - patternNewOrigin.ToSystem()).Y;
            middle.X = (pMiddle.ToSystem() - patternNewOrigin.ToSystem()).X;
            middle.Y = (pMiddle.ToSystem() - patternNewOrigin.ToSystem()).Y;
            end.X    = (pEnd.ToSystem() - patternNewOrigin.ToSystem()).X;
            end.Y    = (pEnd.ToSystem() - patternNewOrigin.ToSystem()).Y;
            center.X = (pCenter.ToSystem() - patternNewOrigin.ToSystem()).X;
            center.Y = (pCenter.ToSystem() - patternNewOrigin.ToSystem()).Y;
        }
Exemple #14
0
        /// <summary>
        /// 根据拍照得到Workpiece1 和Workpiece2,将patternMarksZero 转换为实际位置
        /// </summary>
        /// <param name="marks"></param>
        public bool TransPoint(List <MarkCmd> marks)
        {
            if (marks.Count != 2)
            {
                MessageBox.Show("校正文件mark必须两个mark点");
                return(false);
            }
            try
            {
                this.patternMarksTransed.Clear();
                this.workpieceMark1Transed          = (ResultAmphnol)this.workpieceMark1Zero.Clone();
                this.workpieceMark1Transed.position = marks[0].ModelFindPrm.TargetInMachine;

                this.workpieceMark2Transed          = (ResultAmphnol)this.workpieceMark2Zero.Clone();
                this.workpieceMark2Transed.position = marks[1].ModelFindPrm.TargetInMachine;

                this.workPieceMark1 = marks[0].ModelFindPrm.TargetInMachine.Clone() as PointD;
                this.workPieceMark2 = marks[1].ModelFindPrm.TargetInMachine.Clone() as PointD;

                CoordinateTransformer transformer = new CoordinateTransformer();
                //根据拍照的workpiece Mark校正所有的 pattern Mark的点位
                transformer.SetMarkPoint(this.workpieceMark1Zero.position, this.workpieceMark2Zero.position, this.workPieceMark1, this.workPieceMark2);

                foreach (ResultAmphnol item in this.patternMarksZero)
                {
                    ResultAmphnol amphnol = (ResultAmphnol)item.Clone();
                    amphnol.position = transformer.Transform(amphnol.position);
                    this.patternMarksTransed.Add(amphnol);
                }
                return(true);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                return(false);
            }
        }
Exemple #15
0
 /// <summary>
 /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
 /// </summary>
 /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
 /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
 /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
 public override void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin)
 {
     // do nothing.
 }
Exemple #16
0
 static Vector3 WorldToScreen(Vector3 pos)
 {
     return(CoordinateTransformer.ToViewport("Main Camera", pos));
 }
Exemple #17
0
        public IList <Vector2Int> GetPath(ICellMap map, Vector2Int start, Vector2Int stop, NeighbourMode neighbourMode)
        {
            if (!_isInitialized)
            {
                Initialize(map);
            }

            CellCluster startContainer = HierarchicalMapGenerator.GetContainingCluster(HierarchicalGraph.ZeroLevelClusters, ClusterSizeZero, ClusterSizeZero, start);
            CellCluster stopContainer  = HierarchicalMapGenerator.GetContainingCluster(HierarchicalGraph.ZeroLevelClusters, ClusterSizeZero, ClusterSizeZero, stop);

            HierarchicalGraphNode startNode = new HierarchicalGraphNode();

            startNode.Position = start;
            startContainer.ConnectNode(startNode, neighbourMode);
            startNode.ParentCluster = startContainer;

            HierarchicalGraphNode stopNode = new HierarchicalGraphNode();

            stopNode.Position = stop;
            stopContainer.ConnectNode(stopNode, neighbourMode);
            stopNode.ParentCluster = stopContainer;

            AStarAlgorithm aStarAlgorithm = new AStarAlgorithm();

            _currentCellCluster = null;
            aStarAlgorithm.OnCellViewedEvent += OnAStarCellViewed;
            IList <IGraphNode> abstractPath = aStarAlgorithm.GetPath(null, startNode, stopNode);
            List <Vector2Int>  path         = null;

            if (abstractPath != null)
            {
                path = new List <Vector2Int>();
                for (var i = 0; i < abstractPath.Count - 1; i++)
                {
                    HierarchicalGraphNode nodeA = (HierarchicalGraphNode)abstractPath[i];
                    HierarchicalGraphNode nodeB = (HierarchicalGraphNode)abstractPath[i + 1];
                    if (nodeA.ParentCluster == nodeB.ParentCluster)
                    {
                        CoordinateTransformer transformer =
                            new CoordinateTransformer(nodeA.ParentCluster, nodeA.ParentCluster.LeftBottom);
                        _currentCellCluster = nodeA.ParentCluster;
                        Vector2Int         clusterStart = nodeA.Position - transformer.Transform;
                        Vector2Int         clusterStop  = nodeB.Position - transformer.Transform;
                        IList <Vector2Int> realPath     = aStarAlgorithm.GetPathSingleLayer(transformer, clusterStart, clusterStop, neighbourMode);

                        if (realPath == null)
                        {
                            var bitmap = CellMapToBitmap.GetBitmap(nodeA.ParentCluster, 16, clusterStart, clusterStop, null);
                            LogManager.Log($"Path in cluster not found. Start: {clusterStart}; Stop: {clusterStop}. Bitmap printed");
                            LogManager.Log(bitmap);
                            throw new InvalidOperationException();
                        }

                        TransformPath(realPath, transformer.Transform);
                        realPath = Utils.GetInvertedList(realPath);
                        path.AddRange(realPath);
                    }
                }
            }

            DestroyConnections(startNode);
            DestroyConnections(stopNode);
            DestroyData(HierarchicalGraph.ZeroLevelClusters);

            return(path);
        }
Exemple #18
0
        /// <summary>
        /// 校正本级Pattern,且递归校正子Pattern
        /// </summary>
        /// <param name="pattern"></param>
        /// <param name="patternOldOrigin"></param>
        /// <param name="patternNewOrigin"></param>
        /// <param name="coordinateTransformer"></param>
        public void correctPatternRecursive(Pattern pattern, PointD patternOldOrigin, PointD patternNewOrigin, CoordinateTransformer coordinateTransformer)
        {
            // 校正轨迹命令坐标
            foreach (CmdLine cmdLine in pattern.CmdLineList)
            {
                cmdLine.Correct(patternOldOrigin, coordinateTransformer, patternNewOrigin);
            }

            // 校正子Pattern的原点
            foreach (var child in pattern.getChildren())
            {
                PointD childOldOriginPos = new PointD(child.GetOriginPos());
                PointD childNewOriginPos = coordinateTransformer.Transform(childOldOriginPos);
                // Pattern原点为相对Workpiece的系统坐标
                child.Origin.X = (childNewOriginPos.ToSystem() - pattern.Program.Workpiece.GetOriginSys()).X;
                child.Origin.Y = (childNewOriginPos.ToSystem() - pattern.Program.Workpiece.GetOriginSys()).Y;
                List <MarkCmdLine> childMarks = child.GetMarkCmdLines();
                // 有Mark的拼版只校准拼版原点位置和拼版Mark的拍照位置
                if (childMarks.Count > 0)
                {
                    foreach (MarkCmdLine item in childMarks)
                    {
                        PointD  oldPosInMachine = item.PosInPattern + childOldOriginPos;
                        PointD  newPosInMachine = coordinateTransformer.Transform(oldPosInMachine);
                        VectorD v = newPosInMachine - childNewOriginPos;
                        item.PosInPattern.X = v.X;
                        item.PosInPattern.Y = v.Y;
                    }
                }
                else
                {
                    // 递归校正子Pattern
                    correctPatternRecursive(child, childOldOriginPos, childNewOriginPos, coordinateTransformer);
                }
            }
        }
Exemple #19
0
        /// <summary>
        /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
        /// </summary>
        /// <param name="pattern"></param>
        /// <param name="onStart"></param>
        /// <param name="onFinished"></param>
        /// <param name="onError"></param>
        /// <param name="mustCorrect">必须校正,即使NeedMarkCorrect为false</param>
        /// <returns>-1:执行失败,1:不需要校正,0:校正成功</returns>
        public int Correct(Pattern pattern)
        {
            if (pattern == null)
            {
                Log.Print(TAG, "pattern is null.");
                return(-1);
            }

            //if (!pattern.NeedMarkCorrect)
            //{
            //    Log.Print(TAG, "pattern NeedMarkCorrect : false");
            //    return 1;
            //}
            var tuple        = this.getMarksRecursive(pattern);
            var markCmdLines = tuple.Item2;

            if (markCmdLines.Count <= 0)
            {
                return(1);
            }
            //if (pattern.GetMarkCmdLines().Count <= 0)
            //{
            //    Log.Print(TAG, "pattern marks count : 0");
            //    return 1;
            //}

            // 拍摄Mark点
            Result ret = Result.OK;

            foreach (MarkCmdLine markCmdLine in markCmdLines)
            {
                ret = executeMark(tuple.Item1, markCmdLine);
                if (!ret.IsOk)
                {
                    return(-1);
                }
            }

            // 生成坐标校正器
            CoordinateTransformer coordinateTransformer = new CoordinateTransformer();

            if (markCmdLines.Count == 1)
            {
                if (markCmdLines[0].ModelFindPrm.IsUnStandard)
                {
                    PointD p     = new PointD(markCmdLines[0].ModelFindPrm.ReferenceX, markCmdLines[0].ModelFindPrm.ReferenceY);
                    PointD refXY = (p + tuple.Item1.GetOriginSys()).ToMachine();

                    if (markCmdLines[0].ModelFindPrm.UnStandardType == 0)
                    {
                        coordinateTransformer.SetMarkPoint(refXY, markCmdLines[0].ModelFindPrm.ReferenceA,
                                                           markCmdLines[0].ModelFindPrm.TargetInMachine, markCmdLines[0].ModelFindPrm.Angle);
                    }
                    else
                    {
                        PointD p2     = new PointD(markCmdLines[0].ModelFindPrm.ReferenceX2, markCmdLines[0].ModelFindPrm.ReferenceY2);
                        PointD refXY2 = (p2 + tuple.Item1.GetOriginSys()).ToMachine();
                        coordinateTransformer.SetMarkPoint(refXY, refXY2,
                                                           markCmdLines[0].ModelFindPrm.TargetInMachine, markCmdLines[0].ModelFindPrm.TargetInMachine2);
                    }
                }
                else
                {
                    coordinateTransformer.SetMarkPoint(
                        markCmdLines[0].ModelFindPrm.PosInMachine,
                        markCmdLines[0].ModelFindPrm.TargetInMachine);
                }
            }
            else if (markCmdLines.Count == 2)
            {
                coordinateTransformer.SetMarkPoint(
                    markCmdLines[0].ModelFindPrm.PosInMachine,
                    markCmdLines[1].ModelFindPrm.PosInMachine,
                    markCmdLines[0].ModelFindPrm.TargetInMachine,
                    markCmdLines[1].ModelFindPrm.TargetInMachine);
            }


            // 校正Pattern原点
            PointD patternOldOrigin = new PointD(pattern.GetOriginPos());
            PointD patternNewOrigin = coordinateTransformer.Transform(patternOldOrigin);

            if (pattern is Workpiece)
            {//workpiece原点为机械坐标
                Workpiece w = pattern as Workpiece;
                w.OriginPos.X = patternNewOrigin.X;
                w.OriginPos.Y = patternNewOrigin.Y;
                FluidProgram.Current.GetWorkPieceCmdLine().Origin.X = w.OriginPos.X;
                FluidProgram.Current.GetWorkPieceCmdLine().Origin.Y = w.OriginPos.Y;
            }
            else
            {//Pattern原点为相对workpiece的系统坐标
                VectorD v = patternNewOrigin.ToSystem() - pattern.Program.Workpiece.GetOriginPos().ToSystem();
                pattern.Origin.X = v.X;
                pattern.Origin.Y = v.Y;
            }

            //// 校正轨迹命令坐标
            //foreach (CmdLine cmdLine in pattern.CmdLineList)
            //{
            //    cmdLine.Correct(patternOldOrigin, coordinateTransformer, patternNewOrigin);
            //}

            //// 校正子Pattern的原点
            //foreach (var item in pattern.Children)
            //{
            //    PointD newOriginPos = coordinateTransformer.Transform(item.GetOriginPos());
            //    // Pattern原点为相对Workpiece的系统坐标
            //    item.Origin.X = (newOriginPos.ToSystem() - pattern.Program.Workpiece.GetOriginSys()).X;
            //    item.Origin.Y = (newOriginPos.ToSystem() - pattern.Program.Workpiece.GetOriginSys()).Y;
            //}

            correctPatternRecursive(pattern, patternOldOrigin, patternNewOrigin, coordinateTransformer);

            //pattern.NeedMarkCorrect = false;
            return(0);
        }
Exemple #20
0
 /// <summary>
 /// Load程序后,第一次加载显示Pattern内容后,拍摄Mark点校正Pattern原点及轨迹命令坐标
 /// </summary>
 /// <param name="patternOldOrigin">Pattern原点被校正前的位置</param>
 /// <param name="coordinateTransformer">根据Mark点拍摄结果生成的坐标校正器</param>
 /// <param name="patternNewOrigin">Pattern原点被校正后的位置</param>
 public abstract void Correct(PointD patternOldOrigin, CoordinateTransformer coordinateTransformer, PointD patternNewOrigin);