Объектно-ориентированное программирование и написание скриптов для Интернет

В качестве первого теста, пусть требуется  вывести значение 10 на экран дисплея в системе Вектор просто через МК и через скрипт.
МК организована довольно просто:
<Mktest.vbs>
' вывести значение 10
VBSMsg 10
Результат получим в следущем виде:

Организация скрипта вывода значения 10 немного сложнее: надо организовать сервис окон и надписей в Explorer  (см. рисунок ниже)

и субрутину вычислений на языке VBS.

Sub button1_onclick
' tect вывести значение =10
MsgBox "Длина = " & 10
End Sub
В результате выполнения скрипта получим результат:



 

Ниже даны примеры организации скриптов и МК (с объетами и без объектов)
 
 Название задач  Скрипты  Простые Макросы 
1. Длина отрезка  Скрипт   МК,  рис.
2. Расстояние от точки до прямой Скрипт  (экран. рис.)  МК,  рис. 1, 2
3. Задание полилинии и ее длина  Скрипт  (экран. рис.)
4. Импорт полилинии в формате .dxf и ее длина Скрипт
5. Задание полилинии в цикле и расчет ее длины Скрипт MK1    MK2
6. Задание точки и вывод ее координат Скрипт  (экран. рис.)
 
 

Скрипты

<Test.htm> - вывести в  Explorer на экран дисплея значение 10
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--

Sub button1_onclick
' tect вывести значение =10
MsgBox "Длина = " & 10
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>

<P><INPUT id=text1 name=text1
style="HEIGHT: 134px; WIDTH: 348px" value="Должно вывестись значение = 10"><INPUT id=button1 name=button1 type=button value="Нажми меня" style  ="HEIGHT: 66px; WIDTH: 125px"></P>

</BODY>
</HTML>



' <test2.htm >  скрипт вычисления длины отрезка
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--

Sub button1_onclick
' определения расстояния между двумя точками
Set p1 = CreateObject("Vector.P")
Set p3 = CreateObject("Vector.P")

 p1.x = 1
 p1.y = 2.4
 p1.z = 2.5

 p3.x = 11
 p3.y = 2.5
 p3.z = 1

' dlina = DlinaOtr (p1, p3) ' так не работает
dlina=sqr((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y)+(p3.z-p1.z)*(p3.z-p1.z))
MsgBox "Длина отрезка = " & dlina
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>

<P><INPUT id=text1 name=text1
style="HEIGHT: 134px; WIDTH: 348px" value="Должно вывестись значение = 10.1"><INPUT id=button1 name=button1 type=button value="Нажми меня" style  ="HEIGHT: 66px; WIDTH: 125px"></P>

</BODY>
</HTML>
 



Cкрипт определения расстояния от точки до прямой
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--
' программа субрутина на VBS и методах (объектах) системы Вектор
Sub button1_onclick
' Вначале заданные точки р1,p2,p3 и точку pi перебора объявляем как объекты
Set p1 = CreateObject("Vector.P")
Set p2 = CreateObject("Vector.P")
Set p3 = CreateObject("Vector.P")
Set pi = CreateObject("Vector.P")

 p1.x = 1
 p1.y = 2.4
 p1.z = 2.5

 p2.x = 5
 p2.y = 10
 p2.z = 9

 p3.x = 11
 p3.y = 2.5
 p3.z = 1
' smin эталон сравнения - заведомо большее число
smin=10000
For s = 0. To 1.01 Step 0.1
 x = (1.-s)*p1.x+s*p2.x
 y = (1.-s)*p1.y+s*p2.y
 z = (1.-s)*p1.z+s*p2.z
dlina=sqr((p3.x-x)*(p3.x-x)+(p3.y-y)*(p3.y-y)+(p3.z-z)*(p3.z-z))
if dlina < smin Then smin=dlina

Next
MsgBox "Наикратчейшее расстояние от точки до прямой = " & smin
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>

<P><INPUT id=text1 name=text1
style="HEIGHT: 134px; WIDTH: 348px" value="   Должно вывестись значение = 9.7"><INPUT id=button1 name=button1 type=button value="Нажми меня" style  ="HEIGHT: 66px; WIDTH: 125px"></P>



<Test2.htm > Задание полилинии и расчет ее длина (рис. )
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--

Sub button1_onclick
 Set p1 = CreateObject("Vector.P")
 Set line = CreateObject("Vector.Polyline")
 p1.x = 0
 p1.y = 0
 p1.z = 0
 line.AddP p1
 p1.x = 1
 p1.y = 0
 p1.z = 0
 line.AddP p1
 p1.x = 1
 p1.y = 1
 p1.z = 0
 line.AddP p1
 p1.x = 0
 p1.y = 1
 p1.z = 0
 line.AddP p1
 MsgBox "line.length=" & line.Length
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>
<P><INPUT id=text1 name=text1
style="HEIGHT: 50px; WIDTH: 200px" value="Будет значение = 3">
_<INPUT id=button1 name=button1 type=button value="Нажми"
_style  ="HEIGHT: 40px; WIDTH: 100px"></P>

</BODY>
</HTML>



Импорт полилинии в формате .dxf и ее длина
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--

Sub button1_onclick
 Set doc  = CreateObject("Vector.Document")
 doc.Import "C:/Bolotov/Skrypty/test1.dxf", True ' a aieoiaio - ia a a?oiio!!!
 Set plline2 = CreateObject("Vector.Polyline")
 plline2.FromCurrObj  11
 MsgBox "plline2.Length=" & plline2.Length
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>

<P><INPUT id=text1 name=text1
style="HEIGHT: 134px; WIDTH: 348px" value="Должно вывестись значение = 9.01932...">
_<INPUT id=button1 name=button1 type=button value="Нажми меня" style  ="HEIGHT: 66px;
_WIDTH: 125px"></P>

</BODY>
</HTML>



Задание полилинии в цикле и расчет ее длины (без графики)
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--

Sub button1_onclick
 Set doc  = CreateObject("Vector.Document")
Dim Rx
Rx = Array(0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,26,28,30,0,0,0,0,0,0)
Dim Ry
Ry = Array(0,2,2,-2,-2,2,2,-2,-2,2,2,-2,-2,2,2,-2,-2,2,2,0,0,0,0,0,0,0,0,0,0,0,0)
Dim Rz
Rz = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
Xb=Rx(0)
Xb=Rx(0)
Xb=Rx(0)

doc.Polyline.Reset
 For n=0 To 13 Step 1
  doc.Polyline.AddP doc.p(Rx(n),Ry(n),0)
 Next
doc.Polyline.SaveInDoc ( -1 )
doc.Polyline.Draw
' doc.Import "test1.dxf", True ' a aieoiaio - ia a a?oiio!!!
 Set plline2 = CreateObject("Vector.Polyline")
 plline2.FromCurrObj  11
 MsgBox "plline2.Length=" & plline2.Length
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>

<P><INPUT id=text1 name=text1
style="HEIGHT: 134px; WIDTH: 348px" value="Должно вывестись значение =38">
_<INPUT id=button1 name=button1 type=button value="Нажми меня" style  ="HEIGHT:
_66px; WIDTH: 125px"></P>

</BODY>
</HTML>



' <test3.htm > Cкрипт: задание точки и вывод ее координат
<HTML>
<HEAD>
<META name=VI60_defaultClientScript content=VBScript>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<TITLE></TITLE>
<SCRIPT ID=clientEventHandlersVBS LANGUAGE=vbscript>
<!--

Sub button1_onclick
Set p1 = CreateObject("Vector.P")
 p1.x = 5
 p1.y = 7
 p1.z = 9
MsgBox "x = " & p1.x  &  " y = " & p1.y  &  " z = " & p1.z
End Sub

-->
</SCRIPT>
</HEAD>
<BODY>

<P><INPUT id=text1 name=text1
style="HEIGHT: 134px; WIDTH: 348px" value="Точка, ее кординаты д.б.
x = 5, y = 7, z = 9">
_<INPUT id=button1 name=button1 type=button value="Нажми меня"
_style  ="HEIGHT: 66px; WIDTH: 125px"></P>

</BODY>
</HTML>
 



 
 

Макрокоманды с использованием объектов программирования (пока также без графики)

<Otest2.vbs>  Мк определения расстояния между двумя точками
Set p1 = CreateObject("Vector.P")
Set p3 = CreateObject("Vector.P")
 p1.x = 1
 p1.y = 2.4
 p1.z = 2.5

 p3.x = 11
 p3.y = 2.5
 p3.z = 1
otrezok.s p1.x,p1.y,p1.z, p3.x,p3.y,p3.z
dlina=sqr((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y)+(p3.z-p1.z)*(p3.z-p1.z))
' MsgBox "Длина отрезка = " & dlina
VBSMsg "Длина отрезка = " & dlina



задание полилинии через объекты и вычисление ее длины
       Set doc  = CreateObject("Vector.Document")
      Dim Rx
      Rx = Array(0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,26,28,30,0,0,0,0,0,0)
      Dim Ry
      Ry = Array(0,2,2,-2,-2,2,2,-2,-2,2,2,-2,-2,2,2,-2,-2,2,2,0,0,0,0,0,0,0,0,0,0,0,0)
      Dim Rz
      Rz = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
     doc.Polyline.Reset
     For n=0 To 13 Step 1
              doc.Polyline.AddP doc.p(Rx(n),Ry(n),0)
     Next
     doc.Polyline.SaveInDoc (ngroup)
     doc.Polyline.Draw  ' (отрисовка полилинии как объекта)

     Set plline2 = CreateObject("Vector.Polyline")
     plline2.FromCurrObj  11
     VBSMsg plline2.Length
А вот как будет таже МК без использования объектного программирования



 
 

Макрокоманды без использования объектов программирования



' задание полилинии просто через МК101 (идет без приставки doc.)
     Dim Rx
     Rx = Array(0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14,16,16,18,18,20,20,22,22,24,26,28,30,0,0,0,0,0,0)
     Dim Ry
     Ry = Array(0,2,2,-2,-2,2,2,-2,-2,2,2,-2,-2,2,2,-2,-2,2,2,0,0,0,0,0,0,0,0,0,0,0,0)
     Dim Rz
     Rz = Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
     Polyline.Reset
     For n=0 To 13 Step 1
      Polyline.AddP p(Rx(n),Ry(n),0)
     Next
     Polyline.SaveInDoc (ngroup)
     Polyline.Draw
     VBSMsg Polyline.Length


<Test2.vbs>  МК определения расстояния между двумя точками
Set p1 =p(1,2.4,2.5)
Set p2 =p(5,10,9)
otrezok.ss p1, p2  ' отрезок p1-p2
dlina = DlinaOtr (p1, p2)
VBSMsg "Длина отрезка = " & dlina

Наикратчайшее расстояние от точки р3 до прямой р1-р2
' Дано:
Set p1 =p(1,2.4,2.5)
Set p2 =p(5,10,9)
otrezok.ss p1, p2  ' отрезок p1-p2
Set p3 =p(11,2.5,1)
r3= 0.3
dlina=sqr((p3.x-p1.x)*(p3.x-p1.x)+(p3.y-p1.y)*(p3.y-p1.y)+(p3.z-p1.z)*(p3.z-p1.z))
' начальные точки графиков ЦФ
Set p103=p(p1.x,dlina,dlina)
Set p104=p(p1.x,dlina-1,dlina-1)
krug.ss p3, r3, p(0,0,1) ' окружность в точке р3
' строим серию точек на прямой р1-р2, cоединяя их с р3 тут же
' вычисляем длины отрезков и сравнивая с эталаном выбираем меньшее
' эталон - заведомо большее число
smin=10000
For s = 0. To 1.01 Step 0.1
 x = (1.-s)*p1.x+s*p2.x
 y = (1.-s)*p1.y+s*p2.y
 z = (1.-s)*p1.z+s*p2.z
Set pi= p(x,y,z)
otrezok.ss pi, p3
' krug.ss pi, 0.15, p(0,0,1) ' окружность в точке рi
dlina=sqr((p3.x-pi.x)*(p3.x-pi.x)+(p3.y-pi.y)*(p3.y-pi.y)+(p3.z-pi.z)*(p3.z-pi.z))
' if dlina < smin Then smin=dlina
otrezok.s p103.x, p103.y, p103.z, x, dlina, dlina   ' график Цф
p103.x=x 'переводим конец в начало
p103.y=dlina
p103.z=dlina

if dlina < smin Then
 smin=dlina ' фиксируем минимаальное расстояние
 'строим график Цф до точки минимума
 otrezok.s p104.x, p104.y, p104.z, x, dlina-1, dlina-1
 p104.x=pi.x 'переводим конец в начало
 p104.y=dlina-1
 p104.z=dlina-1
 krug.ss pi,0.2,p(0,0,1) ' точка на прямой (до минимума)
 xx=pi.x ' запоминаем точку (p*)
 yy=pi.y
 zz=pi.z
End if
Next
' Оси
otrezok.s 0.,0.,0.,10.,0.,0.
otrezok.s 0.,0.,0.,0.,6.,0.
otrezok.s 0.,0.,0.,0.,0.,5.
VBSMsg "Минимальное расстояние = " & smin & vbCrLf & "в точке р, у которой"_
& vbCrLf & "х = " & xx & vbCrLf & "y = " & yy & vbCrLf & "z = " & zz