乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 115|回复: 8

求直线长度

[复制链接]

9

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2011-1-14 11:12:00 | 显示全部楼层 |阅读模式
环境:2006+VS2008
要求:求0图层所有直线长度
代码如下:
     Public Sub testSelection2()
        Dim db As Database = HostApplicationServices.WorkingDatabase
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        '定义过滤条件
        '实体类型
        Dim value1 As TypedValue = New TypedValue(DxfCode.Start, "LINE")
        '图层
        Dim value2 As TypedValue = New TypedValue(DxfCode.LayerName, "0")
        'Dim value3 As TypedValue = New TypedValue(DxfCode.Color, "1")
        Dim values() As TypedValue = {value1, value2}
        Dim sfilter As New SelectionFilter(values)
        ' 返回选择集的用户提示类.
        Dim resSel As PromptSelectionResult = ed.SelectAll(sfilter)
        ' 得到选择集对象.
        Dim sSet As SelectionSet = resSel.Value
        ' 得到选择集中所有对象的ObjectId集合.
        Dim ids As ObjectId() = sSet.GetObjectIds()
        Using trans As Transaction = db.TransactionManager.StartTransaction()
            ' 遍历选择集.
            For Each sSetEntId As ObjectId In ids
                Dim ent As Entity = trans.GetObject(sSetEntId, OpenMode.ForWrite)
            
                ' 这里怎么写
                'Dim l As Double
            Next
            trans.Commit()
        End Using
    End Sub
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-1-14 16:36:00 | 显示全部楼层
求曲线长度的通用代码:
ent.GetDistanceAtParameter(ent.EndParam)
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-1-14 12:17:00 | 显示全部楼层
  1.             Dim sum As Double
  2.             For Each sSetEntId As ObjectId In ids
  3.                 Dim ent As Line = trans.GetObject(sSetEntId, OpenMode.ForWrite)
  4.                 sum += ent.Length
  5.             Next
回复

使用道具 举报

19

主题

154

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
230
发表于 2011-1-14 12:30:00 | 显示全部楼层
trans.GetObject(sSetEntId, OpenMode.ForRead)即可……
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2011-1-14 12:32:00 | 显示全部楼层
随手复制了,呵呵
另外,如果没有对数据库有更改,只是查询的话
trans.Commit()也可以去掉
回复

使用道具 举报

9

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2011-1-14 14:04:00 | 显示全部楼层

感谢楼上两位。
是不是版本不一样,我用的CAD2006+vs2008,
调试提示:
“Length”不是“Autodesk.AutoCAD.DatabaseServices.Line”的成员
这样实现不知道是否有误差
Dim vec As Vector3d = ent.GeomExtents.MaxPoint - ent.GeomExtents.MinPoint
Length = Length + vec.Length
回复

使用道具 举报

9

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2011-1-14 16:58:00 | 显示全部楼层
多谢飞狐版主~~~
回复

使用道具 举报

2

主题

19

帖子

2

银币

初来乍到

Rank: 1

铜币
27
发表于 2012-6-26 17:45:00 | 显示全部楼层
参考着学习了~~呵呵~
回复

使用道具 举报

14

主题

81

帖子

8

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
137
发表于 2012-7-31 14:01:00 | 显示全部楼层
新手上路,看到楼上那些交流觉得C#好难学啊[em0]
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 14:46 , Processed in 0.251550 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表