找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 504|回复: 4

[求助]:怎样用VBA实现这样的填充?

[复制链接]
发表于 2005-11-19 17:26:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
哪位高手可以帮忙,谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-21 08:16:40 | 显示全部楼层
看看这个例程你就知道了
Sub Ch4_AppendInnerLoopToHatch()
    Dim hatchObj As AcadHatch
    Dim patternName As String
    Dim PatternType As Long
    Dim bAssociativity As Boolean
   
    ' 定义和创建图案填充
    patternName = "ANSI31"
    PatternType = 0
    bAssociativity = True
    Set hatchObj = ThisDrawing.ModelSpace. _
        AddHatch(PatternType, patternName, bAssociativity)
   
    ' 创建图案填充的外部环
    Dim outerLoop(0 To 1) As AcadEntity
    Dim center(0 To 2) As Double
    Dim radius As Double
    Dim startAngle As Double
    Dim endAngle As Double
    center(0) = 5: center(1) = 3: center(2) = 0
    radius = 3
    startAngle = 0
    endAngle = 3.141592
    Set outerLoop(0) = ThisDrawing.ModelSpace. _
       AddArc(center, radius, startAngle, endAngle)
    Set outerLoop(1) = ThisDrawing.ModelSpace. _
       AddLine(outerLoop(0).startPoint, outerLoop(0).endPoint)
        
    ' 将外部环附加到 Hatch 对象
    hatchObj.AppendOuterLoop (outerLoop)
   
    ' 创建一个圆作为图案填充的内部环
    Dim innerLoop(0) As AcadEntity
    center(0) = 5: center(1) = 4.5: center(2) = 0
    radius = 1
    Set innerLoop(0) = ThisDrawing.ModelSpace. _
                                 AddCircle(center, radius)
   
    ' 将圆作为内部环附加到图案填充
    hatchObj.AppendInnerLoop (innerLoop)
   
    ' 计算并显示图案填充
    hatchObj.Evaluate
    ThisDrawing.Regen True
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-22 21:41:51 | 显示全部楼层
楼上的大哥,我写了下面的代码来实现填充效果,但是添加内部边界就出错,你给的例子我也看过,只有一个内部边界,麻烦你看看我的代码,谢谢!
Sub HH()
'On Error Resume Next
Dim ent As AcadEntity
Dim Pname As String
Dim Ptype As Long
Dim Ba As Boolean
Dim hatchObj As AcadHatch
Pname = "ANSI33" '填充样式
Ptype = acHatchPatternTypePreDefined '填充类型
Ba = True '是否关联
Dim Outer(0 To 0) As AcadEntity


Dim i As Integer
Dim j As Integer
Dim s As Integer
Dim Plobj As AcadPolyline
Dim coor As Variant
Dim coords As Variant
Dim pnt As Variant
Dim Sset As AcadSelectionSet




'clearsset

Set Sset = ThisDrawing.SelectionSets.Add("GD")

ThisDrawing.Utility.GetEntity ent, pnt, "c"

coords = ent.Coordinates


Sset.SelectByPolygon acSelectionSetWindowPolygon, coords



Dim K As Integer


ReDim Inner(0 To Sset.Count - 1) As AcadEntity



For K = 0 To Sset.Count - 1


    Set Inner(K) = Sset.Item(K)


Next
Sset.Delete
Set Outer(0) = ent '定义填充外边界

Set hatchObj = ThisDrawing.ModelSpace.AddHatch(Ptype, Pname, Ba)
'Hatchobj.HatchStyle = acHatchStyleOuter
hatchObj.AppendOuterLoop Outer

hatchObj.AppendInnerLoop Inner

hatchObj.Evaluate


ThisDrawing.Regen True


End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-23 13:35:54 | 显示全部楼层
'你是选择的边界啊,如果选择了边界还用程序来干吗
'你看看这个好不好玩
Sub Ch4_AppendInnerLoopToHatch()
    Dim hatchObj As AcadHatch
    Dim patternName As String
    Dim PatternType As Long
    Dim bAssociativity As Boolean
  
   
    ' 定义和创建图案填充
    patternName = "ANSI31"
    PatternType = 0
    bAssociativity = True
    Set hatchObj = ThisDrawing.ModelSpace. _
        AddHatch(PatternType, patternName, bAssociativity)
   
    ' 创建图案填充的外部环
    Dim outerLoop(0 To 0) As AcadEntity
    Dim center(0 To 2) As Double
    Dim radius As Double
    Dim startAngle As Double
    Dim endAngle As Double
    center(0) = 0: center(1) = 0: center(2) = 0
    radius = 100
      Set outerLoop(0) = ThisDrawing.ModelSpace. _
                                 AddCircle(center, radius)
        
    ' 将外部环附加到 Hatch 对象
    hatchObj.AppendOuterLoop (outerLoop)
   
    ' 创建一个圆作为图案填充的内部环
     Dim innerLoop(0) As AcadEntity
        center(0) = 40: center(1) = 20: center(2) = 0
        radius = 20
        Set innerLoop(0) = ThisDrawing.ModelSpace. _
                                 AddCircle(center, radius)
       ' 将圆作为内部环附加到图案填充
    hatchObj.AppendInnerLoop (innerLoop)
   
     ' 创建一个圆作为图案填充的内部环
    center(0) = -40: center(1) = 20: center(2) = 0
        radius = 20
       Set innerLoop(0) = ThisDrawing.ModelSpace. _
                                 AddCircle(center, radius)
      ' 将圆作为内部环附加到图案填充
          hatchObj.AppendInnerLoop (innerLoop)
           
    ' 创建一个圆作为图案填充的内部环
    Dim ptmajoraxis(0 To 2) As Double
    ptmajoraxis(0) = 20: ptmajoraxis(1) = 0: ptmajoraxis(2) = 0
    center(0) = 0: center(1) = -60: center(2) = 0
    Set innerLoop(0) = ThisDrawing.ModelSpace.AddEllipse(center, ptmajoraxis, 0.3)
          ' 将圆作为内部环附加到图案填充
    hatchObj.AppendInnerLoop (innerLoop)
   
   
    ' 计算并显示图案填充
    hatchObj.Evaluate
    ThisDrawing.Regen True
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-23 19:14:38 | 显示全部楼层
呵,大哥你的程序很有意思,看了以后获益匪浅,我把程序改了一下,可以填充了,不过就是在'hatchObj.Evaluate总出错,于是注释掉这行,所以要全部重生成下才可以显示阴影线,麻烦您看看我的代码,是哪里有问题?非常感谢!
Sub HH()
'On Error Resume Next
Dim ent As AcadEntity
Dim Pname As String
Dim Ptype As Long
Dim Ba As Boolean
Dim hatchObj As AcadHatch
Pname = "ANSI33" '填充样式
Ptype = acHatchPatternTypePreDefined '填充类型
Ba = True '是否关联
Dim Outer(0 To 0) As AcadEntity


Dim i As Integer
Dim j As Integer
Dim s As Integer
Dim Plobj As AcadPolyline
Dim coor As Variant
Dim coords As Variant
Dim pnt As Variant
Dim Sset As AcadSelectionSet




'clearsset

Set Sset = ThisDrawing.SelectionSets.Add("GD")

ThisDrawing.Utility.GetEntity ent, pnt, "c"

coords = ent.Coordinates


Sset.SelectByPolygon acSelectionSetWindowPolygon, coords
Debug.Print Sset.Count
'Sset.Delete
Set Outer(0) = ent '定义填充外边界

Set hatchObj = ThisDrawing.ModelSpace.AddHatch(Ptype, Pname, Ba)
'Hatchobj.HatchStyle = acHatchStyleOuter
hatchObj.AppendOuterLoop (Outer)

Dim K As Integer


Dim Inner(0 To 0) As AcadEntity



For K = 0 To Sset.Count - 1


    Set Inner(0) = Sset.Item(K)
hatchObj.AppendInnerLoop (Inner)

Next






'hatchObj.Evaluate

Sset.Delete
ThisDrawing.Regen True


End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-26 21:58 , Processed in 0.209122 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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