找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 423|回复: 3

[VBA函数]:已知两点坐标和半径,编程怎么画圆弧?

[复制链接]
发表于 2005-3-19 17:42:51 | 显示全部楼层 |阅读模式

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

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

×
cad的画圆弧的命令可以是过已知两点(也既这两点为圆弧的端点),和已知圆弧的半径,就可以画出该圆弧,那么vba怎么实现这个方法来画圆弧?
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-3-19 21:50:14 | 显示全部楼层
分别过两点以半径做圆,求两圆的交点即圆心,会有两个圆心
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-19 22:48:13 | 显示全部楼层
我写了函数:[php]
Public Function Arc_StPtEnPtR(StartPoint As Variant, EndPoint As Variant, R As Double, Bool As Boolean) As AcadArc
    '起点、终点、半径画圆弧
    'Bool为True,逆时针画弧;Bool为False,顺时针画弧
    Dim X As Double, D As Double, Ang As Double
    Const PI = 3.1415926535897
    D = dis(StartPoint, EndPoint)
   
    If R < 0.5 * D Then
        MsgBox ("圆弧不存在!")
        End
    End If
   
    Dim CenAng As Double, StartAng As Double, EndAng As Double, CenPoint  As Variant
    Ang = ThisDrawing.Utility.AngleFromXAxis(StartPoint, EndPoint)
    X = 2 * Atn(0.5 * D / Sqr(R * R - 0.25 * D * D))
    CenAng = Ang - X * 0.5 + PI / 2
    CenPoint = ThisDrawing.Utility.PolarPoint(StartPoint, CenAng, R)
    StartAng = CenAng + PI
    EndAng = StartAng + X
   
    Dim ArcObj1 As AcadArc, ArcObj2 As AcadArc
    Set ArcObj1 = ThisDrawing.ModelSpace.AddArc(CenPoint, R, StartAng, EndAng)
    Set Arc_StPtEnPtLength = ArcObj1
   
    If Bool = False Then
        Set ArcObj2 = ArcObj1.Mirror(StartPoint, EndPoint)
        ArcObj1.Delete
        Set Arc_StPtEnPtR = ArcObj2
    End If
End Function

Public Function dis(Pa, Pb As Variant) As Double
    '两点的距离
    dis = ((Pa(0) - Pb(0)) ^ 2 + (Pa(1) - Pb(1)) ^ 2 + (Pa(2) - Pb(2)) ^ 2) ^ 0.5
End Function[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-3-19 22:56:02 | 显示全部楼层
用这程序调用:[php]
Sub test()
   Dim Obj As AcadArc
   Dim p1, p2 As Variant, R As Double
   p1 = ThisDrawing.Utility.GetPoint(, vbarlf & " 请输入圆弧起点:")
   p2 = ThisDrawing.Utility.GetPoint(p1, vbarlf & " 请输入圆弧终点:")
   R = ThisDrawing.Utility.GetDistance(p1, vbCrLf & " 请输入圆弧半径:")
   Set Obj = Arc_StPtEnPtR(p1, p2, 100, True)
End Sub[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 13:37 , Processed in 0.390409 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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