mccad 发表于 2004-12-27 21:53:00

绘图顺序编程的讨论

绘图顺序,在2005版本中可以通过程序对其进行操作。
因为2005版本增加了一个SortentsTable对象,这个对象就是绘图顺序对象。
(AutoCAD发展到目前有点古怪,绘图顺序也是图元对象、而表格样式也是图元对象)
虽然它显示在图元对象处,其实它却是从词典中的一个对象而已,为了编程的方便而提出来。
(同样道理,表格样式也是词典中的一个对象,而图形属性是扩展记录中的一个对象)我们可以通过以下程序下得到SortentsTable对象:       '获取扩展词典,并且在需要时,添加 SortentsTable 对象
       Dim eDictionary As Object
       Set eDictionary = ThisDrawing.ModelSpace.GetExtensionDictionary
       ' 防止在调用 GetObject 时出现异常
       On Error Resume Next
       Dim sentityObj As Object
       Set sentityObj = eDictionary.GetObject("ACAD_SORTENTS")
       On Error GoTo 0
       If sentityObj Is Nothing Then
               ' 没有 SortentsTable 对象,则添加
               Set sentityObj = eDictionary.AddObject("ACAD_SORTENTS", "AcDbSortentsTable")
       End If得到的SortentsTable对象默认为模型空间中绘图顺序。
在SortentsTable对象的方法属性中可以看出,绘图顺序可以通过SetRelativeDrawOrder 方法来指定部分对象来成为SortentsTable对象的排序对象,也就是可以在操作指定在所提供的对象间排序,而不是对所有图形中的对象排序。
在SortentsTable对象中提供了BLOCK方法来获得绘图顺序对象对哪个块有效,默认情况下是模型空间。而在对象模型中却没有提供能指定其它块做为绘图顺序的对象,这样的话,用户就无法指定某个布局给SortentsTable对象以便排序。
所以在编程中,如果对模型空间的图元进行排序是很轻易的事情。而需要在布局空间中排序则不是一件容易的事。SortentsTable对象提供了几种排序的方法,置最前、置最后、置某对象前、置某对象后,(MoveAbove、 MoveBelow 、MoveToBottom 、MoveToTop) 另外还提供了交换两个对象的顺序SwapObjects    。再结合了它提供了只对部分图元排序这样的功能,倒是可以编制也比系统提供的命令更强大的功能。可惜就是在布局上出了点问题。
详细的对象模型可参见已经升级到2005版本的对象模型。
页: [1]
查看完整版本: 绘图顺序编程的讨论