![]() |
#3
|
|||
|
|||
Sorry about the incorrect formatting procedures. Here is the code, broken down:
Here is the main file, with the Viz.go. Code:
import viz import vizact import vizinfo from Visualizer import Visualizer from Element import Element from ElementArray import ElementArray from CameraControls import CameraControls #Program Start viz.setMultiSample(2) viz.go() #viz.splashscreen('Splash.bmp') #Viewport Settings mview = viz.MainView mview.setPosition(0,0,-10) viz.sensitivity(4.5,0.7) #Create Element Array, Elements and Visualizers elementArray = ElementArray() def onUpdate(e): #Selection Loop SelectionLoop(elementArray) #Mouse Navigation Loop if viz.iskeydown(viz.KEY_ALT_L): vizact.onkeydown( viz.KEY_ALT_L, viz.cam.setHandler, None ) else: viz.cam.setHandler( CameraControls() ) viz.callback(viz.UPDATE_EVENT,onUpdate) #SELECTION ALGORITHM def SelectionLoop(elementArray): #What is the Mouse over? item = viz.pick(1) #Make a loop equal to the array size. Iterate through every element in the array. for i in range(len(elementArray.myArray)): #Check to see if the mouse is over the object print 'elemArray' print elementArray.myArray[i].model print 'item.object' print item.object if item.object == elementArray.myArray[i].model: #highlight the object item.ambient(5,5,5) else: #unhighlight the object item.object.ambient(0.5,0.5,0.5) Here is the ElementArray class: Code:
import viz import vizinfo import vizact import math import SelectionHandler from Element import Element ####################################################### # # This is where you code everything you want your elements # to be. All of it is hand coded, this is where 'your' work # goes if you are using my classes as a base. #This goes for you guys down at Stennis Space Center! ####################################################### class ElementArray: def __init__(self): #Create two arrays elem1coords = -5,-1,0 elem2coords = 5,1,0 elem1 = Element(elem1coords, viz.ON) elem2 = Element(elem2coords, viz.ON) self.myArray = [elem1,elem2] Code:
import viz import vizinfo import vizact import math from Visualizer import Visualizer #What needs to happen here: # #When clicked on an element model, the element should encircle it in a sphere of appropriate size. # Then, several visualization spheres of some % of the sphere size should immerge. The sphere # sizes should be scalable with the '+' '-' keys similar to how maya scales the transform handle. # class Element: def __init__(self, coords, visib): #---------------------------------------------- #Models #---------------------------------------------- #Base Model self.model = viz.add('testValve.OSG') self.model.setScale(0.25,0.25,0.25) #Plane Model self.plane = viz.add('plane.OSG') #---------------------------------------------- #Input Parameter Setup #---------------------------------------------- self.model.setPosition(coords) self.plane.setPosition(coords) self.model.visible(visib) self.plane.visible(visib) #---------------------------------------------- #Instance Variables #---------------------------------------------- self.mview = viz.MainView #Is the mouse over the base model? self.isMousedOver = 0 #is the base model selected? self.isSelected = 0 #Controls how far away the Visualizers are from the Element self.radius = 4 #Spacing (in degrees) between visualizers self.spacing = 360 #Create instances of Visualizer class self.viz1 = Visualizer() self.viz2 = Visualizer() self.viz3 = Visualizer() #Set the models of the Visualizer to children of the plane self.viz1.model.parent(self.plane) self.viz2.model.parent(self.plane) self.viz3.model.parent(self.plane) #Create the temporary standin for the Visualization class: # # If the mouse if moving over the instance and it is not selected # if self.item.object == self.model and self.isMousedOver == 0 and self.isSelected == 0: # self.isMousedOver = 1 # self.model.runAction(self.MouseOverObject) # # If the mouse if not over the instance # else: # self.isMousedOver = 0 # #If the mouse if over the object, it is not selected and it is left clicked # if self.item.object == self.model and self.isMousedOver == 1 and viz.mouse.getState() == viz.MOUSEBUTTON_LEFT and self.isSelected == 0: # self.visibleSpheres() # self.isSelected = 1 # self.model.runAction(self.MouseSelectObject) # #If the mouse is not over the object, it is selected, and there is a left click # if self.item.object != self.model and self.isMousedOver == 0 and viz.mouse.getState() == viz.MOUSEBUTTON_LEFT and self.isSelected == 1: # self.isSelected = 0 # self.model.runAction(self.noMouseSelectObject) # #If the object is not selected, the object is not selected, and there is a left click # if self.item.object != self.model and self.isMousedOver == 0 and viz.mouse.getState() == viz.MOUSEBUTTON_LEFT and self.isSelected == 0: # self.isSelected = 0 #Updates self.plane.lookat(self.mview.getPosition()) def visibleSpheres(self): #Set the sphere locations for i in range (len(self.sphereArray)): self.sphereArray[i].model.visible(viz.ON) self.angleBetween = (360 / len(self.sphereArray)) print 'loop #' print i self.sphereArray[i].model.setPosition(self.convert2Pol(self.radius,(self.angleBetween*(i+1)*(math.pi/180)))) #Bring the Spheres into visibility def convert2Pol(self, r, theta): #This deals with converting the polar coordinates. self.x = r * math.cos(theta) self.y = r * math.sin(theta) self.z = 0 print 'x:' print self.x print 'y:' print self.y self.newCoords = [self.x,self.y,self.z] return self.newCoords |
|
|