乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 164|回复: 9

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

[复制链接]

30

主题

54

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2004-8-6 11:15:00 | 显示全部楼层 |阅读模式
利用 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                                                                                                                          {
pline.AddVertexAt(i, ptArr[i], 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                                                                                          {
                                                                                                                         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)完整的程序代码请看下面的附件。
这是:这是代码文件:
回复

使用道具 举报

0

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
3
发表于 2005-6-28 08:31:00 | 显示全部楼层
非常感谢大大的无私奉献
回复

使用道具 举报

5

主题

13

帖子

4

银币

初来乍到

Rank: 1

铜币
33
发表于 2005-10-20 19:56:00 | 显示全部楼层
顶一下,谢谢
回复

使用道具 举报

11

主题

39

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
83
发表于 2005-11-6 22:49:00 | 显示全部楼层
感觉为了实现一个任务代码要很多啊,因为不懂,见笑!
回复

使用道具 举报

0

主题

3

帖子

1

银币

初来乍到

Rank: 1

铜币
3
发表于 2006-6-15 21:41:00 | 显示全部楼层
顶下。作了好榜样!~!~
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 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
回复

使用道具 举报

15

主题

195

帖子

9

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
255
发表于 2006-8-8 23:36:00 | 显示全部楼层
谢谢版主,找了好久。呵……
我用VB编,老出错。
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
2
发表于 2006-9-21 11:01:00 | 显示全部楼层
支持楼主

回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2007-9-4 15:11:00 | 显示全部楼层
无私奉献...顶!!!
回复

使用道具 举报

0

主题

1

帖子

1

银币

初来乍到

Rank: 1

铜币
1
发表于 2007-11-16 11:56:00 | 显示全部楼层
才鸟,本人从昨天,到现在,至少看到你的10余篇帖子..写的确实不错,不过实际应用中,你的有些地方不符,比如,using AutoCAD;这句在VS20005 ACAD2005下行不通我已改好!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 13:23 , Processed in 0.491359 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表