转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Autodesk官方最新的.NET教程(三)(vb.net版)         ★★★★

Autodesk官方最新的.NET教程(三)(vb.net版)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1967 更新时间:2009/4/23 19:00:00

Dim bt as BlockTable = trans.GetObject(db.BlockTableId, OpenMode.ForRead)

Dim btr as BlockTableRecord = trans.GetObject(bt(btr.ModelSpace), OpenMode.ForWrite)

 

btr.AppendEntity(circle)

trans.AddNewlyCreatedDBObject(circle, True)

 

trans.Commit()

Catch

MsgBox("Error Adding Entities")

Finally

trans.Dispose()

End Try

End Function

 

运行你的代码来进行测试……

上面的catch块只显示一个错误信息。实际的清理工作是在finally块中进行的。这样做的理由是如果在事务处理被提交(Commit())之前,Dispose()被调用的话,事务处理会被 销毁。我们认为如果在trans.Commit()之前出现任何错误的话,你应该销毁事务处理(因为Commit将永远不会被调用)。如果在Dispose()之前调用了Commit(),也就是说没有任何错误发生,那么事务处理将会被提交给数据库。

所以基于上面的分析,Catch块其实并不是必须的,因为它只用来通知用户程序出现了一个错误。它将在下面的代码中被去掉。

6)    现在让我们在Employee加入剩下的部分:椭圆和多行文本的实例。

现在让我们在Employee加入剩下的部分:椭圆和多行文本的实例。

       多行文本实体:

              中心点应该与圆心的创建一样:

                     (建议:创建一个名为‘center’而值为10,10,0的Point3d变量来表示中心点)

              多行文本的内容可以是你的名字。

       椭圆(提示:你可以先看一下Ellipse的构造函数)

              法向量应该沿着Z轴(请查看Vector3d类型)

              主轴设为Vector3d(3,0,0)(提示:不要忘了用new)

              半径比例设为0.5

              椭圆还必须闭合(也就是说,开始和结束点必须相同)

运行你的代码来进行测试……应该可以生成一个圆、一个椭圆和一个中心点在10,10,0的多行文本。

注意:和事务处理对象有关的.NET API中的Try-Catch-Finally块结构,应该是异常观察者。实际上我们是在try块中实例化对象的,但没有显式地销毁它们。当产生异常的时候可能会产生问题,特别是当观察者注意到我们实际上用的是封装的非托管对象!记住,当资源不再使用的时候,垃圾收集机制就会回收内存。垃圾收集机制会不时的调用封装类的Dispose()方法,删除非托管对象。

这里还要注意的是Dispose()作用于封装的非托管类对象的方式取决于对象是否是数据库驻留对象。由非数据库驻留对象调用的Dispose()会删除非托管对象,而由数据库驻留对象调用的Dispose()只是关闭它们。

7)         接下来让我们来创建一个新的函数,它用来新建一个颜色为黄色,名字为“EmployeeLayer” 的AutoCAD层。

这个函数应该检查是否这个层已经存在,但不管这个层是否存在,函数都应该返回“EmployeeLayer”的ObjectId。下面是这个函数的代码:

    Public Function CreateLayer() As ObjectId

        Dim layerId As ObjectId ''''它返回函数的值

        Dim db As Database = HostApplicationServices.WorkingDatabase

        Dim trans As Transaction = db.TransactionManager.StartTransaction()

        ''''首先取得层表……

        Dim lt As LayerTable = trans.GetObject(db.LayerTableId, OpenMode.ForWrite)

 

        ''''检查EmployeeLayer层是否存在……

        If lt.Has("EmployeeLayer") Then

            layerId = lt.Item("EmployeeLayer")

        Else

            ''''如果EmployeeLayer层不存在,就创建它

            Dim ltr As LayerTableRecord = New LayerTableRecord()

            ltr.Name = "EmployeeLayer"//设置层的名字

            layerId = lt.Add(ltr)

            trans.AddNewlyCreatedDBObject(ltr, True)

        End If

        trans.Commit()

        trans.Dispose()

        Return layerId

    End Function

 

是不是觉得这个函数的基本结构与在模型空间加入实体的代码比较类似?访问数据库的方法都是这样的:使用事务处理来获取数据库对象,在符号表(模型空间所在的块表也是符号表之一)中加入实体,然后让事务处理知道。

8)    在这个函数中加入异常处理,就像在CreateEmployee函数中的一样。

 

9)    接下来,改变新建层的颜色。下面是实现的代码片断,请把它加入到你的代码中:

 

ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, 2)

 

注意:ColorMethod.ByAci可以让我们使用AutoCAD ACI颜色索引……这里为2(表示黄色)。

 

10)   回到CreateEmployee(),加入把上面创建的几个实体设置到EmployeeLayer层的代码。声明一个类型为ObjectId的变量,用CreateLayer函数的返回值给它赋值。使用每个实体(文本、圆和椭圆)的LayerId属性设置它们所在的层。

例如:text.LayerId = empId

 

运行代码来查看“EmployeeLayer”是否已被创建,所有已创建的实体是否都在这一层上(应该显示为黄色)

 

11)   现在为各个实体设置不同的颜色,可以使用ColorIndex属性(ColorIndex属性表示AutoCAD的颜色)

 

       圆为红色-1

       椭圆为绿色-3

       文本为黄色-2

 

运行代码,看看实体的颜色是否为设置的值,即使这些实体是在“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节点(二)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台