|
![](https://clubstatic.excelhome.net/image/common/ico_lz.png)
楼主 |
发表于 2020-7-13 13:31
|
显示全部楼层
首先怕新人不知道弧度与角度转换关系,写了两个函数。
- Function JtoH(ByVal j As Double) As Double '角度转弧度
- Pi = Atn(1) * 4
- JtoH = j / 180 * Pi
- End Function
- Function HtoJ(ByVal h As Double) As Double '弧度转角度
- Pi = Atn(1) * 4
- HtoJ = h / Pi * 180
- End Function
复制代码 上回圆弧方法我又说了CADVBA中画圆弧方法只有这一种,同样的咱们还是可以变通,分享几个画圆弧自定义函数。
- '通过圆心,起点和端点创建圆弧
- Public Function AddArcCSN(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal ptNode As Variant) As AcadArc
- Dim radius As Double
- Dim stAng As Double
- Dim enAng As Double
-
- radius = Sqr((ptSt(0) - ptCen(0)) ^ 2 + (ptSt(1) - ptCen(1)) ^ 2)
- stAng = doct.Utility.AngleFromXAxis(ptCen, ptSt) '取得起始角度
- enAng = doct.Utility.AngleFromXAxis(ptCen, ptNode) '取得终止角度
- Set AddArcCSN = doct.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
- End Function
复制代码- '通过圆心,起点和圆弧的角度创建圆弧
- Public Function AddArcCSA(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal angle As Double) As AcadArc
- Dim radius As Double
- Dim stAng As Double
- Dim enAng As Double
-
- radius = Sqr((ptSt(0) - ptCen(0)) ^ 2 + (ptSt(1) - ptCen(1)) ^ 2)
- stAng = doct.Utility.AngleFromXAxis(ptCen, ptSt)
- enAng = stAng + angle
- Set AddArcCSA = doct.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
- End Function
复制代码- '通过圆心,起点和弦长创建圆
- Public Function AddArcCSC(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal chordLength As Double) As AcadArc
- Dim radius As Double
- Dim stAng As Double
- Dim enAng As Double
- radius = Sqr((ptSt(0) - ptCen(0)) ^ 2 + (ptSt(1) - ptCen(1)) ^ 2)
- stAng = doct.Utility.AngleFromXAxis(ptCen, ptSt)
- enAng = stAng + Atn(((chordLength / 2) / radius) / Sqr(1 - ((chordLength / 2) / radius) ^ 2)) * 2
- Set AddArcCSC = doct.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
- End Function
复制代码- '通过圆心,起点和弧长来创建圆
- Public Function AddArcCSAL(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal arcLength As Double) As AcadArc
- Dim radius As Double
- Dim stAng As Double
- Dim enAng As Double
- radius = Sqr((ptSt(0) - ptCen(0)) ^ 2 + (ptSt(1) - ptCen(1)) ^ 2)
- stAng = doct.Utility.AngleFromXAxis(ptCen, ptSt)
- enAng = stAng + arcLength / radius
- Set AddArcCSAL = doct.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
- End Function
复制代码- '通过三点来创建圆弧
- Public Function AddArc3P(ByVal pt1 As Variant, ByVal pt2 As Variant, ByVal pt3 As Variant) As AcadArc
- Dim ptCen As Variant
- Dim radius As Double
- Dim stAng As Double
- Dim enAng As Double
- Dim pt12(2) As Double
- Dim pt23(2) As Double
- pt12(0) = (pt1(0) + pt2(0)) / 2
- pt12(1) = (pt1(1) + pt2(1)) / 2
- pt12(2) = (pt1(2) + pt2(2)) / 2
- pt23(0) = (pt2(0) + pt3(0)) / 2
- pt23(1) = (pt2(1) + pt3(1)) / 2
- pt23(2) = (pt2(2) + pt3(2)) / 2
- Dim angle1 As Double
- Dim angle2 As Double
- angle1 = doct.Utility.AngleFromXAxis(pt1, pt2) + 1.570793
- angle2 = doct.Utility.AngleFromXAxis(pt2, pt3) + 1.570793
- Dim line12z As AcadLine
- Dim line23z As AcadLine
- Set line12z = AddLineReAL(pt12, angle1, 100) '前面自定义函数
- Set line23z = AddLineReAL(pt23, angle2, 100) '前面自定义函数
- ptCen = line12z.IntersectWith(line23z, acExtendBoth)
- line12z.Delete: line23z.Delete
- radius = Sqr((pt1(0) - ptCen(0)) ^ 2 + (pt1(1) - ptCen(1)) ^ 2)
- stAng = doct.Utility.AngleFromXAxis(ptCen, pt1)
- enAng = doct.Utility.AngleFromXAxis(ptCen, pt3)
- Set AddArc3P = doct.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
- End Function
复制代码- Dim doct As Object
- Sub 调用函数画圆弧例子()
- Set doct = doc '引用之前函数,自己去找
- If doct Is Nothing Then Exit Sub
- Dim pt1(2) As Double
- Pi = Atn(1) * 4
- pt1(0) = 0: pt1(1) = 0: pt1(2) = 0
- Dim pt2(2) As Double
- pt2(0) = 100: pt2(1) = 100: pt2(2) = 0
- Dim pt3(2) As Double
- pt3(0) = -100: pt3(1) = -100: pt3(2) = 0
- AddArcCSN pt1, pt2, pt3 '通过圆心,起点和端点创建圆弧
- AddArcCSA pt1, pt2, Pi / 2 '通过圆心,起点和圆弧的角度创建圆弧
- AddArcCSC pt1, pt2, 200 '通过圆心,起点和弦长创建圆
- AddArcCSAL pt1, pt2, 500 '通过圆心,起点和弧长来创建圆
- pt1(0) = 100: pt1(1) = 200: pt1(2) = 0
- AddArc3P pt1, pt2, pt3 '通过三点来创建圆弧(三点不能在一条直线)
- End Sub
复制代码
|
评分
-
1
查看全部评分
-
|