|
楼主 |
发表于 2020-7-12 22:22
|
显示全部楼层
本帖最后由 905738810 于 2020-7-13 09:59 编辑
前面说画直线,画圆只有这一种方法,是不是感觉很单一。其实这一种方法就可以演变成多种绘图方法,我给大家分享出几种常见绘制直线和圆的自定义函数。
这些函数是我百度搜来稍加改动的。
- '根据起点和相对起点的直角坐标创建直线
- '(起点,x增量,y增量)
- Public Function AddLineReXY(ByVal ptSt As Variant, ByVal x As Double, ByVal y As Double) As Object
- Dim ptEn(2) As Double
- ptEn(0) = ptSt(0) + x: ptEn(1) = ptSt(1) + y: ptEn(2) = 0
- Set AddLineReXY = doct.ModelSpace.AddLine(ptSt, ptEn)
- End Function
复制代码- '根据起点和相对极坐标创建直线
- '(起点,角度'弧度制',直线长度)
- Public Function AddLineReAL(ByVal ptSt As Variant, ByVal angle As Double, ByVal dist As Double) As Object
- Dim ptEn(2) As Double
- ptEn(0) = ptSt(0) + dist * Cos(angle)
- ptEn(1) = ptSt(1) + dist * Sin(angle)
- ptEn(2) = ptSt(2)
- Set AddLineReAL = doct.ModelSpace.AddLine(ptSt, ptEn)
- End Function
复制代码- '通过两点创建圆,两点为圆的直径上的两个点
- '(第一点,第二点)
- Public Function AddCircle2P(ByVal pt1 As Variant, pt2 As Variant) As Object
- Dim ptCen(2) As Double
- Dim radius As Double
- ptCen(0) = (pt1(0) + pt2(0)) / 2
- ptCen(1) = (pt1(1) + pt2(1)) / 2
- ptCen(2) = (pt1(2) + pt2(2)) / 2
- radius = Sqr((pt1(0) - pt2(0)) ^ 2 + (pt1(1) - pt2(1)) ^ 2) / 2
- Set AddCircle2P = doct.ModelSpace.AddCircle(ptCen, radius)
- End Function
复制代码- '通过三点创建圆
- '三点如果在一条直线上,则无法创建圆,这里我们先不考虑这种情况
- '通过几何的知识来找出圆心,垂直平分线
- '(第一点,第二点,第三点)
- Public Function AddCircle3P(ByVal pt1 As Variant, ByVal pt2 As Variant, ByVal pt3 As Variant) As Object
- Dim ptCen As Variant
- Dim pt12(2) As Double
- Dim pt23(2) As Double
- Dim radius 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 line12, line23, line12z, line23z
- Set line12 = doct.ModelSpace.AddLine(pt1, pt2)
- Set line23 = doct.ModelSpace.AddLine(pt2, pt3)
- Dim angle1, angle2 As Double
- angle1 = line12.angle + 1.570793
- angle2 = line23.angle + 1.570793
- Set line12z = AddLineReAL(pt12, angle1, 100) '前面自定义函数
- Set line23z = AddLineReAL(pt23, angle2, 100) '前面自定义函数
- ptCen = line12z.IntersectWith(line23z, acExtendBoth) '取垂直平分线交点
- radius = Sqr((pt1(0) - ptCen(0)) ^ 2 + (pt1(1) - ptCen(1)) ^ 2)
- Set AddCircle3P = doct.ModelSpace.AddCircle(ptCen, radius)
- line12.Delete: line23.Delete: line12z.Delete: line23z.Delete
- End Function
复制代码- Dim doct As Object
- Sub 调用函数例子()
- Set doct = doc '引用之前函数,自己去找
- If doct Is Nothing Then Exit Sub
- Dim pt(2) As Double
- pt(0) = 0: pt(1) = 0: pt(2) = 0
- AddLineReXY pt, 100, 100 '根据起点和相对起点的直角坐标创建直线
- AddLineReAL pt, 3.14 / 2, 100 '根据起点和相对极坐标创建直线
- Dim pt2(2) As Double
- pt2(0) = 100: pt2(1) = 100: pt2(2) = 0
- AddCircle2P pt, pt2 '通过两点创建圆,两点为圆的直径上的两个点
- Dim pt3(2) As Double
- pt3(0) = 100: pt3(1) = 50: pt3(2) = 0
- AddCircle3P pt, pt2, pt3 '通过三点创建圆
- End Sub
复制代码 不知道为什么代码粘过来就没有缩进,新人不懂,太多了我就不挨个敲空格加缩进了。
函数看不懂没关系,直接调用就好了,以后跟我的贴就会看懂了,有时间我就会更新,内容太多了。
|
评分
-
1
查看全部评分
-
|