C# GDI画图,自动识别画板空白区域并返回坐标


 

在工具箱双击画图工具,自动识别画板的空白区域返回坐标,流程引擎自动在空白区域画出图像。

C# 代码

 

C# 全选
        /// <summary>
        /// 获取流程设计器空白区域的x,y坐标
        /// 源码来源:CSFramework.Workflow工作流引擎
        /// </summary>
        /// <param name="width">要绘制的图元宽度</param>
        /// <param name="height">要绘制的图元高度</param>
        /// <returns></returns>
        public Point GetEmptyRegion(int width, int height)
        {
            const int FrameMargin = 50;
            const int MarginLeft = 200;
            const int MarginTop = 100;
            const int offset = 3;//偏移量

            Point point = new Point(MarginLeft, MarginTop);//默认返回的坐标位置
            List<IDrawElement> elements = this.AllElements; //获取设计器所有图元

            if (elements.Count == 0) return point;

            RectangleF[] rect1Scans, rect2Scans;
            Region region1, region2;
            bool isIntersect = false;//表示是否相交

            //通过两层循环设计器的宽度和高度,每次偏移3个像素生成检测区域。
            for (int x = MarginLeft; x <= _BitmapBackground.Width - FrameMargin; x += offset)
            {
                for (int y = MarginTop; y <= _BitmapBackground.Height - FrameMargin; y += offset)
                {
                    region1 = new Region(new Rectangle(x, y, width, height));
                    rect1Scans = region1.GetRegionScans(new Matrix());
                    isIntersect = false;

                    //循环现有节点
                    foreach (var obj in elements)
                    {
                        region2 = obj.Region;
                        rect2Scans = region2.GetRegionScans(new Matrix());
                        using (Region rgnIntersect = region1.Clone())
                        {
                            rgnIntersect.Intersect(region2);//求交集
                            //获取交集的切片
                            RectangleF[] rectIntersect = rgnIntersect.GetRegionScans(new Matrix());

                            //>0:表示区域有交集
                            if (rectIntersect.Length > 0)
                            {
                                isIntersect = true;
                                break;
                            }
                        }
                    }

                    //没有交集,返回坐标
                    if (isIntersect == false)
                    {
                        return new Point(x, y);
                    }
                }
            }

            return point;
        }

 

效果展示

 

红圈位置是流程设计器的空白区域。

C# GDI画图自动获取画板的空白区域绘制图像

 

自动获取空白区域并绘制图像。

 

C# GDI画图自动获取画板的空白区域绘制图像

 

 源码来源

源码来源:CSFramework.Workflow工作流引擎

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
评论列表

发表评论

评论内容
昵称:
关联文章

C# GDI画图自动识别画板空白区域返回坐标
SQL分割字符串返回
C#创建批处理文件自动运行
C#插入图片数据返回自增字段(ISID)的值
C# WebAPI控制器邮箱验证接口返回自动重定向HTML页面(原创)
SQLServer SQL函数解析JSON数据格式返回
开发技巧:弹出勾选窗体返回数据
C# 百度地图坐标获取详细地址
C/S框架新功能:自动检测升级包强制关闭应用程序进行版本升级
C# Winform DataGridView设置选定的区域为不可编辑
原创:SQLJOB作业自动备份数据库自动清除备份历史记录
指定单据号码自动打开业务单据窗体显示数据
LookupEdit关联更新其它文本输入框的值(自动带出参考数据赋值)
新增记录时自动生成记录的序号号码(或单据号码)填充文本框
DevExpress TreeList 自动加载数据源显示漂亮图标
客户服务模块 - 返回回单 - TMS - 物流运输管理系统
详述IComparer,IComparable接口,实现自定义方法比较对象大小排序(C#)
C#植入友商网在线服务实现同步用户注册接口实现
C# 实现条码图片自动生成功能
ADO Direct/WebService跨区域下载数据测试报告