PDA

View Full Version : Array, concatenate, multiple path help please


sircedric4
10-23-2009, 12:27 PM
Maybe I'm thick, but I am still learning Python. I am trying to setup multiple paths for different models that I am incorporating into my program. In the past I was doing this the clunky way by introducing a separate variable for each path:

Example:
path1 = viz.add(viz.ANIMATION_PATH) )
path2= viz.add(viz.ANIMATION_PATH) )
path3 = viz.add(viz.ANIMATION_PATH) )
etc...

Then when I wanted to adjust it I would do things like:
path1.speed(1)
path1.loop(viz.CIRCULAR)
path2.speed(1)
path2.loop(viz.CIRCULAR)
path3.speed(1)
path3.loop(viz.CIRCULAR)

Needless to say this in very clunky, and I want to setup a more default program that doesn't have each path spelled out since I won't always know how many paths I am playing with. I am sure there is some way to do this with for (do-loop) statements.

I guess I don't understand why I can't seem to use an array to do this job. I've tried path[0], path[1], etc... but when I goto tweak the path[0].speed it says no such attribute exists. I believe this is because arrays can't be set to do viz.adds or something. I think arrays can only be certain types and what I am trying to do doesn't fall under that type.

Is there a way to concatenate strings in python? (I come from VB where there is that capability) So for example I could
path + 'someinteger' = viz.add(viz.ANIMATION_PATH) )

and then use that same left hand side wherever to change things
(path + 'someinteger' ).speed(1)

I've tried searching for the means to do this all over the internet and I am hoping someone more familiar with python can tell me the easiest way to do what I am trying to do. I just want variables that I can adjust with a do-loop without having to manually add a bunch of numbered variables. This simple capability is really holding me back on several programs, help please.

IGoudt
10-25-2009, 05:30 AM
I would do the following using a list, so that path1 is on index 0 and path n on index n-1

pathlist = list()

for curNumber in range(maxNumberOfPaths) :

path = viz.add(viz.ANIMATION_PATH)
path.speed(1)
path.loop(viz.CIRCULAR)
pathlist.append(path)

The way to concatenate strings in Python is:

'text' + str(otherArgs)',

so 'path' + str(1) would become 'path1'

If you are unsure about the ability of the otherArgs to be casted correctly, you can wrap a try/catch around it.

If you want to call elements in a container by their name, you can use a dictionary.

IGoudt
10-26-2009, 02:48 AM
I forgot to mention that you cannot use operators and functions on the left side of the equals sign.

path + 'someinteger' = viz.add(viz.ANIMATION_PATH) would not work, but

pathDictionary[path + str(someinteger)] = viz.add(viz.ANIMATION_PATH) will.

sircedric4
10-28-2009, 05:14 AM
Thanks, the List() thing is what I was missing. I used the basics of what you outlined and got the program to do exactly what I was looking for.

I kept looking for arrays in the python manual and all it kept showing me was dictionary stuff and it wouldn't do what I wanted. I figured someone more familiar with python would be able to point me directly to what I wanted.

Thanks again.