AUTOCAD二次开发实例:C#绘制跑道代码解析

原来有代码块功能,尴了个尬,以前不知道。。。

using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using IFoxCAD.Cad;
using System;

namespace DYH.Action
{
    public class _07画跑道
    {
        [CommandMethod("HPD")]
        public void HPD()
        {
            var r1 = Env.Editor.GetPoint("\n选择插入点");//获取插入点
            if (r1.Status != PromptStatus.OK) return;//如果用户没有正确输入则程序结束
            var pt0 = r1.Value.Ucs2Wcs();//拿到坐标点
            var pdo2 = new PromptDoubleOptions("\n输入中线长度") { AllowNone = true, AllowZero = false, AllowNegative = false };//设置实数获取选项,限值≥0
            var r2 = Env.Editor.GetDouble(pdo2);//提示用户输入长度
            if (r2.Status != PromptStatus.OK) return;//吐过用户没有正确输入长度则程序结束
            var length = r2.Value;//拿到长度
            var j1 = new JigEx((mp, de) =>//新建拖拽
            {
                var raidus = Math.Abs(mp.Y - pt0.Y);//半径等于Y的差值的绝对值
                var width = (length - raidus * Math.PI * 2) * 0.5;//直段宽等于总长度减圆的周长再除以二//这个地方应该是乘0.5
                if (width < 0) { width = 0;raidus = length / Math.PI / 2; }//直段长度<0时,图形是不成立的,这时候会是个圆,让width等于0,半径最大
                var pt1 = new Point2d(pt0.X - width * 0.5, pt0.Y - raidus);//计算多段线4个角点位置,竖直的两边设置凸度变成半圆
                var pt2 = new Point2d(pt1.X + width, pt1.Y);
                var pt3 = new Point2d(pt2.X, pt0.Y + raidus);//
                var pt4 = new Point2d(pt1.X, pt3.Y);
                var pl = new Polyline();//新建多段线
                pl.AddVertexAt(0, pt1, 0, 0, 0);
                pl.AddVertexAt(1, pt2, 1, 0, 0);
                pl.AddVertexAt(2, pt3, 0, 0, 0);
                pl.AddVertexAt(3, pt4, 1, 0, 0);
                pl.Closed = true;//曲线为闭合曲线
                var dbc1 = pl.GetOffsetCurves(2);//将多段线往两边分别偏移2mm
                var dbc2 = pl.GetOffsetCurves(-2);
                //将所有线加入拖拽队列
                foreach (var obj in dbc1)
                {
                    if (obj is Entity ent) de.Enqueue(ent);
                }
                foreach (var obj in dbc2)
                {
                    if (obj is Entity ent) de.Enqueue(ent);
                }
                pl.ColorIndex = 1;//中间线改为红色
                de.Enqueue(pl);
            });
            j1.SetOptions(pt0.Ucs2Wcs(), msg: "\n选择拖拽点");//设置拖拽选项
            var r3 = j1.Drag();//开始拖拽
            if (r3.Status == PromptStatus.OK)//如果用户正确点击
            {
                using (var tr = new DBTrans())//建事务
                {
                    tr.CurrentSpace.AddEntity(j1.Entitys);//将拖拽的图形加入图纸
                }
            }
            else return;//其他情况程序结束
        }
    }
}

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

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

* 公司名称:

姓名不为空

手机不正确

公司不为空