EcoSystem to Objects

This is a python script that will place a cube at the same location as each instance in an EcoSystem. It gives each cube the same rotation as the instance. It also scales it by the same scale factor in each direction as the instance. There is an additional parameter to allow the scaling to be modified to give better results. A second parameter limits the number of instances that will have objects created for them as the script can crash Vue if large numbers of objects are created. You can increase this number if your computer can cope with larger numbers of objects.

An enhanced version developed for Vue 6 using Vue 6 Pre Release is also included in the zip file. It includes a simple interface so you don’t need to edit the script. It place any of the standard Vue primitive solids at the position of each instance of an object in an ecosystem. You can optionally group or create a metablob from the objects.

These scripts have been supperseeded by the addition of a better feature to do this in Vue itself I’ve left them here as examples of what can be achieved in Vue using Python.

[codesyntax lang=”python”]

#******************************************************
# Place an object at the position of each instance
# in an ecosystem
#
# - ecotoobject.py
# - By Mark Caldwell
# - Version 0.4
# - 24th April 2007
# - Tested with Vue 6 Infinite
#
# How to use in 4 easy steps
#
# 1. Download this file onto your computer
#
# 2. Select an object with a populated EcoSystem applied
#
# 3. Then run script
#    To run it go to Python -> Run Python Script
#    Then locate the file on your computer
#
# 4. Respond to the scripts options and then wait for
#    it to work
#
#******************************************************

#----------------------------------------------
# Collect the user's input
#----------------------------------------------

group=Prompt('Group Objects?\n 1: Group\n 2: Metablob \n3: No','1',true,'')

form=Prompt('Object Type?\n 1: Cube\n 2: Sphere \n3: Cylinder \n4: Pyramid\n5: Cone\n 6: Torus','1',true,'')

maximum_objects=int(Prompt('Maximum number of objects to create?','1000',true,''))

scale_factor=float(Prompt('Scale Factor for Objects','0.1',true,''))

#--------------------------------------------------------------------------
# Test the user has a scene loaded
#--------------------------------------------------------------------------

if TestLoaded():

#--------------------------------------------------------------------------
# Test the user has 1 object selected with an Eco System on it
#--------------------------------------------------------------------------

    numselected=CountSelectedObjects()

    if numselected>1:
        message="Please select only one object."
    elif numselected<1:
        message="Please select an object."
    else:

#--------------------------------------------------------------------------
#Set Up a Few Variables
#--------------------------------------------------------------------------

        bObject=GetSelectedObjectByIndex(0)     # Get first selected object
        Eco = GetEcosystemOnObject(bObject)     # Get EcoSystem on first selected

        if Eco==None:
            message="Please select an object with an EcoSystem material applied to it."
        elif bObject.IsLocked():                # Check object isn't locked
            message="Please select an object that isn't locked."
        else:
            ecocount=Eco.GetInstanceCount ()    # Count number of instances in EcoSystem

            if ecocount>maximum_objects:        # If this is greater than maximum_objects restrict it to maximum objects
                ecocount=maximum_objects

            if ecocount==0:
                message="Please select an EcoSystem that has been populated."
            else:

#--------------------------------------------------------------------------
# Create Objects
#--------------------------------------------------------------------------

                for i in range(0,ecocount):
                    pos=Eco.GetInstancePosition (i)             # Get instance position
                    rot=Eco.GetInstanceRotation (i)             # Get instance rotation
                    sca=Eco.GetInstanceScale  (i)               # Get instance scale

                    if form=='2':
                        obj=AddSphere()
                    elif form=='3':
                        obj=AddCylinder()
                    elif form=='4':
                        obj=AddPyramid()
                    elif form=='5':
                        obj=AddCone()
                    elif form=='6':
                        obj=AddTorus()
                    else:
                        obj=AddCube()                        # Create Object
                    obj.SetPosition(pos[0],pos[1],pos[2])    # Set object's position
                    obj.Rotate(rot[0],rot[1],rot[2])         # Set object's rotation
                    obj.ResizeAxis(sca[0]*scale_factor,sca[1]*scale_factor,sca[2]*scale_factor)     # Set object's size

                    if group=='1' or group=='2':
                        if i>0:
                            obj.SetName(name)
                        else:
                            name=obj.Name()

                DeselectAll()

                if group=='1':
                    SelectByName(name)
                    Group()
                elif group=='2':
                    SelectByName(name)
                    MetaBlob()

                DeselectAll()
                Select(bObject)

            message="Eco to Object Successful"
else:
    message="No Scene Loaded"

Message(message)    # Display message

#--------------------------------------------------------------------------
# End of Script
#--------------------------------------------------------------------------

[/codesyntax]

Python Code – ecotoobject.py

[codesyntax lang=”python”]

#******************************************************
# Place a cube at the position of each instance of an
# object in an ecosystem
#
# - ecotoobject.py
# - By Mark Caldwell
# - Version 0.1
# - 29th June 2006
# - Tested with Vue 5 Infinite 5.10 and Vue 6 Pre Release
#
# How to use in 4 easy steps
#
# 1. Download this file onto your computer
#
# 2. Edit the configuration variable maximum_objects below
#    if you want to risk more that 1000 objects
#
# 3. Select an object with a populated EcoSystem applied
#
# 4. Then run script and wait for it to work
#    To run it go to Python -> Run Python Script
#    Then locate the file on your computer
#
#******************************************************

#----------------------------------------------
# Configuration: Set these to alter end result
#----------------------------------------------

maximum_objects=1000    # maximum_objects sets the maximum number of instances that the script will replace with objects
                        # this stops it running away and crashing Vue by trying to add 1 million cubes

#--------------------------------------------------------------------------
# Test the user has a scene loaded
#--------------------------------------------------------------------------

if TestLoaded():

#--------------------------------------------------------------------------
# Test the user has 1 object selected with an Eco System on it
#--------------------------------------------------------------------------

    numselected=CountSelectedObjects()

    if numselected>1:
        message="Please select only one object."
    elif numselected<1:
        message="Please select an object."
    else:

#--------------------------------------------------------------------------
#Set Up a Few Variables
#--------------------------------------------------------------------------

        bObject=GetSelectedObjectByIndex(0)     # Get first selected object
        Eco = GetEcosystemOnObject(bObject)     # Get EcoSystem on first selected

        objlist=[bObject]

        if Eco==None:
            message="Please select an object with an EcoSystem material applied to it."
        elif bObject.IsLocked():                # Check object isn't locked
            message="Please select an object that isn't locked."
        else:
            ecocount=Eco.GetInstanceCount ()    # Count number of instances in EcoSystem

            if ecocount>maximum_objects:        # If this is greater than maximum_objects restrict it to maximum objects
                ecocount=maximum_objects

            if ecocount==0:
                message="Please select an EcoSystem that has been populated."
            else:

#--------------------------------------------------------------------------
# Create Objects
#--------------------------------------------------------------------------

                for i in range(0,ecocount):
                    pos=Eco.GetInstancePosition (i)             # Get instance position
                    rot=Eco.GetInstanceRotation (i)             # Get instance rotation
                    sca=Eco.GetInstanceScale  (i)               # Get instance scale
                    object=AddCube()                            # Create Object
                    object.SetPosition(pos[0],pos[1],pos[2])    # Set object's position
                    object.Rotate(rot[0],rot[1],rot[2])         # Set object's rotation
                    object.ResizeAxis(sca[0],sca[1],sca[2])     # Set object's size

            message="Eco to Object Successful"
else:
    message="No Scene Loaded"

Message(message)    # Display message

#--------------------------------------------------------------------------
# End of Script
#--------------------------------------------------------------------------

[/codesyntax]

impworks © Copyright Mark Caldwell 1996 - 2024