明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15403|回复: 17

[基础] [ARX]利用AutoCAD 2005.NET API进行AutoCAD的二次开发(二)

    [复制链接]
发表于 2004-8-6 11:15:00 | 显示全部楼层 |阅读模式

利用AutoCAD 2005.NET API进行AutoCAD的二次开发(二)

--多段线

大家好!今天讲的内容是多段线。在AutoCAD 2005.NET API中,有3个表示多段线的类,即Polyline、Polyline2d、Polyline3d,如果按照字面意思,那应该是Polyline2d表示VBA中的LightWeightPolyline(轻量多线段),而Polyline3d则应该表示三维多线段。但令人感到困惑的是实际上在AutoCAD 2005.NET API中,由Polyline2d和Polyline3d创建的都是三维多线段,而Polyline才会创建轻量多线段(不知是否是一个bug?!)。基于这种情况,我会采用Polyline来表示轻量多线段,而用Polyline3d来表示三维多线段。对于在程序中加入相应的命名空间和一些前期的准备工作,请大家参考“利用AutoCAD 2005.NET API进行AutoCAD的二次开发(一)”。不要再另外创建新的工程,直接在“利用AutoCAD 2005.NET API进行AutoCAD的二次开发(一)” 创建的工程中加入相应的函数,这样可以创建一个自己的底层函数库。下面是编程的具体步骤:

(1) 创建轻量多线段的基准函数(AddLWPolyline)。其实现的步骤如下:

public Polyline AddLWPolyline(Point2dCollection ptArr, double width)

{

Polyline pline = new Polyline();//声明一Polyline对象

try

{

Initialize();//相关的初始化工作

for (int i = 0; i < ptArr.Count; i++)

{

pline.AddVertexAt(i, ptArr, 0, width, width);

//加入组成多线段的点

}

AddEntity(pline);//自定义函数,用于加入生成的Polyline

}

finally

{

DisposeAll();

}

return pline;

程序中的自定义函数AddEntity的代码如下:

public void AddEntity(Entity entity)

{

btr.AppendEntity(entity);

tm.AddNewlyCreatedDBObject(entity, true);

myT.Commit();

}

这个函数的作用是简化加入相关对象的过程。

(2)根据二维的起点和终点创建轻量多线段。

public Polyline AddLWPolyline(Point2d ptStart, Point2d ptEnd, double width)

{

Polyline pline;

Point2dCollection ptArr = new Point2dCollection(); ;

ptArr.Add(ptStart);

ptArr.Add(ptEnd);

pline = AddLWPolyline(ptArr, width);

return pline;

}

(3) 创建三维多线段的基准函数(AddPolyline)。

public Polyline3d AddPolyline(Point3dCollection ptArr)

{

Polyline3d pline;

try

{

Initialize();

pline = new Polyline3d(Poly3dType.SimplePoly, ptArr, false);

AddEntity(pline);

}

finally

{

DisposeAll();

}

return pline;

}

(5) 已知起点和终点,创建三维多线段。

public Polyline3d AddPolyline(Point3d pt1, Point3d pt2)

{

Polyline3d pline;

Point3dCollection ptArr = new Point3dCollection();

ptArr.Add(pt1);

ptArr.Add(pt2);

pline = AddPolyline(ptArr);

return pline;

}

(6)创建正多边形。输入的参数是中心、边数、外接圆半径、宽度和旋转角度。

public Polyline AddPolygon(Point2d center, int number, double radius, double width, double angle)

{

Polyline pline;

Point2dCollection ptArr = new Point2dCollection();

double ang;

ang = 2 * Math.PI / number;

Point2d pt2d = new Point2d();

for (int i = 0; i <=number; i++)

{

pt2d.X = center.X + radius * Math.Cos(i * ang);

pt2d.Y = center.Y + radius * Math.Sin(i * ang);

ptArr.Add(pt2d);

}

pline = AddLWPolyline(ptArr, width);

return pline;

}

(7)创建矩形。

public Polyline AddRectangle(Point2d pt1, Point2d pt2, double width)

{

Polyline pline;

Point2dCollection ptArr = new Point2dCollection();

Point2d pt3 = new Point2d(pt2.X,pt1.Y);

Point2d pt4 = new Point2d(pt1.X, pt2.Y);

ptArr.Add(pt1);

ptArr.Add(pt3);

ptArr.Add(pt2);

ptArr.Add(pt4);

ptArr.Add(pt1);

pline = AddLWPolyline(ptArr, width);

return pline;

}

(8)添加测试代码。

#region Using directives

using System;

using Autodesk.AutoCAD.ApplicationServices;

using Autodesk.AutoCAD.DatabaseServices;

using Autodesk.AutoCAD.Geometry;

using Autodesk.AutoCAD.Runtime;

using ZHFArxLibrary;

#endregion

namespace Polylines

{

public class Class1

{

public Class1()

{

}

[CommandMethod("AddPolyline")]

public static void AddPolyLine()

{

Arx arx = new Arx();

Point2dCollection ptArr1 = new Point2dCollection();

ptArr1.Add(new Point2d(0, 0));

ptArr1.Add(new Point2d(60, 0));

ptArr1.Add(new Point2d(60, 40));

ptArr1.Add(new Point2d(0, 60));

arx.AddLWPolyline(ptArr1, 0.2);

Point3dCollection ptArr2 = new Point3dCollection();

ptArr2.Add(new Point3d(100, 0, 0));

ptArr2.Add(new Point3d(160, 0, 0));

ptArr2.Add(new Point3d(160, 40, 0));

arx.AddPolyLine(ptArr2);

arx.AddLWPolyline(new Point2d(100, 100), new Point2d(150, 100), 0);

arx.AddPolyLine(new Point3d(150, 100, 0), new Point3d(200, 100, 0));

arx.AddPolygon(new Point2d(30, 130), 6, 30, 0, 0);

arx.AddRectangle(new Point2d(100, 100), new Point2d(170, 140),0);

}

}

}

把(8)中的工程编译。然后启动AutoCAD,在命令行中键入netload命令,在弹出的对话框中选择刚编译好的dll文件。在命令行中键入AddPolyline(就是你在(8)中声明的AutoCAD .NET命令),应该可以看到结果了。

(9)完整的程序代码请看下面的附件。

这是教程: 这是代码文件:

评分

参与人数 1明经币 +1 收起 理由
3xxx + 1

查看全部评分

发表于 2005-6-28 08:31:00 | 显示全部楼层
非常感谢大大的无私奉献
发表于 2005-10-20 19:56:00 | 显示全部楼层
顶一下,谢谢
发表于 2005-11-6 22:49:00 | 显示全部楼层
感觉为了实现一个任务代码要很多啊,因为不懂,见笑!
发表于 2006-6-15 21:41:00 | 显示全部楼层
顶下。作了好榜样!~!~
发表于 2006-6-28 21:16:00 | 显示全部楼层

大家好,希望有人能给我传几个文件,我的QQ是396857680,谢谢了。

mfc70.lib mfc70d.lib、mfc70u.lib、mfc70ud.lib、mfcs70.lib、mfcs70.pdb、mfcs70d.lib、mfcs70d.pdb、mfcs70u.lib、mfcs70u.pdb、mfcs70ud.lib、mfcs70ud.pdb

发表于 2006-8-8 23:36:00 | 显示全部楼层

谢谢版主,找了好久。呵……

我用VB编,老出错。

发表于 2006-9-21 11:01:00 | 显示全部楼层

支持楼主

 

发表于 2007-9-4 15:11:00 | 显示全部楼层
无私奉献...顶!!!
发表于 2007-11-16 11:56:00 | 显示全部楼层
才鸟,本人从昨天,到现在,至少看到你的10余篇帖子..写的确实不错,不过实际应用中,你的有些地方不符,比如,using AutoCAD;这句在VS20005 ACAD2005下行不通我已改好!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 08:35 , Processed in 0.214308 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表