学习好资料 欢迎下载
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、如何创建用户菜单和用户工具条,请给出具体实现过程?
菜单:
工具条: