Text archives Help
- 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.