乐筑天下

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

求助:选择集内直线问题

[复制链接]

19

主题

45

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2008-6-16 20:15:00 | 显示全部楼层 |阅读模式
选择集内有2条相交直线,现在通过"break"命令实现了在交点处打断,打断之后,选择集就只有2条线 但是怎样让选择集重新包含打断了的4条直线呢?
回复

使用道具 举报

3

主题

11

帖子

5

银币

初来乍到

Rank: 1

铜币
23
发表于 2008-6-18 09:28:00 | 显示全部楼层
利用selectpoint方法。
回复

使用道具 举报

15

主题

70

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2008-6-18 10:04:00 | 显示全部楼层
ReSelSet:
  '建立选择集
  LineSelset.Select acSelectionSetAll, , , LineType, LineData
  '打断直线
  LineSelSet.Clear  '清空选择集
  goto ReSelSet   '重新建立选择集  
LZ:请问两条直线在交点处打断,通过VBA是怎么实现的?
回复

使用道具 举报

19

主题

45

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2008-6-18 13:09:00 | 显示全部楼层
可以调用cad命令,你可以具体看看论坛上的,cad转换双元表
回复

使用道具 举报

19

主题

45

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2008-6-20 17:10:00 | 显示全部楼层
程序如下,但是还是不能实现直线长度小于2000的自动删除,有时候可以,有时候不行,在vba界面里面按执行按钮可以,在cad里面里面点击“宏”运行就不行,为什么呢?
Sub r4()                          '相交的直线彼此打断
    Dim returnObj As AcadEntity
    Dim y(1 To 3) As Double
    Dim ss(100000) As Variant
    Dim det As String
    Dim det1 As String
    Dim lspPnt As String
   
     
    On Error Resume Next
    SsetName = "au100"
    On Error Resume Next
    For i = 0 To ThisDrawing.SelectionSets.Count - 1
        Set SsetObj = ThisDrawing.SelectionSets.Item(i)
       If SsetObj.Name = "au100" Then SsetObj.Delete
    Next i
       Set SsetObj = ThisDrawing.SelectionSets.Add(SsetName)
       SsetObj.SelectOnScreen
     
       j = SsetObj.Count
      MsgBox j
       k = 0
      
     For i = 0 To j - 1
        For ii = 0 To j - 1
          If Abs(SsetObj.Item(i).Angle - SsetObj.Item(ii).Angle) > 0.5 Then
            ss(k) = SsetObj.Item(i).IntersectWith(SsetObj.Item(ii), acExtendBoth)
            det = GetDoubleEntTable(SsetObj.Item(i), ss(k))
            det1 = GetDoubleEntTable(SsetObj.Item(ii), ss(k))
            lspPnt = axPoint2lspPoint(ss(k))
            ThisDrawing.SendCommand "_break" & vbCr & det & vbCr & lspPnt & vbCr
            ThisDrawing.SendCommand "_break" & vbCr & det1 & vbCr & lspPnt & vbCr
           
            SsetObj.SelectAtPoint ss(k)
            k = k + 1
          End If
        Next
     Next     
   For i = 0 To SsetObj.Count
      If SsetObj.Item(i).Length
'转换双元表的函数
Public Function GetDoubleEntTable(entObj As AcadEntity, Pnt As Variant) As String
    Dim entHandle As String
    entHandle = entObj.Handle
    GetDoubleEntTable = "(list(handent " & Chr(34) & entHandle & Chr(34) & _
                     ")(list " & Str(Pnt(0)) & Str(Pnt(1)) & Str(Pnt(2)) & "))"
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-6-21 12:42:00 | 显示全部楼层

在没打断前获得选择集的 minPoint,maxPoint坐标,如.GetBoundingBox可以获得实体的minPoint,maxPoint,打断后在重新定义sset选择集用minPoint,maxPoint
回复

使用道具 举报

19

主题

45

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
121
发表于 2008-7-18 16:45:00 | 显示全部楼层
.GetBoundingBox没法获得选择集的minPoint,maxPoint坐标,只有实体才能用.GetBoundingBox方法阿!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-4 08:09 , Processed in 0.410232 second(s), 67 queries .

© 2020-2025 乐筑天下

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