Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r2330 - in trunk: Model/MiscObjects scenes/csafe/python scenes/csafe/src


Chronological Thread 
  • From:
  • To:
  • Subject: [Manta] r2330 - in trunk: Model/MiscObjects scenes/csafe/python scenes/csafe/src
  • Date: Wed, 24 Sep 2008 01:03:19 -0600 (MDT)

Author: brownlee
Date: Wed Sep 24 01:03:17 2008
New Revision: 2330

Modified:
   trunk/Model/MiscObjects/KeyFrameAnimation.cc
   trunk/scenes/csafe/python/Configuration.py
   trunk/scenes/csafe/python/SceneMenus.py
   trunk/scenes/csafe/python/csafe_demo.py
   trunk/scenes/csafe/src/CDTest.h
Log:
adding option to adjust volume sizing.  Also adding options for 
jitteredsampling, etc. to csafe_demo.py

Modified: trunk/Model/MiscObjects/KeyFrameAnimation.cc
==============================================================================
--- trunk/Model/MiscObjects/KeyFrameAnimation.cc        (original)
+++ trunk/Model/MiscObjects/KeyFrameAnimation.cc        Wed Sep 24 01:03:17 
2008
@@ -14,7 +14,8 @@
   as(NULL), interpolation(interpolation), spareGroup(NULL),
   currGroup(NULL), currTime(-1), updateToCurrTime(false),
   paused(false), barrier("keyframe animation barrier"), duration(1),
-  lockedFrames(false), startFrame(0), endFrame(0), framesClipped(false),
+  lockedFrames(false), startFrame(0), endFrame(0), numFrames(0), 
+  framesClipped(false),
   loop(true), repeatLastFrame(0.0), repeating(false), forceUpdate(false)
 {
 }
@@ -119,7 +120,11 @@
           if (interpolation == linear) {
             const int fps = 30;
             float oldTime = currTime;
-            currTime = wrapTime(currTime + numFrames/(duration*fps));
+            float dur = duration*fps;
+            if (dur == 0)
+              currTime = 0;
+            else
+              currTime = wrapTime(currTime + numFrames/(duration*fps));
             differentFrame = isDifferentFrame(oldTime);
           }
           else if (interpolation == truncate) {
@@ -128,8 +133,13 @@
             //next keyframe. To avoid that, we have to figure out at
             //what time the next frame would have occured and then
             //work backwards.
-            float nextFrame = currTime/duration*numFrames+1;
-            currTime = nextFrame/numFrames*duration;
+            float nextFrame = 0;
+            if (duration > 0.0)
+              nextFrame = currTime/duration*numFrames+1;
+            if (numFrames > 0)
+              currTime = nextFrame/numFrames*duration;
+            else 
+              currTime = 0;
             differentFrame = numFrames > 1;
             currTime = wrapTime(currTime);
           }

Modified: trunk/scenes/csafe/python/Configuration.py
==============================================================================
--- trunk/scenes/csafe/python/Configuration.py  (original)
+++ trunk/scenes/csafe/python/Configuration.py  Wed Sep 24 01:03:17 2008
@@ -39,6 +39,12 @@
        f.write(str(scene.radius)+'\n')
        f.write(str(int(scene.cidx))+'\n')
        f.write(str(scene.numThreads)+'\n')
+        for j in range(3):
+          f.write(str(scene.volumeMinBound[j])+" ")
+        f.write("\n")
+        for j in range(3):
+          f.write(str(scene.volumeMaxBound[j])+" ")
+        f.write("\n")
        f.write(str(len(scene.nrrdFiles2))+'\n')
        for i in range(len(scene.nrrdFiles2)):
                f.write(scene.nrrdFiles2[i]+'\n')
@@ -144,6 +150,18 @@
                        i+=1
                        scene.numThreads = int(float(lines[i].strip()))
                        scene.engine.changeNumWorkers(scene.numThreads)
+                        i+=1
+                        minBound = lines[i].split()
+                        i+=1
+                        maxBound = lines[i].split()
+                        for j in range(3):
+                          scene.volumeMinBound[j] = float(minBound[j])
+                          scene.volumeMaxBound[j] = float(maxBound[j])
+                        minVector = Vector(scene.volumeMinBound[0], 
scene.volumeMinBound[1],
+                                           scene.volumeMinBound[2])
+                        maxVector = Vector(scene.volumeMaxBound[0], 
scene.volumeMaxBound[1],
+                                           scene.volumeMaxBound[2])
+                        scene.test.setVolumeMinMaxBounds(minVector, 
maxVector)
                        print "setting numWorkers to: " + 
str(scene.numThreads)
                        i+=1
                        numVol = int(float(lines[i].strip()))
@@ -177,7 +195,8 @@
 
         ###read in new values
         lines = f.readlines()
-        for i in range(len(lines)-1):
+        i = 0
+        while i in range(len(lines)-1):
                vol = lines[i].strip()
                 while (vol == "" and i < len(lines)-1):
                    i +=1
@@ -189,8 +208,10 @@
                    sphere = lines[i].strip()
                 if (sphere == "" or vol == ""):
                    return
+               print "volume file: " + str(vol) + " sphere file: " + 
str(sphere)
                scene.nrrdFiles.append(sphere)
                scene.nrrdFiles2.append(vol)
+                i += 1
 
 def WriteNRRDList(scene, filename):
        f = open(filename, 'w')

Modified: trunk/scenes/csafe/python/SceneMenus.py
==============================================================================
--- trunk/scenes/csafe/python/SceneMenus.py     (original)
+++ trunk/scenes/csafe/python/SceneMenus.py     Wed Sep 24 01:03:17 2008
@@ -204,12 +204,14 @@
         
 class VolPositionSizeFrame(wx.Frame):
     def __init__(self, parent, id, title, scene):
-       wx.Frame.__init__(self, parent, id, title, None, (700, 600))
+       wx.Frame.__init__(self, parent, id, title, None)
        self.scene = scene
        panel = wx.Panel(self,-1)
        sizer = wx.BoxSizer(wx.VERTICAL)
        hSizer = wx.BoxSizer(wx.HORIZONTAL)
-       hSizer.Add(wx.StaticText(self,-1,"volume Position: "))
+       hSizer.Add(wx.StaticText(panel,-1,"Volume Minimum Bound: "))
+       min = self.scene.volumeMinBound
+       max = self.scene.volumeMaxBound
        size = [ scene.volumeMaxBound[0]-scene.volumeMinBound[0],
                scene.volumeMaxBound[1]-scene.volumeMinBound[1],
                scene.volumeMaxBound[2]-scene.volumeMinBound[2] ]
@@ -217,25 +219,48 @@
                    scene.volumeMinBound[1] + size[1]/2.0,
                    scene.volumeMinBound[2] + size[2]/2.0 ]
                
-       self.minXSP = self.addSpinner(self,position[0])
-       self.minYSP = self.addSpinner(self,position[1])
-       self.minZSP = self.addSpinner(self,position[2])
+       self.minXSP = self.addSpinner(panel,min[0])
+       self.minYSP = self.addSpinner(panel,min[1])
+       self.minZSP = self.addSpinner(panel,min[2])
        hSizer.Add(self.minXSP,0,wx.ALL,3)
        hSizer.Add(self.minYSP,0,wx.ALL,3)
        hSizer.Add(self.minZSP,0,wx.ALL,3)
        sizer.Add(hSizer, 0, wx.ALL|wx.ALIGN_LEFT, 10)
 
        hSizer2 = wx.BoxSizer(wx.HORIZONTAL)
-       hSizer2.Add(wx.StaticText(self,-1,"volume Size: "))
-       self.maxXSP = self.addSpinner(self,size[0])
-       self.maxYSP = self.addSpinner(self,size[1])
-       self.maxZSP = self.addSpinner(self,size[2])
+       hSizer2.Add(wx.StaticText(panel,-1,"Volume Maximum Bound: "))
+       self.maxXSP = self.addSpinner(panel,max[0])
+       self.maxYSP = self.addSpinner(panel,max[1])
+       self.maxZSP = self.addSpinner(panel,max[2])
        hSizer2.Add(self.maxXSP,0,wx.ALL,3)
        hSizer2.Add(self.maxYSP,0,wx.ALL,3)
        hSizer2.Add(self.maxZSP,0,wx.ALL,3)
        sizer.Add(hSizer2,0, wx.ALL|wx.ALIGN_LEFT, 10)
 
+       hSizer3 = wx.BoxSizer(wx.HORIZONTAL)
+       hSizer3.Add(wx.StaticText(panel,-1,"Volume Position: "))
+       self.posXSP = self.addSpinner(panel,position[0])
+       self.posYSP = self.addSpinner(panel,position[1])
+       self.posZSP = self.addSpinner(panel,position[2])
+       hSizer3.Add(self.posXSP,0,wx.ALL,3)
+       hSizer3.Add(self.posYSP,0,wx.ALL,3)
+       hSizer3.Add(self.posZSP,0,wx.ALL,3)
+       sizer.Add(hSizer3,0, wx.ALL|wx.ALIGN_LEFT, 10)
+
+       hSizer4 = wx.BoxSizer(wx.HORIZONTAL)
+       hSizer4.Add(wx.StaticText(panel,-1,"Volume Size: "))
+       self.sizeXSP = self.addSpinner(panel,size[0])
+       self.sizeYSP = self.addSpinner(panel,size[1])
+       self.sizeZSP = self.addSpinner(panel,size[2])
+       hSizer4.Add(self.sizeXSP,0,wx.ALL,3)
+       hSizer4.Add(self.sizeYSP,0,wx.ALL,3)
+       hSizer4.Add(self.sizeZSP,0,wx.ALL,3)
+       sizer.Add(hSizer4,0, wx.ALL|wx.ALIGN_LEFT, 10)
+
+       sizer.Layout()
        panel.SetSizer(sizer)
+       panel.Refresh()
+       self.Refresh()
        
 
 
@@ -249,15 +274,58 @@
         return floatspin
 
     def OnFloatSpin(self, event):
-        self.scene.minX = self.minXSP.GetValue()
-        self.scene.minY = self.minYSP.GetValue()
-        self.scene.minZ = self.minZSP.GetValue()
-        self.scene.maxX = self.maxXSP.GetValue()
-        self.scene.maxY = self.maxYSP.GetValue()
-        self.scene.maxZ = self.maxZSP.GetValue()
-        min = Vector(float(self.scene.minX), float(self.scene.minY), 
float(self.scene.minZ))
-        max = Vector(float(self.scene.maxX), float(self.scene.maxY), 
float(self.scene.maxZ))
-        self.scene.test.setVolumePositionSize(min,max)
+        if (event.GetId() == self.minXSP.GetId() or event.GetId() == 
self.maxXSP.GetId()
+            or event.GetId() == self.minYSP.GetId() or event.GetId() == 
self.maxYSP.GetId()
+            or event.GetId() == self.minZSP.GetId() or event.GetId() == 
self.maxZSP.GetId() ):
+          minX = self.minXSP.GetValue()
+          minY = self.minYSP.GetValue()
+          minZ = self.minZSP.GetValue()
+          maxX = self.maxXSP.GetValue()
+          maxY = self.maxYSP.GetValue()
+          maxZ = self.maxZSP.GetValue()
+          self.scene.volumeMinBound = [minX, minY, minZ]
+          self.scene.volumeMaxBound = [maxX, maxY, maxZ]
+
+          self.posXSP.SetValue(minX + (maxX-minX)/2.0)
+          self.posYSP.SetValue(minY + (maxY-minY)/2.0)
+          self.posZSP.SetValue(minZ + (maxZ-minZ)/2.0)
+
+          self.sizeXSP.SetValue(maxX-minX)
+          self.sizeYSP.SetValue(maxY-minY)
+          self.sizeZSP.SetValue(maxZ-minZ)
+          
+        else :
+          posX = self.posXSP.GetValue()
+          posY = self.posYSP.GetValue()
+          posZ = self.posZSP.GetValue()
+          sizeX = self.sizeXSP.GetValue()
+          sizeY = self.sizeYSP.GetValue()
+          sizeZ = self.sizeZSP.GetValue()
+
+          minX = posX - sizeX/2.0
+          maxX = posX + sizeX/2.0
+          minY = posY - sizeY/2.0
+          maxY = posY + sizeY/2.0
+          minZ = posZ - sizeZ/2.0
+          maxZ = posZ + sizeZ/2.0
+          self.scene.volumeMinBound = [minX, minY, minZ]
+          self.scene.volumeMaxBound = [maxX, maxY, maxZ]
+          self.minXSP.SetValue(minX)
+          self.minYSP.SetValue(minY)
+          self.minZSP.SetValue(minZ)
+          self.maxXSP.SetValue(maxX)
+          self.maxYSP.SetValue(maxY)
+          self.maxZSP.SetValue(maxZ)
+
+        min = self.scene.volumeMinBound
+        max = self.scene.volumeMaxBound
+        pos = Vector(float(min[0] + (max[0] - min[0])/2.0),
+                     float(min[1] + (max[1] - min[1])/2.0),
+                     float(min[2] + (max[2] - min[2])/2.0))
+        size = Vector(float(max[0] - min[0]),
+                     float(max[1] - min[1]),
+                     float(max[2] - min[2]))
+        self.scene.test.setVolumePositionSize(pos, size)
 
 
 

Modified: trunk/scenes/csafe/python/csafe_demo.py
==============================================================================
--- trunk/scenes/csafe/python/csafe_demo.py     (original)
+++ trunk/scenes/csafe/python/csafe_demo.py     Wed Sep 24 01:03:17 2008
@@ -408,6 +408,8 @@
 
         minBound = Vector(self.scene.volumeMinBound[0], 
self.scene.volumeMinBound[1], self.scene.volumeMinBound[2])
         maxBound = Vector(self.scene.volumeMaxBound[0], 
self.scene.volumeMaxBound[1], self.scene.volumeMaxBound[2])
+        print "setting min volume bound to : " + 
str(self.scene.volumeMinBound)+ "\n"
+        print "LLLAAAAAALLLLL\nLAAAAAAALLLL\nLLLLLAAAAAAALLLLL\n"
        self.test = manta_new(CDTest(scene, engine, minBound, maxBound));
         self.test.initScene();
        self.test.setVolCMap(self.volCMap);
@@ -565,12 +567,18 @@
        
 class Setup(wx.Object):
     def __init__(self):
-        self.num_workers = 1
+        self.num_workers = None
         self.cfg = ""
         self.nrrdlist = ""
         self.generate = False
         self.uda = ""
         self.udaVol = ""
+        self.imagetype = None
+        self.shadows = None
+        self.imagetraverser = None
+        self.loadbalancer = None
+        self.pixelsampler = None
+        self.renderer = None
         
 setup  = Setup()
 
@@ -591,46 +599,172 @@
     
     # Parse command line options. Note these have to conform to getopt
     # So -np would be parsed as -n <space> p. Use --np=<threads> instead.
-    print sys.argv
+#    print sys.argv
     
         # Add additional command line args here.
+#    try:
+#        args = wxManta.parseCommandLine(sys.argv)
+#        for i in range(len(args)):
+#            print args[i]
+#            if (args[i][0] == "np"):
+#                setup.num_workers = int(float(args[i][1][0]))
+#                print "setting np to: " + str(setup.num_workers)
+#            elif (args[i][0] == "cfg"):
+#                setup.cfg = args[i][1][0]
+#                print "loading configuraiton file: " + str(setup.cfg)
+#            elif (args[i][0] == "nrrdlist"):
+#                setup.nrrdlist = args[i][1][0]
+#                print "loading nrrdlist: " + str(setup.nrrdlist)
+#            elif (args[i][0] == "uda"):
+#                setup.uda = args[i][1][0]
+#                print "loading uda: " + str(setup.uda)
+#                i += 1
+#                setup.udaVol = args[i][1][0]
+#            elif (args[i][0] == "g"):
+#                setup.generate = True
+#                print "generating scene on startup"
+#            else:
+#                print "unable to understand command: " + str(args[i])
+#                usage()
+#    except :
+#        print "Inorrect commandline usage"
+#        usage()
+
+    # Parse command line options. Note these have to conform to getopt
+    # So -np would be parsed as -n <space> p. Use --np=<threads> instead.
     try:
-        args = wxManta.parseCommandLine(sys.argv)
-        for i in range(len(args)):
-            print args[i]
-            if (args[i][0] == "np"):
-                setup.num_workers = int(float(args[i][1][0]))
-                print "setting np to: " + str(setup.num_workers)
-            elif (args[i][0] == "cfg"):
-                setup.cfg = args[i][1][0]
-                print "loading configuraiton file: " + str(setup.cfg)
-            elif (args[i][0] == "nrrdlist"):
-                setup.nrrdlist = args[i][1][0]
-                print "loading nrrdlist: " + str(setup.nrrdlist)
-            elif (args[i][0] == "uda"):
-                setup.uda = args[i][1][0]
-                print "loading uda: " + str(setup.uda)
-                i += 1
-                setup.udaVol = args[i][1][0]
-            elif (args[i][0] == "g"):
-                setup.generate = True
-                print "generating scene on startup"
-            else:
-                print "unable to understand command: " + str(args[i])
-                usage()
-    except :
-        print "Inorrect commandline usage"
+        opts, args = getopt.getopt(sys.argv[1:],
+                                   "n:s:r:",
+                                   ["np=",
+                                    "scene=",
+                                    "imagetype=",
+                                    "shadows=",
+                                    "imagetraverser=",
+                                    "loadbalancer=",
+                                    "pixelsampler=",
+                                    "renderer=",
+                                    "res=",
+                                    "cfg=",
+                                    "nrrdlist=",
+                                    "g"
+                                    ] )
+
+    except getopt.GetoptError:
         usage()
+        sys.exit(2)
+
+    for o, a in opts:
+        if o in ("-n", "--np"):
+            if (a == "nprocs"):
+                setup.num_workers = Thread.numProcessors(),
+            else:
+                try:
+                    setup.num_workers = int(a)
+                except ValueError:
+                    usage()
+                    sys.exit(2)
+
+        elif o in ("--imagetype"):
+            setup.imagetype = str(a)
             
+        elif o in ("--shadows"):
+            setup.shadows = str(a)            
+
+        elif o in ("--imagetraverser"):
+            setup.imagetraverser = str(a)
+
+        elif o in ("--loadbalancer"):
+            setup.loadbalancer = str(a)
+
+        elif o in ("--imagetraverser"):
+            setup.imagetraverser = str(a)
+
+        elif o in ("--pixelsampler"):
+            setup.pixelsampler = str(a)            
+
+        elif o in ("--renderer"):
+            setup.renderer = str(a)
+
+        elif o in ("-r", "--res"):
+            m = re.match("^(\d+)x(\d+)$", a );
+            if (m):
+                setup.size = (int(m.group(1)), int(m.group(2)))
+            else:
+                print "Bad resolution string"
+                usage()
+                sys.exit(2)
+        elif o in ("-h", "--help"):
+            usage();
+            sys.exit(0)
+
+        # Add additional command line args here.
+        elif o in ("--cfg"):
+            setup.cfg = str(a)
+        elif o in ("--nrrdlist"):
+            setup.nrrdlist = str(a)
+        elif o in ("--uda"):
+            setup.uda = str(a.split()[0])
+            setup.udaVol = str(a.split()[1])
+        elif o in ("--g"):
+            setup.generate = True
+        else:
+            print "unable to understand command: " + str(o)
+            usage()
         
     
###########################################################################
     # Create the application.
+    if (setup.num_workers == None):
+      setup.num_workers = 4
     app = wxManta.MantaApp( initialize_scene,
                             setup.num_workers, renderSize=(512,512), 
begin_rendering=False)
 
+    factory = Factory(app.frame.engine, True)
+
+    if (setup.imagetype):
+        if (not factory.selectImageType( setup.imagetype )):
+            print "Invalid image type, choices:"
+            for key in factory.listImageTypes():
+                print key
+            sys.exit(2)
+        
+    if (setup.shadows):
+        if (not factory.selectShadowAlgorithm( setup.shadows )):
+            print "Invalid shadow algorithm, choices:"
+            for key in factory.listShadowAlgorithms():
+                print key
+            sys.exit(2)
+    
+    if (setup.imagetraverser):
+        if (not factory.selectImageTraverser( setup.imagetraverser )):
+            print "Invalid image traverser, choices:"
+            for key in factory.listImageTraversers():
+                print key
+            sys.exit(2)
+            
+    if (setup.loadbalancer):
+        if (not factory.selectLoadBalancer( setup.loadbalancer )):
+            print "Invalid load balancer, choices:"
+            for key in factory.listLoadBalancers():
+                print key
+            sys.exit(2)
+            
+    if (setup.pixelsampler):
+        if (not factory.selectPixelSampler( setup.pixelsampler )):
+            print "Invalid pixel sampler, choices:"
+            for key in factory.listPixelSamplers():
+                print key
+            sys.exit(2)
+            
+    if (setup.renderer):
+        if (not factory.selectRenderer( setup.renderer )):
+            print "Invalid renderer, choices:"
+            for key in factory.listRenderers():
+                print key        
+            sys.exit(2)
+
+
     frame1 = MyFrame(None, -1, "CSAFE Demo")
     frame1.scene.mantaFrame = app.frame
-    #frame1.scene.mantaFrame.StartEngine()
     frame1.Show(True)  
     frame1.InitializeScene(app.frame, app.frame.engine)
     frame1.LayoutWindow()

Modified: trunk/scenes/csafe/src/CDTest.h
==============================================================================
--- trunk/scenes/csafe/src/CDTest.h     (original)
+++ trunk/scenes/csafe/src/CDTest.h     Wed Sep 24 01:03:17 2008
@@ -199,7 +199,17 @@
     {
       _volPosition = position;
       _volSize = size;
+      _minBound = position - size/2.0;
+      _maxBound = position + size/2.0;
       _manta_interface->addOneShotCallback(MantaInterface::Relative, 2, 
Callback::create(this, &CDTest::setVolumePositionSizeHelper));
+    }
+  void setVolumeMinMaxBounds(Vector min, Vector max)
+    {
+      _minBound = min;
+      _maxBound = max;
+      Vector pos = min + (max-min)/2.0;
+      Vector size = max - min;
+      setVolumePositionSize(pos,size);
     }
   void setClippingBBox(Vector min, Vector max)
     {


  • [Manta] r2330 - in trunk: Model/MiscObjects scenes/csafe/python scenes/csafe/src, brownlee, 09/24/2008

Archive powered by MHonArc 2.6.16.

Top of page