明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3819|回复: 12

VBA某一图层中所有二位闭合多段线面积统计输出!?

    [复制链接]
发表于 2012-6-10 16:08:48 | 显示全部楼层 |阅读模式
我想通过这段代码实现提取"JMD"图层中所有闭合二位多段线的面积统计,但是不知道哪儿错了?面积一直显示为0!希望高手指点
' 创建新的选择集
    Dim sset As AcadSelectionSet
    Dim FilterType As Variant, FilterData As Variant
    Dim gpCode(2) As Integer, dataValue(2) As Variant

    Set sset = ThisDrawing.SelectionSets.Add("ssl")
    '创建过滤器
    '本例为过滤图层为“JMD”的闭合多段线
    '使用的是变体数组进行定义

    '多段线过滤器
    gpCode(2) = 0
    dataValue(2) = "LWPolyline"

    '图层过滤器
    gpCode(1) = 8
    dataValue(1) = "JMD"

    FilterType = gpCode
    FilterData = dataValue

    ' 添加至选择集中,在选择过程中进行过滤
    ' 完成选择后按回车。
    sset.Select acSelectionSetAll, , , FilterType, FilterData

    ' 在选择集中循环并将每一已合条件的对象面积统计输出。

    Dim sum As Single
    Dim i As Integer
    Dim s As Variant
    Dim PlineObj As AcadLWPolyline
    For i = 0 To ssetObj.Count - 1
        i = i + 1
        PlineObj = ssetObj.Item(i)
        s(i) = PlineObj.Area
        sum = sum + s(i)
    Next i
    ThisDrawing.Utility.Prompt "拆除砌体总面积为:" & sum & "平方米"

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
VBALISPER + 1 + 50 顺便和你一起学习一下.

查看全部评分

发表于 2012-6-10 16:20:38 | 显示全部楼层
首先 i=i+1 这句去掉
发表于 2012-6-10 16:23:12 | 显示全部楼层
For i = 0 To ssetObj.Count - 1
        i = i + 1
        PlineObj = ssetObj.Item(i)
        s(i) = PlineObj.Area
        sum = sum + s(i)
    Next i

改成
sum =0
for each PlineObj in ssetObj
  sum = sum+PlineObj.Area
next
 楼主| 发表于 2012-6-10 17:59:22 | 显示全部楼层
tnt123688 发表于 2012-6-10 16:23
For i = 0 To ssetObj.Count - 1
        i = i + 1
        PlineObj = ssetObj.Item(i)

不行啊,亲!直接显示执行错误!????
发表于 2012-6-10 22:08:41 | 显示全部楼层
fang: 发表于 2012-6-10 17:59
不行啊,亲!直接显示执行错误!????

错误信息?
发表于 2012-6-10 22:52:04 | 显示全部楼层
Public Sub abc()
' 创建新的选择集
    Dim sset As AcadSelectionSet
    Dim FilterType As Variant, FilterData As Variant
    Dim gpCode(1) As Integer, dataValue(1) As Variant

    Set sset = ThisDrawing.SelectionSets.Add("ssa")
    '创建过滤器
    '本例为过滤图层为“JMD”的闭合多段线
    '使用的是变体数组进行定义

    '多段线过滤器
    gpCode(0) = 0
    dataValue(0) = "LWPOLYLINE"
   

    '图层过滤器
    gpCode(1) = 8
    dataValue(1) = "JMD"

    FilterType = gpCode
    FilterData = dataValue

    ' 添加至选择集中,在选择过程中进行过滤
    ' 完成选择后按回车。
    sset.Select acSelectionSetAll, , , FilterType, FilterData

    ' 在选择集中循环并将每一已合条件的对象面积统计输出。

    Dim sum As Single
    Dim PlineObj As Object
   

    For Each PlineObj In sset
        sum = sum + PlineObj.Area
    Next
    ThisDrawing.Utility.Prompt "拆除砌体总面积为:" & sum & "平方米"

    sset.Delete

End Sub

评分

参与人数 1金钱 +50 收起 理由
VBALISPER + 50 很给力!

查看全部评分

发表于 2012-6-10 22:56:34 | 显示全部楼层
本帖最后由 yshf 于 2012-6-10 22:58 编辑

  1. Dim sum As Single
  2.     Dim i As Integer
  3.     Dim PlineObj As Object
  4.    
  5.     For i = 0 To sset.Count - 1
  6.         Set PlineObj = sset.Item(i)
  7.         sum = sum + PlineObj.Area
  8.     Next

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
VBALISPER + 1 + 50 赞一个!

查看全部评分

 楼主| 发表于 2012-6-11 10:08:36 | 显示全部楼层
yshf 发表于 2012-6-10 22:56

,多谢多谢!
发表于 2012-6-11 20:01:49 | 显示全部楼层
Sub tt()
' 创建新的选择集
    Dim sset As AcadSelectionSet
    Dim FilterType As Variant, FilterData As Variant
    Dim gpCode(1) As Integer, dataValue(1) As Variant

    Set sset = ThisDrawing.SelectionSets.Add("sss2")
    '创建过滤器
    '本例为过滤图层为“JMD”的闭合多段线
    '使用的是变体数组进行定义


    '图层过滤器
   
    '多段线过滤器
    gpCode(0) = 0
    dataValue(0) = "LWPolyline"

    '图层过滤器
    gpCode(1) = 8
    dataValue(1) = "JMD"

    FilterType = gpCode
    FilterData = dataValue
   
    Dim mode As Integer
    mode = acSelectionSetAll '全选模式

    ' 添加至选择集中,在选择过程中进行过滤
    ' 完成选择后按回车。
    sset.Select mode, , , FilterType, FilterData


    Dim sum As Double
    Dim i As Integer
    Dim s As Variant
    Dim PlineObj As Object
    For i = 0 To ThisDrawing.ActiveSelectionSet.Count - 1

        Set PlineObj = ThisDrawing.ActiveSelectionSet.Item(i)
        s = PlineObj.Area
        sum = sum + s
    Next i
    ThisDrawing.Utility.Prompt "拆除砌体总面积为:" & sum & "平方米"
    ThisDrawing.SelectionSets.Item("sss2").Delete '删除引用的选择集
End
End Sub
发表于 2012-6-13 12:27:26 | 显示全部楼层
其实就是多余了i = i + 1
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 15:57 , Processed in 0.198841 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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