当前位置: 服务支持 >  技术文档 >  AUTOCAD二次开发实例:C#闭合区域面积一键标注代码

AUTOCAD二次开发实例:C#闭合区域面积一键标注代码

阅读数 75
点赞 93
copyright 著作权
article_banner

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Runtime;

using DYH.Tools;

using IFoxCAD.Cad;

namespace DYH.Action

{

    public class BiHeMianJi

    {

        private static double textHeight = 300;//定义一个变量来储存文字高度方便修改

        //今天来搞一个标注闭合区域面积的功能

        [CommandMethod("BHMJ")]

        public void BHMJ()

        {

            using (var tr = new DBTrans())

            {

                if (!tr.LayerTable.Has("面积")) tr.LayerTable.Add("面积", 1);//先创建一个图层用来放置边界线与面积//少了个叹号,应该是没有图层的时候创建图层

            }

            while (true)//循环放置

            {

                var ppo1 = new PromptPointOptions("\n请选择闭合区域内部或[设置文字高度(D)]") { AllowNone = true };//设置获取坐标选项

                ppo1.Keywords.Add("D");//加入关键字D

                var r1 = Env.Editor.GetPoint(ppo1);//提示用户获取坐标

                if (r1.Status == PromptStatus.OK)//如果用户正确选择坐标

                {

                    //如果用户正确选择坐标执行以下操作

                    var pt1 = r1.Value.Wcs2Ucs();//拿到用户选择的坐标

                    var dbc = Env.Editor.TraceBoundary(pt1,false);//根据坐标获取到边界线集合,(false为不进行孤岛检测)

                    if (dbc.Count == 1)//如果成功检测到边界线,会得到1条曲线,判断数量是否为1(因为不进行孤岛检测所以只能是1或者0)

                    {

                        if(dbc[0] is Curve cur && cur.Closed)//以防万一再判断一下dbc里的对象是不是闭合曲线

                        {

                            cur.Layer = "面积"; //设置图层

                            var area = cur.Area / 1e6;//获取面积,单位平方毫米转为平方米除以10的6次方

                            var midpt = cur.GetBoxMidPoint();//获取闭合区域的包围盒中点坐标,为了吧文字放在这里

                            var text1 = new DBText()//创建一个文字

                            {

                                TextString = "面积:" + area.ToString("0.00") + "m²",//设置文字内容//这里没有保留两位小数导致小数点位数过多

                                Height = textHeight,//文字高度

                                Position = midpt,//插入点

                                VerticalMode=TextVerticalMode.TextVerticalMid,//设置对齐方式为正中

                                HorizontalMode=TextHorizontalMode.TextCenter,

                                AlignmentPoint=midpt,//设置对齐点

                                WidthFactor=0.7,//设置宽度因子

                                Layer="面积",//设置图层

                            };

                            using (var tr = new DBTrans())//建事务

                            {

                                tr.CurrentSpace.AddEntity(cur, text1);//将边界线和文字加入到图纸中

                            }

                        }

                    }

                }

                else if (r1.Status == PromptStatus.Keyword)//如果用户输入了关键字

                {

                    switch (r1.StringResult)

                    {

                        case "D":

                            var r2 = Env.Editor.GetDouble("\n输入文字高度<" + textHeight + ">");//提示用户设置文字高度

                            if (r2.Status == PromptStatus.OK && r2.Value > 0) textHeight = r2.Value;//如果用户正确输入且数字大于0,将文字高度赋值

                            break;

                    }

                }

                else return;//其他情况退出程序

            }

        }

    }

}

相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空