예제 #1
0
    def OpenFile(self,file):
        ''' devi definire questa funzione perche e' invocata anche dalla History 
            devi ritornare True se il file e' stato caricato con successo '''

        name = os.path.basename(file)
        ext  = name.split('.')[1]
        ext = ext.upper()

        print 'Loading:', file, ext

        if ext == "DEFINITION":
            p = process_def.ProcessDef(file)
            LoadedModel = osgDB.readNodeFile( p.GetIveRoot() )
        else:
            LoadedModel = osgDB.readNodeFile(file)

        if not LoadedModel:
            print 'Loading failed'
            return False

        self.root.removeChildren( 0 , self.root.getNumChildren() )
        self.root.addChild(LoadedModel)
        self.tree.ReadSceneGraph(self.root)
        self.ResetCamera()
        self.LastOpenedFile = file
        print 'Loading terminated'
        return True
예제 #2
0
    def OpenAllFiles(self):
        ''' - controlla se tutti i file osg ci sono
            - li preprocessa
            - li apre
            - aggancia le root di ciascuno al dizionario osgFiles
        '''
        print 'controllo files'
        
        for i in self.osgFiles.keys():

            filename = self.osg_path + i + '.osg'

            if not os.path.exists(filename):
                print "il file non esiste !! ->", i, "<-"
                continue

            self.PreprocessOsgFile(i) # copy the file from osg_path to tmp_path

            node = osgDB.readNodeFile( self.tmp_path + i + '.osg' )
            if not node:
                print "errore durante l'apertura di ->", i, "<-"
                continue
            g = node.asGroup()
            if not g:
                print "fallito il cast a gruppo di: ->", i, "<-"
                continue
            self.osgFiles[i] = g
            
            wx.Yield()
예제 #3
0
	def OnOpen(self, evt):
		dlg = wx.FileDialog(self, 'Open a Scene', '' , '' , 
			'OpenSceneGraph Files (*.osg,*.ive)|*.osg;*.ive|All Files (*.*)|*.*')
		if wx.ID_OK == dlg.ShowModal():
			wx.LogStatus("Loading" + dlg.GetPath())
			node = osgDB.readNodeFile(dlg.GetPath().encode())
			self.canvas.viewer.setSceneData(node)
예제 #4
0
    def find(self,name,flist=[]):
        nodes=[]
        if(flist.__len__()==0):
            #cerco un file che finisca con <name>.qualcosa(osg,ive)
            flist=glob.glob(os.path.join(self.basepath,"*"+name+".*"))
            
#        flist=glob.glob(os.path.join(self.basepath,"f_pace_mi.osg"))
#       flist=glob.glob(os.path.join(self.basepath,"f_pace_col*.osg"))
        for f in flist:
            print "opening -->"+f+"<--"
            if(self.open_files.has_key(f)):
                node=self.open_files[f]
            else:
                node=osgDB.readNodeFile(f)
            if(node):
                self.open_files[f]=node
                if(self.optim):
                    self.optim.optimize(node,osgUtil.Optimizer.FLATTEN_STATIC_TRANSFORMS)
                #cerco dentro il file un nodo che finisca con <name>
#                v = FindNamePattern(".*("+name+").*$")
                v = FindNamePattern("^("+name+"(?:_low?|_mid?|_hig?h?)?(?:_rif)?)$")
                node.accept(v)
                for k in v.NodesHash.keys():
                    print "found >"+k+"<-->"+v.NodesHash[k][0]+"<--in file",f
                    nodes.append(v.NodesHash[k][1])
        return(nodes)
예제 #5
0
    def test_008_osgViewerAndOverriddenGUIEventHandler2(self):
        print "-"*40
        print "Testing osgViewer with a GUIEventHandler derived in python code"
        class DerivedHandler2(osgGA.GUIEventHandler):
            def handle(self, ea, aa, obj, nv):
                print "python handle"
                if (ea):
                    pass
                else:
                    print "ea is NULL"
                if (aa):
                    pass
                else:
                    print "aa is NULL"
                if (obj):
                    pass
                else:
                    print "obj is NULL"
                if (nv):
                    pass
                else:
                    print "nv is NULL"
                return False

        cow = osgDB.readNodeFile("cow.osg")

        runViewer(cow, DerivedHandler2())
        self.failUnless(True)
예제 #6
0
 def LoadFile(self,fname,do_optimize=True):
     if(os.path.exists(fname)):
         f=os.path.abspath(fname)
     else:
         if(os.path.exists(os.path.join(self.basepath,fname))):
             f=os.path.join(self.basepath,fname)
         else:
             print "WARNING!!!! file -->",fname,"<- not found"
             return None
     if(self.basepath==""):
         self.basepath=os.path.basename(os.path.abspath(f))
     else:
         if(self.basepath != os.path.basename(os.path.abspath(f))):
             print "WARNING!!! loading ->",f," outside of basepath ->",self.basepath
             
         
     if(self.open_files.has_key(f)):
         node=self.open_files[f]
     else:
         node=osgDB.readNodeFile(f)
         if(node):
             if(do_optimize):
                 if(self.optim):
                     self.optim.optimize(node,self.optimize_flags)
             self.open_files[f]=node
     return node
    def __init__(self,parent,id):
        style = wx.WANTS_CHARS | wx.FULL_REPAINT_ON_RESIZE 
        wx.glcanvas.GLCanvas.__init__(self, parent, id, wx.DefaultPosition, wx.DefaultSize, style )

        # --- Timer ---------------------------------
        self.timer = wx.Timer(self,-1)
        self.timer.Start(1) 

        # --- Viewer ---------------------------------
        self.viewer = osgViewer.Viewer()
        self.viewer.addEventHandler(osgViewer.StatsHandler())

        self.gw = None
        self.gw = self.viewer.setUpViewerAsEmbeddedInWindow(0,0,800,600)
        print self.gw

        self.viewer.setThreadingModel(osgViewer.ViewerBase.SingleThreaded)
        self.viewer.setCameraManipulator(osgGA.TrackballManipulator())

        ss = self.viewer.getCamera().getOrCreateStateSet()
        self.viewer.addEventHandler( osgGA.StateSetManipulator(ss) )

        loadedModel = osgDB.readNodeFile("cow.osg")
        self.viewer.setSceneData(loadedModel)

        # --- Bindings ---------------------------------
        self.Bind(wx.EVT_TIMER,             self.onTimer, id=self.timer.GetId() )
        self.Bind(wx.EVT_ERASE_BACKGROUND,  self.onEraseBackground)
        self.Bind(wx.EVT_PAINT,             self.onPaint)
        self.Bind(wx.EVT_SIZE,              self.onSize)
        self.Bind(wx.EVT_KEY_DOWN,          self.onKeyDown)
        self.Bind(wx.EVT_KEY_UP,            self.onKeyUp)
        self.Bind(wx.EVT_MOUSE_EVENTS,      self.onMouse)
예제 #8
0
 def addUrl(self,url,name=""):
     print "addurl ",url
     if(".py"==os.path.splitext(url)[1]):
         print "processing python file -->",url
         d={}
         d['__file__']=os.path.abspath(url)
         try:
             execfile(d['__file__'],globals(),d)
         except:
             print "some errors while executing -->",url
         if(d.has_key('loaded_node')):
             n=d['loaded_node']
         else:
             print "file -->",url,"<-- has not set the variable >>loaded_node<<"
             n=None
     else:
         n = osgDB.readNodeFile(url)
     if(n):
         self.grpnode.addChild(n,True)
         ind=self.grpnode.getChildIndex(n)
         if(name==""): 
             if(n.getName()):
                 key=n.getName()
                 count = 0
                 while(self.components.has_key(key)):
                     key=key + "_" + str(count)
                     count = count +1                        
             else:
                 key=url
         else : key=name
         self.components[key]=(n,ind,url)
         print "added key-->",key
         return key
     else:
         return ""
예제 #9
0
def main():

   # use an ArgumentParser object to manage the program arguments.
    #arguments = osg.ArgumentParser()

    #construct the viewer.
    viewer = osgViewer.Viewer()

    #need to use singlethreaded mode 
    viewer.setThreadingModel(viewer.SingleThreaded)
   
    # add the stats
    viewer.addEventHandler (osgViewer.StatsHandler())

    # add the record camera path handler
    viewer.addEventHandler(osgViewer.RecordCameraPathHandler())

    #add the threading handler
    viewer.addEventHandler(osgViewer.ThreadingHandler())

    #if user request help write it out to cout.
    #if (arguments.read("-h") or arguments.read("--help")):
    #   arguments.getApplicationUsage().write(sys.stdout)
    #   return 1

    tex_width = 1024;
    tex_height = 512;
    samples = 0;
    colorSamples = 0;

    renderImplementation = osg.Camera.FRAME_BUFFER_OBJECT

    useImage = False;
    useTextureRectangle = False;
    useHDR = False;

    # if not loaded assume no arguments passed in, try use default mode instead.
    loadedModel = osgDB.readNodeFile("cessna.osg")

    # create a transform to spin the model.
    loadedModelTransform = osg.MatrixTransform()
    loadedModelTransform.addChild(loadedModel)

    nc = osg.AnimationPathCallback(osg.Vec3d(loadedModelTransform.getBound().center()),osg.Vec3d(0.0,0.0,1.0),osg.inDegrees(45.0))
    loadedModelTransform.setUpdateCallback(nc);
    
    rootNode = osg.Group()
    rootNode.addChild(createPreRenderSubGraph(loadedModelTransform,\
                                                                            tex_width,tex_height, \
                                                                            renderImplementation, \
                                                                            useImage, useTextureRectangle, \
                                                                            useHDR, samples, colorSamples))
    
    osgDB.writeNodeFile(rootNode, "test.ive")

    # add model to the viewer.
    viewer.setSceneData( rootNode );
 
    viewer.run()
예제 #10
0
def plant_on_tiles(log_file,tile_dir,out_dir):
    forest = TreeGeometry(30000)
    cur_tile = ""
    log_reader = csv.DictReader(open(log_file, "rb"))
    for row in log_reader:
        if("" == cur_tile):
            cur_tile = row['Nome_Tile']
            n = osgDB.readNodeFile(os.path.join(tile_dir,cur_tile))
예제 #11
0
 def osgViewerAndCow(self,  testStateSet):
     print "-"*40
     print "Testing osgViewer with cow.osg"
     cow = osgDB.readNodeFile("cow.osg")
     if (testStateSet):
         print "Will disable texturing"
         s = cow.stateSet
         s.setTextureMode(0, osg.GL_TEXTURE_2D, osg.StateAttribute.OFF + osg.StateAttribute.OVERRIDE)
     runViewer(cow)
     self.failUnless(True)
예제 #12
0
    def __init__( self, threadingModel = osgViewer.ViewerBase.SingleThreaded ):

        self.viewer = osgViewer.CompositeViewer( )
        self.viewer.threadingModel = threadingModel 
        
        self._timer = QTimer()

        camera1 = self.createCamera(0,0,100,100)
        model1 = osgDB.readNodeFile("cow.osgt")
        widget1 = self.addViewWidget( camera1, model1 )

        camera2 = self.createCamera(0,0,100,100)
        model2 = osgDB.readNodeFile("glider.osgt")
        widget2 = self.addViewWidget( camera2, model2 )

        camera3 = self.createCamera(0,0,100,100)
        model3 = osgDB.readNodeFile("axes.osgt")
        widget3 = self.addViewWidget( camera3, model3 )

        camera4 = self.createCamera(0,0,100,100)
        model4 = osgDB.readNodeFile("fountain.osgt")
        widget4 = self.addViewWidget( camera4, model4 )

        camera5 = self.createCamera(900,100,320,240,"Popup Window", True)
        model5 = osgDB.readNodeFile("dumptruck.osgt")
        popupWidget = self.addViewWidget( camera5, model5 )
        popupWidget.show()

        grid = QGridLayout()
        grid.addWidget( widget1, 0,0)
        grid.addWidget( widget2, 0,1)
        grid.addWidget( widget3, 1,0)
        grid.addWidget( widget4, 1,1)
        self.setLayout( grid )

        # figure this out later
        #self.connect( self._timer, SIGNAL("timeout()"), self, )
        self._timer.start( 10 )
예제 #13
0
    def test_009_osgViewerAndOverriddenNodeCallback(self):
        print "-"*40
        print "Will add a trivial CullCallback to the model - since traverse() is called the model should still be rendered."
        class DerivedCallback(osg.NodeCallback):
            def call(self, node, nv):
                print "python callback"
                self.traverse(node, nv)

        cow = osgDB.readNodeFile("cow.osg")
        cb = DerivedCallback()
        cow.setCullCallback(cb)

        runViewer(cow)
        self.failUnless(True)
예제 #14
0
    def __init__(self,parent,id):
        style = wx.WANTS_CHARS | wx.FULL_REPAINT_ON_RESIZE 
        wx.glcanvas.GLCanvas.__init__(self, parent, id, wx.DefaultPosition, wx.DefaultSize, style )

        # --- Timer ---------------------------------
        self.timer = wx.Timer(self,-1)
        self.timer.Start(1) 

        # --- Viewer ---------------------------------
        self.viewer = osgViewer.Viewer()
        self.viewer.addEventHandler(osgViewer.StatsHandler())

        self.gw = None
        self.gw = self.viewer.setUpViewerAsEmbeddedInWindow(0,0,800,600)
        #print self.gw

        self.manipulator = osgGA.TrackballManipulator()
        
        self.viewer.setThreadingModel(osgViewer.ViewerBase.SingleThreaded)
        self.viewer.setCameraManipulator(self.manipulator)

        ss = self.viewer.getCamera().getOrCreateStateSet()
        self.viewer.addEventHandler( osgGA.StateSetManipulator(ss) )


        self.root = osg.Group()
        self.viewer.setSceneData(self.root)


        (dir,scriptname) = os.path.split(os.path.abspath(os.path.realpath( __file__ )))
        print dir


        self.cow = osgDB.readNodeFile(os.path.join(dir,'teapot.ive'))
        #self.cow = osgDB.readNodeFile("P:\\devel\\dowloads\\collada\\data\\Dining Room\\diningroomC.dae")
        #self.cow = osgDB.readNodeFile("http://3d.cineca.it/storage/osg4web/htdocs/virtual_data/projects/6/terreni/romano/vrome_final_02/noveg.ive")
        if not self.cow:
            print "could not find any cow --- please set the OSG_FILE_PATH env var"
            self.root.addChild( self.cow )

        # --- Bindings ---------------------------------
        self.Bind(wx.EVT_TIMER,             self.onTimer, id=self.timer.GetId() )
        self.Bind(wx.EVT_ERASE_BACKGROUND,  self.onEraseBackground)
        self.Bind(wx.EVT_PAINT,             self.onPaint)
        self.Bind(wx.EVT_SIZE,              self.onSize)
        self.Bind(wx.EVT_KEY_DOWN,          self.onKeyDown)
        self.Bind(wx.EVT_KEY_UP,            self.onKeyUp)
        self.Bind(wx.EVT_MOUSE_EVENTS,      self.onMouse)
    def test_000_segfaultOnShutdown(self):
        modelFile = 'cow.osg'
        #load the model
        loadedModel = osgDB.readNodeFile( modelFile )
        if loadedModel == None:
            raise Exception('Loading model file failed')
        
        root = osg.Group()
        root.addChild(loadedModel)
        #create the viewer, set the scene and run
        viewer = osgViewer.Viewer()
        viewer.setUpViewInWindow(50, 50, 640,480);
        viewer.setSceneData(root)

        h = DerivedHandler()
        viewer.addEventHandler(h);
        #run the viewer 
        viewer.frame()
        self._coll = CollectStdErr() #start error collection after viewer...
        self._coll.capture_output()
    def test_002_testIntersectionOnCow(self):
        """
        Setting up two linesegment tests on cow. One linesegment should hit the other should not.
        """
        model = osgDB.readNodeFile('cow.osg')
        group = osg.Group()
        group.addChild(model)

        g1 = osgUtil.IntersectorGroup()
        l1 = osgUtil.LineSegmentIntersector(osg.Vec3d(0,0,0),osg.Vec3d(100,0,0))
        g1.addIntersector(l1)
        v1 = osgUtil.IntersectionVisitor(g1)

        group.accept(v1)
        self.assert_(g1.containsIntersections())  # _____ cow should be hit _____

        g2 = osgUtil.IntersectorGroup()
        l2 = osgUtil.LineSegmentIntersector(osg.Vec3d(90,0,0),osg.Vec3d(100,0,0))
        g2.addIntersector(l2)
        v2 = osgUtil.IntersectionVisitor(g2)

        group.accept(v2)
        self.assert_(not g2.containsIntersections())  # _____ no hit ______

        isect = l1.getFirstIntersection()
        isect.drawable
        n = isect.getLocalIntersectNormal()
        p = isect.getLocalIntersectPoint()
        wn = isect.getWorldIntersectNormal()
        wp = isect.getWorldIntersectPoint()
        #isect.indexList
        lin = isect.localIntersectionNormal
        lip = isect.localIntersectionPoint
        #isect.matrix
        npath = isect.nodePath
        pi = isect.primitiveIndex
        r = isect.ratio
        #isect.ratioList
        (str(n),str(p),str(wn),str(wp))
    def test_003_testIntersectionPerformance(self):
        osgDB.Registry().setBuildKdTreesHint(osgDB.Options.BUILD_KDTREES);
#        osgDB.Registry().setBuildKdTreesHint(osgDB.Options.DO_NOT_BUILD_KDTREES);
        group = osg.Group()
        for name in ['cow.osg', 'cessna.osg', 'spaceship.osg', 'dumptruck.osg']:
            model = osgDB.readNodeFile(name)
            group.addChild(model)

        g1 = osgUtil.IntersectorGroup()
        for x in range(100):
            for y in range(100):
                lsi = osgUtil.LineSegmentIntersector(osg.Vec3d(x*0.02,y*0.02,-5),osg.Vec3d(x*0.1,y*0.1,5))
                g1.addIntersector(lsi)
        v1 = osgUtil.IntersectionVisitor(g1)
        v1.setUseKdTreeWhenAvailable(True)

        start = time.clock()
        for i in range(1):
            group.accept(v1)
        end = time.clock()
        seconds_needed = end - start
        #print 'Needed %f seconds.' % seconds_needed
        self.assert_(seconds_needed < 1.0) #without kdtree it should take 50x longer...
예제 #18
0
 def walk(self,filename,level):
     #print "walk ",filename
     if (level > self.maxlevel):
         print "MAX LEVEL ", level, " EXEEDED"
         self.handler.leaf(filename,level)
         return
     if(os.path.exists(filename)):
         tile_dir=os.path.normpath(os.path.abspath(os.path.dirname(filename)))
         if(os.path.normpath(os.path.abspath(os.path.curdir)) != tile_dir):
             print "warning: resetting tile_dir from ",os.path.normpath(os.path.abspath(os.path.curdir)), " to ",os.path.normpath(os.path.abspath(os.path.dirname(filename)))
             tile_dir=os.path.normpath(os.path.abspath(os.path.dirname(filename)))
             os.chdir(tile_dir)
         file_to_open = os.path.basename(filename)
         node_tile = osgDB.readNodeFile(file_to_open)
         ##tparse = TileParse()
         ##tparse.walk(node_tile," ")
         ##plod_list = tparse.get_paged()
         self.handler.process(node_tile,level)
         #devo fare unref, se no fa esplodere la memoria
         node_tile.unref()
         child_list = self.handler.to_walk()
         if(child_list.__len__()):
             for t in child_list:
                 self.walk(t,level + 1)
             ##for t in plod_list.keys():
             ##    bs = plod_list[t]['trasf'].getBound()
             ##    bb = plod_list[t]['bbox']
             ##    print t, " -->",plod_list[t]['filename']," ",bb.corner(0).x()," ",bb.corner(0).y()," ",bb.corner(7).x()," ",bb.corner(7).y()
             ##    self.walk(plod_list[t]['filename'],level + 1)
                 os.chdir(tile_dir)
                 #print gc.get_count()
         else:
             self.handler.leaf(filename,level)
         
     else:
         print "missed file ",filename, " in ", os.path.normpath(os.path.abspath(os.path.curdir))
예제 #19
0
def main(argv):
    # use an ArgumentParser object to manage the program arguments.
    viewer = osgViewer.Viewer()
#    viewer.setThreadingModel(osgViewer.Viewer.SingleThreaded)

    # read the scene from the list of file specified commandline args.
    loadedModel = osgDB.readNodeFile("cessna.osg")
    if loadedModel == None:
        raise Exception('Could not load model file (is OSG_FILE_PATH set and correct?)')

    # create a transform to spin the model.
    loadedModelTransform = osg.MatrixTransform()
    loadedModelTransform.addChild(loadedModel)

    print loadedModelTransform.getBound()._center
#todo:    nc = osg.AnimationPathCallback(loadedModelTransform.getBound()._center,osg.Vec3(0.0,0.0,1.0),osg.inDegrees(45.0));
#    loadedModelTransform.setUpdateCallback(nc)

    rootNode = osg.Group()
    rootNode.stateSet.dataVariance = osg.Object.DYNAMIC
    rootNode.addChild(createMirroredScene(loadedModelTransform))

    viewer.addEventHandler(osgViewer.HelpHandler())
    viewer.addEventHandler(osgViewer.StatsHandler())
    viewer.addEventHandler(osgGA.StateSetManipulator(rootNode.stateSet))
    viewer.setSceneData(rootNode)
    print "set scene data"

    #hint to tell viewer to request stencil buffer when setting up windows
    osg.DisplaySettings().setMinimumNumStencilBits(8)
#    osg.DisplaySettings.instance().setMinimumNumStencilBits(8);

    osgDB.writeNodeFile(rootNode, "test_reflect.osg");

    viewer.run() #we need run, because that sets up a trackballmanipulator and so we have the correct "look" into the scene.
    return 0
예제 #20
0
#!/usr/bin/env python

# the order of import is important here
import osg
import osgDB
import osgGA
import osgViewer

from math import pi

model = osgDB.readNodeFile("cessna.osg")
model2 = osgDB.readNodeFile("cessnafire.osg")

transform1 = osg.PositionAttitudeTransform()
transform1.position = osg.Vec3d( -25, 0, 0 ) 
transform1.attitude = osg.Quat( pi, osg.Vec3d( 0,0,1 ) )
transform1.addChild( model )

switch = osg.Switch()
switch.addChild( model )
switch.addChild( model2 )
switch[0] = False
switch[1] = True

transform2 = osg.PositionAttitudeTransform()
transform2.position =  osg.Vec3d( 25, 0, 0 ) 
transform2.addChild( switch )

viewer = osgViewer.Viewer()

root = osg.Group()
예제 #21
0
viewer = osgViewer.Viewer()

# needed for Python
osgDB.setLibraryFilePathList(sys.path)

# create a viewer
viewer = osgViewer.Viewer()

# configure
viewer.setThreadingModel(osgViewer.Viewer.SingleThreaded)

# scene
scene = osg.Group()

# open a file
cow = osgDB.readNodeFile('cow.osg')

# add to the scene
viewer.setSceneData(scene)

# create a tracker - in HITLabNZ we use this one
tracker = osgVRPN.Tracker("DTrack@HITLVSTRACKER")

# create a ref ptr for the tracker
tracker_ref = osgVRPN.TrackerRef()

# add the tracker
tracker_ref = tracker

# create a transform
trkXform = osgVRPN.TrackerTransform()
예제 #22
0
    def __init__(self):
        super(InfoVisitor, self).__init__()
        self.level = 0
        self.traversalMode = osg.NodeVisitor.TRAVERSE_ALL_CHILDREN

    def apply_Node( self, node ):
        print self.level * 2 * " ", node.className
        self.level += 1
        super(InfoVisitor, self).traverse( node )
        self.level -= 1

    def apply_Geode( self, node ):
        print self.level * 2 * " ", node.className
        self.level += 1
        # iterate over drawables
        for n in node.getDrawableList() :
            print self.level * 2 * " ", n.className
        super(InfoVisitor, self).traverse( node )
        self.level -= 1
    
root = osgDB.readNodeFile("cessna.osg")

infoVisitor = InfoVisitor()
root.accept( infoVisitor )

viewer = osgViewer.Viewer()

viewer.setSceneData( root )

viewer.run()
예제 #23
0
    def build_vegetation_tiles(self,filename,terrain_dir="",out_dir=""):
        def write_tile(tile_name,node_tile,trasf,veg,out_dir,suffix):
            #write previous tile
            ##print "writing tile ",prev," num trees ",tile_tree_count
            for t in trasf.keys():
                ##trasf[t].removeChild(0)
                trasf[t].addChild(veg[t].get_geom())
            outfile = os.path.join(out_dir,os.path.splitext(tile_name)[0]+suffix)
            osgDB.writeNodeFile(node_tile,outfile)
            #devo fare unref, se no fa esplodere la memoria
            node_tile.unref()

        ######      parse Andrea log files and plant trees in tiles
        file_to_open = filename
        if(os.path.isabs(filename)):
            if(terrain_dir == ""):
                terrain_dir = os.path.dirname(os.path.normpath(filename))
            print "setting terrain_dir to -->",terrain_dir
        else:
            if(terrain_dir == ""):
                terrain_dir = self.base_data_dir
            file_to_open = os.path.join(terrain_dir,filename)
        if(out_dir == ""):
            out_dir = terrain_dir
        if(os.path.exists(file_to_open)):
            print "opening ",file_to_open
            os.chdir(out_dir)
            self.mosaic.save("tmp.png")
            write_top_group_texture("tmp.png","romano_L0_X0_Y0_subtile.ive","tmp.osg")
            os.system("osgconv --compressed tmp.osg tmp.ive")
            tree_log_reader = csv.DictReader(open(file_to_open, "rb"))
            prev = ""
            for row in tree_log_reader :
                tree_id = int(row['ID_Pianta'])
                tile_name = row['Nome_Tile']
                id_foglia = int(row['Numero_Tile_Figlia'])
                x = float(row['x'])
                y = float(row['y'])
                z = float(row['z'])
                if(prev != tile_name):
                    if(prev != ""):
                        #write previous tile
                        print "writing tile ",prev," num trees ",tile_tree_count
                        #write_tile(prev,node_tile,trasf,veg,out_dir,"_newveg.ive")
                        write_tile(prev,node_tile,trasf,veg,out_dir,".ive")
##                        for t in trasf.keys():
##                            trasf[t].removeChild(0)
##                            trasf[t].addChild(veg[t].get_geom())
##                        outfile = os.path.join(out_dir,os.path.splitext(prev)[0]+"_newveg.ive")
##                        osgDB.writeNodeFile(node_tile,outfile)
##                        #devo fare unref, se no fa esplodere la memoria
##                        node_tile.unref()

                    full_tile_name = os.path.join(terrain_dir,tile_name)
                    if(os.path.exists(full_tile_name)):
                        tile_tree_count = 0
                        veg = dict()
                        trasf = dict()
                        os.chdir(os.path.dirname(full_tile_name))
                        node_tile = osgDB.readNodeFile(os.path.basename(full_tile_name))
                        g = node_tile.asGroup()
                        for i in range(g.getNumChildren()):
                            ##print tile_name, "  ->",i
                            child = g.getChild(i)
                            if(child.className() == 'PagedLOD'):
                                p = child.asLOD().asPagedLOD()
                                for j in range(p.getNumFileNames()):
                                    if(p.getFileName(j) == ''):
                                        tt = osg.NodeToMatrixTransform(p.getChild(j))
                                    else:
                                        ##print "pagedlod -->",p.getFileName(j)
                                        #p.setFileName(j,os.path.splitext(p.getFileName(j))[0]+"_newveg.ive")
                                        p.setFileName(j,os.path.splitext(p.getFileName(j))[0]+".ive")
                            else:
                                tt = osg.NodeToMatrixTransform(child)
                            if(tt):
                                ##print tt.className()
                                gg = osg.NodeToGeode(tt.getChild(0))
                                if(gg):
                                    ##print "tile ",tile_name," matched geode ",i 
                                    veg[i] = TreeGeometry(5000)
                                    trasf[i] = tt

                    prev = tile_name

                tile_tree_count = tile_tree_count + 1
                ##print "insert tree ",tree_id," ",self.trees[int(tree_id)]['Height']
                if veg.has_key(id_foglia) :
                    #print "sono qui ",id_foglia
                    veg[id_foglia].addtree(x,y,z,10.0,self.trees[tree_id]['Height'],30.0,self.tree_types[self.tree_types_rev[self.trees[tree_id]['tree_id']]]['tex_box'])

            print "writing ultimo tile ",prev," num trees ",tile_tree_count
            #write_tile(prev,node_tile,trasf,veg,out_dir,"_newveg.ive")
            write_tile(prev,node_tile,trasf,veg,out_dir,".ive")
예제 #24
0
    import sys
    import os
    from utility import *
    from lod_visitor import FindNamePattern

    # locate the DataDir
    dir = os.getenv('DATADIR')
    if not dir:
        print 'env-var "DATADIR" not found, exiting'
        sys.exit()
    # there are good and bad data :-)
    dir = dir + 'bad\\'

    # open the test file
    filename = dir + 'f_pace_col_b.osg'
    node = osgDB.readNodeFile(filename)
    v = FindNamePattern('(.*low-GEODE)$')
    node.accept(v)

    # print results
    myroot=osg.Group()
    # open the ref file
    filename = dir + 'f_pace_col_b.obj'
    node_obj = osgDB.readNodeFile(filename)
    #myroot.addChild(node_obj)
    
    for n in v.NodesHash.keys():
        print ">",n,"<-->",v.NodesHash[n][0],"<--"
    count=0
    for name in v.names.keys():
        print "searching for -->"+name+"<--"
예제 #25
0
 def loadfiles(self,list):
     for path in list:
         print "loading-->" + path
         n = osgDB.readNodeFile(path)
         self._rootnode.addChild(n)
예제 #26
0
 def __init__(self,file): 
     self.filename = file
     self.main_n = osgDB.readNodeFile(file)
     self.splitmode = 0 #bad split
예제 #27
0
    import sys
    import os

    app = App(0)


    # locate the DataDir
    dir = os.getenv('DATADIR')
    if not dir:
        print 'env-var "DATADIR" not found, exiting'
        sys.exit()
    # there are good and bad data :-)
    dir = dir + 'bad\\'

    # open the test file
    filename = dir + 'f_pace.osg'
    node = osgDB.readNodeFile(filename)
    if not node : 
        print 'error loading', filename
        sys.exit()
    

    app.tree.AddSettings(1,'config1')
    app.tree.AddSettings(2,'config2')
    app.tree.AddFile(3,'file1')
    app.tree.AddFile(4,'file2')
    app.tree.ReadSceneGraph(node)
    
    app.MainLoop()
    
예제 #28
0
                        geode = osg.NodeToGeode(node)
                        if geode:
                            #create a wirebox and safe it, the wire box
                            #will be attached to the parental transform node
                            self.wb = createWireBox(geode)
                            self._selectedNode.addChild(self.wb)
                            self.wb.thisown = False
                            return True
            return False
        else:
            print "No Intersection Found"
        return False


#load the model
loadedModel = osgDB.readNodeFile("cow.osg")

root = osg.Group()

#create some dynamic transformation nodes
dynamicTransform1 = osg.PositionAttitudeTransform()
dynamicTransform2 = osg.PositionAttitudeTransform()
dynamicTransform3 = osg.PositionAttitudeTransform()
dynamicTransform4 = osg.PositionAttitudeTransform()

#add the loaded model to the transform nodes
dynamicTransform1.addChild(loadedModel)
dynamicTransform1.setPosition(osg.Vec3d(-10, 0, -10))
dynamicTransform2.addChild(loadedModel)
dynamicTransform2.setPosition(osg.Vec3d(-10, 0, 10))
dynamicTransform3.addChild(loadedModel)
예제 #29
0
            print n,'--->',p.hier[i]

 


#--------------------------------------------------------------------------
if __name__ == "__main__":
    
    # DataDir
    import testdata
    dir = testdata.dir

    # test ProcessDef
##    definition = dir + "fori\\f_tr.definition"
##    p = ProcessDef(definition, True,False)
##    print '--------------------------'
##    print '--------------------------'
##    print '--------------------------'
##    p.PrintHier()
    g=osg.Group()
    for tempio in ('augusto','tr','pace'):
        definition = dir + "fori\\f_"+tempio+".definition"
        print '----------------------------- processing -->',definition
        p = ProcessDef(definition, True,False)
        tempiotop = osgDB.readNodeFile( p.GetIveRoot())
        g.addChild(tempiotop)
        
    osgDB.writeNodeFile_s( g, dir + "fori\\tmp\\f_top.ive", "noTexturesInIVEFile useOriginalExternalReferences" )    
    osgDB.writeNodeFile_s( g, dir + "fori\\tmp\\f_top.osg", "noTexturesInIVEFile useOriginalExternalReferences" )    
    
    
예제 #30
0
def main():

    # use an ArgumentParser object to manage the program arguments.
    #arguments = osg.ArgumentParser()

    #construct the viewer.
    viewer = osgViewer.Viewer()

    #need to use singlethreaded mode
    viewer.setThreadingModel(viewer.SingleThreaded)

    # add the stats
    viewer.addEventHandler(osgViewer.StatsHandler())

    # add the record camera path handler
    viewer.addEventHandler(osgViewer.RecordCameraPathHandler())

    #add the threading handler
    viewer.addEventHandler(osgViewer.ThreadingHandler())

    #if user request help write it out to cout.
    #if (arguments.read("-h") or arguments.read("--help")):
    #   arguments.getApplicationUsage().write(sys.stdout)
    #   return 1

    tex_width = 1024
    tex_height = 512
    samples = 0
    colorSamples = 0

    renderImplementation = osg.Camera.FRAME_BUFFER_OBJECT

    useImage = False
    useTextureRectangle = False
    useHDR = False

    # if not loaded assume no arguments passed in, try use default mode instead.
    loadedModel = osgDB.readNodeFile("cessna.osg")

    # create a transform to spin the model.
    loadedModelTransform = osg.MatrixTransform()
    loadedModelTransform.addChild(loadedModel)

    nc = osg.AnimationPathCallback(
        osg.Vec3d(loadedModelTransform.getBound().center()),
        osg.Vec3d(0.0, 0.0, 1.0), osg.inDegrees(45.0))
    loadedModelTransform.setUpdateCallback(nc)

    rootNode = osg.Group()
    rootNode.addChild(createPreRenderSubGraph(loadedModelTransform,\
                                                                            tex_width,tex_height, \
                                                                            renderImplementation, \
                                                                            useImage, useTextureRectangle, \
                                                                            useHDR, samples, colorSamples))

    osgDB.writeNodeFile(rootNode, "test.ive")

    # add model to the viewer.
    viewer.setSceneData(rootNode)

    viewer.run()
예제 #31
0
 def load_file(self, pFileName):
     print "Opening file ", pFileName
     if self.rootnode.getNumChildren > 0:
         self.rootnode.removeChild(0)
     self.objnode = osgDB.readNodeFile(pFileName)
     self.rootnode.addChild(self.objnode)
예제 #32
0


import osg_setup
import osg
import osgDB
import osgGA
import osgViewer
import wx_osg_console
import pick_module

viewer = osgViewer.Viewer()
viewer.setThreadingModel(osgViewer.Viewer.SingleThreaded)

    #set the scene data
    #n = osgDB.readNodeFile('cow.osg')   
root = osg.Group()
#n = osgDB.readNodeFile("D:/models/demo_virtrome/piante/frassino.ive")
#n = osgDB.readNodeFile("Q:/virtualrome/web/modelli/romano/villa/prove_stanze/tmp/prove_stanze_mod.osg")
n = osgDB.readNodeFile("../../../testData/teapot.ive")
#n = osgDB.readNodeFile("Q:/vrome/web/modelli/attuale/generati/Malborghetto_attuale_osg/osg_exp_tiny_full.ive")
root.addChild(n)
viewer.setSceneData(root.__disown__())

pickhandler = pick_module.PickHandler()

viewer.addEventHandler(pickhandler.__disown__());

wx_osg_console.OpenConsole(viewer)

예제 #33
0
        mt = osg.NodeToMatrixTransform(node)        
        if mt:
            mt.setMatrix(osg.Matrixd_rotate(self._quat))
        else:            
            pot = osg.NodeToPositionAttitudeTransform(node)
            if pot:           
                pot.setAttitude(self._quat)
        
        # Increment the angle.        
        self._angle += 0.01;
        # call traverse
        self.traverse(node,nv)


#load the model
loadedModel = osgDB.readNodeFile("cow.osg")

#create a dynamic transformation node, we can use a MatrixTransform 
dynamicTransform = osg.MatrixTransform()
#or we can use a PositionAttitudeTransform: dynamic = osg.PositionAttitudeTransform()


#add the loaded model to the transform node
dynamicTransform.addChild(loadedModel)


#to prevent direct destruction you can create a variable for the callback
rotcb = RotateCB()
dynamicTransform.setUpdateCallback(rotcb.__disown__())
#or call the disown function: dynamicTransform.setUpdateCallback(RotateCB().__disown__())
예제 #34
0
    import osgDB
    import sys
    import os
    from utility import *

    # locate the DataDir
    dir = os.getenv('DATADIR')
    if not dir:
        print 'env-var "DATADIR" not found, exiting'
        sys.exit()
    # there are good and bad data :-)
    dir = dir + 'bad\\'

    # open the test file
    filename = dir + 'f_pace_mi_SIL.osg'
    node = osgDB.readNodeFile(filename)
    if not node : 
        print 'error loading', filename
        sys.exit()
#    if(node):
#        optim=osgUtil.Optimizer()
#        optim.optimize(node,osgUtil.Optimizer.FLATTEN_STATIC_TRANSFORMS)

    # test a Visitor Subclass
    print '------- testing FindNamePattern --------'
    #v = FindNamePattern('(.*)_mi_RIF')
#    v = FindNamePattern('(.*)(?:_low?|_mid?|_hig?h?)_RIF[0-9]?[0-9]?-GEODE')
    v = FindNamePattern('(.*_c_low[0-9]+)$')
    node.accept(v)

    # print results