ситуация такая есть вот такой кусок кода (интересует только конструкция when changes do)
global gi
Ar_Hpoint = #() --содержит HelpPoint
Ar_Line=#()--содержит линии
Ar_All=#(Ar_Hpoint, Ar_Line)--главный массив с объектами содержит все
--добавляют HelpPoint в сцену и массив
Fn ADDpoint ArrayA =
(
local n = ArrayA.count+1
ArrayA [n]= point()
ArrayA [n].box=true
ArrayA [n].cross=false
ArrayA [n].size=20
ArrayA [n].constantscreensize=false
ArrayA [n]
)
--добавляет линию по двум точкам в массив
Fn drawLineBetweenTwoPoints pointA pointB ArrayC=
(
local n = ArrayC.count+1
ArrayC[n]=SplineShape posointA
--local ss = SplineShape posointA
addNewSpline ArrayC[n]
addKnot ArrayC[n] 1 #corner #line PointA
addKnot ArrayC[n] 1 #corner #line PointB
updateShape ArrayC[n]
ArrayC [n]
)
(
ADDpoint Ar_Hpoint
ADDpoint Ar_Hpoint
move Ar_Hpoint [2] [50,0,0]
ADDpoint Ar_Hpoint
move Ar_Hpoint [3] [100,0,0]
drawLineBetweenTwoPoints Ar_Hpoint[1].pos Ar_Hpoint[2].pos Ar_Line
drawLineBetweenTwoPoints Ar_Hpoint[2].pos Ar_Hpoint[3].pos Ar_Line
)
when transform Ar_Hpoint[1] changes do (setKnotPoint Ar_Line[1] 1 1 Ar_Hpoint[1].pos ; updateShape Ar_Line[1])
when transform Ar_Hpoint[2] changes do (setKnotPoint Ar_Line[1] 1 2 Ar_Hpoint[2].pos ; updateShape Ar_Line[1])
when transform Ar_Hpoint[2] changes do (setKnotPoint Ar_Line[2] 1 1 Ar_Hpoint[2].pos ; updateShape Ar_Line[2])
when transform Ar_Hpoint[3] changes do (setKnotPoint Ar_Line[2] 1 2 Ar_Hpoint[3].pos ; updateShape Ar_Line[2])
работает все замечательно но как только данную конструкцию включаю в состав цикла начинаются проблемы
заменяю все when на следующий код
for b=1 to 2 do (
when transform Ar_Hpoint changes do (setKnotPoint Ar_Line 1 1 Ar_Hpoint.pos ; updateShape Ar_Line)
when transform Ar_Hpoint[b+1] changes do (setKnotPoint Ar_Line 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line)
)
затем на
for n=1 to 2 do (
global b=n
when transform Ar_Hpoint changes do (setKnotPoint Ar_Line 1 1 Ar_Hpoint.pos ; updateShape Ar_Line)
when transform Ar_Hpoint[b+1] changes do (setKnotPoint Ar_Line 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line)
)
при первом варианте замены он почему то перестает видеть переменную b
ладно бог с тобой делаю b глобальной видит, но дальше он выполняет в цикле только последний цикл хотя в самoм первом варианте все прекрасно работало?
эта конструкция вобще работает в цикле (приведите пример кода) и как другим способом решить проблему с b без объявления ее глобальной
не получается записать пример кода отражает не верно выложу позже прикрепленным фаилом
global gi
Ar_Hpoint = #() --содержит HelpPoint
Ar_Line=#()--содержит линии
Ar_All=#(Ar_Hpoint, Ar_Line)--главный массив с объектами содержит все
--добавляют HelpPoint в сцену и массив
Fn ADDpoint ArrayA =
(
local n = ArrayA.count+1
ArrayA [n]= point()
ArrayA [n].box=true
ArrayA [n].cross=false
ArrayA [n].size=20
ArrayA [n].constantscreensize=false
ArrayA [n]
)
--добавляет линию по двум точкам в массив
Fn drawLineBetweenTwoPoints pointA pointB ArrayC=
(
local n = ArrayC.count+1
ArrayC[n]=SplineShape posointA
--local ss = SplineShape posointA
addNewSpline ArrayC[n]
addKnot ArrayC[n] 1 #corner #line PointA
addKnot ArrayC[n] 1 #corner #line PointB
updateShape ArrayC[n]
ArrayC [n]
)
(
ADDpoint Ar_Hpoint
ADDpoint Ar_Hpoint
move Ar_Hpoint [2] [50,0,0]
ADDpoint Ar_Hpoint
move Ar_Hpoint [3] [100,0,0]
drawLineBetweenTwoPoints Ar_Hpoint[1].pos Ar_Hpoint[2].pos Ar_Line
drawLineBetweenTwoPoints Ar_Hpoint[2].pos Ar_Hpoint[3].pos Ar_Line
)
when transform Ar_Hpoint[1] changes do (setKnotPoint Ar_Line[1] 1 1 Ar_Hpoint[1].pos ; updateShape Ar_Line[1])
when transform Ar_Hpoint[2] changes do (setKnotPoint Ar_Line[1] 1 2 Ar_Hpoint[2].pos ; updateShape Ar_Line[1])
when transform Ar_Hpoint[2] changes do (setKnotPoint Ar_Line[2] 1 1 Ar_Hpoint[2].pos ; updateShape Ar_Line[2])
when transform Ar_Hpoint[3] changes do (setKnotPoint Ar_Line[2] 1 2 Ar_Hpoint[3].pos ; updateShape Ar_Line[2])
работает все замечательно но как только данную конструкцию включаю в состав цикла начинаются проблемы
заменяю все when на следующий код
for b=1 to 2 do (
when transform Ar_Hpoint changes do (setKnotPoint Ar_Line 1 1 Ar_Hpoint.pos ; updateShape Ar_Line)
when transform Ar_Hpoint[b+1] changes do (setKnotPoint Ar_Line 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line)
)
затем на
for n=1 to 2 do (
global b=n
when transform Ar_Hpoint changes do (setKnotPoint Ar_Line 1 1 Ar_Hpoint.pos ; updateShape Ar_Line)
when transform Ar_Hpoint[b+1] changes do (setKnotPoint Ar_Line 1 2 Ar_Hpoint[b+1].pos ; updateShape Ar_Line)
)
при первом варианте замены он почему то перестает видеть переменную b
ладно бог с тобой делаю b глобальной видит, но дальше он выполняет в цикле только последний цикл хотя в самoм первом варианте все прекрасно работало?
эта конструкция вобще работает в цикле (приведите пример кода) и как другим способом решить проблему с b без объявления ее глобальной
не получается записать пример кода отражает не верно выложу позже прикрепленным фаилом
Последнее редактирование: