qwh923820 发表于 2018-7-13 09:38:25

自己写的画腰孔,感觉写的好繁琐,不知道该怎么改进

自学的CAD二次开发,写程序感觉好繁琐,不知道怎么进步,求指导。
下面是我写的用来调用画腰孔的程序,该怎么简化??

Sub 画腰孔(ByVal p, ByVal r, ByVal jd, ByVal L, ByRef x, ByRef i)
'p是要插入的腰孔中心点,r是腰孔半径,jd是腰孔的角度,L是腰孔直线的长度,x是存放图形的数组,i是记录图形存放在数组中的位置
Dim pt1(2) As Double, pt2(2) As Double, pt3(2) As Double, pt4(2) As Double

If jd = 0 Then
pt1(0) = p(0) - L / 2
pt1(1) = p(1) - r
pt1(2) = 0

pt2(0) = p(0) + L / 2
pt2(1) = p(1) - r
pt2(2) = 0

pt3(0) = p(0) - L / 2
pt3(1) = p(1) + r
pt3(2) = 0

pt4(0) = p(0) + L / 2
pt4(1) = p(1) + r
pt4(2) = 0

i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt3, pt4)

pt1(1) = p(1)
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddArc(pt1, r, 3.1415926535898 / 2, 3.1415926535898 * 1.5)
pt2(1) = p(1)
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddArc(pt2, r, 3.1415926535898 * 1.5, 3.1415926535898 / 2)

pt1(0) = p(0) - L / 2 - r * 1.5
pt2(0) = p(0) + L / 2 + r * 1.5
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
x(i).Linetype = "center"
x(i).Color = acRed

pt1(0) = p(0)
pt1(1) = p(1) + r * 1.5
pt2(0) = p(0)
pt2(1) = p(1) - r * 1.5
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
x(i).Linetype = "center"
x(i).Color = acRed
Else
    pt1(0) = p(0) - r
    pt1(1) = p(1) - L / 2
    pt1(2) = 0

    pt2(0) = p(0) - r
    pt2(1) = p(1) + L / 2
    pt2(2) = 0

    pt3(0) = p(0) + r
    pt3(1) = p(1) + L / 2
    pt3(2) = 0

    pt4(0) = p(0) + r
    pt4(1) = p(1) - L / 2
    pt4(2) = 0

i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt3, pt4)

    pt1(0) = p(0)
    i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddArc(pt1, r, 3.1415926535898, 0)
pt2(0) = p(0)
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddArc(pt2, r, 0, 3.1415926535898)

pt1(1) = p(1) - L / 2 - r * 1.5
pt2(1) = p(1) + L / 2 + r * 1.5
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
x(i).Linetype = "center"
x(i).Color = acRed

pt1(0) = p(0) + r * 1.5
pt1(1) = p(1)
pt2(0) = p(0) - r * 1.5
pt2(1) = p(1)
i = i + 1
Set x(i) = ThisDrawing.ModelSpace.AddLine(pt1, pt2)
x(i).Linetype = "center"
x(i).Color = acRed


End If

End Sub

zzyong00 发表于 2018-7-13 10:53:22

不明白你说的腰孔是什么东西,但有些坐标点计算,应该可以用AcadUtility 类的函数计算

qwh923820 发表于 2018-7-13 13:56:32

zzyong00 发表于 2018-7-13 10:53
不明白你说的腰孔是什么东西,但有些坐标点计算,应该可以用AcadUtility 类的函数计算

就是这样的孔,我们这边叫腰孔。AcadUtility里面我是没找到直接的函数。我准备再写个倒角的函数,感觉倒角编起来很麻烦,不知道有没有现成的函数。



fatty0724 发表于 2019-3-7 11:16:37

画出矩形 设置 2条边的凸度

fatty0724 发表于 2019-8-27 16:45:17

让用户点选两点 ,设置宽度   程序画矩形设置2边凸度

Leo1980 发表于 2019-8-29 14:26:44

本帖最后由 Leo1980 于 2019-8-29 14:27 编辑

一个polyline足矣

页: [1]
查看完整版本: 自己写的画腰孔,感觉写的好繁琐,不知道该怎么改进