乐筑天下

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

[编程交流] 计数块

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 21:41:31 | 显示全部楼层 |阅读模式
你好
我需要在多个关卡数块,我可以用5个关卡。
也许有人可以帮忙,有什么建议吗?
顺致敬意,
  1.     <Autodesk.AutoCAD.Runtime.CommandMethod("Bcount")>
  2.     Public Sub Blockcount()
  3.         Dim myExcel As Object = CreateObject("Excel.Application")
  4.         myExcel.Visible = True
  5.         Dim myWB As Object = myExcel.Workbooks.Add
  6.         Dim myDesktop As String = My.Computer.FileSystem.SpecialDirectories.Desktop
  7.         Dim curRow As Integer = 1
  8.         Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  9.         Dim db As Database = doc.Database
  10.         Dim ed As Editor = doc.Editor
  11.         Using trx As Transaction = db.TransactionManager.StartTransaction()
  12.             Dim bt As BlockTable = trx.GetObject(db.BlockTableId, OpenMode.ForRead)
  13.             For Each btrId As ObjectId In bt
  14.                 Dim btr As BlockTableRecord = trx.GetObject(btrId, OpenMode.ForRead)
  15.                 Dim refIds As ObjectIdCollection = btr.GetBlockReferenceIds(False, False)
  16.                 If btr.Name.Contains("Y") Then
  17.                         If Not btr.IsLayout Then
  18.                         myExcel.ActiveSheet.Cells(curRow, "F").value = refIds.Count.ToString
  19.                         myExcel.ActiveSheet.Cells(curRow, "A").value = DateTime.Now.ToString
  20.                         myExcel.ActiveSheet.Cells(curRow, "B").value = doc.Window.Text
  21.                         myExcel.ActiveSheet.Cells(curRow, "C").value = "Price"
  22.                         myExcel.ActiveSheet.Cells(curRow, "D").value = btr.Name
  23.                         myExcel.ActiveSheet.Cells(curRow, "E").value = btr.Comments
  24.                         curRow += 1
  25.                         End If
  26.                     End If
  27.                 Next
  28.             db.Dispose()
  29.         End Using
  30.         myWB.SaveAs(IO.Path.Combine(myDesktop, "Furnitura.xlsx"))
  31.         myWB = Nothing
  32.         myExcel = Nothing
  33.     End Sub
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:01:03 | 显示全部楼层
你好,我想你的意思是“水平”层?关于上述代码,它不是VBA?似乎是其他语言,这是必须的?相反,我可以建议您使用VBA程序。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:03:18 | 显示全部楼层
你好
我已经在块中的块中创建了块。。。并且需要计算所有同名的块。我可以计算图形中的对象或图形中的块引用,但只能计算一个级别。
例如,我添加了一个dwg。
 
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:19:11 | 显示全部楼层
我明白,你是说嵌套块。这是一个lsp程序,它在命令输入栏上显示不同的块名,我对lsp不是很在行,但我试过了,它成功了。
请参见https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/report-number-of-nested-blocks/m-p/6340079/highlight/true#M341484
我会尝试更多的VBA,但我从来没有过类似的问题。
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:25:38 | 显示全部楼层
它不起作用,只计算顶层块的总数量。我添加示例。xlsx。。我需要什么
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:40:50 | 显示全部楼层
抱歉,这是我的结果,我知道lsp例程不算,但你可以修改并适应你的使用。
((“YFE-0079689”“YFSK3.5-35”)(“Feet\u 50”“YFE-0044747”“YFE-0079689”“URB\u 15x13”))
这是嵌套块Feet_50的屏幕截图,并且是相同的,不仅是第一级,而且是嵌套的
224134kwoi544ew8faca9r.png
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-6 22:43:16 | 显示全部楼层
该代码应该有效,
不幸的是,为了正确计数,您必须检查名称并进行计数,或者作为替代计数,计算将找到多少次相同的名称。
图纸上的结果应为:
 
YFE-0044747 6 YFE-0079689 6 YFSK3.5-35 18 URB_15x13 12
 
与参考图片完全相同,仅显示1个块(总计乘以6)。
224135qb399e8is30b92ss.png
当然,excel部分缺失了,但你应该知道如何修复它。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 14:48 , Processed in 0.351577 second(s), 68 queries .

© 2020-2025 乐筑天下

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