12) 接下来,我们要在AutoCAD数据库中创建一个独立的块,然后把它插入到块表而不是模型空间中。
首先把CreateEmployee函数的名字改为CreateEmployeeDefinition()。
加入以下代码来创建一个独立的块:
Dim
myBtr As BlockTableRecord = New BlockTableRecord()
myBtr.Name
= "EmployeeBlock"
Dim
myBtrId As ObjectId = bt.Add(myBtr)
trans.AddNewlyCreatedDBObject(myBtr,
True)
13) 现在,请稍微改动一下加入实体到模型空间的代码(改为加入块到块表中,记得加入前要打开块表)。
现在运行代码,然后使用INSERT命令来检查是否可以正确插入这个块。
14) 最后,我们要创建一个位于模型空间的块索引,它表示上面创建的块的一个实例。这一步留给大家练习。
下面是你要遵循的最基本的步骤:
A)
创建一个名为CreateEmployee新的函数
B)
把命令属性“CREATE”移动到CreateEmployee()
C)
修改CreateEmployeeDefintion()来返回新创建的块“EmployeeBlock”的ObjectId,操作的步骤请参考CreateLayer()的作法。
D)
你需要修改CreateEmployeeDefintion()来查看块表中是否已包含“EmployeeBlock”块,如果包含这个块,则返回它的ObjectId(做法与CreateLayer()一样)。
提示:把‘bt’的声明语句移动到try块的顶部,使用BlockTable.Has()方法,把其它的代码移动到else语句:
Try
''''获取BlockTable 对象
Dim
bt As BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForWrite)
If
(bt.Has("EmployeeBlock")) Then
newBtrId =
bt("EmployeeBlock") ''''已经存在……没必要创建它!
Else
…
E)
在新创建的CreateEmployee()函数中创建一个新的BlockReference对象,并把它加入到模型空间。提
示:我们可以使用CreateEmployeeDefinition()中引用模型空间的代码,这些代码在这里不需要了
F)
在CreateEmployee中调用CreateEmployeeDefinition()函数,使上面生成的BlockReference对象的BlockTableRecord()指向CreateEmployeeDefinition()函数。提示:请参考BlockReference的构造函数。
附加的问题:
让我们来看一下代码的运行情况,执行命令会生成一个EmployeeBlock的块索引,你会看到它被插入到20,20,0而不是10,10,0。为什么?
如果你知道原因,那么怎样才能使块索引插入到正确的点?
当你用List命令查看块索引时,它会告诉你它位于0层(或者当命令运行时位于当前层)。为什么?
怎样才能让块索引总是位于EmployeeLayer层?
上一页 [1] [2] [3] [C语言系列]NET 中C#的switch语句的语法 [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]用内建的“Net Meeting”聊天 [VB.NET程序]Henry的VB.NET之旅(三)—共享成员 [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构 [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体 [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET) [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
|