Jump to content

Отрисовка полилинии VBA скриптом


Recommended Posts

Уважаемое сообщество!

 

Собственно написал скрипт, который рисует циклоиды:

 

Dim oLine
Dim oCircle
Dim A(2, 2000)
Dim NumberPoints
Dim phi
Dim alpha
Dim pi
Dim Count
Dim Rb
Dim Rm
Dim k
Count = 0
pi = 3.1415926
alpha = 0
Rb = 10
Rm = 2
NumberPoints = 360
k = Rb/Rm
for phi = 0 to 2*pi step pi/180
Count = Count + 1
A(1, Count) = Rm*(k - 1)*(cos(phi) + cos((k - 1)*phi)/(k - 1))
A(2, Count) = Rm*(k - 1)*(sin(phi) - sin((k - 1)*phi)/(k - 1))
next

for phi = 0 to 2*pi step pi/180
Count = Count + 1
A(1, Count) = (Rb + Rm)*cos(phi) - Rm*cos(alpha + ((Rb+Rm)/Rm)*phi)
A(2, Count) = (Rb + Rm)*sin(phi) - Rm*sin(alpha + ((Rb+Rm)/Rm)*phi)
next
Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(0)+","+CStr(0)+","+CStr(0), Rb)
Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(Rb + Rm)+","+CStr(0)+","+CStr(0), Rm)
Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(Rb - Rm)+","+CStr(0)+","+CStr(0), Rm)

for i = 1 to Count - 1
Set oLine = ThisDrawing.ModelSpace.AddLine(CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0), CStr(A(1, i + 1))+","+CStr(A(2, i + 1))+","+CStr(0))
'Set oLine = ThisDrawing.ModelSpace.AddLine(CStr(0)+","+CStr(0)+","+CStr(0), CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0))
'Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0), 0.01)
next

 

Пытаюсь отрисовать их с помощью полилинии.

 

Для проверки работоспособности пытался нарисовать полилинию:

 

Dim varVertList(8)
Dim objPLine

varVertList(0) = 0
varVertList(1) = 0
varVertList(2) = 0

varVertList(3) = 10
varVertList(4) = 10
varVertList(5) = 0

varVertList(6) = 10
varVertList(7) = 50
varVertList(8) = 0

Set objPLine = ThisDrawing.ModelSpace.AddPolyline(varVertList)

 

В результате получаю:

 

err: "TeighaX" raised an exception "Параметр задан неверно." at line 17 pos 0
Set objPLine = ThisDrawing.ModelSpace.AddPolyline(varVertList)
^

 

В каком виде должны быть координаты вершин в массиве varVertList для отрисовки полилинии?

Пробовал строкой как для отрезка ("x,y,z") - тоже не вышло.

 

Заранее благодарю за ответ!

 

К стати, в первом листинге не корректно отображается подсветка синтаксиса строки:

 

'Set oCircle = ThisDrawing.ModelSpace.AddCircle(CStr(A(1, i))+","+CStr(A(2, i))+","+CStr(0), 0.01)

 

Строка начинается с " ' ", но не отображается зеленым.

  • Like 1
Link to comment
Share on other sites

В текущей версии создать LightweightPolyline из VBScript нельзя, поскольку VBScript передаёт VT_ARRAY|VT_VARIANT, тогда как OdaX ожидает VT_ARRAY|VT_R8.

 

Проблема известна и исправлена, войдёт в следующую сборку.

  • Like 1
Link to comment
Share on other sites

В текущей версии создать LightweightPolyline из VBScript нельзя, поскольку VBScript передаёт VT_ARRAY|VT_VARIANT, тогда как OdaX ожидает VT_ARRAY|VT_R8.

 

Проблема известна и исправлена, войдёт в следующую сборку.

 

Большое спасибо за ответ!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...