CAD二次开发IFoxCAD框架系列(17)-图元操作

1. 图元添加

1.1 添加直线

        // 添加直线
        [CommandMethod(nameof(Test_AddLine1))]
        public void Test_AddLine1()
        {
            using var tr = new DBTrans();

            Line line1 = new Line(new Point3d(0, 0, 0), new Point3d(50, 50, 0));
            Line line2 = new Line(new Point3d(50, 50, 0), new Point3d(0, 50, 0));
            Line line3 = new Line(new Point3d(50, 50, 0), new Point3d(50, 0, 0));
            line1.ColorIndex = 1;
            line2.ColorIndex = 1;
            line3.ColorIndex = 1;
            tr.CurrentSpace.AddEntity(line1,line2,line3);
        }

在这里插入图片描述

1.2 画弧

 [CommandMethod(nameof(Test_Drawarc))]
 public void Test_Drawarc() {
     using DBTrans tr = new();
     Arc arc1 = ArcEx.CreateArcSCE(new Point3d(2, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 2, 0));// 起点,圆心,终点
     Arc arc2 = ArcEx.CreateArc(new Point3d(4, 0, 0), new Point3d(0, 0, 0), Math.PI / 2);            // 起点,圆心,弧度
     Arc arc3 = ArcEx.CreateArc(new Point3d(1, 0, 0), new Point3d(0, 0, 0), new Point3d(0, 1, 0));   // 起点,圆上一点,终点
     tr.CurrentSpace.AddEntity(arc1, arc2, arc3);
 }

在这里插入图片描述

1.3 画圆

[CommandMethod(nameof(Test_DrawCircle))]
public void Test_DrawCircle()
{
    using DBTrans tr = new();
    var circle1 = CircleEx.CreateCircle(new Point3d(0, 0, 0), new Point3d(1, 0, 0));// 两点画圆(直径上的两个点)
    var circle2 = CircleEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(2, 0, 0), new Point3d(0, 2, 0));// 三点画圆,成功
    var circle3 = CircleEx.CreateCircle(new Point3d(-2, 0, 0), new Point3d(0, 0, 0), new Point3d(2, 0, 0));// 三点画圆,失败
    tr.CurrentSpace.AddEntity(circle1, circle2!);
    if (circle3 is not null)
        tr.CurrentSpace.AddEntity(circle3);
    else
        Env.Printl("三点画圆失败");
}

在这里插入图片描述

1.4 多段线的绘制

 [CommandMethod(nameof(Test_AddPolyline3))]
 public void Test_AddPolyline3()
 {
     using var tr = new DBTrans();

     var pts = new List<Point3d>
 {
     new(0, 0, 0),
     new(0, 1, 0),
     new(1, 1, 0),
     new(1, 0, 0)
 };
     var pline = pts.CreatePolyline();
     tr.CurrentSpace.AddEntity(pline);

     var pline1 = pts.CreatePolyline(p =>
     {
         p.Closed = true;
         p.ConstantWidth = 0.2;
         p.ColorIndex = 1;
     });
     tr.CurrentSpace.AddEntity(pline1);
 }

在这里插入图片描述

2. 图元操作

2.1 遍历图元名字

 [CommandMethod(nameof(iterateEntity))]
 public void iterateEntity()
 {
     using DBTrans tr = new DBTrans();
     tr.CurrentSpace.ForEach(id =>
     {
         var ent = id.GetObject<Entity>();
         //如果要修改图元时var entity1 = id.GetObject<Entity>(OpenMode.ForWrite);
         ent?.GetRXClass().DxfName.Print();
         Env.Print("\n ");
         Env.Print("\nDXF 名称:    " + ent?.GetRXClass().Name);
         //AcDbLine,AcDbPolyline,AcDbText
         Env.Print("\n图元名称:    " + ent?.GetType().Name);
         //Line,Polyline,DBText
         Env.Print("\nObjectID:    " + ent?.ToString());
         Env.Print("\nHandle:      " + ent?.Handle.ToString());
         if (ent is Line acdbLine)//如果ent是直线,转换为直线变量cdbLine
         {
             Env.Print("\nacDbLinet长度为: ");
             //var txt = acdbLine.GetProperty("Length");//取得直度长度属性
             var txt = acdbLine.Length;  // 这么写就可以了
             txt.Print();
         }
         Env.Print("\n********************\n");
     });
 }

 [CommandMethod(nameof(Test_PrintDxfname))]
 public void Test_PrintDxfname()
 {
     using var tr = new DBTrans();

     tr.CurrentSpace.ForEach(id => {
         id.GetObject<Entity>()?.GetRXClass().DxfName.Print();
     });
 }

2.2 移动

源码
在这里插入图片描述

用法

ent.Move(pt1, pt2);

2.3 旋转

源码
在这里插入图片描述

ent.Rotation(new(100, 0, 0), Math.PI / 2);

2.4 镜像

源码:
在这里插入图片描述

用法

// 沿两点组成的线镜像
ent.Mirror(pt1, pt2);
// 沿面镜像
var plane = new Plane(Point3d.Origin, Vector3d.ZAxis);
ent.Mirror(plane);
// 沿对称点镜像
ent.Mirror(pt);

2.5 缩放

源码
在这里插入图片描述

用法

ent.Scale(scaleCenter,scaleValue);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术闲聊DD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值