WorldViz User Forum

WorldViz User Forum (https://forum.worldviz.com/index.php)
-   Vizard (https://forum.worldviz.com/forumdisplay.php?f=17)
-   -   Array, concatenate, multiple path help please (https://forum.worldviz.com/showthread.php?t=2336)

sircedric4 10-23-2009 12:27 PM

Array, concatenate, multiple path help please
 
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

Code:

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.


All times are GMT -7. The time now is 10:54 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC