AUTOCAD二次开发实例:C# Jig使用(分集水器)代码自学

代码如下:

using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using DYH.Tools;
using IFoxCAD.Cad;
using System;
using System.Collections.Generic;

namespace DYH.Action;
public class FenJiShuiQi
{
    /// <summary>
    /// 简单的例子演示一下使用Jig的拖放
    /// </summary>
    [CommandMethod("FJSQ")]
    public void FJSQ()
    {
        using var tr = new DBTrans();//建事务
        var layerName = "分集水器";
        if (!tr.LayerTable.Has(layerName)) tr.LayerTable.Add(layerName, 7);//debug图层
        var r1 = Env.Editor.GetInteger("\n输入分支数");
        if (r1.Status != PromptStatus.OK) return;
        var num = r1.Value;
        if (num <= 0) return;//小于0时不符合要求程序结束
        //先以坐标原点画出你需要的图形,然后加入列表(图形可以自己发挥,最终得到一个图源列表entList)
        var c1 = new Circle(Point3d.Origin, Vector3d.ZAxis, 50);
        var c2 = new Circle(new Point3d(0, 100, 0), Vector3d.ZAxis, 50);
        var pl1 = new List<Point2d>() { Point2d.Origin, new Point2d(0, 250) }.ToPolyline(35, false);
        var pl2 = new Point2d(-75, 250).GetRecPoint2ds(new Point2d(75, (num * 2 - 1) * 30 + 310)).ToPolyline(0, true);//这里要闭合
        var entList = new List<Entity>() { c1, c2, pl1, pl2 };
        for (int i = 0; i < num * 2; i++)
        {
            entList.Add(new Line(new Point3d(75, 285 + i * 30, 0), new Point3d(375, 285 + i * 30, 0)));
        }
        entList.ForEach(e => e.Layer = layerName);
        //到此entList完成
        while (true)
        {
            //循环操作
            var j2 = new JigEx((mp, de) =>
            {
                //将图元列表中的每一个图元从原点复制一份到鼠标点,然后加入队列
                foreach (var ent in entList)
                {
                    de.Enqueue(ent.GetTransformedCopy(Matrix3d.Displacement(new Vector3d(mp.Z20().ToArray()))));
                }
            });
            j2.SetOptions("\n选择放置的位置或[旋转90°(A)/左右翻转(F)/上下翻转(S)]").SetKeyword("A", "S", "F", " ");
            var r2 = j2.Drag();//开始拖拽
            if (r2.Status == PromptStatus.OK)//如果正确选择坐标,将队列中图元加到图纸
            {
                tr.CurrentSpace.AddEntity(j2.Entitys); return;
            }
            else if (r2.Status == PromptStatus.Keyword)//如果用户输入了关键字(这里关键字写错了)
            {
                switch (r2.StringResult.ToUpper())
                {
                    case "A"://旋转90°,将列表里每个图元进行旋转,参考点为坐标原点
                        foreach (var ent in entList)
                        {
                            ent.Rotation(Point3d.Origin, Math.PI * 0.5);
                        }
                        break;
                    case "S"://上下翻转,将列表里每个图元沿X轴镜像
                        foreach (var ent in entList)
                        {
                            ent.Mirror(Point3d.Origin, new Point3d(100, 0, 0));
                        }
                        break;
                    case "F"://左右翻转,将列表里每个图元沿Y轴镜像
                        foreach (var ent in entList)
                        {
                            ent.Mirror(Point3d.Origin, new Point3d(0, 100, 0));
                        }
                        break;
                    case " ": return;//空格则程序结束
                }
            }
            else return;//其他情况程序结束
        }
    }
}

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

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

* 公司名称:

姓名不为空

手机不正确

公司不为空