明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2285|回复: 7

图框里的自动编号

[复制链接]
发表于 2018-3-20 11:16 | 显示全部楼层 |阅读模式

这是一个标准图框的边角,能否实现类似于word中的自动编号,其中第几页

按照图框的X坐标自动编号,共几页取按照X坐标排序的最大值,并且保存图纸时自动刷新,无需人为操作。

图框是外部参照。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2018-3-20 12:13 | 显示全部楼层
肯定是可以自动填写的,代码也不复杂,就是过滤图框,计总数,按X坐标排序,再逐一写入页码即可。关键是这个程序的代码写在哪里更合适,如果写在本图,则其它图还要单独再导入一次代码。如果写在插件里面,肯定要有触发事件的。
 楼主| 发表于 2018-3-20 15:03 | 显示全部楼层
dong20030432 发表于 2018-3-20 12:13
肯定是可以自动填写的,代码也不复杂,就是过滤图框,计总数,按X坐标排序,再逐一写入页码即可。关键是这 ...

能否把代码写到外部参照里,这样在引用外部参照的时候会不会触发事件?
发表于 2018-3-20 15:31 | 显示全部楼层
引用过程好像不能触发事件吧?不了解。
可不可以屏蔽CAD关闭按钮(要用API),要求用户用二次开发按钮进行关闭保存,这样就强制执行代码了。
发表于 2018-6-5 17:36 | 显示全部楼层
dong20030432 发表于 2018-3-20 12:13
肯定是可以自动填写的,代码也不复杂,就是过滤图框,计总数,按X坐标排序,再逐一写入页码即可。关键是这 ...

能不能给个范例呢~~~参考参考
发表于 2018-6-6 10:23 | 显示全部楼层
wyy623 发表于 2018-6-5 17:36
能不能给个范例呢~~~参考参考

没有单独做过相同程序,从其它程序中摘录出一小段,比较凌乱,请参考!

  1. ’部分声明
  2. Public Type EntSse
  3.     EntTem As AcadEntity
  4.     X As Double
  5.     Y As Double
  6. End Type
  7. Public tempObj() As EntSse

  8. Sub 块过滤()
  9. IsOpen = False
  10. For Each acaddoc In acadapp.Documents
  11. If StrComp(acaddoc.Name, MyFileName, vbTextCompare) = 0 Then
  12. IsOpen = True
  13. acaddoc.Activate
  14. Exit For
  15. End If
  16. Next
  17. If IsOpen = False Then acadapp.Documents.Open MyPath & MyFileName
  18. acadapp.ZoomExtents
  19. Set Sset = acadapp.ActiveDocument.SelectionSets.Add(Now & Timer)
  20. CreateSSetFilter FilterType, FilterDate, 0, "insert",2,“块名称”
  21. Sset.Select acSelectionSetAll, , , FilterType, FilterDate
  22. End Sub

  23. '快速创建选择集
  24. Public Sub CreateSSetFilter(ByRef FilterType As Variant, ByRef filterData As Variant, ParamArray filter())
  25. If UBound(filter) Mod 2 = 0 Then
  26. MsgBox "filter 参数无效!"
  27. Exit Sub
  28. End If
  29. Dim fType() As Integer  '过滤器规则
  30. Dim fData() As Variant  '过滤器参数
  31. Dim Count As Integer
  32. Count = (UBound(filter) + 1) / 2
  33. ReDim fType(Count - 1)
  34. ReDim fData(Count - 1)
  35. Dim i As Integer
  36. For i = 0 To Count - 1
  37. fType(i) = filter(2 * i)
  38. fData(i) = filter(2 * i + 1)
  39. Next i
  40. FilterType = fType
  41. filterData = fData
  42. End Sub

  43. '选择集排序
  44. Sub X坐标排序(ss As AcadSelectionSet)
  45.     Dim i As Integer
  46.     Dim j As Integer
  47.     If ss.Count = 0 Then Exit Sub
  48.     ReDim tempObj(ss.Count - 1)
  49.     For i = LBound(tempObj) To UBound(tempObj)
  50.         ss(i).GetBoundingBox pMin, pMax
  51.         Set tempObj(i).EntTem = ss(i)
  52.         tempObj(i).X = pMin(0)
  53.         tempObj(i).Y = pMin(1)
  54.     Next
  55.     For i = 0 To UBound(tempObj) - 1
  56.       For j = 1 To UBound(tempObj) - i
  57.         If tempObj(j - 1).X > tempObj(j).X Then
  58.               temp = tempObj(j - 1)
  59.               tempObj(j - 1) = tempObj(j)
  60.               tempObj(j) = temp
  61.         End If
  62.       Next
  63.     Next
  64. End Sub
发表于 2018-6-6 18:30 | 显示全部楼层
dong20030432 发表于 2018-6-6 10:23
没有单独做过相同程序,从其它程序中摘录出一小段,比较凌乱,请参考!

非常感谢。。。
发表于 2022-6-4 11:21 | 显示全部楼层
wyy623 发表于 2018-6-6 18:30
非常感谢。。。

您好!这个码可以共享一下吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 11:19 , Processed in 0.263813 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表