|
楼主 |
发表于 2020-7-18 12:03
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
本帖最后由 905738810 于 2020-7-18 16:52 编辑
示例2:画一条多段线,第一段是直线。第二段是圆弧,圆弧与直线相切:如图。
分析:多段线画圆弧,只要算出角度J然后设置多段线的凸度就可以了
计算角度J似乎也很麻烦,数学基础不好的压力很大啊。
但是不要忽略CAD最强大的地方,就是几何图形,他就相当于一个几何计算器。
我们遇到几何问题都可以画出图形,再去读取图形属性,来获得想要的数值,最后在删掉图形。示例代码:
- Sub LWPline3()
- Dim doct As Object
- Set doct = doc
- If doct Is Nothing Then Exit Sub
- Dim ptArr(5) As Double
- ptArr(0) = 0: ptArr(1) = 0
- ptArr(2) = 100: ptArr(3) = 80
- ptArr(4) = 200: ptArr(5) = 30
- Set LWPline1 = doct.ModelSpace.AddLightWeightPolyline(ptArr)
- LWPline1.Closed = False
- Dim pt1(2) As Double, pt2(2) As Double, pt3(2) As Double
- pt1(0) = ptArr(0): pt1(1) = ptArr(1): pt1(2) = 0
- pt2(0) = ptArr(2): pt2(1) = ptArr(3): pt2(2) = 0
- pt3(0) = ptArr(4): pt3(1) = ptArr(5): pt3(2) = 0
- J = PLtoJ(pt1, pt2, pt3) '获得角度(弧度制)
- J = HtoJ(J) '自定义弧度转角度函数
- LWPline1.SetBulge 1, JtoT(J)
- End Sub
- Public Function PLtoJ(ByRef pt1() As Double, ByRef pt2() As Double, ByRef pt3() As Double) As Double '计算角度J
- Dim doct As Object
- Set doct = doc
- If doct Is Nothing Then Exit Function
- Dim line1 As AcadLine, line2 As AcadLine
- Pi = Atn(1) * 4
- J1 = doct.Utility.AngleFromXAxis(pt1, pt2) + Pi / 2 '计算点pt1, pt2角度
- pt4 = doct.Utility.PolarPoint(pt2, J1, 100) '取从点pt2按角度J1长度100的坐标
- Set line1 = doct.ModelSpace.AddLine(pt2, pt4) '绘制圆心与起点所在直线
-
- J2 = doct.Utility.AngleFromXAxis(pt3, pt2) + Pi / 2
- Dim pt5(2) As Double
- pt5(0) = (pt3(0) + pt2(0)) / 2
- pt5(1) = (pt3(1) + pt2(1)) / 2
- pt5(2) = 0
- pt4 = doct.Utility.PolarPoint(pt5, J2, 100) '取从点pt5按角度J2长度100的坐标
- Set line2 = doct.ModelSpace.AddLine(pt5, pt4) '绘制垂直平分线直线
- pt = line2.IntersectWith(line1, 3) '获得垂直平分线line2与圆心与起点所在直线line1交点,(圆心)
- J3 = doct.Utility.AngleFromXAxis(pt, pt3) '计算终止角度
- If J3 > J1 Then
- PLtoJ = (J3 - J1) - 2 * Pi
- Else
- PLtoJ = J3 - J1
- End If
- line1.Delete: line2.Delete '删除辅助图形
- End Function
- Public Function JtoT(ByVal J As Double) As Double '角度转凸度
- Pi = Atn(1) * 4
- J = J / 180 * Pi
- JtoT = Tan(J / 4) '凸度
- End Function
- Function HtoJ(ByVal h As Double) As Double '弧度转角度
- Pi = Atn(1) * 4
- HtoJ = h / Pi * 180
- End Function
复制代码
|
评分
-
2
查看全部评分
-
|