乐筑天下

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

不知道是什么回事?

[复制链接]

28

主题

117

帖子

4

银币

后起之秀

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

铜币
229
发表于 2003-7-28 20:50:00 | 显示全部楼层 |阅读模式
用break来裁剪一个闭合多段线的时候,有时候裁掉的部分是另外部分,而留下我想裁减的那部分:(
所以用vba的sendcommand结合双元表,可能会导致以上后果
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-7-28 21:01:00 | 显示全部楼层
最好不要另起贴子讨论。
我在上个贴子已经说得很清楚了,这种操作方法与双元表没有关系,而是你的程序本身有问题。
回复

使用道具 举报

28

主题

117

帖子

4

银币

后起之秀

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

铜币
229
发表于 2003-7-28 21:27:00 | 显示全部楼层
但这个现象确实不是在程序里面才出现,
直接在CAD里面用break命令来操作有时就会出现那种情况,我在画图的时候就遇到过很多次
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-7-28 22:06:00 | 显示全部楼层
我已经跟你说过了,你可以使用偏移的方法,求偏移线直选择集线的交点,再通过交点来形成双元表实施修剪,这样可以很准确。如下(环境是VBA):
  1. Sub Trim()
  2.     Dim acadapp As AcadApplication
  3.     Dim acaddoc As AcadDocument
  4.     '此句用于VBA
  5.     Set acadapp = ThisDrawing.Application
  6.     '此名用于VB
  7.     'Set acadapp = connectcad(acadapp)
  8.     Set acaddoc = acadapp.ActiveDocument
  9.     '此句用于VB
  10.     'AppActivate acadapp.Caption '让CAD得到焦点
  11.    
  12.    
  13.     Dim Pnt1 As Variant
  14.     Dim entObj1 As AcadEntity
  15.     acaddoc.Utility.GetEntity entObj1, Pnt1, "选择修剪边界:"
  16.     Dim det1 As String
  17.     det1 = axEnt2lspEnt(entObj1)
  18.    
  19.     Dim entObjOff As AcadEntity
  20.     Dim entObjOffs As Variant
  21.    
  22.     '控制偏移的距离和方向的参数
  23.     Dim OffDist As Double
  24.     OffDist = 0.5
  25.     entObjOffs = entObj1.Offset(OffDist)
  26.     Set entObjOff = entObjOffs(0)
  27.    
  28.     Dim Pnt2 As Variant
  29.     Dim entObj2 As AcadEntity
  30.    
  31.     Dim sle1 As AcadSelectionSet
  32.    
  33.    
  34.     On Error Resume Next
  35.    
  36.     Set sle1 = acaddoc.SelectionSets.Item("sle1")
  37.     sle1.Clear
  38.     If Err Then
  39.     Err.Clear
  40.     Set sle1 = acaddoc.SelectionSets.Add("sle1")
  41.     End If
  42.    
  43.     acaddoc.Utility.Prompt "选择需要修剪的对象" & Chr(13)
  44.    
  45.     sle1.SelectOnScreen
  46.    
  47.     'Pnt2 = acaddoc.Utility.GetPoint(, "选择修剪方向")
  48.     Dim det2 As String
  49.    
  50.     Dim IntPnt As Variant
  51.     Dim IntPnt1(2) As Double
  52.     Dim n As Integer
  53.     For Each entObj2 In sle1
  54.     IntPnt = entObj2.IntersectWith(entObjOff, acExtendNone)
  55.    
  56.     If IsArray(IntPnt) Then
  57.         For n = 0 To UBound(IntPnt) Step 3
  58.             IntPnt1(0) = IntPnt(n + 0)
  59.             IntPnt1(1) = IntPnt(n + 1)
  60.             IntPnt1(2) = IntPnt(n + 2)
  61.             det2 = GetDoubleEntTable(entObj2, IntPnt1)
  62.             acaddoc.SendCommand "_trim" & vbCr & det1 & vbCr & vbCr & det2 & vbCr & vbCr
  63.         Next
  64.     End If
  65.     Next
  66.    
  67.     entObjOff.Delete
  68.    
  69.     Dim command_str As String
  70.     command_str = Chr(3) & Chr(3)
  71.     acaddoc.SendCommand command_str
  72.     acaddoc.Utility.Prompt "修剪完成!"
  73.     acaddoc.SendCommand command_str
  74.    
  75.     'Set acadapp = Nothing
  76.     End
  77.    
  78. End Sub
  79. '转换双元表的函数
  80. Public Function GetDoubleEntTable(entObj As AcadEntity, Pnt As Variant) As String
  81.     Dim entHandle As String
  82.     entHandle = entObj.Handle
  83.     GetDoubleEntTable = "(list(handent " & Chr(34) & entHandle & Chr(34) & _
  84.                      ")(list " & Str(Pnt(0)) & Str(Pnt(1)) & Str(Pnt(2)) & "))"
  85. End Function
  86. '转换点的函数
  87. Public Function axPoint2lspPoint(Pnt As Variant) As String
  88.     axPoint2lspPoint = Pnt(0) & "," & Pnt(1) & "," & Pnt(2)
  89. End Function
  90. '转换图元函数
  91. Public Function axEnt2lspEnt(entObj As AcadEntity) As String
  92.     Dim entHandle As String
  93.     entHandle = entObj.Handle
  94.     axEnt2lspEnt = "(handent " & Chr(34) & entHandle & Chr(34) & ")"
  95. End Function
  96. Function connectcad(acadapp As AcadApplication) As AcadApplication '连接AUTOCAD
  97. On Error Resume Next
  98.      
  99.     '与autocad通信
  100.      
  101.     Set acadapp = GetObject(, "AutoCAD.Application")
  102.     If Err Then
  103.         Err.Clear
  104.         Set acadapp = CreateObject("AutoCAD.Application")
  105.         If Err Then
  106.             MsgBox Err.Description
  107.             Exit Function
  108.         End If
  109.     End If
  110. Set connectcad = acadapp
  111. End Function
  112. 'Private Sub Form_Initialize()
  113. 'Trim
  114. 'End Sub

以下为程序运行后的效果

vdcowde2rp2.jpg

vdcowde2rp2.jpg

回复

使用道具 举报

4

主题

7

帖子

2

银币

初来乍到

Rank: 1

铜币
23
发表于 2011-10-27 09:27:00 | 显示全部楼层
为什么你这个方法有些线不能剪掉,或者剪掉了相反的部分
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-30 18:03 , Processed in 1.665681 second(s), 77 queries .

© 2020-2025 乐筑天下

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