白埠农夫 发表于 2012-7-5 20:59:45

请大家帮我修改一下绘制长圆的VBA程序

下面是我写的一个绘制长圆(两端是半圆、中间是矩形)的VBA程序,可根据用户提供的中心坐标、长轴长度和短轴长度、长轴与X轴正方向的夹角绘制方向任意的长圆。

Public Sub CreateLongCircle()

'获取长圆中心坐标
Dim center As Variant
center = ThisDrawing.Utility.GetPoint(, "请在屏幕上拾取一点作为长圆的中心或输入中心坐标:")

'获取长轴与X轴正方向夹角
Dim angle As Double
angle = pi / 180 * ThisDrawing.Utility.GetReal("请输入长轴与X轴正方向的夹角:")

'获取长轴长度
Dim longAxis As Double
longAxis = ThisDrawing.Utility.GetReal("请输入长轴长度:")

'获取短轴长度
Dim shortAxis As Double
shortAxis = ThisDrawing.Utility.GetReal("请输入短轴长度:")

Dim halfL As Double
halfL = (longAxis - shortAxis) / 2
Dim halfS As Double
halfS = shortAxis / 2

'计算各顶点坐标
Dim vertices(1 To 8) As Double
vertices(1) = center(0) + halfL: vertices(2) = center(1) - halfS
vertices(3) = center(0) + halfL: vertices(4) = center(1) + halfS
vertices(5) = center(0) - halfL: vertices(6) = center(1) + halfS
vertices(7) = center(0) - halfL: vertices(8) = center(1) - halfS

Dim plineObj As AcadLWPolyline
Set plineObj = ThisDrawing.ModelSpace.AddLightWeightPolyline(vertices)

plineObj.Closed = True
plineObj.SetBulge 0, 1
plineObj.SetBulge 2, 1

'旋转长圆
plineObj.Rotate center, angle
plineObj.Update

End Sub

但是我运行后发现每次绘制出来的长圆都是长轴平行于X轴,Rotate函数好像没起作用,请问问题出在哪里?非常感谢!

VBALISPER 发表于 2012-7-6 10:03:30

没有给PI赋值.pi=0 !!!!!

白埠农夫 发表于 2012-7-6 20:52:13

VBALISPER 发表于 2012-7-6 10:03 static/image/common/back.gif
没有给PI赋值.pi=0 !!!!!

非常感谢!问题已解决,确实是您所说的问题。和AutoLISP搞混了,原来VB没有PI这个常数,已经用4*Atn(1)替代了。

crazylsp 发表于 2012-7-18 18:03:03

可以先定义个常数pi,好像是const pi=3.1415

njyulei 发表于 2012-7-26 10:15:22

正在找这方面的学习呢,谢谢了,
页: [1]
查看完整版本: 请大家帮我修改一下绘制长圆的VBA程序