AutoCAD二次开发教程复习总结 下载本文

学习好资料 欢迎下载

7、 列出所有图形与非图形对象,他们有什么区别?

图形对象,也称为图元,是组成图形的可见对象(例如直线、圆、光栅图像等):

1)添加图形对象到图形中是通过正确的块表记录引用,然后使用 AppendEntity 方

法将一个新对象添加到图形中来完成的

2)要修改或查询这些对象,请从正确的块表记录获得对象引用,然后使用对象本

身的方法或特性。每一个图形对象都拥有允许应用程序执行大部分 AutoCAD 编辑命令的方法,例如复制、删除、移动、镜像等

这些对象还提供了一些方法,用来设置和检索对象的扩展数据(xdata),亮显和更新对象,以及从另外的图元设置属性。大多数图形对象具有诸如 LayerId、LinetypeId、Color 和 Handle 之类的典型特性。每个对象也具有一些特有的特性,例如 Center、StartPoint、Radius 和 FitTolerance

非图形对象是指属于图形的一部分但不可见的(提示性的)对象,例如 Layers、

Linetypes、DimStyles、TableStyle 等

1)若要创建新的符号表记录,请使用表所有者的 Add 方法或使用 SetAt 方法添

加一个字典到命令对象字典中

2)要修改或查询这些对象,请使用对象本身的方法或特性。每一个非图形对象都

有用于特定目的的方法和特性,都有设置和检索扩展数据以及删除自己的方法

8、如何实现对AutoCAD数据库图形对象的访问?给出实例代码。

大部分的集合和容器对象都是通过 Document 或 Database 对象访问的。Document 和 Database 对象都包含一些相应的特性用来访问大多数可用集合的对象或对象 ID。 例如,以下代码定义一个变量,并将其设置为当前图形的 LayersTable 对象:

学习好资料 欢迎下载

9、AutoCAD中集合对象是指?列举出部分实例。

10、如何定义一个用户命令?CommandMethod 所接受的属性包括哪些?

命令和 AutoLISP 函数可以通过使用两个属性:CommandMethod 和 LispFunction 就可以在 AutoCAD .NET API 中被定义

使用 CommandMethod 属性定义一个命令,CommandMethod 属性期待一个字符串值,它将当作被定义命令的全局名称。和全局命令名称一起,CommandMethod 属性还能接受如下值:

【Command Flags】 -定义命令的行为 【Group Name 】- 命令组名称

【Local Name 】- 本地化命令名称,通常用于特定语言

【Help Topic Name】 - 当按 F1 键时应该显示的帮助主题名称

【Context Menu Type Flags】 - 定义当命令被激活时相应的快捷菜单的状态 【Help File Name】 -包含当命令激活并按 F1 键时将要显示其中帮助主题的帮助文件

11、如何通过代码调用AutoCAD内部命令?

A、使用 SendStringToExecute 方法可以直接将命令发送到 AutoCAD 命令行。SendStringToExecute 方法将单个字符串发送到命令行。该字符串必须包含提供给所执行命令的参数,并依照该命令的提示顺序所要求的次序排列这些参数

B、使用 SendStringToExecute 执行命令是异步的,直到 .NET 命令结束,否则不会被调

学习好资料 欢迎下载

用。如果需要立即执行一个命令(同步),应该: 1)使用 COM Automation 库中的 SendCommand 方法,它可以利用 .NET COM Interop 访问 2)使用 ObjectARX 或 .NET API 定义命令,P/Invoke 非托管的用于本地化的 AutoCAD 命令的 acedCommand 或 acedCmd 方法

3)通过定义 AutoLISP 命令, P/Invoke 非托管的 acedInvoke 方法

12、如何实现图形对象的旋转、平移、缩放?请给出具体实现。

使用transformBy函数进行几何变换

1)Entity.TransformBy(Matrix3d transform)

2)transformBy是Entity类的一个成员函数,该函数使用一个Matrix3d参数对实体进行相应的几何变换

3)Matrix3d是一个四维矩阵,常用函数: Translation:生成一个移动对象的矩阵 Rotation:生成旋转矩阵

Scaling:生成比例缩放矩阵。 Mirroring:生成镜像矩阵

public static void Move(Entity ent, Point3d ptStart, Point3d ptEnd) { ent.TransformBy(Matrix3d.Displacement(ptEnd - ptStart)); } public static void Mirror(Entity ent, Line3d line) { ent.TransformBy(Matrix3d.Mirroring(line)); } public static void Scale(Entity ent, Point3d center, float scaleAll) { ent.TransformBy(Matrix3d.Scaling(scaleAll, center)); } public static void Rotate(Entity ent, Point3d center, double angle) { //new Vector3d(0, 0, 1)应该是用来标识基准平面的,这里指的是在XY平面内旋转 ent.TransformBy(Matrix3d.Rotation(angle, new Vector3d(0, 0, 1), center)); }

13、如何实现AutoCAD填充过程?

学习好资料 欢迎下载

14、如何创建用户菜单和用户工具条,请给出具体实现过程?

菜单:

工具条: