PDA

View Full Version : automate spline length


embryotic
07-29-2011, 02:28 AM
with Maxscript how can I change the length of a spline until it is a specific amount?

I want to move Spline1/Vert 1 (there will only be Spline1)
move in -Z
until
curveLength $Shape01 = 3000 (generic units)

embryotic
07-29-2011, 03:45 AM
this is my (probably horrific) attempt :)

$ = theShape
curLength = curveLength theShape
remainder = (3000 - curLength)
v1 = getKnotPoint $ 1 1
v2 = getKnotPoint $ 1 2
vec = normalize (v2-v1)
setKnotPoint $ 1 1 (v1 + remainder * -vec)

I havent yet understood how to apply this to a selection of shapes and have it loop thru 1 by 1...

lucpet
07-29-2011, 03:51 AM
fn dLBP pointA pointB =
(
ss = SplineShape pos:pointA
addNewSpline ss
addKnot ss 1 #corner #line PointA
addKnot ss 1 #corner #line PointB
ss.wirecolor = color 255 246 0
updateShape ss
ss
)
nSpl = dLBP [0.0,0.0,0.0] [150.0,0.0,0.0]

This is a function I was using to do some spine work a little while ago.
Probably from the help file.
To use just use the function call "dLBP [0.0,0.0,0.0] [150.0,0.0,0.0]"
and change the pos in the z to use

edit - oh ok didn't see your second post

embryotic
07-29-2011, 04:08 AM
Thanks Lucpet

nSpl = dLBP [0.0,0.0,0.0] [150.0,0.0,0.0]

what does nSpl and dLBP mean?
what does your script do? - I tried it and it made another spline

lucpet
07-29-2011, 04:59 AM
Thanks Lucpet

nSpl = dLBP [0.0,0.0,0.0] [150.0,0.0,0.0]

what does nSpl and dLBP mean?
what does your script do? - I tried it and it made another spline

They're just acronyms posing as variables lol
the dlbp is the function call and I assigned it to the variable nSpl (short for new spline)
so you could do without assigning it and just use dLBP [0.0,0.0,0.0] [0.0,0.0,-17.0]
where dLBP is the function call and you are feeding it pointA = [0.0,0.0,0.0] and
pointB = [0.0,0.0,-17.0]

You can rename these variables to anything that make sense to you.

I was just testing this piece of code:-
fn dLBP pointA pointB =
(
ss = SplineShape pos:pointA
addNewSpline ss
addKnot ss 1 #corner #line PointA
addKnot ss 1 #corner #line PointB
ss.wirecolor = color 255 246 0
updateShape ss
ss
)
nSpl = dLBP [0.0,0.0,0.0] [150.0,0.0,0.0]

ikCtrl = spline_IK_Control name: "SplIKMod" helper_size:5 linkTypes:0
ikCtrl.cross = on
ikCtrl.Box = off
addModifier nSpl ikCtrl
ikCtrl.createHelper (ikCtrl.getKnotCount())

-- rename the helpers
for i = 1 to ikCtrl.getKnotCount() do
(
ikCtrl.helper_list[i].name = (uniquename "point_")
ikCtrl.cross = on
ikCtrl.Box = off
)

tText = text size:10 kerning:0 leading:0 isSelected:on
pSel = Poly_Select name:"polSel"
addmodifier tText pSel

pDis = (distance $point_001 $point_002)
tText.text = pDis as string
tText.pos = [(pDis/2), 5.0 , 0.0]
tText.wirecolor = color 255 246 0
tText.rotation = angleaxis 90 [1,0,0]


I posted my reply before seeing your second post

lucpet
07-31-2011, 12:48 PM
Sorry for taking so long but life keeps getting in the way :)

anyhow using the previous code Function

fn dLBP pointA pointB =
(
ss = SplineShape pos:pointA
addNewSpline ss
addKnot ss 1 #corner #line PointA
addKnot ss 1 #corner #line PointB
ss.wirecolor = color 255 246 0
updateShape ss
ss
)
dLBP [0.0,0.0,0.0] [10.0,0.0,0.0]


setKnotPoint $Shape001 1 1 [0.0, 0.0, -3000.0]
updateShape $Shape001

from the helpfile http://docs.autodesk.com/3DSMAX/14/ENU/MAXScript%20Help%202012//index.html?query=addKnot

setKnotPoint $Shape001 1 1 [0.0, 0.0, -3000.0] --the code, the spine name, the spline index, the knot index, then the position in 3 point
updateShape $Shape001 --then you have to use the update fn thingymabob

setting the knot two is just as simple

I hope this helps

lucpet
07-31-2011, 01:11 PM
Here is a (badly written) test script on how you can move the knots to locations in "Z"
rollout testme "Testme"
(
button goMe "Go!" width:150
spinner k1 "Knot 1" range:[-100000.0,100000.0,0.0] width:140 align:#center
spinner k2 "Knot2" range:[-100000.0,100000.0,-100.0] width:140 align:#center

fn dLBP pointA pointB =
(
ss = SplineShape pos:pointA
addNewSpline ss
addKnot ss 1 #corner #line PointA
addKnot ss 1 #corner #line PointB
ss.wirecolor = color 255 246 0
updateShape ss
ss
)

on goMe pressed do
(
dLBP [0.0,0.0,0.0] [0.0,0.0,-100.0]
)

on k1 changed val do
(
setKnotPoint $Shape001 1 1 [0.0, 0.0, val]
updateShape $Shape001
)

on k2 changed val do
(
setKnotPoint $Shape001 1 2 [0.0, 0.0, val]
updateShape $Shape001
)
)
createdialog testme style:#(#style_toolwindow, #style_sysmenu)

embryotic
08-01-2011, 04:56 AM
Thanks very much lucpet :)

CGTalk Moderation
08-01-2011, 04:56 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.