代码如下:
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;//其他情况程序结束
}
}
}