VB编程操作AtuoCAD图层

通过设置各图层的不同属性,调用图层的方法,可对不同类的图形对象分组编辑和管理,例如,可以创建一个专门画中心线的图层,将图层颜色属性设置为蓝色,线性定义为中心线,当需要画中心线时,就转到该层即可,而不是每次画中心线时都重新设置线型和颜色。

  • 创建并命名图层

新的图形文件建立时,系统自动创建一个名为”0“的图层,用Add方法可以创建新图层,也可同时给它命名。下面代码创建一个testlayer的图层,并将一个圆置于该图层。

Private Sub Command1_Click()

Dim testlayer As AcadLayer

Set testlayer = acadapp.ActiveDocument.Layers.Add("test")

testlayer.Color = acBlue

Dim circleobj As AcadCircle

Dim centerpoint(0 To 2) As Double

Dim radius As Double

centerpoint(0) = 0#: centerpoint(1) = 0#: centerpoint(2) = 0#

radius = 5#

Set circleobj = acadapp.ActiveDocument.ModelSpace.AddCircle(centerpoint, radius)

circleobj.Layer = "test"

circleobj.Color = acByLayer

circleobj.Update

End Sub

  • 设置当前图层

当有几个图层时,总是在激活的当前图层上绘图,若为指定当前图层,将在默认的0图层上绘图,文档对象的ActiveLayer属性可以将某图层设置为当前图层。

下面的程序创建名为A、B的两个图层,颜色一为蓝色,一为黄色,依次设置为当前图层,并在上面各绘制一个圆,颜色默认值acByLayer,一蓝一红,与所在图层颜色相同。

Private Sub Command1_Click()

Dim testlayer1 As AcadLayer

Dim testlayer2 As AcadLayer

Set testlayer1 = acadapp.ActiveDocument.Layers.Add("A")

Set testlayer2 = acadapp.ActiveDocument.Layers.Add("B")

testlayer1.Color = acBlue

testlayer2.Color = acRed

Dim circleobj1 As AcadCircle

Dim circleobj2 As AcadCircle

Dim centerpoint(0 To 2) As Double

Dim radius As Double

centerpoint(0) = 0#: centerpoint(1) = 0#: centerpoint(2) = 0#

radius = 5#

acadapp.ActiveDocument.ActiveLayer = testlayer1

Set circleobj1 = acadapp.ActiveDocument.ModelSpace.AddCircle(centerpoint, radius)

acadapp.ActiveDocument.ActiveLayer = testlayer2

Set circle2 = acadapp.ActiveDocument.ModelSpace.AddCircle(centerpoint, radius / 2)

ZoomExtents

End Sub

  • 开关图层

将图层的LayerOn属性设置为False,关闭图层,设置为True,打开图层。

关闭图层上的对象不显示,但是可以在其上创建新对象,但当时不能显示出来,当在可见图层和非可见图层之间频繁切换时,关闭图层比冻结图层更好些。下面的图层创建一个图层A,其上创建一个圆,然后关闭该图层并在其上添加一个圆,最后打开图层。

程序运行后先显示为一个黑色的圆,然后随着图层的关闭,虽然又添加了一个圆,但看不见任何圆,打开图层后,图层A上将显示两个圆。

Private Sub Command1_Click()

Dim testlayer As AcadLayer

Set testlayer = acadapp.ActiveDocument.Layers.Add("A")

acadapp.ActiveDocument.ActiveLayer = testlayer

Dim circleobj1 As AcadCircle

Dim circleobj2 As AcadCircle

Dim centerpoint(0 To 2) As Double

centerpoint(0) = 0#: centerpoint(1) = 0#: centerpoint(2) = 0#

Set circleobj1 = acadapp.ActiveDocument.ModelSpace.AddCircle(centerpoint, 1)

circleobj1.Update

ZoomExtents

MsgBox "将关闭图层并在其上添加一个圆"

testlayer.LayerOn = False

Set circle2 = acadapp.ActiveDocument.ModelSpace.AddCircle(centerpoint, 3)

ZoomExtents

AppActivate acadapp.Caption

MsgBox "将打开图层"

testlayer.LayerOn = True

acadapp.ActiveDocument.Regen acActiveViewport

End Sub

  • 冻结和解冻图层

将图层的Freeze属性设置为True,将冻结图层,设置为False,将解冻图层。

在冻结状态,图层上对象不显示,不能创建新对象,但可以编辑已有对象,当前图层不能冻结冻结图层可以加快显示变化,对于复杂的图形可以减少重新生成的次数。下面的程序创建两个图层:A和B在图层A上创建一个圆,然后将当前图层设置为B,冻结图层A,修改圆的颜色,再解冻图层A。

程序运行后,先显示一个黑色的圆,然后随着该图层的冻结而不可见,解冻后该圆又可见,且显示为红色。

Private Sub Command1_Click()

Dim testlayer1 As AcadLayer

Dim testlayer2 As AcadLayer

Set testlayer1 = acadapp.ActiveDocument.Layers.Add("A")

Set testlayer2 = acadapp.ActiveDocument.Layers.Add("B")

acadapp.ActiveDocument.ActiveLayer = testlayer1

Dim circleobj As AcadCircle

Dim centerpoint(0 To 2) As Double

Dim radius As Double

centerpoint(0) = 0#: centerpoint(1) = 0#: centerpoint(2) = 0#

radius = 5#

Set circleobj = acadapp.ActiveDocument.ModelSpace.AddCircle(centerpoint, radius)

circleobj.Update

acadapp.ActiveDocument.ActiveLayer = testlayer2

MsgBox "将冻结图层,并修改圆的颜色"

testlayer1.Freeze = True

circleobj.Update

circleobj.Color = acRed

MsgBox "将冻结图层"

testlayer1.Freeze = False

circleobj.Update

End Sub

  • 锁住和解锁图层

将图层的Lock属性设置为True,将锁住图层,设置为False,可将图层解锁。被锁住的图层上可以显示对象,也可以将其设置为当前图层并在上面常见对象,但不可以编辑或修改被锁住的图层上的对象,当需要显示图层作为参照,有希望图层上的图形不被误修改,可以将该图层设置为锁住状态。

下面的程序在当前图层绘制一些图层,然后运行下面的程序将当前图层锁住,此时图层上的图形均可见,但不能用鼠标拖动或编辑图层上的图形,开锁图层后,就可以编辑图层上的图形了。

Private Sub Command1_Click()

Dim layerobj As AcadLayer

Set layerobj = acadapp.ActiveDocument.ActiveLayer

layerobj.Lock = True

MsgBox "当前图层已经开锁,可以编辑"

layerobj.Lock = False

AppActivate acadapp.Caption

End Sub

  • 删除图层

用Delete方法可以删除图层,但是,当前图层为0图层不能被删除,包含有对象的图层也不能被删除,只能删除空图层,语法格式:object.Delete。