乐筑天下

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

使用SendCommand命令执行fillet倒角功能

[复制链接]

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2006-12-29 11:47:00 | 显示全部楼层 |阅读模式
问题提出:
VBA没有处理fillet的功能,我用SendCommand调用fillet命令进行了组合,VBA中实现了在倒圆角功能.
关键语句    Dim Command As String
    Command = "fillet" + Chr(10) + "R" + Chr(10) + "300" + Chr(10) + Chr(10)
    obj_Doc.SendCommand Command
实际运行运行语句如下:
  Dim cn As ADODB.Connection
  Dim rst As ADODB.Recordset
  ''
  Set cn = New ADODB.Connection
  cn.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" _
        & App.Path & "\directory.mdb;"
  Set rst = New ADODB.Recordset
  rst.Open "pipeline", cn, adOpenKeyset, adLockPessimistic
  rst.MoveFirst
  
    Dim Command As String
    Command = "fillet" + Chr(10) + "R" + Chr(10) + "300" + Chr(10) + Chr(10) '设置倒圆角的半径
    obj_Doc.SendCommand Command
  
  Dim point1(0 To 2) As Double, point2(0 To 2) As Double, point3() As Double
  Dim ii As Integer
  ii = 0
  Do Until rst.EOF
    point1(0) = rst!PointX: point1(1) = rst!PointY: point1(2) = rst!PointZ
    rst.MoveNext
    If rst.EOF Then
       Exit Do
    Else
      point2(0) = rst!PointX: point2(1) = rst!PointY: point2(2) = rst!PointZ
      Set Ent = obj_ModelSpace.addline(point1, point2)
      rst.Fields(1).Value = Trim(Ent.Handle) '获取直线的handle数据
      
    End If
  
  Loop
   
通过数据库,调用两相邻直线段的handle数据,实现倒圆角的功能.   
     Command = "fillet" + Chr(10) + "(handent " & Chr(34) & Str_Handle(ii) & Chr(34) & ")" & Chr(10) + "(handent " & Chr(34) & Str_Handle(ii + 1) & Chr(34) & ")" & Chr(10)
     obj_Doc.SendCommand Command
存在问题:
SendCommand 是将VBA数据整合为Auto CAD的组合命令,现在倒角的功能已经实现,但不能获取生成后的圆弧的ID号,不能对其进行扩展运行,建立三维管道模型.
要找到这个弧的handle我用的方法是for each ent in thisdrawing, 但不能与建立直线相关联.
  
回复

使用道具 举报

48

主题

302

帖子

8

银币

后起之秀

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

铜币
494
发表于 2006-12-29 12:15:00 | 显示全部楼层
用ENTLAST可不可以?
相当于ssget "L",VBA不太懂,反正在VL 中这很简单。
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2006-12-29 12:56:00 | 显示全部楼层
我现在的关键问题有两个解决方案
1 用ENTLAST,获取handle数据,采用XRecord方法,看了示例就头晕.
2 采用object.Select命令,Mode采用acSelectionSetLast,获取handle,但没有示例程序.
我在运行object.Select时经常出现错误,"命名选择集已经存在".
通过
    Dim ssetObj As AcadSelectionSet
    If Not ssetObj Then
      Set ssetObj = ThisDrawing.SelectionSets.Add("SSET")
    End If
也不能屏蔽出现的错误,"命名选择集已经存在"
这也是我解决上面帖子的一个关键问题.
回复

使用道具 举报

13

主题

396

帖子

5

银币

后起之秀

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

铜币
448
发表于 2006-12-29 14:28:00 | 显示全部楼层
vba也可获得最后生成的实体
Set TheLastObj = ThisDrawing.ModelSpace.Item(ThisDrawing.ModelSpace.Count - 1)
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2006-12-30 08:55:00 | 显示全部楼层
对于使用 SendCommand来实现象倒角、截断、延伸、修剪这样的问题,在2002年已经讨论过。
可参见:
你的圆角有点问题,这里也涉及到双元表的问题。因为我上面提到的几个命令,都与鼠标点击的位置有关。就象是圆角,是从哪一端圆角,就看你鼠标点击的位置了,所以在程序里就有一个特殊的表“双元表”,专门来处理这样的问题。
回复

使用道具 举报

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2006-12-30 09:51:00 | 显示全部楼层
高手就高手,一条指令就解决我好多天的困扰,谢谢.
回复

使用道具 举报

37

主题

151

帖子

1

银币

后起之秀

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

铜币
299
发表于 2007-4-21 22:02:00 | 显示全部楼层
请教版主们,为什么在两条轻量多段线倒角时却不予执行呢?
det1 = GetDoubleEntTable(LWPineObj1, pickPt1)
det2 = GetDoubleEntTable(LWPineObj2, pickPt2)
ThisDrawing.SendCommand "_chamfer" & vbCr & "d" & vbCr & "0" & vbCr & "0" & vbCr & det1 & vbCr & det2 & vbCr
这应该没什么错误啊,请问是怎么回事?
回复

使用道具 举报

37

主题

151

帖子

1

银币

后起之秀

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

铜币
299
发表于 2007-4-22 21:37:00 | 显示全部楼层
在图形界面下chamfer就一切正常,用VBA倒角同样的两条线就没有任何反应,真是莫明其妙,我觉得如上贴我写的没问题啊,执行其它两种线型都正常,就是多段线与多段线不行,请求高手帮助。
回复

使用道具 举报

37

主题

151

帖子

1

银币

后起之秀

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

铜币
299
发表于 2007-4-25 21:42:00 | 显示全部楼层
难道没人遇到过这个问题?有没有用SendCommand倒角多段线与多段线成功的?
我不知是我的错误还是这样就是不行。请高手指点。谢谢。
回复

使用道具 举报

20

主题

51

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
131
发表于 2007-4-28 19:56:00 | 显示全部楼层
不太理解用VBA实现这样的操作有什么用途?用VBA调用LSP执行类似操作不行吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-7 17:43 , Processed in 1.759460 second(s), 72 queries .

© 2020-2025 乐筑天下

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