乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 211|回复: 13

这个层存在吗?

[复制链接]

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 06:33:45 | 显示全部楼层 |阅读模式
嗨,
希望你们都好..
这无疑是一个非常简单的问题,但我似乎无法找到我需要的所有答案..
我试图检查一个层是否存在,如果存在,使用它进行块插入,如果不存在,创建它并使用它..下面是我的函数(我想是从这里找到的一个函数修改而来的):
  1. Private Function DoesLayerExist(ByRef LayerName As String) As Boolean
  2. LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
  3.       Dim objLayer As AcadLayer
  4.       For Each objLayer In ThisDrawing.Layers
  5.             If UCase(objLayer.Name) = UCase(LayerName) Then
  6.                   DoesLayerExist = True
  7.                   Exit Function
  8.             End If
  9.       Next objLayer
  10.       DoesLayerExist = False
  11.       RMlayer = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
  12.       RMlayer.Plottable = False
  13. End Function

首先,这个功能可以吗?其次,我如何在程序中的其他subs中使用它?
这是部分主要代码的摘录,我正在使用:
  1. 'Insert block..
  2.     Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
  3.     RMblock.Layer = RMlayer

有什么想法吗?

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

16

主题

168

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
197
发表于 2010-10-11 06:49:11 | 显示全部楼层
一旦你知道该层存在,你需要设置它为激活层,如果你想你的块插入该层。或者替代方案是在插入后将块改变到层。
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 10:16:39 | 显示全部楼层
嗨,亚利桑那州,
我当前的代码在插入后确实改变了块的层,但是我的功能有问题或者我忽略了什么...
有什么想法吗?
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 10:19:55 | 显示全部楼层
请注意,如果该图层存在,请为 RMlayer 设置一个值。 试试这个。
  1. Private Function DoesLayerExist(ByRef LayerName As String) As Boolean
  2. LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
  3.       Dim objLayer As AcadLayer
  4.       For Each objLayer In ThisDrawing.Layers
  5.             If UCase(objLayer.Name) = UCase(LayerName) Then
  6.                   DoesLayerExist = True
  7.                   RMlayer = objLayer
  8.                   Exit Function
  9.             End If
  10.       Next objLayer
  11.       DoesLayerExist = False
  12.       RMlayer = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
  13.       RMlayer.Plottable = False
  14. End Function

回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 10:52:03 | 显示全部楼层
嗨,埃里克,
好的。我试过了,但还是一无所获。如果我在函数后使用floowing代码….
  1. 'Insert block..
  2.     Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
  3.     RMblock.Layer = RMlayer

…这一切是如何相互联系的?如何在插入块的代码中调用函数的返回?
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 11:10:02 | 显示全部楼层
它没有。拉斯蒂+没有完全清醒+还没有咖啡=回答不好
试试
  1. Private Function DoesLayerExist(ByRef LayerName As String) As acadlayer
  2. LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
  3.       Dim objLayer As AcadLayer
  4.       For Each objLayer In ThisDrawing.Layers
  5.             If UCase(objLayer.Name) = UCase(LayerName) Then
  6.                   DoesLayerExist = objLayer
  7.                   Exit Function
  8.             End If
  9.       Next objLayer
  10.       DoesLayerExist = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
  11.       RMlayer.Plottable = False
  12. End Function

  1. 'Insert block..
  2.     Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
  3.     RMblock.Layer = DoesLayerExist

仅供参考,尽管咖啡现在已经煮好了,但我的杯子还没有装满。有一段时间没有做任何VBA,也没有加载它,所以我无法测试,所以我只是瞎插。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2010-10-11 11:36:00 | 显示全部楼层
嗨埃里克,
希望你的咖啡很好.
我累了把...
  1. RMblock.Layer = DoesLayerExist

...但它打破了并说“参数不是可选的”
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 11:44:45 | 显示全部楼层
人民币锁。Layer=DoesLayerExist(将传递给LayerName的字符串放在这里)
咖啡是古德咖啡
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2010-10-11 12:09:19 | 显示全部楼层
嗨,Eric,我尝试了各种方法:
  1. RMblock.Layer = DoesLayerExist(RMLayer.name)

or
  1. Private Function DoesLayerExist() As acadlayer
  2. dim LayerName as string
  3. LayerName = "LSC-REVISIONS_" & revnumCOMBO.Text
  4.       Dim objLayer As AcadLayer
  5.       For Each objLayer In ThisDrawing.Layers
  6.             If UCase(objLayer.Name) = UCase(LayerName) Then
  7.                   DoesLayerExist = objLayer
  8.                   Exit Function
  9.             End If
  10.       Next objLayer
  11.       DoesLayerExist = ThisDrawing.Layers.Add("LSC-REVISIONS_" & revnumCOMBO.Text)
  12.       RMlayer.Plottable = False
  13. End Function
  1. 'Insert block..
  2.     Set RMblock = ThisDrawing.PaperSpace.InsertBlock(BlockPoint, "P:\CAD_Blocks\PaperSpace Stuff\Program Blocks\Revision Marker.dwg", 1#, 1#, 1#, 0)
  3.     RMblock.Layer = DoesLayerExist

抱歉,这和我在没有第一手资料的情况下所能做的一样好。
回复

使用道具 举报

46

主题

118

帖子

23

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
291
发表于 2010-10-11 14:25:41 | 显示全部楼层
RMblock。layer = DoesLayerExist(RM layer . name)
DoesLayerExist需要返回一个字符串(Layername而不是acadlayer本身)
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-1 08:10 , Processed in 0.350203 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表