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> /// 根据拍照得到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); } }
/// <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); }