明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12288|回复: 35

急求:将圆批量转为块的程序

  [复制链接]
发表于 2004-3-16 16:47 | 显示全部楼层 |阅读模式
最近急需一个能将一个图形里的所有圆一次性转成块的程序,请各位大侠帮帮忙啊,不然我就死定了
发表于 2004-3-16 16:54 | 显示全部楼层
那圖里面如有很多圓. 是不是一個圓一個塊名呢? 還是所有的圓做成一個塊?
 楼主| 发表于 2004-3-16 17:02 | 显示全部楼层
如果一个圆里边还有圆的话,就以它们的公共圆心为准,对于单个的圆就以圆心为准好了,谢谢了,在线等待中
发表于 2004-3-16 18:14 | 显示全部楼层
还没搞清楚你的需求,是指将图中所有的圆转换为一个图块,还是将图中每个单独的图均转换为一个单独的图块,然后如果多个圆是同心的话,则将这些同心的圆转换为一个图块。图块的名称有何要求,还是任意的名称。
 楼主| 发表于 2004-3-16 18:35 | 显示全部楼层
将图中每个单独的图均转换为一个单独的图块,如果多个圆是同心的话,则将这些同心的圆转换为一个图块,名称没有要求,谢哈
发表于 2004-3-16 21:22 | 显示全部楼层
  1. Sub CircleToBlock()
  2.        On Error Resume Next
  3.        Dim ss As AcadSelectionSet
  4.        Set ss = CreateSelectionSet
  5.        Dim typeArray As Variant
  6.        Dim dataArray As Variant
  7.        BuildFilter typeArray, dataArray, 0, "Circle"
  8.        ss.Select acSelectionSetAll, , , typeArray, dataArray
  9.        If ss.Count > 0 Then
  10.                Dim EntCircle As AcadCircle
  11.                Dim CS As AcadSelectionSet
  12.                Dim tArray As Variant
  13.                Dim dArray As Variant
  14.                Dim Center As Variant
  15.                Dim Blk As AcadBlock
  16.                Dim BlkRef As AcadBlockReference
  17.                Dim Ents As Variant
  18.                Dim i As Integer
  19.                For i = 0 To ss.Count - 1
  20.                        Set CS = CreateSelectionSet("circle")
  21.                        Set EntCircle = ss(i)
  22.                        Center = EntCircle.Center
  23.                        BuildFilter tArray, dArray, 0, "Circle", 10, Center
  24.                        CS.Select acSelectionSetAll, , , tArray, dArray
  25.                        Debug.Print CS.Count
  26.                        Set Blk = ThisDrawing.Blocks.Add(Center, "*U")
  27.                        Ents = ssArray(CS)
  28.                        ThisDrawing.CopyObjects Ents, Blk
  29.                        ThisDrawing.ModelSpace.InsertBlock Center, Blk.Name, 1, 1, 1, 0
  30.                        CS.Erase
  31.                Next
  32.        End If
  33. End Sub
  34. Public Sub BuildFilter(typeArray, dataArray, ParamArray gCodes())
  35.        Dim fType() As Integer, fData()
  36.        Dim index As Long, i As Long
  37.        index = LBound(gCodes) - 1
  38.        For i = LBound(gCodes) To UBound(gCodes) Step 2
  39.                index = index + 1
  40.                ReDim Preserve fType(0 To index)
  41.                ReDim Preserve fData(0 To index)
  42.                fType(index) = CInt(gCodes(i))
  43.                fData(index) = gCodes(i + 1)
  44.        Next
  45.        typeArray = fType: dataArray = fData
  46. End SubPublic Function CreateSelectionSet(Optional ssName As String = "ss") As AcadSelectionSet
  47.        On Error Resume Next
  48.        ThisDrawing.SelectionSets(ssName).Delete
  49.        Set CreateSelectionSet = ThisDrawing.SelectionSets.Add(ssName)
  50. End Function
  51. Public Function ssArray(ss As AcadSelectionSet)
  52.        Dim retVal() As AcadEntity, i As Long
  53.        ReDim retVal(0 To ss.Count - 1)
  54.        For i = 0 To ss.Count - 1
  55.                Set retVal(i) = ss.Item(i)
  56.        Next
  57.        ssArray = retVal
  58. End Function
 楼主| 发表于 2004-3-17 08:33 | 显示全部楼层
我刚上来,就看到了MCCAD的回贴,真心的说句谢谢!我试试看
 楼主| 发表于 2004-3-17 10:46 | 显示全部楼层
能不能用LISP编写啊,VBA我有点看不懂,谢了
发表于 2004-3-17 19:45 | 显示全部楼层
下载以下文件,然后把它放到启动组中,然后输入cb就可以执行了。这还不简单??


本帖子中包含更多资源

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

x
发表于 2004-3-17 19:57 | 显示全部楼层
请 meflyinge编吧,他可是高手。能不能说出编这个程序的实际用处,这样让人明白这个程序在工程实际应用中还有这个妙用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 16:11 , Processed in 0.311052 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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