Beispiel #1
0
        /// <summary>
        /// Calculates the ModelROI region for all objects contained
        /// in ROIList, by adding and subtracting the positive and
        /// negative ROI objects.
        /// </summary>
        public bool DefineModelROI()
        {
            HalconDotNet.HRegion tmpAdd, tmpDiff, tmp;
            double row, col;

            if (_signROI == SIGN_ROI_NONE)
            {
                return(true);
            }

            tmpAdd  = new HalconDotNet.HRegion();
            tmpDiff = new HalconDotNet.HRegion();
            tmpAdd.GenEmptyRegion();
            tmpDiff.GenEmptyRegion();

            for (int i = 0; i < ROIList.Count; i++)
            {
                switch (((ROI)ROIList[i]).GetROISign())
                {
                case ROI.SIGN_NEGATIVE:
                    tmp     = ((ROI)ROIList[i]).GetRegion();
                    tmpDiff = tmp.Union2(tmpDiff);
                    break;

                case ROI.SIGN_POSITIVE:
                    tmp    = ((ROI)ROIList[i]).GetRegion();
                    tmpAdd = tmp.Union2(tmpAdd);
                    break;
                }
            }

            if (this.ModelROI != null)
            {
                this.ModelROI.Dispose();
            }

            this.ModelROI = null;

            if (tmpAdd.AreaCenter(out row, out col) > 0)
            {
                tmp = tmpAdd.Difference(tmpDiff);
                if (tmp.AreaCenter(out row, out col) > 0)
                {
                    this.ModelROI = tmp;
                }
            }

            if (this.ModelROI == null || ROIList.Count == 0)
            {
                return(false);
            }

            return(true);
        }
Beispiel #2
0
        public override HalconDotNet.HRegion GetRegion()
        {
            HalconDotNet.HRegion rgInternal = new HalconDotNet.HRegion();
            rgInternal.GenCircle(_locateRow, _locateCol, _radiusInternal);

            HalconDotNet.HRegion rgExternal = new HalconDotNet.HRegion();
            rgExternal.GenCircle(_locateRow, _locateCol, _radiusExternal);

            HalconDotNet.HRegion rg = new HalconDotNet.HRegion();
            rg.Dispose();

            //计算圆环区域:半径大的圆与半径小的圆之间的差集
            rg = (_radiusExternal > _radiusInternal) ? rgExternal.Difference(rgInternal) : rgInternal.Difference(rgExternal);

            return(rg);
        }