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

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1426 更新时间:2009/4/23 19:00:01
5 用户互操作:提示和选择背景提示通常包含一个描述性信息,伴随一个停止以让用户理解所给的信息并输入数据。数据可以通过多种方式被输入,如通过命令行、对话框或AutoCAD编辑窗口。给出的提示要遵循一定的格式,格式要与一般的AutoCAD提示相一致,这一点是非常重要的。例如,关键字要用“/”号分隔并放在方括号“[]”中,缺省值要放在“<>”内。对于一个AutoCAD用户来说,坚持统一的格式将会减少信息理解错误的产生。当用户在AutoCAD命令行中选择一个实体时,实体是使用选择机制被选择的。这种机制包括一个提示,用来让用户知道选择什么并怎样选择(如,窗口或单一实体),然后是一个停顿。试一下诸如PINE这种命令来看一下提示的显示,PEDIT来看一下使用单一实体或多线来进行选择。练习Prompts:提示:在本章中,我们将提示输入雇员名字、职位、薪水和部门来创建一个雇员块索引对象。如果输入的部门不存在,我们将提示输入部门经理的名字来创建一个新的部门。在我们继续之前,让我们试着重用以前的代码。为了进行选择,我们将提示用户在一个窗口中进行选择或选择一个实体,而我们只显示选择集中的雇员对象。在前面的章节中,我们创建了一个名叫“Earnest Shackleton”的雇员,名字被存储为“EmployeeBlock”块定义(块表记录)中的MText。如果我们多次插入这个块,那么我们看到的都是同一个雇员的名字。我们怎样才能自定义这个块以使每次插入这个块的时候显示不同雇员的名字?这就要使用块属性的功能了。属性是存储在每一个块索引实例中的文本,并被作为实例的一部分来被显示。属性从存储在块表记录中的属性定义中继承相关的属性。属性:让我们来把MText实体类型改变为属性定义。在CreateEmployeeDefinition()函数中,把下面的代码替换  ‘ 文本:Dim text As MText = New MText()text.Contents = "Earnest Shackleton"text.Location = center 为 ''''属性定义Dim text As AttributeDefinition = New AttributeDefinition(center, "NoName", "Name:", "Enter Name", db.Textstyle)text.ColorIndex = 2 试着使用TEST命令来测试一下CreateEmployeeDefinition()函数:     <CommandMethod("TEST")> _    Public Function Test()        CreateEmployeeDefinition()    End Function 你现在应该可以使用INSERT命令来插入EmployeeBlock块并对每一个实例确定一个雇员名。当你插入Employee块时,请注意一下块插入的位置。它是正好被放置在所选点还是有些偏移?试试怎样修复它。(提示:检查块定义中的圆心)修改CreateEmployee ()以重用 1)让我们来修改CreateEmployee()函数,以让它可以接收名字、薪水、部门和职位并返回创建的雇员块索引的ObjectId。函数的形式如下(你可以改变参数顺序) Public Function CreateEmployee(ByVal name As String, ByVal division As String, ByVal salary As Double, ByVal pos As Point3d) as ObjectId 2)       移除上面函数中的CommandMethod属性”CREATE”,这样它就不再是用来创建雇员的命令。3)                  修改函数的代码,这样就可以正确地设置块索引的名字、职位、部门和薪水和它的扩展字典。
  • 替换
 Dim br As New BlockReference(New Point3d(10, 10, 0), CreateEmployeeDefinition()) 为 Dim br As New BlockReference(pos, CreateEmployeeDefinition()) 
  • 替换
 xRec.Data = New ResultBuffer( _New TypedValue(DxfCode.Text, "Earnest Shackleton"), _New TypedValue(DxfCode.Real, 72000), _New TypedValue(DxfCode.Text, "Sales")) 为 xRec.Data = New ResultBuffer( _New TypedValue(DxfCode.Text, name), _New TypedValue(DxfCode.Real, salary), _New TypedValue(DxfCode.Text, division)) 4)                  因为我们把雇员的名字从MText替换成块的属性定义,因此我们要创建一个相应的属性索引来显示雇员的名字。属性索引将使用属性定义的属性。
  • 替换:
 btr.AppendEntity(br) ''''加入索引到模型空间trans.AddNewlyCreatedDBObject(br, True) ''''让事务处理知道 为       Dim attRef As AttributeReference = New AttributeReference() ''''遍历雇员块来查找属性定义Dim empBtr As BlockTableRecord = trans.GetObject(bt("EmployeeBlock"), OpenMode.ForRead) Dim id As ObjectId For Each id In empBtr    Dim ent As Entity = trans.GetObject(id, OpenMode.ForRead, False) ''''打开当前的对象!     If TypeOf ent Is AttributeDefinition Then ''''        ''''设置属性为属性索引中的属性定义      Dim attDef As AttributeDefinition = CType(ent, AttributeDefinition)      attRef.SetPropertiesFrom(attDef)      attRef.Position = New Point3d(attDef.Position.X + br.Position.X, _                                  attDef.Position.Y + br.Position.Y, _                                  attDef.Position.Z + br.Position.Z)                     attRef.Height = attDef.Height                    attRef.Rotation = attDef.Rotation                    attRef.Tag = attDef.Tag                    attRef.TextString = name       End IfNext btr.AppendEntity(br) ''''把索引加入模型空间 ''''把属性索引加入到块索引br.AttributeCollection.AppendAttribute(attRef) ''''让事务处理知道trans.AddNewlyCreatedDBObject(attRef, True)trans.AddNewlyCreatedDBObject(br, True)   研究一下上面的代码,看看是怎样把属性定义中除显示用的文本字符串外的属性复制到属性索引的。属性被加入到块索引的属性集合中。这就是你怎样来为每一个实例自定义雇员名字。5)不要忘记返回雇员块索引的ObjectId,但要在提交事务处理之后才能返回: trans.Commit()Return br.ObjectId 6)       测试CreateEmployee。加入一个Test命令来测试CreateEmployee: <CommandMethod("TEST")> _ Public Function Test()        CreateEmployee("Earnest Shackleton", "Sales", 10000, New Point3d(10, 10, 0))End Function  修改CreateDivision()以重用让我们来修改CreateDivision ()函数,以让它可以接收部门名字、经理名字并返回创建的部门经理扩展记录的ObjectId。如果部门经理已经存在,则不改变经理的名字。1)                  如果你先前在CreateEmployeeDefinition()中调用了CreateDivision(),请把它注释掉,因为我们在这里不需要创建一个部门2)       改变CreateDivision()的形式让它接收部门和经理的名字并返回一个ObjectId。 Public Function CreateDivision(ByVal division As String, ByVal manager As String) As ObjectId 3)     修改上面函数的代码创建部门的名字和经理:
  • 替换:
 divDict = trans.GetObject(acmeDict.GetAt("Sales"), OpenMode.ForWrite) 为: divDict = trans.GetObject(acmeDict.GetAt(division), OpenMode.ForWrite) 
  • 替换:
 acmeDict.SetAt("Sales", divDict) 为: acmeDict.SetAt(division, divDict) 
  • 替换:
 mgrXRec.Data = New ResultBuffer(New TypedValue(DxfCode.Text, "Randolph P. Brokwell"))  为  mgrXRec.Data = New ResultBuffer(New TypedValue(DxfCode.Text, manager))  不要忘了返回部门经理这个扩展记录的ObjectId,但要在提交事务处理后才返回。 trans.Commit()''''返回部门经理这个扩展记录的ObjectIdReturn mgrXRec.ObjectId现在把在中CreateEmployeeDefinition调用的CreateDivision函数给注释掉。4)    现在通过使用TEST命令来测试调用CreateDivision函数。使用ArxDbg工具来检查条目是否已被加入到“ACME_DIVISION”下的命名对象字典。 CreateDivision("Sales", "Randolph P. Brokwell") 使用CREATE命令来创建雇员 我们将加入一个名为CREATE的新命令,此命令用来提示输入雇员的详细资料来创建雇员块索引。让我们来看一下这个命令是怎样使用的。1)      让我们加入一个名为CREATE的新命令,并声明几个常用的变量和一个try-finally块。     <CommandMethod("CREATE")> _    Public Sub CreateEmployee()        Dim db = HostApplicationServices.WorkingDatabase        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor        Dim trans As Transaction = db.TransactionManager.StartTransaction()        Try            trans.Commit()        Finally            trans.Dispose()        End Try     End Sub 2)      让我们来为雇员定义可以用作为提示缺省值的常数。注意,布尔值gotPosition是用来判断用户是否已输入职位。. 雇员名               - 类型 :String          -缺省值 “Earnest Shackleton”. 雇员所在部门名   - 类型:String                 -缺省值“Sales”. 薪水                   -类型:Double (non-negative and not zero)     -缺省值10000. 职位                   -类型:Point3d            -缺省值(0,0,0) 把这些常数加入到try语句后面:            Dim empName As New String("Earnest Shackleton")            Dim divName As New String("Sales")            Dim salary As New Double() : salary = 10000            Dim position As New Point3d(0, 0, 0)            ''''布尔值用来判断用户是否已输入职位          &

[1] [2]  下一页


[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……
    咸宁网络警察报警平台