Notifications
Clear all

[Closed] help me

Hi!!!

In the topic about CgTalk Maxscript Challenge 005: “Lightning Bolts” link:http://forums.cgsociety.org/showthread.php?t=25757 2″ rel=”nofollow noopener”> http://http://forums.cgsociety.org/showthread.php?t=257572
I have a problem: there’s code: “track = 3*(k-1)+2″, so why do they set “track” value like that? I try to set “track = k” but program not works accurate.

Thank you!

7 Replies

The variable k in the code refers to a knot index. I can only assume the track part is to refer to the correct track number in the controller for that knot.

Thank erilaz!

I know “k” refers to knot index, in that case “k” = 1 to 65. But I don’t understand that why variable track = 3*(k-1)+2. How do you use this formula:sad: ? And I try to find code: “#master” in MAXScript Reference but it can’t find this code.

please help me again!

the lighning bolt is made of spline
the vertices are animated
k a knot is a vertex
a knot has an in-vector & an out-vector (aka. bezier-handles)

for each animated vert you have 3 entries in trackview
1 – InVec
2 – Vertex
3 – OutVec

so…
for knot 1 the vertex in track view will be the 2nd
for knot 1 the vertex in track view will be the 5th
ect.

to get the vertex of knot 2
k = 2
3*(2-1)+2 = 5 – the 5th entry in trackview

3* … 3 entries per knot
+1 the InVec
+2 the vertex
+3 the OutVec

after creating a lightning-bolt check trackview
under
World-Objects-Object__Editable_Spline-Master
you have all this tracks of the animated verts

too much confusing ?

guruware

Thank guruware!!! :applause:

Your help is very useful for me. I try to make a script:


lin = splineshape()

addnewspline lin

addknot lin 1 #corner #line [0,0,0]

addknot lin 1 #corner #line [0,0,0]

updateshape lin

lin

lin.wirecolor=red

animateVertex lin #all

getPos=#()

for i in 1 to 5 do

(

numk = (numsegments lin 1)*2

for j in 1 to numk by 2 do

(

refineSegment lin 1 j 0.5

)

updateshape lin

)

k= numKnots lin 1

for t in 0 to 10 do

( 

x0=y0=0 

z0=100

for i in 1 to (numKnots lin 1) do

(

setKnotPoint lin 1 i [x0,y0,z0]

setKnotType lin 1 i #corner

x0=random 5 10

y0=random 5 10

z0=z0-random 15 20

getPos[i]=getKnotPoint lin 1 i

updateShape lin



track = 3*(i-1)+2

key= addNewKey lin[#Object__Editable_Spline][#master][track].controller t

key.value = getPos[i]

updateShape lin

)

)


But MAXScript Listener give me a error:

 
-- Error occurred in i loop; filename: C:\Program Files\Autodesk\3dsMax8\Scripts	mp.ms; position: 722

-- Frame:

-- i: 3

-- called in t loop; filename: C:\Program Files\Autodesk\3dsMax8\Scripts	mp.ms; position: 770

-- Frame:

-- t: 0

-- Unknown property: "controller" in undefined

 

🙁 ???

Why that? Help Help Help :bowdown:

That’s because of the number of knots in the spline don’t match

try replacing

addknot lin 1 #corner #line [0,0,0]
addknot lin 1 #corner #line [0,0,0]
updateshape lin
lin
lin.wirecolor=red
getPos=#()
for i in 1 to 5 do
(
numk = (numsegments lin 1)*2
for j in 1 to numk by 2 do
(
refineSegment lin 1 j 0.5
)
updateshape lin
)

with

for i=1 to 10 do addknot lin 1 #corner #line [0,0,0]

so you are sure the spline has 10 knots.

Thank Zbuffer very much!

But in my code:

 lin = splineshape()

addnewspline lin

addknot lin 1 #corner #line [0,0,0]

addknot lin 1 #corner #line [0,0,0]

updateshape lin

 

it’s just creat a spline with 2 knots. After that I divide this spline by code:


for i in 1 to 5 do
(
numk = (numsegments lin 1)*2
for j in 1 to numk by 2 do
(
refineSegment lin 1 j 0.5
)
updateshape lin
)

Then spline with 33 knots. The “for loop” with “t”: mean that “from frame 0 to frame 10”
And the the code:

for i in 1 to (numKnots lin 1) do

(

setKnotPoint lin 1 i [x0,y0,z0]

setKnotType lin 1 i #corner

x0=random 5 10

y0=random 5 10

z0=z0-random 15 20

getPos[i]=getKnotPoint lin 1 i

updateShape lin



track = 3*(i-1)+2

key= addNewKey lin[#Object__Editable_Spline][#master][track].controller t

key.value = getPos[i]

updateShape lin

)

For number of knots, so I think number of knots in spline will match because of “i” is from 1 to “(numKnots lin 1)”
Please show me the mistake in my code!

Dear Zbuffer

I’ve just checked my code and fix it with your way. Result is excellent, it’s right.
May be my the knots in spline don’t match.

Thanks again!:applause: