def drawCallback(): size=Blender.Window.GetAreaSize() xPos=100 yPos=size[1]-100 listeners=Acoustic.getListeners() yPos=layoutListeners(listeners,"Geometries to export:",(xPos,yPos))-100 layoutExporter((xPos,yPos)) return
def drawCallback(): size = Blender.Window.GetAreaSize() xPos = 100 yPos = size[1] - 100 listeners = Acoustic.getListeners() yPos = layoutListeners(listeners, "Geometries to export:", (xPos, yPos)) - 100 layoutExporter((xPos, yPos)) return
def choreoExport(scene, normalize=True): SelectedObjects = Blender.Object.GetSelected() listeners = Acoustic.getListeners() sources = [] target = None buffer = "" for source in Acoustic.getSources(): if source.sel == 1: sources.append(source) for listener in listeners: if listener.sel == 1: target = listener break if target == None or not sources: Blender.Draw.PupMenu( 'You have to select one listener and at least one source objects!') return allAcousticObjects = Acoustic.getAcousticObjects(scene) # print list(allAcousticObjects) #TODO: refactor this (checked three times!) if normalize == True: normalizationOffset, normalizationScale = getNormalizationParameters( allAcousticObjects) for frame in range(Blender.Get('staframe'), Blender.Get('endframe')): Blender.Set('curframe', frame) sourceOrientationMatrix = target.mat if target.type == 'Camera': # if the listener is a camera, do a proper rotation acording to conventions: azimuth 0: seeing at x+ rotationMatrix = Blender.Mathutils.Euler( 90, 0, -90).toMatrix().invert().resize4x4() sourceOrientationMatrix = rotationMatrix * sourceOrientationMatrix roll, descention, azimuth = sourceOrientationMatrix.toEuler() targetElevation = (-descention) % 360 if targetElevation > 180: targetElevation = targetElevation - 360 targetRoll = (roll) % 360 targetAzimuth = (azimuth) % 360 if normalize == True: targetX, targetY, targetZ = normalizePosition( listener.mat.translationPart(), normalizationOffset, normalizationScale, False) else: targetX, targetY, targetZ = listener.mat.translationPart() sourcesPositions = "" for source in sources: if source.sel == 1: if normalize == True: sourceX, sourceY, sourceZ = normalizePosition( source.mat.translationPart(), normalizationOffset, normalizationScale, False) else: sourceX, sourceY, sourceZ = source.mat.translationPart() sourcesPositions += " %f\t%f\t%f" % (sourceX, sourceY, sourceZ) buffer += ChoreoLineTemplate % vars() return buffer
def callBackListener(event,val): print "callBackListener" print "event: %s\t-\tval: %s" % (event,val) listeners=Acoustic.getListeners() if val>0: newListener=listeners[val-1] for listener in listeners: if listener==newListener: listener.sel=1 else: listener.sel=0 return
def drawCallback(): size=Blender.Window.GetAreaSize() xPos=0 yPos=size[1] sources=Acoustic.getSources() yPos=layoutSources(sources,"Audio sources:",(xPos,yPos))-40 materials=Acoustic.getMaterials() yPos=layoutMaterials(materials,"Acoustic materials:",(xPos,yPos))-40 listeners=Acoustic.getListeners() yPos=layoutListeners(listeners,"Select listener:",(xPos,yPos))-10 layoutExporter((xPos,yPos)) return
def choreoExport (scene,normalize=True): SelectedObjects = Blender.Object.GetSelected() listeners=Acoustic.getListeners() sources=[] target=None buffer="" for source in Acoustic.getSources(): if source.sel==1: sources.append(source) for listener in listeners: if listener.sel==1: target=listener break if target==None or not sources: Blender.Draw.PupMenu('You have to select one listener and at least one source objects!') return allAcousticObjects=Acoustic.getAcousticObjects(scene) # print list(allAcousticObjects) #TODO: refactor this (checked three times!) if normalize==True: normalizationOffset,normalizationScale=getNormalizationParameters(allAcousticObjects) for frame in range(Blender.Get('staframe'),Blender.Get('endframe')): Blender.Set('curframe',frame) sourceOrientationMatrix=target.mat if target.type=='Camera': # if the listener is a camera, do a proper rotation acording to conventions: azimuth 0: seeing at x+ rotationMatrix=Blender.Mathutils.Euler(90,0,-90).toMatrix().invert().resize4x4() sourceOrientationMatrix = rotationMatrix * sourceOrientationMatrix roll,descention,azimuth=sourceOrientationMatrix.toEuler() targetElevation=(-descention)%360 if targetElevation>180: targetElevation=targetElevation-360 targetRoll=(roll)%360 targetAzimuth=(azimuth)%360 if normalize==True: targetX,targetY,targetZ=normalizePosition(listener.mat.translationPart(),normalizationOffset,normalizationScale,False) else: targetX,targetY,targetZ=listener.mat.translationPart() sourcesPositions="" for source in sources: if source.sel==1: if normalize==True: sourceX,sourceY,sourceZ=normalizePosition(source.mat.translationPart(),normalizationOffset,normalizationScale,False) else: sourceX,sourceY,sourceZ=source.mat.translationPart() sourcesPositions+=" %f\t%f\t%f" % (sourceX,sourceY,sourceZ) buffer+=ChoreoLineTemplate % vars() return buffer
def layoutListeners(listeners,label="listeners",offset=(0,0)): xPosition=offset[0]+xLayoutMarks['sublabels'] yPosition=offset[1] listeners=Acoustic.getListeners() selectedListener=0 # get first selected listener (or 0) for listener in listeners: if list(Blender.Scene.GetCurrent().objects.selected).count(listener)!=0: selectedListener=listeners.index(listener)+1 break Blender.Draw.Label(label,xPosition,yPosition,120,30) menu="Listeners %t" counter=1 xPosition=offset[0]+xLayoutMarks['setters'] for listener in listeners: menu+="|"+listener.name+"%x"+str(counter) counter+=1 menu=Blender.Draw.Menu(menu,0,xPosition,yPosition,200,20,selectedListener,"select listener to export",callBackListener) return yPosition