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

1. 图元添加

1.1 添加直线

csharp 复制代码
        // 添加直线
        [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 画弧

csharp 复制代码
 [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 画圆

csharp 复制代码
[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 多段线的绘制

csharp 复制代码
 [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 遍历图元名字

csharp 复制代码
 [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 移动

源码

用法

csharp 复制代码
ent.Move(pt1, pt2);

2.3 旋转

源码

csharp 复制代码
ent.Rotation(new(100, 0, 0), Math.PI / 2);

2.4 镜像

源码:

用法

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

2.5 缩放

源码

用法

csharp 复制代码
ent.Scale(scaleCenter,scaleValue);
相关推荐
yngsqq7 天前
CAD一键批量标注线长度——CAD c#二次开发
cad
抠头专注python环境配置10 天前
解决Windows安装PythonOCC报错:从“No module named ‘OCC’ ”到一键成功
人工智能·windows·python·3d·cad·pythonocc
wuchen100410 天前
CAD二次开发获得多段线里的圆弧段的中点
cad二次开发·多段线·圆弧解析
cuicuiniu52111 天前
如何将CAD图纸进行黑白打印?
cad·cad看图·cad看图软件·cad看图王
闻缺陷则喜何志丹11 天前
【.NetAPI]统计标注的值、上公差、下公差
数学·.net·cad·netapi
渲吧-云渲染12 天前
云端设计革命:CAD的现在与未来
cad
渲吧-云渲染12 天前
从数据沼泽到创新基石:CAD数据的秩序革命
cad·pdm
渲吧-云渲染18 天前
从平面到立体:钣金设计中的折叠智慧
cad·钣金
时间黑客19 天前
SolidWorks百日建模(零)
cad
渲吧-云渲染19 天前
三维创意的制造法典:工程图模块的精准转译
制造·cad·工程图