autoCAD 创建,打开,保存和关闭图形

79 篇文章 3 订阅

本节主题

 创建和打开图形

要创建新图形或打开现有图形,请使用 DocumentCollection 对象的方法。Add 方法用于根据一个图形模板创建新图形并将此图形添加到 DocumentCollection 中。Open 方法用于打开现有图形文件。

本例使用 Add 方法根据 acad.dwt 图形模板文件创建新图形。

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("NewDrawing", CommandFlags.Session)> _
Public Sub NewDrawing()
  '' 指定要使用的模板文件,如果模板不存在,就使用默认设置    
  Dim strTemplatePath As String = "acad.dwt"
 
  Dim acDocMgr As DocumentCollection = Application.DocumentManager
  Dim acDoc As Document = acDocMgr.Add(strTemplatePath)
  acDocMgr.MdiActiveDocument = acDoc
End Sub

打开现有图形

本例使用 Open 方法打开现有图形。在打开图形前,代码将检查文件是否存在。

Imports System.IO
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("OpenDrawing", CommandFlags.Session)> _
Public Sub OpenDrawing()
  Dim strFileName As String = "C:\campus.dwg"
  Dim acDocMgr As DocumentCollection = Application.DocumentManager
 
  If (File.Exists(strFileName)) Then
      acDocMgr.Open(strFileName, False)
  Else
      acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " & strFileName & _
                                                     " does not exist.")
  End If
End Sub

保存和关闭图形

使用 Database 对象的SaveAs 方法保存 Database 对象的内容。在使用 SaveAs 方法时,用户可以指定 Database 是否应该重命名,如果 bBakAndRename 参数指定为 True,在磁盘上的图形的备份将要重命名。通过检查 DWGTITLED 系统变量的值,用户可以确定 Database 是否使用类似 Drawing1,Drawing2 之类的默认名字。如果 DWGTITLED 为0,图形将不用重命名。

有时候用户希望检查活动图形中是否存在未保存的更改。在退出 AutoCAD 任务或创建新图形之前,应当进行这样的检查。若要检查图形文件是否已经被修改,用户需要检查 DBMOD 系统变量的值。 

关闭图形

Document 对象的 CloseAndDiscard 或 CloseAndSave 方法用于关闭打开的图形并放弃或保存任何未保存的修改。也可以使用 DocumentCollection 的 CloseAll 方法关闭 AutoCAD 中所有打开的图形。

保存活动图形

本例中,如果活动图形未保存就保存到"c:\MyDrawing.dwg"否则使用它的当前名字保存。

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("SaveActiveDrawing")> _
Public Sub SaveActiveDrawing()
  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  Dim strDWGName As String = acDoc.Name
 
  Dim obj As Object = Application.GetSystemVariable("DWGTITLED")
 
  '' 检查图形是否有名字 
  If System.Convert.ToInt16(obj) = 0 Then
      '' 如果图形使用默认名字(Drawing1,Drawing2等等),那么指定一个新的名字
      '' then provide a new name
      strDWGName = "c:\MyDrawing.dwg"
  End If
 
  '' 保存活动图形 
  acDoc.Database.SaveAs(strDWGName, True, DwgVersion.Current, _
                        acDoc.Database.SecurityParameters)
End Sub

本例检查是否存在未保存的更改,并验证用户是否选择“确定”以保存图形(如果没有选择“确定”,跳至结尾处)。如果用户选择“确定”,将使用 Saveas 方法保存当前图形,如下所示:

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
 
<CommandMethod("DrawingSaved")> _
Public Sub DrawingSaved()
  Dim obj As Object = Application.GetSystemVariable("DBMOD")
 
  '' 检查 DBMOD 的值,如果为0那么图形就没有修改
  If Not (System.Convert.ToInt16(obj) = 0) Then
      If MsgBox("Do you wish to save this drawing?", _
                MsgBoxStyle.YesNo, _
                "Save Drawing") = MsgBoxResult.Yes Then
          Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
          acDoc.Database.SaveAs(acDoc.Name, True, DwgVersion.Current, _
                                acDoc.Database.SecurityParameters)
      End If
  End If
End Sub

在没有文档打开时使用

AutoCAD 通常在启动时会打开一个新的或现有文档。但也可以关闭当前任务中的所有文档。

如果关闭 AutoCAD 用户界面中的所有文档,应用程序窗口将发生一些改变。快速访问工具栏和应用程序菜单将只出现可用的选项。并且这些可用选项只与创建和打开图形、显示图纸集管理和恢复图形有关。如果显示了菜单栏,也只简单的显示“文件”、“视图”、“窗口”和“帮助”菜单。此外还会注意到没有显示命令行。

在零文档状态中工作,只允许执行以下操作:

  • 创建新的或打开现有的文档
  • 可以定制应用程序菜单和菜单条的零文档状态
  • 可以退出 AutoCAD

当进入零文档状态时若要与 AutoCAD 起反应,应该使用 DocumentDestroyed 事件。DocumentDestroyed 事件在一个打开的文档关闭时触发。文档数在最后一个文档被关闭时为1。当 DocumentDestroyed 事件触发时使用 DocumentManager 的 Count 属性可以确定打开文档的数量。

本例代码使用 DocumentDestroyed 事件监视什么时候最后文档关闭和什么时候进入零文档状态。一旦进入零文档状态,应用程序菜单的 Opening 事件将被注册。当应用程序菜单被点击时,Opening 事件将被触发。在 Opening 事件中,一个新的菜单项将添加到应用程序菜单中。新菜单项将显示一个消息框。

注意为了使用下面的示例代码用户必须引用 AdWindows.dll 到工程。 AdWindows.dll 包含用于定义应用程序菜单的命名空间,它可以在 AutoCAD 的安装文件夹或 ObjectARX SDK 部件中找到。同样也需要引用 WindowsBase,它可以在添加引用对话框的 .NET 标签中找到。

Imports System.Windows.Input
 
Imports Autodesk.Windows
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
 
'' 创建用于自定义应用程序菜单项的命令处理程序
Public Class MyCommandHandler
  Implements ICommand
 
  Event CanExecuteChanged(ByVal sender As Object, ByVal e As EventArgs) _
                                       Implements ICommand.CanExecuteChanged
 
  Function CanExecute(ByVal parameter As Object) As Boolean _
                                      Implements ICommand.CanExecute
      Return True
  End Function
 
  Sub Execute(ByVal parameter As Object) Implements ICommand.Execute
      Application.ShowAlertDialog("MyMenuItem has been clicked")
  End Sub
End Class
 
Public Class Chapter4
  ''用于 ZeroDocState 的全局变量
  Dim acApMenuItem As ApplicationMenuItem = Nothing
 
  <CommandMethod("AddZeroDocEvent")> _
  Public Sub AddZeroDocEvent()
      '' 获得 DocumentCollection 并注册 DocumentDestroyed 事件
      Dim acDocMgr As DocumentCollection = Application.DocumentManager
      AddHandler acDocMgr.DocumentDestroyed, AddressOf docDestroyed
  End Sub
 
  Public Sub docDestroyed(ByVal obj As Object, _
                          ByVal acDocDesEvtArgs As DocumentDestroyedEventArgs)
      '' 判断菜单项是否已经存在和打开文档的数量
      If Application.DocumentManager.Count = 1 And IsNothing(acApMenuItem) Then
          '' Add the event handler to watch for when the application menu is opened
          '' AdWindows.dll 必须引用到工程中   AdWindows.dll must be referenced to the project
          AddHandler ComponentManager.ApplicationMenu.Opening, _
                     AddressOf ApplicationMenu_Opening
      End If
  End Sub
 
  Public Sub ApplicationMenu_Opening(ByVal sender As Object, _
                                     ByVal e As EventArgs)
      '' 检查以确定自定义菜单项前面是否已经添加
      If IsNothing(acApMenuItem) Then
          '' 获得应用程序菜单组件
          Dim acApMenu As ApplicationMenu = ComponentManager.ApplicationMenu
 
          '' 创建新的应用程序菜单项
          acApMenuItem = New ApplicationMenuItem()
          acApMenuItem.Text = "MyMenuItem"
          acApMenuItem.CommandHandler = New MyCommandHandler()
 
          '' 追加新的菜单项
          acApMenu.MenuContent.Items.Add(acApMenuItem)
 
          '' 移除应用程序菜单的 Opening 事件处理程序
          RemoveHandler ComponentManager.ApplicationMenu.Opening, _
                        AddressOf ApplicationMenu_Opening
      End If
  End Sub
End Class

锁定和解锁文档

请求修改对象或访问 AutoCAD 可能发生在任何情况下,并有可能来自许多应用程序。若要避免和其它请求的冲突,应该在修改操作前锁定文档。在某些情况下锁定文档失败将引起数据库在修改期间的锁定侵犯。在如下情况下你将需要锁定文档:

  • 从非模态窗口中与 AutoCAD 交互操作
  • 访问已加载的不同于当前文档的其它文档
  • 作为 COM 服务器使用
  • 注册命令时使用了 Session 命令标记

例如,当要在除当前文档外的其它文档的模型空间或图纸空间中添加图元时,需要先锁定其文档。用户可用要锁定的Document 对象的LockDocument方法进行锁定。在调用LockDocument方法后,将返回一个DocumentLock对象。

一旦完成锁定数据库的修改,就需要解锁数据库。若要解锁数据库,可以调用 DocumentLock 对象的 Dispose 方法。也可以将 Using 语句用于 DocumentLock 对象,一旦 Using 语句结束,数据库也将被解锁。

当运行没有使用 Seesion 命令标记的命令的情况下,当前文档在修改前不需要锁定数据库。

修改对象前锁定对象

本例创建一个新的文档然后在里面画一个圆。文档创建后,新文档的数据库会被锁定,然后一个圆会被添加到里面。圆添加后,数据库会被解锁,并且与其关联的文档窗口会被设置成当前文档。

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
 
<CommandMethod("LockDoc", CommandFlags.Session)> _
Public Sub LockDoc()
  '' 创建新图形   
  Dim acDocMgr As DocumentCollection = Application.DocumentManager
  Dim acNewDoc As Document = acDocMgr.Add("acad.dwt")
  Dim acDbNewDoc As Database = acNewDoc.Database
 
  '' 锁定新文档
  Using acLckDoc As DocumentLock = acNewDoc.LockDocument()
 
      '' 在新数据库中启动事务
      Using acTrans As Transaction = acDbNewDoc.TransactionManager.StartTransaction()
 
          '' 以只读方式打开块表
          Dim acBlkTbl As BlockTable
          acBlkTbl = acTrans.GetObject(acDbNewDoc.BlockTableId, _
                                       OpenMode.ForRead)
 
          '' 以写方式打开模型空间块表记录
          Dim acBlkTblRec As BlockTableRecord
          acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), _
                                          OpenMode.ForWrite)
 
          '' 创建一个半径为3圆心在5,5的圆
          Dim acCirc As Circle = New Circle()
          acCirc.SetDatabaseDefaults()
          acCirc.Center = New Point3d(5, 5, 0)
          acCirc.Radius = 3
 
          '' 添加新对象到模型空间和事务中
          acBlkTblRec.AppendEntity(acCirc)
          acTrans.AddNewlyCreatedDBObject(acCirc, True)
 
          '' 保存新对象到数据库中
          acTrans.Commit()
      End Using
 
      '' 解锁文档
  End Using
 
  '' 设置新文档为当前文档
  acDocMgr.MdiActiveDocument = acNewDoc
End Sub

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中文名: AutoCAD 2009基础教程 原名: 中文版AutoCAD 2009基础教程 作者: 薛焱资源格式: PDF 版本: 高清中文版 出版社: 清华大学出版社书号: 9787302171393发行时间: 2008年 地区: 大陆 语言: 简体中文 简介: 内容简介: 本书系统地介绍了使用中文版AutoCAD 2009进行计算机绘图的方法。全书共分14章,主要内容包括AutoCAD 2009入门和绘图基础,绘图辅助工具的使用,二维图形的绘制和编辑,面域和图案填充的使用,文字和表格的创建图形尺寸的标注,块、外部参照和设计中心的使用,三维图形的绘制、编辑和渲染,图形打印输出,以及AutoCAD绘图综合实例等。 本书结构清晰,语言简练,实例丰富,既可作为高等学校相关专业的教材,也可作为从事计算机绘图技术研究与应用人员的参考书。 目录: 第1章 AutoCAD 2009入门基础 1.1 AutoCAD功能概述 1.1.1 绘制与编辑图形 1.1.2 标注图形尺寸 1.1.3 渲染三维图形 1.1.4 输出与打印图形 1.2 AutoCAD 2009的工作空间 1.2.1 选择工作空间 1.2.2 二维草图与注释空间 1.2.3 三维建模空间 1.2.4 AutoCAD经典空间 1.2.5 AutoCAD工作空间的基本组成 1.3 图形文件管理? 1.3.1 创建图形文件 1.3.2 打开图形文件 1.3.3 保存图形文件 1.3.4 加密保护绘图数据 1.3.5 关闭图形文件 1.4 思考练习 第2章 AutoCAD绘图基础 2.1 设置绘图环境 2.1.1 设置参数选项 2.1.2 设置图形单位 2.1.3 设置图形界限 2.1.4 设置工作空间 2.2 使用命令与系统变量 2.2.1 使用鼠标操作执行命令 2.2.2 使用键盘输入命令 2.2.3 使用“命令行” 2.2.4 使用“AutoCAD文本窗口” 2.2.5 使用系统变量 2.2.6 命令的重复、撤消与重做 2.3 绘图方法 2.3.1 使用菜单栏 2.3.2 使用工具栏 2.3.3 使用“屏幕菜单” 2.3.4 使用“菜单浏览器”按钮 2.3.5 使用“功能区”选项板 2.3.6 使用绘图命令 2.4 使用坐标系 2.4.1 认识世界坐标系与用户坐标系 2.4.2 坐标的表示方法 2.4.3 控制坐标的显示 2.4.4 创建坐标系 2.4.5 命名用户坐标系 2.4.6 使用正交用户坐标系 2.4.7 设置UCS的其他选项 2.5 思考练习 第3章 使用绘图辅助工具 3.1 使用图层 3.1.1 新建图层 3.1.2 设置图层 3.1.3 图层管理 3.2 控制图形显示 3.2.1 缩放和平移视图 3.2.2 使用命名视图 …… 第4章 绘制二维平面图形 第5章 选择与编辑三维图形对象 第6章 绘制面域与图案填充 第7章 创建文字和表格 第8章 标注图形尺寸 第9章 使用块、属性块、外部参照 第10章 绘制三维图形 第11章 编辑和标三维对象 第12章 观察与渲染三维形 第13章 图形的输入输出 第14章 AutoCAD绘图综合实例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值