示例#1
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);
        }
示例#2
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);
            }
        }
示例#3
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);
        }