土木在线论坛 \ 建筑设计 \ CAD下载及教程 \ VBA实例:把当前图纸中符合条件的圆替换为块

VBA实例:把当前图纸中符合条件的圆替换为块

发布于:2006-09-28 11:07:28 来自:建筑设计/CAD下载及教程 [复制转发]
’把当前图纸中符合条件的圆替换为块(注:块在当前图纸中已存在)
Public Sub ChangeEntity(ByVal MinRadius As Double, ByVal MaxRadius As Double, _
ByVal BlockName As Variant, ByVal AutoSelect As Boolean)
On Error Resume Next

Dim ssobject As AcadCircle
Dim InsertionPoint(0 To 2) As Double
Dim NewBlock As AcadBlockReference

’创建选择集
Dim ssetObj As AcadSelectionSet
Set ssetObj = AcadDoc.SelectionSets("BlockCount")

If Err.Number <> 0 Then
Err.Clear
Set ssetObj = AcadDoc.SelectionSets.Add("BlockCount")
End If

’清空选择集
ssetObj.Clear

’创建过滤机制
Dim fType(0 To 6) As Integer
Dim fData(0 To 6) As Variant

fType(0) = 0: fData(0) = "Circle"

fType(1) = -4: fData(1) = "<AND"
fType(2) = -4: fData(2) = ">="
fType(3) = 40: fData(3) = MinRadius
fType(4) = -4: fData(4) = "<="
fType(5) = 40: fData(5) = MaxRadius
fType(6) = -4: fData(6) = "AND>"

’选择符合条件的所有图元-圆
If AutoSelect Then
’自动选择方式
ssetObj.Select acSelectionSetAll, , , fType, fData
Else
’提示用户选择
ssetObj.SelectOnScreen fType, fData
End If

If ssetObj.Count = 0 Then Exit Sub

’替换每一个圆为指定的块对象
For Each ssobject In ssetObj
InsertionPoint(0) = ssobject.Center(0)
InsertionPoint(1) = ssobject.Center(1)
InsertionPoint(2) = ssobject.Center(2)

On Error GoTo ErrHandle

Set NewBlock = AcadDoc.ModelSpace.InsertBlock(InsertionPoint, BlockName, 1, 1, 1, 0)

ssobject.Delete
Set NewBlock = Nothing
Next

’删除数组
Erase fType: Erase fData

’刷新视图
’AcadDoc.Regen acActiveViewport

MsgBox "当前图纸中有 " & ssetObj.Count & " 个符合条件的圆被替换为块 “" & BlockName & "”。", vbInformation, "提示:"

’删除选择集
ssetObj.Clear
ssetObj.Delete

Set ssetObj = Nothing
Exit Sub
ErrHandle:
Select Case Err.Number
Case -2147418113
MsgBox "在当前图纸中找不到名称为: “" & BlockName & "” 的块参照,请确认块名!", vbCritical, "错误:"
Case Else
MsgBox Err.Number & Chr(13) & Err.Descri ption, vbCritical, "产生了以下错误:"
End Select
Err.Clear
End Sub

全部回复(3 )

只看楼主 我来说两句
  • ai361210
    ai361210 沙发
    小弟在VB编辑器中编辑“把当前图纸中符合条件的圆替换为块“的源代码,
    但无法在cad宏中找到,小弟不知该怎么运行,哪位大哥告诉小弟下!谢谢啦!!!

    :L :L

    [ 本帖最后由 ai361210 于 2009-10-17 08:24 编辑 ]
    2009-10-17 08:21:17

    回复 举报
    赞同0
  • sunlee168
    sunlee168 板凳
    大哥,能不能给各画四边形的例子?
    参数是内接圆半径,圆心。
    2006-10-18 16:36:18

    回复 举报
    赞同0
加载更多
这个家伙什么也没有留下。。。

CAD下载及教程

返回版块

52.08 万条内容 · 662 人订阅

猜你喜欢

阅读下一篇

AutoCAD2006命令与系统变量

目录3D 命令 3DARRAY 命令 3DCLIP 命令 3DCONFIG 命令 3DCORBIT 命令 3DDISTANCE 命令 3DDWFPUBLISH 命令 3DFACE 命令 3DMESH 命令 3DORBIT 命令 3DORBITCTR 命令 3DPAN 命令 3DPOLY 命令 3DSIN 命令 3DSOUT 命令 3DSWIVEL 命令

回帖成功

经验值 +10