标签:ObjectId C# 右上角 Polyline 左下角 源代码 图幅 图框
之前遇见一个客户问题,要将每一个图幅网格进行向外偏移一定距离,保证每张图幅都有一部分重叠度。
认真思考了一下就是向图面添加由多段线构成的正四边形、我的设计思路是这样的:
首先进行选择集过滤,因为在图形中不只有图框线,还有注记等其他实体,将其他实体过滤掉、只选择图框线;
第二、对选择的图形进行循环,获取每个图框的ObjectId,根据ObjectId获取实体的外包矩形,得到左下角点和右上角点,因为是正四边形,外包矩形和图幅网格图形一致,这样就拿到了图框的左下角点和右上角点的坐标;
第三、根据偏移的距离构造出新图框的左下角点和右上角点,并交会出新图框的另外两个角点的坐标;
第四、在内存中新建Polyline对象,将点按顺序依次连接并闭合;最后、向图面添加实体,提交数据。
程序编写流程
下图是目前原始图框各点和外扩后图框各点之间的对应关系图,黑色边框是目前原始图框边线,minPoint和maxPoint分别为图框的左下角点和右上角点。根据偏移距离构造出新的图框(红色框线)。
构建新图框示意图
代码如下:(文末有源代码下载链接)
在上面代码中ed.GetSelection()是提示用户从屏幕拾取对象,选择的结果保存在PromptSelectionResult中;
如果用户成功选择,则从PromptSelectionResul能获取被选中的实体集合,得到ObjectId数组,之后循环数组中每一个ObjectId,按照我们的设计流程进行逐个生成新图框。
Polyline是CAD中多段线,我们在内存中创建一个Polyline对象并调用它的AddVertexAt()方法向多段线中增加顶点;
AddVertexAt()方法有五个参数其中第一个为点的序号,第二个为点的坐标,第三个为凸度,第四个和第五个分别为起始宽度和结束宽度;
最后将Polyline的Closed属性设为true,将新图框闭合。
代码执行效果如下:
程序执行结果
标签:ObjectId,C#,右上角,Polyline,左下角,源代码,图幅,图框 来源: https://blog.51cto.com/u_15127644/2774908
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。