应用netdxf(C#)实现dxf文件读写-4、绘制图形

实现思路:实例化对应图像类,并调用AddEntity方法添加到DxfDocument对象中,最后保存文件。

 

1、绘制多段线

LwPolyline widthLine = new LwPolyline();//新建LwPolyline对象
LwPolylineVertex startVertex = new LwPolylineVertex(new Vector2(0, 0));//新建坐标点1
LwPolylineVertex endVertex = new LwPolylineVertex(new Vector2(10, 10));//新建坐标点2
widthLine.Vertexes.AddRange(new[] {startVertex, endVertex});//给多段线增加坐标点

LwPolyline poly = new LwPolyline();
poly.Vertexes.Add(new LwPolylineVertex(-10, -10));
poly.Vertexes.Add(new LwPolylineVertex(10, -10));
poly.Vertexes.Add(new LwPolylineVertex(10, 10));
poly.Vertexes.Add(new LwPolylineVertex(-10, 10));
poly.Vertexes[2].Bulge = 1;
poly.IsClosed = true;//封闭图形

2、绘制圆

Circle circle = new Circle {Center = new Vector3(0,0,10), Radius = 2};//圆心坐标、半径

3、绘制弧线

Arc arc = new Arc {Center = new Vector3(0,0,10), Radius = 2, StartAngle = 30, EndAngle = 160};//圆心坐标、半径、起始角度、结束角度

4、填充

    private static void ComplexHatch()
        {
            //设置填充样式
            HatchPattern pattern = HatchPattern.Load("hatch\\acad.pat", "ESCHER");
            pattern.Scale = 1.5;
            pattern.Angle = 30;

            LwPolyline poly = new LwPolyline();
            poly.Vertexes.Add(new LwPolylineVertex(-10, -10));
            poly.Vertexes.Add(new LwPolylineVertex(10, -10));
            poly.Vertexes.Add(new LwPolylineVertex(10, 10));
            poly.Vertexes.Add(new LwPolylineVertex(-10, 10));
            poly.IsClosed = true;//图形需要封闭

            //给封闭图形填充
            List<HatchBoundaryPath> boundary = new List<HatchBoundaryPath>
            {
                new HatchBoundaryPath(new List<EntityObject> {poly})
            };
            Hatch hatch = new Hatch(pattern, boundary, true);

            DxfDocument dxf = new DxfDocument();
            dxf.AddEntity(poly);//添加图形
            dxf.AddEntity(hatch);//添加填充
            dxf.Save("complexhatch.dxf");

            DxfDocument dxf2 = DxfDocument.Load("complexhatch.dxf");
            dxf2.Save("complexhatch2.dxf");
        }

5、块

Block block = new Block("MyBlock");
block.Entities.Add(poly);

Insert insert = new Insert(block);
insert.Position = new Vector3(12,22,4);
insert.Scale = new Vector3(1.25,0.75,1);
insert.Scale = new Vector3(1,2,3);
insert.Rotation = 30;
insert.Normal = new Vector3(1,1,1);


DxfDocument doc = new DxfDocument();
doc.AddEntity(poly);
doc.AddEntity(insert);
List<EntityObject> entities = insert.Explode();
doc.AddEntity(entities);
doc.Save("test.dxf");

Block block = Block.Load(baseBlk.Name + ".dxf", "MyBlock");//从文件中读取块

使用教程:

1、安装或下载netdxf插件

2、引用命名空间

3、读写dxf文件

4、绘制图形

5、图形变换

6、注释和标注

  • 9
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
DXF文件中,我们最关心的是如何得到模型上各个点的坐标,并且用这些点连成许多个三用形,构成面,进而绘制出整个模型。在DXF文件的结构中,我们已经看到,DXF文件先叙述实体上各个点的坐标,然后叙述实体上有多少个面,每个面由哪些点构成。这样,我们至少需要2个数组来存储一个实体的信息,一个用于存储点的坐标,一个用于存储点序,我们可以把这2个数组放到一个结构中,如果模型中实体的数目不止一个是,我们就用这个结构来定义一个数组。在本文中,我们使用      Visual C++ 6.0 来写一个读取DXF文件的小程序。     在实际应用中,模型中实体的数目以及实体中点和面的数目都是不定的,为了有效地利用内存,我们选择MFC类库中的聚合类CobArray类所创建的对象vertex,      sequence来存储和管理实体的点坐标和点序。     CObArray类是一个用来存放数组类的聚合类,它能根据要存进来的数组(或结构)多少自动进行自身大小的高速,而且这个类本身具有的成员函数使得我们对它的对象的操作更加方便、快捷,用它编的程序也易于读懂。     三维实体模型的模型信息中的一部分信息可以在标题段中读出,通过读取变量名为$UCSORG的三个变量,可以得到三维实体在世界坐标系中自身所定义的用户坐标系原点的三维坐标。通过读取$EXTMAX,$EXTMIN可以获知三维实体在世界坐标系中的范围,而其它部分的信息只有读完了全部DXF文件后才可以通过计算确定。对于三维实体模型的全部点坐标、点序,可以在实体段中按照前面介绍的DXF文件基本结构读出。现
基于C的编程是指使用C语言来进行软件开发和编程。C语言是一种高级的程序设计语言,它被广泛地应用于各种计算机平台和操作系统中。 C语言具有简洁、高效、灵活和可移植等特点,这使得它成为了许多程序员的首选语言。基于C的编程可以提供快速的开发和高效的执行,适用于开发各种类型的应用软件。 使用C语言进行编程可以进行系统级编程和应用级编程。在系统级编程中,可以利用C语言的底层特性和直接访问硬件的能力开发操作系统、驱动程序和嵌入式系统。而在应用级编程中,可以使用C语言开发各种类型的应用软件,如桌面应用程序、Web应用程序和移动应用程序等。 基于C的编程还可以提供丰富的库和工具支持。C语言拥有庞大的标准库和第三方库,这些库提供了各种常用的函数和数据结构,以便程序员可以更加方便地开发应用程序。此外,还有许多开发工具和集成开发环境可用于编写、调试和测试C语言程序。 基于C的编程也可以与其他语言进行结合。C语言可以通过调用外部函数接口(如C++、Java和Python等)来与其他语言进行交互,实现跨语言的开发。这使得程序员可以根据需要选择不同的编程语言,并在不同的环境中交互和共享代码。 总之,基于C的编程是一种广泛应用的软件开发方法,它提供了快速、高效和灵活的方式来开发各种类型的应用软件。无论是系统级编程还是应用级编程,都可以利用C语言的特性和工具来进行开发,并与其他语言进行结合,以满足不同的需求和开发环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值