2024年4月28日发(作者:)

动态块顾名思义就是带有动作的图块。把动态块插入图中后,可以利用是先定义的缩放、拉伸、旋转、

翻转等动作改变块中元素的尺寸和可变的属性而保持块的完整性不变。动态块具有灵活性和智能性,可以

很容易地改变图形中的动态块参照。通过自定义夹点或属性,用户可以操作动态块参照中的几何图形。这

使得用户可以根据需要在位调整块,而不用搜索另一个块以插入或重定义现有的块。在绘图时,动态块参

照在与原来的块定义可能显示不同,然而,显示的块参照仍然是原来块定义的参考。

目前用.NET 环境开发还不能自定义约束、关联以及动态块,但是我们可以用.NET 程序访问或者控制

动态块的参数。通过定义可设置词典键/值对(DictionaryEntry),查询DictionaryEntry中属性Key是否与动

态快中PropertyName相同,从而修改相应Value。

下面通过一个简单的例子来介绍通过修改动态块的属性、参数值来改变块中元素的位

置、尺寸和可变的属性而保持块的完整性不变。

图1 CAD动态块

首先,制作好一个简单的矩形块 ,然后给块添加参数和动作,参数是矩形的长,距离为60,动作是

拉伸,即形成动态块(如图3所示)。现在我们要把图3制作的矩形动态块的初始边长60拉伸到200而不

改变原有动态块的完整性,程序只需要找到动态块的参数PropertyName,然后修改相应的Value。关键代

码如下(限于篇幅,本文中的程序将只列出主要代码):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

Public Shared Sub SetDynamicValue (ByVal BlockName As String)

Dim DynamicPropertyDic As DictionaryEntry

= "距离": = 200

Dim ed As Editor =

Dim db As Database = gDatabase

Try

Dim opts As New PromptEntityOptions("Select a dynamic block ")

Dim NullId As ObjectId =

Dim res As PromptEntityResult = ity(opts)

If <> Then:Return: Else: NullId = Id:End If

Dim tr As ctionManager=ctionManager

Using Trans As Transaction = ransaction ()

Dim blockRef As BlockReference =ect (NullId, d)

Dim btr As BlockTableRecord = ect (ableRecord, _

d)

Dim ENT As Entity = ect (NullId, te)

Dim dbrProp As DynamicBlockReferenceProperty

If TypeOf ENT Is BlockReference Then

Dim blr As BlockReference = CType (ENT, BlockReference)

If micBlock = True Then

For Each dbrProp In cBlockReferencePropertyCollection

If tyName = DynamicPropertyDic. Key Then

= le(DynamicPropertyDic. Value )

End If:Next:End If: End If: ():End Using

Catch e As ion

ertDialog ("Error occurs when insert Dynamic block: " + BlockName)

End Try

End Sub