明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3623|回复: 13

VBA如何实现删除图形文件中的重复实体

  [复制链接]
发表于 2004-4-22 10:03:00 | 显示全部楼层 |阅读模式
我想问在CAD文件中有重复的线和文字,如何实现删除图形文件中的重复实体?先谢谢了
发表于 2004-4-22 18:54:00 | 显示全部楼层
难度大,怎样判断重复?
发表于 2004-4-22 19:04:00 | 显示全部楼层
判断重复,对线判断两端点,对文本判断插入点和文本值
发表于 2004-4-22 19:22:00 | 显示全部楼层
没这么简单.


对线,每根线得与其它所有线比较,两根线的4个端点要在同一直线上.要做起来非常麻烦,对此不报希望.
发表于 2004-4-22 21:34:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-4-22 21:38:00 | 显示全部楼层
有什么区别?建立选择集只不过是要比较的线的数目少一点,方法还是一样.
发表于 2004-4-22 21:44:00 | 显示全部楼层
你说的问题我以前做过类似的东东:一个两人对弈围棋的程序,确实很复杂
发表于 2004-4-22 23:31:00 | 显示全部楼层
object.delete要是不行你就用


ThisDrawing.SendCommand "_erase" & vbCr & "(要删除的东西)" & vbCr & vbCr


看看行么?有的东西我就是这么删的
发表于 2004-4-23 16:41:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2004-4-23 22:49:00 | 显示全部楼层
本帖最后由 作者 于 2004-4-23 23:53:22 编辑
  1. Public Function GetVal(Line1 As AcadLine, Line2 As AcadLine) As Integer
  2. Dim c As AcadLine
  3. Dim a(1) As Double, b(1) As Double
  4. Dim d(2) As Double, e(2) As Double
  5. If Line1.Angle <> Line2.Angle Then GetVal = 0: Exit Function
  6. GetVal = 1
  7. e(1) = 1
  8. Set c = ThisDrawing.ModelSpace.AddLine(d, e)
  9. If c.Angle = Line1.Angle Then
  10.        h = c.StartPoint
  11.        h(0) = h(0) + 1
  12.        c.StartPoint = h
  13. End If
  14. f = c.IntersectWith(Line1, acExtendBoth)
  15. g = c.IntersectWith(Line2, acExtendBoth)
  16. c.Delete
  17. If Abs(f(0) - g(0)) < 10 ^ -8 And Abs(f(1) - g(1)) < 10 ^ -8 Then
  18.        GetVal = 2
  19.        If Line1.StartPoint(0) = Line1.EndPoint(0) Then
  20.                a(0) = Min(Line1.StartPoint(1), Line1.EndPoint(1))
  21.                a(1) = Max(Line1.StartPoint(1), Line1.EndPoint(1))
  22.                b(0) = Min(Line2.StartPoint(1), Line2.EndPoint(1))
  23.                b(1) = Max(Line2.StartPoint(1), Line2.EndPoint(1))
  24.        Else
  25.                a(0) = Min(Line1.StartPoint(0), Line1.EndPoint(0))
  26.                a(1) = Max(Line1.StartPoint(0), Line1.EndPoint(0))
  27.                b(0) = Min(Line2.StartPoint(0), Line2.EndPoint(0))
  28.                b(1) = Max(Line2.StartPoint(0), Line2.EndPoint(0))
  29.        End If
  30.        If (a(0) - b(1)) * (a(1) - b(0)) <= 0 Then GetVal = 3
  31. End If
  32. End Function
  33. Function Min(Value1 As Variant, Value2 As Variant) As Variant
  34. Min = Value1
  35. If Value2 < Value1 Then Min = Value2
  36. End Function
  37. Function Max(Value1 As Variant, Value2 As Variant) As Variant
  38. Max = Value1
  39. If Value2 > Value1 Then Max = Value2
  40. End Function
这是一个判断两直线是否平行且重合的程序不平行返回0平行但不在一直线上返回1平行且在一直线上但不相交返回2平行且在一直线上且相交返回3下一步应该简单了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 02:45 , Processed in 0.173614 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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