AUTOCAD二次开发实例:C#递增编号代码自学教程

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.EditorInput;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.Runtime;

using Autodesk.AutoCAD.Windows;

using DYH.Tools;

using IFoxCAD.Cad;

using System.Collections.Generic;

using Acap = Autodesk.AutoCAD.ApplicationServices.Application;

namespace DYH.Action._03.递增编号

{

    public class DiZengBianHao

    {

        private static double textHeight = 300;//存放一个变量用于存储字高以便进行修改

        //递增编号

        [CommandMethod("DZBH")]

        public void DZBH()

        {

            var form = new DZBHForm();//建窗体

            form.Location = Acap.MainWindow.GetLocation();//窗体左上角设置为cad窗体左上角

            form.Show();//打开窗体(此时焦点会被新打开的窗体夺走)

            Win32Api.SetFocus(Acap.MainWindow.Handle);//再将窗体焦点设置回cad

            try

            {

                while (true)//循环放置

                {

                    //建拖拽类

                    var j1 = new JigEx((mouthPoint, drawEntities) =>

                     {

                         var text = new DBText()//建一个单行文字

                         {

                             TextString = DZBHForm.Qz + DZBHForm.number.ToString("00") + DZBHForm.Hz,//设置文字内容

                             TextStyleId = Env.Database.Textstyle,//文字样式设置为当前图纸文字样式

                             Height = textHeight,//文字高度

                             Position = mouthPoint,//插入点

                             VerticalMode = TextVerticalMode.TextVerticalMid,//对齐方式

                             HorizontalMode = TextHorizontalMode.TextCenter,

                             AlignmentPoint = mouthPoint,//对齐点

                         };

                         //由于拖拽文字点为左下角,想将其视觉效果设置为中心需要进行计算

                         var midPoint=text.GetBoxMidPoint();//获取包围盒中点

                         text.Position = new Point3d(2 * mouthPoint.X - midPoint.X, 2 * mouthPoint.Y - midPoint.Y, 0);//计算相对中心点的插入点位置

                         drawEntities.Enqueue(text);//文字加入拖拽队列

                     });

                    j1.SetOptions("\n选择编号位置s", new Dictionary<string, string>() { { "S", "设置文字高度(S)" } });//设置用户提示文字和关键字选项用来修改文字高度

                    var r1 = j1.Drag();//开始拖拽

                    if (r1.Status == PromptStatus.OK)//如果用户正确点击

                    {

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

                        {

                            tr.CurrentSpace.AddEntity(j1.Entitys);//将最后的图元加到图纸当前空间

                        }

                        //然后将编号加一

                        DZBHForm.NumberUp(form);

                    }

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

                    {

                        switch (r1.StringResult)

                        {

                            case "S"://如果用户输入了S,更改文字高度

                                var r2 = Env.Editor.GetDouble("\n请输入文字高度");

                                if (r2.Status == PromptStatus.OK) textHeight = r2.Value;//如果用户正确输入,赋值给textHeight

                                break;

                            case " "://如果用户输入空格,程序结束

                                return;

                        }

                    }

                    else return;//其他情况程序结束

                }

            }

            finally

            {

                while (!form.IsDisposed)

                {

                    form.Close();//最后关闭窗体

                }

            }

        }

    }

}

cut-off

窗体建议自己写一遍,不要复制我的

cut-off

//其他用到的函数

//包围盒

public static Extents3d BoundingBox(this Entity ent)

        {

            try

            {

                if (ent is BlockReference brf) return brf.GeometryExtentsBestFit();

                else return ent.GeometricExtents;

            }

            catch (Exception ex)

            {

                throw new Exception("获取包围盒错误"+ex.Message);

            }

        }

        /// <summary>

        /// 获取包围盒中点

        /// </summary>

        /// <param name="ent">实体</param>

        /// <returns>中点坐标</returns>

        public static Point3d GetBoxMidPoint(this Entity ent)

        {

            return ent.BoundingBox().MidPoint();

        }

//获取焦点

public static class Win32Api

    {

        [System.Runtime.InteropServices.DllImport("user32.dll")]

        public static extern IntPtr SetFocus(IntPtr hwnd);

    }

QR Code
微信扫一扫,欢迎咨询~

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

* 公司名称:

姓名不为空

手机不正确

公司不为空