From 07a7a051d8cbbae11e8f20657bad993df27436d0 Mon Sep 17 00:00:00 2001 From: "liu.wenjie" <783789228@qq.com> Date: Fri, 8 Apr 2022 17:05:31 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BF=AE=E5=A4=8D=E6=89=BE=E7=BA=BF?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=9A=84selectObject=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=AE=9E=E6=97=B6=E8=B7=9F=E9=9A=8F=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=202=E3=80=81=E5=8F=AF=E4=BB=A5=E9=87=8D=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=89=BE=E7=BA=BF=E5=B7=A5=E5=85=B7=E7=9A=84=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE=203=E3=80=81=E5=9C=A8=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=B6=E5=8A=A0=E5=85=A5=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E5=85=B6=E4=BB=96=E4=BA=8B=E4=BB=B6=E6=9B=B4=E6=94=B9?= =?UTF-8?q?UI=E5=8F=82=E6=95=B0=E7=9A=84=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E4=BB=A5=E8=A7=A3=E5=86=B3=E5=B7=A5=E5=85=B7=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BF=9D=E5=AD=98=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vs/VisionEdit/v14/.suo | Bin 683520 -> 690688 bytes FindLine/FindLine.cs | 122 +++++++++++++++++++++--- FindLine/FindLineTool.csproj | 3 + FindLine/FindLineToolRun.cs | 2 +- FindLine/FormFindLine.Designer.cs | 17 ++++ FindLine/FormFindLine.cs | 23 ++++- PMAlignTool/FormPMAlignTool.Designer.cs | 8 ++ PMAlignTool/FormPMAlignTool.cs | 17 ++++ PMAlignTool/FormPMAlignTool.resx | 15 --- PMAlignTool/PMAlign.cs | 62 ++++-------- PMAlignTool/PMAlignToolRun.cs | 4 +- VisionEdit/FormMain.cs | 1 + VisionEdit/bin/Debug/DockPanel.config | Bin 5352 -> 5352 bytes 13 files changed, 197 insertions(+), 77 deletions(-) diff --git a/.vs/VisionEdit/v14/.suo b/.vs/VisionEdit/v14/.suo index 9159d43b2a2324eb449e3fea518dacf6c715c993..33a5d4378ba115cb4830e66a3020122ba0a2dce4 100644 GIT binary patch delta 15487 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 F`9EFCScm`s delta 12491 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 Ae*gdg diff --git a/FindLine/FindLine.cs b/FindLine/FindLine.cs index cc3c371..5d18adb 100644 --- a/FindLine/FindLine.cs +++ b/FindLine/FindLine.cs @@ -16,10 +16,53 @@ namespace FindLineTool /// public PosXYU inputPose = new PosXYU(); /// + /// 输入姿态 + /// + public HTuple inputPoseHomMat2D = new HTuple(); + /// +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> 751e985 (1、修复找线工具的selectObject无法实时跟随的问题) +======= +>>>>>>> 8c64a4f (1、修复找线工具的selectObject无法实时跟随的问题) +======= +>>>>>>> 751e985 (1、修复找线工具的selectObject无法实时跟随的问题) + /// 位置修正姿态 + /// + public HTuple changePoseHomMat2D = new HTuple(); + /// + /// 制作模板时的位姿 +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +======= +======= +>>>>>>> fa76389 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> b070592 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> fa76389 (修正FindLine工具无法位置跟随的问题) /// 制作模板时的输入位姿 +>>>>>>> b070592 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> 751e985 (1、修复找线工具的selectObject无法实时跟随的问题) +======= +>>>>>>> 8c64a4f (1、修复找线工具的selectObject无法实时跟随的问题) +======= +>>>>>>> 751e985 (1、修复找线工具的selectObject无法实时跟随的问题) /// public PosXYU templatePose = new PosXYU(); /// + /// 修改的位姿 + /// + public HTuple changedPose = new HTuple(); + /// /// 卡尺 /// public HObject contoursDisp = null; @@ -50,7 +93,11 @@ namespace FindLineTool /// /// 新的跟随姿态变化后的预期线信息 /// - HTuple newExpectLineStartRow = new HTuple(200), newExpectLineStartCol = new HTuple(200), newExpectLineEndRow = new HTuple(200), newExpectLineEndCol = new HTuple(600); + public HTuple modelStartRow = new HTuple(200), modelStartCol = new HTuple(200), modelEndRow = new HTuple(200), modelEndCol = new HTuple(600); + /// + /// 新的跟随姿态变化后的预期线信息 + /// + public HTuple newExpectLineStartRow = new HTuple(200), newExpectLineStartCol = new HTuple(200), newExpectLineEndRow = new HTuple(200), newExpectLineEndCol = new HTuple(600); ///// ///// 区域中心行坐标 ///// @@ -214,7 +261,16 @@ namespace FindLineTool FormFindLine.Instance.myHwindow.DispHWindow.ClearWindow(); DispImage(); } - + // 更新模板线的位置,并生成变换矩阵 + public void UpdateModelLineLocation() + { + // 计算新的位置线和转换之后位置线之间的差异,再将差异补偿到模板位置线中 + HOperatorSet.VectorToSimilarity(new HTuple(newExpectLineStartRow, newExpectLineEndRow), new HTuple(newExpectLineStartCol, newExpectLineEndCol), + new HTuple(expectLineStartRow, expectLineEndRow), new HTuple(expectLineStartCol, expectLineEndCol), out changePoseHomMat2D); + // 更新位置 + HOperatorSet.AffineTransPixel(changePoseHomMat2D, modelStartRow, modelStartCol, out modelStartRow, out modelStartCol); + HOperatorSet.AffineTransPixel(changePoseHomMat2D, modelEndRow, modelEndCol, out modelEndRow, out modelEndCol); + } public override void Run(SoftwareRunState softwareRunState) { @@ -235,20 +291,62 @@ namespace FindLineTool { UpdateImage(); } - if (inputPose != null) + if (inputPoseHomMat2D != null) { - HTuple Row = inputPose.X - templatePose.X; - HTuple Col = inputPose.Y - templatePose.Y; - HTuple angle = inputPose.U - templatePose.U; +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD + //对预期线的起始点做放射变换 + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelStartRow, modelStartCol, out newExpectLineStartRow, out newExpectLineStartCol); + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelEndRow, modelEndCol, out newExpectLineEndRow, out newExpectLineEndCol); +======= +======= +>>>>>>> fa76389 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> b070592 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> fa76389 (修正FindLine工具无法位置跟随的问题) + //HTuple Row = inputPose.X - templatePose.X; + //HTuple Col = inputPose.Y - templatePose.Y; + //HTuple angle = inputPose.U - templatePose.U; - HTuple _homMat2D; - HOperatorSet.HomMat2dIdentity(out _homMat2D); - HOperatorSet.HomMat2dRotate(_homMat2D, (HTuple)(angle), (HTuple)templatePose.X, (HTuple)templatePose.Y, out _homMat2D); - HOperatorSet.HomMat2dTranslate(_homMat2D, (HTuple)(Row), (HTuple)(Col), out _homMat2D); + //HTuple _homMat2D; + //HOperatorSet.HomMat2dIdentity(out _homMat2D); + //HOperatorSet.HomMat2dRotate(_homMat2D, (HTuple)(angle), (HTuple)templatePose.X, (HTuple)templatePose.Y, out _homMat2D); + //HOperatorSet.HomMat2dTranslate(_homMat2D, (HTuple)(Row), (HTuple)(Col), out _homMat2D); //对预期线的起始点做放射变换 - HOperatorSet.AffineTransPixel(_homMat2D, (HTuple)expectLineStartRow, (HTuple)expectLineStartCol, out newExpectLineStartRow, out newExpectLineStartCol); - HOperatorSet.AffineTransPixel(_homMat2D, (HTuple)expectLineEndRow, (HTuple)expectLineEndCol, out newExpectLineEndRow, out newExpectLineEndCol); + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, (HTuple)expectLineStartRow, (HTuple)expectLineStartCol, out newExpectLineStartRow, out newExpectLineStartCol); + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, (HTuple)expectLineEndRow, (HTuple)expectLineEndCol, out newExpectLineEndRow, out newExpectLineEndCol); +<<<<<<< HEAD +<<<<<<< HEAD +<<<<<<< HEAD +>>>>>>> b070592 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> fa76389 (修正FindLine工具无法位置跟随的问题) +======= + //对预期线的起始点做放射变换 + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelStartRow, modelStartCol, out newExpectLineStartRow, out newExpectLineStartCol); + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelEndRow, modelEndCol, out newExpectLineEndRow, out newExpectLineEndCol); +>>>>>>> 751e985 (1、修复找线工具的selectObject无法实时跟随的问题) +======= + //对预期线的起始点做放射变换 + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelStartRow, modelStartCol, out newExpectLineStartRow, out newExpectLineStartCol); + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelEndRow, modelEndCol, out newExpectLineEndRow, out newExpectLineEndCol); +>>>>>>> 8c64a4f (1、修复找线工具的selectObject无法实时跟随的问题) +======= +>>>>>>> b070592 (修正FindLine工具无法位置跟随的问题) +======= +>>>>>>> fa76389 (修正FindLine工具无法位置跟随的问题) +======= + //对预期线的起始点做放射变换 + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelStartRow, modelStartCol, out newExpectLineStartRow, out newExpectLineStartCol); + HOperatorSet.AffineTransPixel(inputPoseHomMat2D, modelEndRow, modelEndCol, out newExpectLineEndRow, out newExpectLineEndCol); +>>>>>>> 751e985 (1、修复找线工具的selectObject无法实时跟随的问题) } else { diff --git a/FindLine/FindLineTool.csproj b/FindLine/FindLineTool.csproj index cae03de..5b451a7 100644 --- a/FindLine/FindLineTool.csproj +++ b/FindLine/FindLineTool.csproj @@ -34,6 +34,9 @@ C:\Program Files\MVTec\HALCON-19.05-Progress\bin\dotnet20\halcondotnet.dll + + ..\VisionEdit\bin\Debug\ThirdLib\SunnyUI.dll + diff --git a/FindLine/FindLineToolRun.cs b/FindLine/FindLineToolRun.cs index d7d6323..e3b32f7 100644 --- a/FindLine/FindLineToolRun.cs +++ b/FindLine/FindLineToolRun.cs @@ -59,7 +59,7 @@ namespace FindLineTool myFindLine.inputImage = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HObject; break; case "InputPos": - myFindLine.inputPose = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as PosXYU; + myFindLine.inputPoseHomMat2D = myJob.GetToolInfoByToolName(sourceToolName).GetOutput(toolItem).value as HTuple; break; default: break; diff --git a/FindLine/FormFindLine.Designer.cs b/FindLine/FormFindLine.Designer.cs index 8994546..6f7ba4b 100644 --- a/FindLine/FormFindLine.Designer.cs +++ b/FindLine/FormFindLine.Designer.cs @@ -71,6 +71,7 @@ namespace FindLineTool this.label7 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); this.label9 = new System.Windows.Forms.Label(); + this.btnSetModelPose = new Sunny.UI.UISymbolButton(); this.toolStrip1.SuspendLayout(); this.statusStrip.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); @@ -189,6 +190,7 @@ namespace FindLineTool // // groupBox1 // + this.groupBox1.Controls.Add(this.btnSetModelPose); this.groupBox1.Controls.Add(this.label6); this.groupBox1.Controls.Add(this.tbx_minScore); this.groupBox1.Controls.Add(this.label5); @@ -544,6 +546,20 @@ namespace FindLineTool this.label9.TabIndex = 105; this.label9.Text = "起点列坐标:"; // + // btnSetModelPose + // + this.btnSetModelPose.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnSetModelPose.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnSetModelPose.IsScaled = false; + this.btnSetModelPose.Location = new System.Drawing.Point(40, 437); + this.btnSetModelPose.MinimumSize = new System.Drawing.Size(1, 1); + this.btnSetModelPose.Name = "btnSetModelPose"; + this.btnSetModelPose.Size = new System.Drawing.Size(352, 35); + this.btnSetModelPose.Symbol = 361771; + this.btnSetModelPose.TabIndex = 334; + this.btnSetModelPose.Text = "标定为模板位置"; + this.btnSetModelPose.Click += new System.EventHandler(this.btnSetModelPose_Click); + // // FormFindLine // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -624,5 +640,6 @@ namespace FindLineTool private System.Windows.Forms.ToolStripStatusLabel lb_RunStatus; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; private System.Windows.Forms.ToolStripStatusLabel lb_RunTime; + private Sunny.UI.UISymbolButton btnSetModelPose; } } \ No newline at end of file diff --git a/FindLine/FormFindLine.cs b/FindLine/FormFindLine.cs index deb6157..d363b8a 100644 --- a/FindLine/FormFindLine.cs +++ b/FindLine/FormFindLine.cs @@ -67,8 +67,10 @@ namespace FindLineTool myHwindow.Dock = DockStyle.Fill; InitTool(); } + bool isInit = false; private void InitTool() { + isInit = true; this.Text = myToolInfo.toolName; Application.DoEvents(); @@ -84,14 +86,16 @@ namespace FindLineTool tbx_caliperLength2.Text = myFindLine.weidth.ToString(); chBDispRec.Checked = myFindLine.dispRec; chBDispCross.Checked = myFindLine.dispCross; - // 将要编辑的线显示 - selected_drawing_object = HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, new HTuple[] { myFindLine.expectLineStartRow, myFindLine.expectLineStartCol, myFindLine.expectLineEndRow, myFindLine.expectLineEndCol }); + //// 将要编辑的线显示 + selected_drawing_object = myFindLine.inputPoseHomMat2D != null? HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, new HTuple[] { myFindLine.newExpectLineStartRow, myFindLine.newExpectLineStartCol, myFindLine.newExpectLineEndRow, myFindLine.newExpectLineEndCol }) + :HDrawingObject.CreateDrawingObject(HDrawingObject.HDrawingObjectType.LINE, new HTuple[] {myFindLine.modelStartRow, myFindLine.modelStartCol, myFindLine.modelEndRow, myFindLine.modelEndCol }); GC.KeepAlive(selected_drawing_object); selected_drawing_object.OnSelect(OnSelectDrawingObject); selected_drawing_object.OnAttach(OnSelectDrawingObject); selected_drawing_object.OnResize(OnSelectDrawingObject); selected_drawing_object.OnDrag(OnSelectDrawingObject); myHwindow.DispHWindow.AttachDrawingObjectToWindow(selected_drawing_object); + isInit = false; } /// /// 参数回调 @@ -122,7 +126,7 @@ namespace FindLineTool } /// /// 设定工具运行状态 - /// + /// ` /// 运行中的信息 /// 运行状态 public void SetToolStatus(string msg, ToolRunStatu status) @@ -146,8 +150,11 @@ namespace FindLineTool private void DispSetCheck(object sender, EventArgs e) { - myFindLine.dispRec = chBDispRec.Checked ? true : false; - myFindLine.dispCross = chBDispCross.Checked ? true : false; + if(!isInit) + { + myFindLine.dispRec = chBDispRec.Checked ? true : false; + myFindLine.dispCross = chBDispCross.Checked ? true : false; + } } private void FormFindLine2_FormClosing(object sender, FormClosingEventArgs e) @@ -157,5 +164,11 @@ namespace FindLineTool this.Dispose(); GC.Collect(); } + + private void btnSetModelPose_Click(object sender, EventArgs e) + { + myFindLine.UpdateModelLineLocation(); + MessageBox.Show("模板线位置已更新"); + } } } diff --git a/PMAlignTool/FormPMAlignTool.Designer.cs b/PMAlignTool/FormPMAlignTool.Designer.cs index 893e087..47a065f 100644 --- a/PMAlignTool/FormPMAlignTool.Designer.cs +++ b/PMAlignTool/FormPMAlignTool.Designer.cs @@ -1030,6 +1030,7 @@ namespace PMAlignTool this.nud_angleRange.Size = new System.Drawing.Size(102, 28); this.nud_angleRange.TabIndex = 182; this.nud_angleRange.Value = 10D; + this.nud_angleRange.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // ckb_autoContrast // @@ -1071,6 +1072,7 @@ namespace PMAlignTool this.nud_ScaleRange.Size = new System.Drawing.Size(104, 28); this.nud_ScaleRange.TabIndex = 180; this.nud_ScaleRange.Value = 1.1D; + this.nud_ScaleRange.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // nud_ScaleStart // @@ -1100,6 +1102,7 @@ namespace PMAlignTool this.nud_ScaleStart.Size = new System.Drawing.Size(96, 28); this.nud_ScaleStart.TabIndex = 179; this.nud_ScaleStart.Value = 0.9D; + this.nud_ScaleStart.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // nud_angleStart // @@ -1129,6 +1132,7 @@ namespace PMAlignTool this.nud_angleStart.Size = new System.Drawing.Size(96, 28); this.nud_angleStart.TabIndex = 176; this.nud_angleStart.Value = -10D; + this.nud_angleStart.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // cbx_polarity // @@ -1176,6 +1180,7 @@ namespace PMAlignTool this.nud_minScore.Size = new System.Drawing.Size(227, 26); this.nud_minScore.TabIndex = 173; this.nud_minScore.Value = 0.8D; + this.nud_minScore.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // nud_Timeout // @@ -1205,6 +1210,7 @@ namespace PMAlignTool this.nud_Timeout.Size = new System.Drawing.Size(227, 28); this.nud_Timeout.TabIndex = 177; this.nud_Timeout.Value = 500D; + this.nud_Timeout.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // nud_angleStep // @@ -1234,6 +1240,7 @@ namespace PMAlignTool this.nud_angleStep.Size = new System.Drawing.Size(227, 28); this.nud_angleStep.TabIndex = 175; this.nud_angleStep.Value = 1D; + this.nud_angleStep.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // nud_matchNum // @@ -1263,6 +1270,7 @@ namespace PMAlignTool this.nud_matchNum.Size = new System.Drawing.Size(227, 28); this.nud_matchNum.TabIndex = 174; this.nud_matchNum.Value = 1D; + this.nud_matchNum.ValueChanged += new Controls.DValueChanged(this.UIParams_ValueChanged); // // tkb_contrast // diff --git a/PMAlignTool/FormPMAlignTool.cs b/PMAlignTool/FormPMAlignTool.cs index a7378e4..a032cba 100644 --- a/PMAlignTool/FormPMAlignTool.cs +++ b/PMAlignTool/FormPMAlignTool.cs @@ -102,6 +102,7 @@ namespace PMAlignTool tkb_contrast.Value = myPMAlign.contrast; #endregion + isInitTool = false; } private void btnAcqNewModelImage_Click(object sender, EventArgs e) @@ -305,5 +306,21 @@ namespace PMAlignTool { lbl_contastValue.Text = tkb_contrast.Value.ToString(); } + + private void UIParams_ValueChanged(double value) + { + if (!isInitTool) + { + myPMAlign.minScore = nud_minScore.Value; + myPMAlign.startAngle = Convert.ToInt16(nud_angleStart.Value); + myPMAlign.angleRange = Convert.ToInt16(nud_angleRange.Value); + myPMAlign.angleStep = Convert.ToInt16(nud_angleStep.Value); + myPMAlign.polarity = cbx_polarity.TextStr; + myPMAlign.isAutoConstants = ckb_autoContrast.Checked; + myPMAlign.minScale = nud_ScaleStart.Value; + myPMAlign.maxScale = nud_ScaleRange.Value; + } + } + } } diff --git a/PMAlignTool/FormPMAlignTool.resx b/PMAlignTool/FormPMAlignTool.resx index e90db2b..836d7e6 100644 --- a/PMAlignTool/FormPMAlignTool.resx +++ b/PMAlignTool/FormPMAlignTool.resx @@ -211,21 +211,6 @@ True - - True - - - True - - - True - - - True - - - True - 71 diff --git a/PMAlignTool/PMAlign.cs b/PMAlignTool/PMAlign.cs index 9422da9..2e15b7a 100644 --- a/PMAlignTool/PMAlign.cs +++ b/PMAlignTool/PMAlign.cs @@ -117,6 +117,10 @@ namespace PMAlignTool public HObject oldTrainImage { get; set; } public bool isCreateModel { get; set; } internal string pmaModelName { get; set; } = Guid.NewGuid().ToString(); + /// + /// 模板位置和实际位置的姿态差异 + /// + internal HTuple posHomMat2D = new HTuple(); public override void DispMainWindow(HWindow dispHWindow) { @@ -185,7 +189,7 @@ namespace PMAlignTool //对预期线的找模板区域做放射变换 } - UpdateParamsFromUI(); // 操作前先将UI中参数写入类 + // UpdateParamsFromUI(); // 操作前先将UI中参数写入类 HObject findModelImg = ProcessImage(inputImage); int ret = FindModelTemplate(findModelImg); ToolRunStatu myState = ret == 0 ? ToolRunStatu.Succeed : ToolRunStatu.Model_UnFound; @@ -239,6 +243,18 @@ namespace PMAlignTool } } + public void SetParamsFromUI() + { + minScore = FormPMAlignTool.Instance.nud_minScore.Value; + startAngle = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStart.Value); + angleRange = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleRange.Value); + angleStep = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStep.Value); + polarity = FormPMAlignTool.Instance.cbx_polarity.TextStr; + isAutoConstants = FormPMAlignTool.Instance.ckb_autoContrast.Checked; + minScale = FormPMAlignTool.Instance.nud_ScaleStart.Value; + maxScale = FormPMAlignTool.Instance.nud_ScaleRange.Value; + } + public int CreateModelTemplate() { HObject template; @@ -254,14 +270,7 @@ namespace PMAlignTool HOperatorSet.GenEmptyObj(out createModelImg); createModelImg = ProcessImage(inputImage); HOperatorSet.ReduceDomain(createModelImg, templateRegion, out template); - minScore = FormPMAlignTool.Instance.nud_minScore.Value; - startAngle = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStart.Value); - angleRange = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleRange.Value); - angleStep = Convert.ToInt16(FormPMAlignTool.Instance.nud_angleStep.Value); - polarity = FormPMAlignTool.Instance.cbx_polarity.TextStr; - isAutoConstants = FormPMAlignTool.Instance.ckb_autoContrast.Checked; - minScale = FormPMAlignTool.Instance.nud_ScaleStart.Value; - maxScale = FormPMAlignTool.Instance.nud_ScaleRange.Value; + //SetParamsFromUI(); try { HTuple rows, cols, angles, scores, scale; @@ -291,38 +300,6 @@ namespace PMAlignTool out cols, out angles, out scores); - /* - HOperatorSet.CreateScaledShapeModel(template, - "auto", - ((HTuple)startAngle).TupleRad(), - ((HTuple)angleRange).TupleRad(), - "auto", - minScale, - maxScale, - "auto", - "auto", - polarity, - isAutoConstants ? (HTuple)"auto" : (HTuple)contrast, - "auto", - out modelID); - HOperatorSet.FindScaledShapeModel(createModelImg, - (HTuple)modelID, - ((HTuple)startAngle).TupleRad(), - ((HTuple)angleRange - startAngle).TupleRad(), - minScale, - maxScale, - (HTuple)minScore, - (HTuple)matchNum, - (HTuple)0.5, - (HTuple)"least_squares", - (HTuple)0, - (HTuple)0.9, - out rows, - out cols, - out angles, - out scale, - out scores); - */ } else { @@ -354,6 +331,7 @@ namespace PMAlignTool { templatePose = new PosXYU { X = rows[0].D, Y = cols[0].D , U = angles[0].D }; } + } catch (Exception ex) { @@ -463,6 +441,7 @@ namespace PMAlignTool L_resultList.Add(matchResult); } MatchResult temp; + // 将匹配结果按分值由大到小排序 for (int i = 0; i < L_resultList.Count - 1; i++) { for (int j = i + 1; j < L_resultList.Count; j++) @@ -475,6 +454,7 @@ namespace PMAlignTool } } } + HOperatorSet.VectorAngleToRigid(templatePose.X, templatePose.Y, templatePose.U, L_resultList[0].Row, L_resultList[0].Col, L_resultList[0].Angle, out posHomMat2D); } if (softwareRunState == SoftwareRunState.Debug) { diff --git a/PMAlignTool/PMAlignToolRun.cs b/PMAlignTool/PMAlignToolRun.cs index bf5bc9d..08a072e 100644 --- a/PMAlignTool/PMAlignToolRun.cs +++ b/PMAlignTool/PMAlignToolRun.cs @@ -67,9 +67,7 @@ namespace PMAlignTool // 将输出值赋值到界面输出中 if (myPMAlign.L_resultList.Count > 0) { - L_toolList[toolIndex].toolOutput[0] = new ToolIO("GetPose", - new PosXYU { X = myPMAlign.L_resultList[0].Row, Y = myPMAlign.L_resultList[0].Col, U = myPMAlign.L_resultList[0].Angle }, - DataType.Pose); + L_toolList[toolIndex].toolOutput[0] = new ToolIO("GetPose", myPMAlign.posHomMat2D,DataType.Pose); L_toolList[toolIndex].toolOutput[1] = new ToolIO("GetPose.X", myPMAlign.L_resultList[0].Row, DataType.IntValue); L_toolList[toolIndex].toolOutput[2] = new ToolIO("GetPose.Y", myPMAlign.L_resultList[0].Col, DataType.IntValue); L_toolList[toolIndex].toolOutput[3] = new ToolIO("GetPose.Z", myPMAlign.L_resultList[0].Angle, DataType.DoubleValue); diff --git a/VisionEdit/FormMain.cs b/VisionEdit/FormMain.cs index 9f6b7b4..416d5a8 100644 --- a/VisionEdit/FormMain.cs +++ b/VisionEdit/FormMain.cs @@ -115,6 +115,7 @@ namespace VisionEdit if (dr == DialogResult.Yes) { VisionJobParams.pVisionProject.SaveObject(); + Environment.Exit(0); } else if (dr == DialogResult.Cancel) { diff --git a/VisionEdit/bin/Debug/DockPanel.config b/VisionEdit/bin/Debug/DockPanel.config index 605611e3030f8146af4af484426f1b4483c6d190..0c5b3988e8210be491a3021e90021e1d461acf88 100644 GIT binary patch delta 16 YcmaE%`9gEU52ndx9DJMEm>&rO06&xlTL1t6 delta 14 WcmaE%`9gEU4<<(A%|Dsm3jzQ&uLiFG