i found this code with search options
`this function initializes bezier curves
function SetupBezier()
`make bezier handles
for a=1 to 3
make object cube ((a-1)*3)+1,1
make object cube ((a-1)*3)+2,1
make object cube ((a-1)*3)+3,1
next a
`make temp object
make object cube 100,1
`hide object 100
BezierRnd(100.0)
TempBezier=Bezier
UpdateBezier()
endfunction
remstart
this function makes bezier curve
probably most function arguments ever used - horror :)
StartX#, StartY#, StartZ# -> position coordinates for start of the curve
StartHandlePrevX#, StartHandlePrevY#, StartHandlePrevZ# -> position coordinates for the first control object that adjust bezier curve on the start point
StartHandleNextX#, StartHandleNextY#, StartHandleNextZ# -> position coordinates for the second control object that adjust bezier curve on the start point
MidX#, MidY#, MidZ# -> position coordinates for middle of the curve
MidHandlePrevX#, MidHandlePrevY#, MidHandlePrevZ# -> position coordinates for the first control object that adjust bezier curve on the middle point
MidHandleNextX#, MidHandleNextY#, MidHandleNextZ# -> position coordinates for the second control object that adjust bezier curve on the middle point
EndX#, EndY#, EndZ# -> position coordinates for end of the curve
EndHandlePrevX#, EndHandlePrevY#, EndHandleZ# -> position coordinates for the first control object that adjust bezier curve on the end point
EndHandleNextX#, EndHandleNextY#, EndHandleZ# -> position coordinates for the first control object that adjust bezier curve on the end point
remend
function BezierMake(StartX#,StartY#,StartZ#,StartHandlePrevX#,StartHandlePrevY#,StartHandlePrevZ#,StartHandleNextX#,StartHandleNextY#,StartHandleNextZ#,MidX#,MidY#,MidZ#,MidHandlePrevX#,MidHandlePrevY#,MidHandlePrevZ#,MidHandleNextX#,MidHandleNextY#,MidHandleNextZ#,EndX#,EndY#,EndZ#,EndHandlePrevX#,EndHandlePrevY#,EndHandlePrevZ#,EndHandleNextX#,EndHandleNextY#,EndHandleZ#)
Bezier.Start.Pos.X=StartX#
Bezier.Start.Pos.Y=StartY#
Bezier.Start.Pos.Z=StartZ#
Bezier.Start.HandlePrev.X=StartHandlePrevX#
Bezier.Start.HandlePrev.Y=StartHandlePrevY#
Bezier.Start.HandlePrev.Z=StartHandlePrevZ#
Bezier.Start.HandleNext.X=StartHandleNextX#
Bezier.Start.HandleNext.Y=StartHandleNextY#
Bezier.Start.HandleNext.Z=StartHandleNextZ#
Bezier.Mid.Pos.X=MidX#
Bezier.Mid.Pos.Y=MidY#
Bezier.Mid.Pos.Z=MidZ#
Bezier.Mid.HandlePrev.X=MidHandlePrevX#
Bezier.Mid.HandlePrev.Y=MidHandlePrevY#
Bezier.Mid.HandlePrev.Z=MidHandlePrevZ#
Bezier.Mid.HandleNext.X=MidHandleNextX#
Bezier.Mid.HandleNext.Y=MidHandleNextY#
Bezier.Mid.HandleNext.Z=MidHandleNextZ#
Bezier.Last.Pos.X=EndX#
Bezier.Last.Pos.Y=EndY#
Bezier.Last.Pos.Z=EndZ#
Bezier.Last.HandlePrev.X=EndHandlePrevX#
Bezier.Last.HandlePrev.Y=EndHandlePrevY#
Bezier.Last.HandlePrev.Z=EndHandlePrevZ#
Bezier.Last.HandleNext.X=EndHandleNextX#
Bezier.Last.HandleNext.Y=EndHandleNextY#
Bezier.Last.HandleNext.Z=EndHandleNextZ#
endfunction
`this function updates bezier curve
function UpdateBezier()
position object 1,TempBezier.Start.Pos.X,TempBezier.Start.Pos.Y,TempBezier.Start.Pos.Z
position object 4,TempBezier.Mid.Pos.X,TempBezier.Mid.Pos.Y,TempBezier.Mid.Pos.Z
position object 7,TempBezier.Last.Pos.X,TempBezier.Last.Pos.Y,TempBezier.Last.Pos.Z
position object 2,TempBezier.Start.HandlePrev.X,TempBezier.Start.HandlePrev.Y,TempBezier.Start.HandlePrev.Z
position object 5,TempBezier.Mid.HandlePrev.X,TempBezier.Mid.HandlePrev.Y,TempBezier.Mid.HandlePrev.Z
position object 8,TempBezier.Last.HandlePrev.X,TempBezier.Last.HandlePrev.Y,TempBezier.Last.HandlePrev.Z
position object 3,TempBezier.Start.HandleNext.X,TempBezier.Start.HandleNext.Y,TempBezier.Start.HandleNext.Z
position object 6,TempBezier.Mid.HandleNext.X,TempBezier.Mid.HandleNext.Y,TempBezier.Mid.HandleNext.Z
position object 9,TempBezier.Last.HandleNext.X,TempBezier.Last.HandleNext.Y,TempBezier.Last.HandleNext.Z
`draw non-bezier lines
startx=object screen x(1)
starty=object screen y(1)
midx=object screen x(4)
midy=object screen y(4)
lastx=object screen x(7)
lasty=object screen y(7)
d3d_line startx,starty,midx,midy,d3d_rgba(255,255,255,255),d3d_rgba(255,255,255,255)
d3d_line midx,midy,lastx,lasty,d3d_rgba(255,255,255,255),d3d_rgba(255,255,255,255)
`draw handles
starthandleprevx=object screen x(2)
starthandleprevy=object screen y(2)
starthandlenextx=object screen x(3)
starthandlenexty=object screen y(3)
midhandleprevx=object screen x(5)
midhandleprevy=object screen y(5)
midhandlenextx=object screen x(6)
midhandlenexty=object screen y(6)
lasthandleprevx=object screen x(8)
lasthandleprevy=object screen y(8)
lasthandlenextx=object screen x(9)
lasthandlenexty=object screen y(9)
d3d_line startx,starty,starthandleprevx,starthandleprevy,d3d_rgba(0,0,245,255),d3d_rgba(0,0,245,255)
d3d_line startx,starty,starthandlenextx,starthandlenexty,d3d_rgba(0,0,245,255),d3d_rgba(0,0,245,255)
d3d_line midx,midy,midhandleprevx,midhandleprevy,d3d_rgba(0,0,245,255),d3d_rgba(0,0,245,255)
d3d_line midx,midy,midhandlenextx,midhandlenexty,d3d_rgba(0,0,245,255),d3d_rgba(0,0,245,255)
d3d_line lastx,lasty,lasthandleprevx,lasthandleprevy,d3d_rgba(0,0,245,255),d3d_rgba(0,0,245,255)
d3d_line lastx,lasty,lasthandlenextx,lasthandlenexty,d3d_rgba(0,0,245,255),d3d_rgba(0,0,245,255)
endfunction
`this function draws bezier curve
function DrawBezier(A as BezierPoint,B as BezierPoint,BezierSamples as integer)
local AHandlePos as Vec3D
local BHandlePos as Vec3D
ax as float
ay as float
az as float
bx as float
by as float
bz as float
cx as float
cy as float
cz as float
local drawxold=0
local drawyold=0
position object 100,A.Pos.X,A.Pos.Y,A.Pos.Z
local drawxnew
drawxnew=object screen x(100)
local drawynew
drawynew=object screen y(100)
for t=0 to BezierSamples
`get position along the next handle of A.
ax=((A.HandleNext.X-A.Pos.X)/BezierSamples)*(t*1.0)+A.Pos.X
ay=((A.HandleNext.Y-A.Pos.Y)/BezierSamples)*(t*1.0)+A.Pos.Y
az=((A.HandleNext.Z-A.Pos.Z)/BezierSamples)*(t*1.0)+A.Pos.Z
`get position along the prev handle of B.
bx=((B.HandlePrev.X-B.Pos.X)/BezierSamples)*((BezierSamples-t)*1.0)+B.Pos.X
by=((B.HandlePrev.Y-B.Pos.Y)/BezierSamples)*((BezierSamples-t)*1.0)+B.Pos.Y
bz=((B.HandlePrev.Z-B.Pos.Z)/BezierSamples)*((BezierSamples-t)*1.0)+B.Pos.Z
`get position along the line ax,ay,az-bx,by,bz.
cx=((bx-ax)/BezierSamples)*(t*1.0)+ax
cy=((by-ay)/BezierSamples)*(t*1.0)+ay
cz=((bz-az)/BezierSamples)*(t*1.0)+az
position object 100,cx,cy,cz
drawxold=drawxnew
drawyold=drawynew
drawxnew=object screen x(100)
drawynew=object screen y(100)
`draw bezier curve section.
d3d_line drawxold,drawyold,drawxnew,drawynew,d3d_rgba(255,0,255,255),d3d_rgba(255,0,255,255)
f=f+1
if f=1 and spacekey()
hide object 1
hide object 2
hide object 3
hide object 4
hide object 5
hide object 6
hide object 7
hide object 8
hide object 9
position camera 0,object position x(100),object position y(100),object position z(100)
sync
f=0
else
show object 1
show object 2
show object 3
show object 4
show object 5
show object 6
show object 7
show object 8
show object 9
endif
next t
endfunction
function BezierRnd(PosRndMax)
Bezier.Start.Pos.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.Pos.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.Pos.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.HandlePrev.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.HandlePrev.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.HandlePrev.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.HandleNext.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.HandleNext.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Start.HandleNext.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.Pos.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.Pos.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.Pos.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.HandlePrev.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.HandlePrev.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.HandlePrev.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.HandleNext.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.HandleNext.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Mid.HandleNext.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.Pos.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.Pos.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.Pos.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.HandlePrev.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.HandlePrev.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.HandlePrev.Z=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.HandleNext.X=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.HandleNext.Y=-(PosRndMax/2)+(random(PosRndMax))
Bezier.Last.HandleNext.Z=-(PosRndMax/2)+(random(PosRndMax))
endfunction
my functions are BezierMake and SetupBezier when i try to use BezierMake function it doesn't make a correct bezier curve instead it makes one that is made by default from BezierRnd function, and how can i change position object 1 and so to use find free object() function every time i try that with this functions it return an error like object already exists or such? can someone help me with this? original code for this was done by monocoder.