找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 554|回复: 3

[VBA程序]:增加新的AutoCAD延长直线的功能

[复制链接]
发表于 2003-1-9 17:49:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
从别处看到的转贴过来,详细可去明径通道。
增加新的AutoCAD延长直线的功能
AutoCAD中的延长直线的命令需要先制定边界,再延长,用VBA可以编写一个直接用鼠标来确定延长位置的程序,可谓鼠标指到哪儿,直线就延长到哪儿,再也不用事先画边界了。
  1. 源程序如下:。。。。。
  2. Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

  3. Public Function MyHotKey(vKeyCode) As Boolean
  4. MyHotKey = (GetAsyncKeyState(vKeyCode) < 0)
  5. End Function

  6. Public Sub ExtendLineArc()
  7. Dim Object1 As AcadObject, Line2 As AcadLine, Line3 As AcadLine
  8. Dim FP As Variant, TP As Variant, OutAngle As Double, kk As Integer
  9. Dim P1(0 To 2) As Double, P2(0 To 2) As Double, RetP As Variant, SelectBase As Variant
  10. Dim ComS As String
  11. On Error Resume Next

  12. LLL1:
  13.     ThisDrawing.Utility.GetEntity Object1, SelectBase, "选择需要延长的直线或圆弧:"
  14.     If Err Then
  15.         If MyHotKey(vbKeyEscape) Then
  16.             Err.Clear
  17.             Exit Sub
  18.         End If
  19.         ThisDrawing.Utility.Prompt "没有选择实体!"
  20.         Err.Clear
  21.         GoTo LLL1
  22.     ElseIf Object1.ObjectName = "AcDbLine" Then
  23.         Object1.Highlight True
  24.         RetP = ThisDrawing.Utility.GetPoint(, "延长的位置:")
  25.         P1(0) = RetP(0) + 50 * Cos(Object1.Angle + Pt / 2)
  26.         P1(1) = RetP(1) + 50 * Sin(Object1.Angle + Pt / 2)
  27.         P2(0) = RetP(0) + 50 * Cos(Object1.Angle - Pt / 2)
  28.         P2(1) = RetP(1) + 50 * Sin(Object1.Angle - Pt / 2)
  29.      
  30.         FP = Object1.StartPoint: TP = Object1.EndPoint
  31.         RetP = Per_Inter(P1(0), P1(1), P2(0), P2(1), FP(0), FP(1))
  32.         If CalDis(RetP(0), RetP(1), FP(0), FP(1)) > CalDis(RetP(0), RetP(1), TP(0), TP(1)) Then
  33.             P1(0) = RetP(0): P1(1) = RetP(1)
  34.             P2(0) = FP(0):   P2(1) = FP(1)
  35.             Set Line2 = ThisDrawing.ModelSpace.AddLine(P1, P2)
  36.             Line2.Color = Object1.Color:      Object1.Delete
  37.         Else
  38.             P1(0) = RetP(0): P1(1) = RetP(1)
  39.             P2(0) = TP(0):   P2(1) = TP(1)
  40.             Object1
  41.             Set Line2 = ThisDrawing.ModelSpace.AddLine(P1, P2)
  42.             Line2.Color = Object1.Color:      Object1.Delete
  43.         End If
  44.         Object1.Highlight False
  45.         Err.Clear
  46.         GoTo LLL1
  47.     ElseIf Object1.ObjectName = "AcDbArc" Then
  48.         Dim Line1 As AcadLine
  49.         Dim SAngle As Double, EAngle As Double, DDAngle As Double, Angle1 As Double, Angle2 As Double
  50.         Object1.Highlight True
  51.         RetP = ThisDrawing.Utility.GetPoint(, "延长的位置:")
  52.         Dim Arc1 As AcadArc, arc2 As AcadCircle
  53.         If Distance(RetP, Object1.StartPoint) < 0.0000001 Or Distance(RetP, Object1.EndPoint) < 0.0000001 Then
  54.             FP = Object1.center
  55.             Set arc2 = ThisDrawing.ModelSpace.AddCircle(FP, Object1.radius)
  56.             arc2.Color = Object1.Color: Object1.Delete
  57.         ElseIf Distance(RetP, Object1.StartPoint) < Distance(RetP, Object1.EndPoint) Then
  58.             SAngle = Object1.startAngle: EAngle = Object1.endAngle
  59.             FP = Object1.center
  60.             Set Line1 = ThisDrawing.ModelSpace.AddLine(FP, RetP)
  61.                 Angle2 = Line1.Angle: Line1.Delete
  62.             TP = Object1.StartPoint
  63.             Set Line1 = ThisDrawing.ModelSpace.AddLine(FP, TP)
  64.                 Angle1 = Line1.Angle: Line1.Delete
  65.             DDAngle = Angle2 - Angle1
  66.             SAngle = SAngle + DDAngle
  67.             Set Arc1 = ThisDrawing.ModelSpace.AddArc(FP, Object1.radius, SAngle, EAngle)
  68.             Arc1.Color = Object1.Color: Object1.Delete
  69.         Else
  70.             SAngle = Object1.startAngle: EAngle = Object1.endAngle
  71.             FP = Object1.center
  72.             Set Line1 = ThisDrawing.ModelSpace.AddLine(FP, RetP)
  73.                 Angle2 = Line1.Angle: Line1.Delete
  74.             TP = Object1.EndPoint
  75.             Set Line1 = ThisDrawing.ModelSpace.AddLine(FP, TP)
  76.                 Angle1 = Line1.Angle: Line1.Delete
  77.             DDAngle = Angle2 - Angle1
  78.             EAngle = EAngle + DDAngle
  79.             Set Arc1 = ThisDrawing.ModelSpace.AddArc(FP, Object1.radius, SAngle, EAngle)
  80.             Arc1.Color = Object1.Color: Object1.Delete
  81.         End If
  82.         'Object1.Highlight False
  83.         Err.Clear
  84.         GoTo LLL1
  85.     Else
  86.         ThisDrawing.Utility.Prompt "你选择的实体无法用本工具延长!"
  87.         GoTo LLL1
  88.     End If
  89. End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 181个

财富等级: 日进斗金

发表于 2003-1-9 18:17:39 | 显示全部楼层
还缺少了几个函数Per_Inter、Distance、CalDis,其中Distance、CalDis这两个函数的作用是一样的,怎么不合并在一起。另外On Error Resume Next的使用也要注意,应尽早释放,以免后面的操作出错时程序将继续执行。
在CAD中可以直接选择实体,然后通过拖运热点来更改实体的长度和角度。但这种实践的精神是可取的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-1-10 08:34:45 | 显示全部楼层

Re: [VBA程序]:增加新的AutoCAD延长直线的功能

最初由 wowoaicad 发布
[B]从别处看到的转贴过来,详细可去明径通道。
增加新的AutoCAD延长直线的功能
AutoCAD中的延长直线的命令需要先制定边界,再延长,用VBA可以编写一个直接用鼠标来确定延长位置的程序,可谓鼠标指到哪儿,直线就延长?.. [/B]


这是我用LSP作的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 557个

财富等级: 财运亨通

发表于 2004-2-20 09:04:26 | 显示全部楼层
各位能不能上传代码.谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-26 00:25 , Processed in 0.360386 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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