Manta Interactive Ray Tracer Development Mailing List

Text archives Help


Re: [Manta] r2114 - in trunk: Interface Model/Lights Model/Primitives SwigInterface UserInterface scenes/csafe/python


Chronological Thread 
  • From: Solomon Boulos <boulos@cs.utah.edu>
  • To: brownlee@sci.utah.edu
  • Cc: manta@sci.utah.edu
  • Subject: Re: [Manta] r2114 - in trunk: Interface Model/Lights Model/Primitives SwigInterface UserInterface scenes/csafe/python
  • Date: Mon, 25 Feb 2008 12:13:09 -0800

Before this goes much further, I'd like to suggest it be pulled from Light. While allowing PointLights to be manipulated is certainly a good idea, I don't think createRenderable is really something all lights should have. For example, how would you createRenderable for a Directional Light or a Head Light? It seems that of the 5 types of lights we might use (point, spot, area, directional, head) only point and spot can gain something from this.

So I'd like to suggest that this be pulled from the Light interface and instead be handled on a case-by-case basis in the application itself (e.g. wxmanta). Perhaps an even stronger reason for this is that you already need someone outside of the Light interface to enable and disable this per light, so someone else is already cleaning up the allocated memory. Adding code to check for the type of light and create the light shape is a fairly minor addition and allows for per- application flexibility (for example, what if someone wanted to display a head light by lighting up a circle of pixels on the screen where the light is effectively from?). Forcing the same behavior for all applications seems a little unfortunate.

One final note, I think we should really stop adding the MIT license to every file (though we should maintain whatever license information is required by other people's code we have copied). I believe it is considered sufficient to have LICENSE (or LICENSE.txt if you prefer) in the root of the source tree.

Solomon

On Feb 25, 2008, at 9:07 AM, brownlee@sci.utah.edu wrote:

Author: brownlee
Date: Mon Feb 25 10:06:58 2008
New Revision: 2114

Added:
  trunk/Model/Primitives/PrimaryRaysOnly.cc
  trunk/Model/Primitives/PrimaryRaysOnly.h
Modified:
  trunk/Interface/Light.h
  trunk/Model/Lights/PointLight.cc
  trunk/Model/Lights/PointLight.h
  trunk/Model/Primitives/CMakeLists.txt
  trunk/SwigInterface/wxManta.py
  trunk/UserInterface/XWindowUI.cc
  trunk/UserInterface/XWindowUI.h
  trunk/scenes/csafe/python/SceneInfo.py
  trunk/scenes/csafe/python/csafe_demo.py
Log:
added visible lights, right now just implemented for pointlights. press l to toggle

Modified: trunk/Interface/Light.h
= = = = = = = = ======================================================================
--- trunk/Interface/Light.h     (original)
+++ trunk/Interface/Light.h     Mon Feb 25 10:06:58 2008
@@ -33,6 +33,8 @@
                              RayPacket& sourceRays) const = 0;

    void readwrite(Archive* archive);
+       //! create a visible representation of the light
+       virtual Object* createRenderable() { return NULL; }
  private:
    // Lights may not be copied.
    Light( const Light & );

Modified: trunk/Model/Lights/PointLight.cc
= = = = = = = = ======================================================================
--- trunk/Model/Lights/PointLight.cc    (original)
+++ trunk/Model/Lights/PointLight.cc    Mon Feb 25 10:06:58 2008
@@ -4,7 +4,11 @@
#include <Core/Persistent/MantaRTTI.h>
#include <Interface/InterfaceRTTI.h>
#include <MantaSSE.h>
-
+#include <Model/Primitives/Sphere.h>
+#include <Model/Primitives/PrimaryRaysOnly.h>
+#include <Model/Materials/CopyTextureMaterial.h>
+#include <iostream>
+using namespace std;
using namespace Manta;

PointLight::PointLight()
@@ -81,3 +85,9 @@
  archive->readwrite("position", position);
  archive->readwrite("color", color);
}
+
+Object* PointLight::createRenderable()
+{
+ //TODO: radius preset for now, but could be set from bounds of scene or something... -Carson
+ return new PrimaryRaysOnly(new Sphere(new CopyTextureMaterial(color), position, 0.5f));
+}
\ No newline at end of file

Modified: trunk/Model/Lights/PointLight.h
= = = = = = = = ======================================================================
--- trunk/Model/Lights/PointLight.h     (original)
+++ trunk/Model/Lights/PointLight.h     Mon Feb 25 10:06:58 2008
@@ -28,6 +28,7 @@
    void setColor(Color new_c) { color = new_c; }

    void readwrite(ArchiveElement* archive);
+    virtual Object* createRenderable();
  private:
    Vector position;
    Color color;

Modified: trunk/Model/Primitives/CMakeLists.txt
= = = = = = = = ======================================================================
--- trunk/Model/Primitives/CMakeLists.txt       (original)
+++ trunk/Model/Primitives/CMakeLists.txt       Mon Feb 25 10:06:58 2008
@@ -32,6 +32,8 @@
     Primitives/Parallelogram.h
     Primitives/Plane.cc
     Primitives/Plane.h
+     Primitives/PrimaryRaysOnly.cc
+     Primitives/PrimaryRaysOnly.h
     Primitives/PrimitiveCommon.cc
     Primitives/PrimitiveCommon.h
     Primitives/QuadFacedHexahedron.cc

Added: trunk/Model/Primitives/PrimaryRaysOnly.cc
= = = = = = = = ======================================================================
--- (empty file)
+++ trunk/Model/Primitives/PrimaryRaysOnly.cc   Mon Feb 25 10:06:58 2008
@@ -0,0 +1,41 @@
+/*
+  For more information, please see: http://software.sci.utah.edu
+
+  The MIT License
+
+  Copyright (c) 2005
+  Scientific Computing and Imaging Institue, University of Utah
+
+ License for the specific language governing rights and limitations under
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+  in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+  DEALINGS IN THE SOFTWARE.
+*/
+
+#include <Model/Primitives/PrimaryRaysOnly.h>
+#include <Interface/RayPacket.h>
+#include <iostream>
+
+using namespace std;
+using namespace Manta;
+
+void PrimaryRaysOnly::intersect(const RenderContext& context,
+                           RayPacket& rays) const
+{
+    if (rays.getFlag(RayPacket::ConstantEye))
+         prim->intersect(context, rays);
+}

Added: trunk/Model/Primitives/PrimaryRaysOnly.h
= = = = = = = = ======================================================================
--- (empty file)
+++ trunk/Model/Primitives/PrimaryRaysOnly.h    Mon Feb 25 10:06:58 2008
@@ -0,0 +1,87 @@
+/*
+  For more information, please see: http://software.sci.utah.edu
+
+  The MIT License
+
+  Copyright (c) 2005
+  Scientific Computing and Imaging Institue, University of Utah
+
+ License for the specific language governing rights and limitations under
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included
+  in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+  DEALINGS IN THE SOFTWARE.
+*/
+
+#ifndef Manta_Model_PrimaryRaysOnly_h
+#define Manta_Model_PrimaryRaysOnly_h
+
+#include <Interface/Primitive.h>
+
+namespace Manta
+{
+
+/*!
+\class PrimaryRaysOnly
+\author Carson
+\brief only intersects with eyerays
+*/
+class PrimaryRaysOnly : public Primitive
+{
+public:
+    //! constructor
+    /*!
+ \param primitive to use for all functions, intersection method only called with eye rays
+    */
+    PrimaryRaysOnly(Primitive* p) { prim = p; }
+
+ virtual void preprocess(const PreprocessContext& c) { prim- >preprocess(c); }
+    //! intersection method (uses primitive from constructor)
+    /*!
+ \post calls intersect method of primitive if rays are from eye
+    */
+    virtual void intersect(const RenderContext& context,
+                           RayPacket& rays) const;
+
+    virtual void computeNormal(const RenderContext& context,
+ RayPacket& rays) const { prim- >computeNormal(context, rays); }
+    virtual void computeGeometricNormal(const RenderContext& context,
+ RayPacket& rays) const { prim->computeGeometricNormal(context, rays); }
+
+    // Compute dPdu and dPdv (aka tangent vectors) - these are not
+    // normalized. Cross(dPdu, dPdv) = k*N where k is some scale
+    // factor. By default, we'll just construct a coordinate frame
+    // around the Normal so that the invariant is satisfied.
+ virtual void computeSurfaceDerivatives(const RenderContext& context,
+ RayPacket& rays) const { prim->computeSurfaceDerivatives(context, rays); }
+
+ virtual void setTexCoordMapper(const TexCoordMapper* new_tex) { prim->setTexCoordMapper(new_tex); };
+
+    virtual void getRandomPoints(Packet<Vector>& points,
+                                 Packet<Vector>& normals,
+                                 Packet<Real>& pdfs,
+                                 const RenderContext& context,
+ RayPacket& rays) { prim- >getRandomPoints(points, normals,pdfs,context,rays); }
+
+ virtual void computeBounds(const Manta::PreprocessContext& c, Manta::BBox& b) const { prim->computeBounds(c,b); }
+
+protected:
+    Primitive* prim;
+};
+
+}
+
+#endif
\ No newline at end of file

Modified: trunk/SwigInterface/wxManta.py
= = = = = = = = ======================================================================
--- trunk/SwigInterface/wxManta.py      (original)
+++ trunk/SwigInterface/wxManta.py      Mon Feb 25 10:06:58 2008
@@ -230,7 +230,7 @@
        self.clearScreen()

    def FrameReady(self):
-        self.SetCurrent()
+       # self.SetCurrent()
self.opengl_display.displayImage(self.sync_display.getCurrentImage())
        self.sync_display.doneRendering()
        self.SwapBuffers()
@@ -464,7 +464,7 @@
    ## StartEngine
###########################################################################
    def StartEngine(self):
-        self.Show()
+ #       self.Show()
        self.engine.beginRendering(False)

###########################################################################

Modified: trunk/UserInterface/XWindowUI.cc
= = = = = = = = ======================================================================
--- trunk/UserInterface/XWindowUI.cc    (original)
+++ trunk/UserInterface/XWindowUI.cc    Mon Feb 25 10:06:58 2008
@@ -10,7 +10,10 @@
#include <Interface/XWindow.h>
#include <Interface/Scene.h>
#include <Interface/Object.h>
+#include <Interface/Light.h>
+#include <Interface/LightSet.h>
#include <Interface/RayPacket.h>
+#include <Model/Groups/Group.h>
#include <Engine/PixelSamplers/TimeViewSampler.h>
#include <Core/Exceptions/ErrnoException.h>
#include <Core/Exceptions/InternalError.h>
@@ -28,7 +31,6 @@
#include <unistd.h>
#include <sys/select.h>

-#include <iostream>
#include <sstream>
#include <functional>
#include <algorithm>
@@ -46,7 +48,6 @@
#define TOKEN_SHUTDOWN 3

using namespace Manta;
-using namespace std;

UserInterface* XWindowUI::create(const vector<string>& args,
                                 MantaInterface *rtrt_interface)
@@ -122,6 +123,10 @@
  rotate_speed = 2;
  autoview_fov = 60;
  trackball_radius = 0.8;
+
+  lightsVisible = false;
+  waitingToDeleteLights = false;
+  originalObject = NULL;

  register_default_keys();
  register_default_mouse();
@@ -493,6 +498,9 @@
  register_key(0, XStringToKeysym("K"),
               "write knots",
               Callback::create(this, &XWindowUI::write_knots));
+  register_key(0, XStringToKeysym("l"),
+                          "display lights",
+                          Callback::create(this, &XWindowUI::lights));
  register_key(0, XStringToKeysym("p"),
               "increase/decrease number of processors",
               Callback::create(this, &XWindowUI::prockey));
@@ -649,6 +657,47 @@
    return;

  path->writeKnots();
+}
+
+void XWindowUI::lights_helper(int, int)
+{
+ for (vector<Object*>::iterator itr = lightsRenderables.begin(); itr != lightsRenderables.end(); itr++)
+        delete *itr;
+    lightsRenderables.clear();
+    waitingToDeleteLights = false;
+}
+
+void XWindowUI::lights(unsigned int, unsigned long, int)
+{
+    if (waitingToDeleteLights)
+        return;
+       if (lightsVisible)
+       {
+               lightsVisible = false;
+               rtrt_interface->getScene()->setObject(originalObject);
+ //TODO: I don't delete the object itself as it contains the original object... does its destructor destroy its children?
+ rtrt_interface- >addOneShotCallback( MantaInterface::Relative, 2, Callback::create(this, &XWindowUI::lights_helper));
+        waitingToDeleteLights = true;
+       }
+       else
+       {
+               lightsVisible = true;
+               Scene* scene = rtrt_interface->getScene();
+               Group* group = new Group();
+               originalObject = scene->getObject();
+               group->add(originalObject);
+               LightSet* lights = scene->getLights();
+               for(unsigned int i = 0; i < lights->numLights(); i++)
+               {
+                       Object* renderable = 
lights->getLight(i)->createRenderable();
+                       if (renderable != NULL)
+                       {
+                               group->add(renderable);
+                               lightsRenderables.push_back(renderable);
+                       }
+               }
+               scene->setObject(group);
+       }
}

void XWindowUI::animate(unsigned int, unsigned long, int channel)

Modified: trunk/UserInterface/XWindowUI.h
= = = = = = = = ======================================================================
--- trunk/UserInterface/XWindowUI.h     (original)
+++ trunk/UserInterface/XWindowUI.h     Mon Feb 25 10:06:58 2008
@@ -9,6 +9,7 @@
#include <Core/Thread/Runnable.h>
#include <Core/Thread/Mutex.h>
#include <Core/Thread/Semaphore.h>
+#include <Interface/Object.h>
#include <X11/Xlib.h>

#include <vector>
@@ -81,6 +82,8 @@
    void next_bookmark(unsigned int, unsigned long, int);               
    void add_bookmark(unsigned int, unsigned long, int);                
    void add_knot(unsigned int, unsigned long, int);
+    void lights_helper(int, int);
+       void lights(unsigned int, unsigned long, int);
    void write_knots(unsigned int, unsigned long, int);
    void animate(unsigned int, unsigned long, int);
    void reset_path(unsigned int, unsigned long, int);
@@ -169,7 +172,13 @@

    // The image size
    int width, height;
-
+       
+       //for visible lights
+       vector<Object*> lightsRenderables;
+       Object* originalObject;
+       bool lightsVisible;
+    bool waitingToDeleteLights;
+       
    XWindowUI(const XWindowUI&);
    XWindowUI& operator=(const XWindowUI&);


Modified: trunk/scenes/csafe/python/SceneInfo.py
= = = = = = = = ======================================================================
--- trunk/scenes/csafe/python/SceneInfo.py      (original)
+++ trunk/scenes/csafe/python/SceneInfo.py      Mon Feb 25 10:06:58 2008
@@ -21,3 +21,4 @@
                self.lockFrames = False
                self.loop = True
                self.repeatLastFrame = 0.0
+               self.mantaFrame = None

Modified: trunk/scenes/csafe/python/csafe_demo.py
= = = = = = = = ======================================================================
--- trunk/scenes/csafe/python/csafe_demo.py     (original)
+++ trunk/scenes/csafe/python/csafe_demo.py     Mon Feb 25 10:06:58 2008
@@ -64,44 +64,44 @@
        self.scene = SceneInfo.Scene()
        #self.SetForegroundColour(wx.Colour(255,0,0))
        self.SetBackgroundColour(self.scene.bgColor)
-        menuBar = wx.MenuBar()
-        menuFile = wx.Menu()
-        menuFile.Append(101, "&About", "")
-        menuFile.Append(102, "&Save", "")
-        menuFile.Append(103, "Save As...", "")
-        menuFile.Append(104, "Load", "")
-       menuFile.Append(107, "Import NrrdList")
-       menuFile.Append(108, "Export NrrdList")
-       menuFile.Append(106, "Import Transfer Function")
-        menuFile.Append(105, "Export Transfer Function")
-       menuFile.Append(109, "&Quit", "")
-        menuBar.Append(menuFile, "File")
-
-        menuScene = wx.Menu()
- menuScene.Append(201, "&Add/Remove Files", "Add and remove Nrrd files to the scene")
- menuScene.Append(204, "Add &Histogram", "Add a histogram to the panel")
-        menuScene.Append(202, "Scene Preferences")
-        menuScene.Append(203, "&Generate")
-        menuBar.Append(menuScene, "Scene")
-
-        menuHelp = wx.Menu()
-        menuBar.Append(menuHelp, "Help")
-       self.SetMenuBar(menuBar)
-
-        self.Bind(wx.EVT_MENU, self.Menu101, id=101)
-        self.Bind(wx.EVT_MENU, self.Menu102, id=102)
-        self.Bind(wx.EVT_MENU, self.Menu103, id=103)
-        self.Bind(wx.EVT_MENU, self.Menu104, id=104)
-        self.Bind(wx.EVT_MENU, self.Menu105, id=105)
-        self.Bind(wx.EVT_MENU, self.Menu106, id=106)
-        self.Bind(wx.EVT_MENU, self.Menu201, id=201)
-        self.Bind(wx.EVT_MENU, self.Menu202, id=202)
-       self.Bind(wx.EVT_MENU, self.Menu107, id=107)
-       self.Bind(wx.EVT_MENU, self.Menu108, id=108)
-       self.Bind(wx.EVT_MENU, self.Menu109, id=109)
-       self.Bind(wx.EVT_MENU, self.Menu203, id=203)
-       self.Bind(wx.EVT_MENU, self.Menu204, id=204)
-       self.SetBackgroundColour(self.scene.bgColor)
+#        menuBar = wx.MenuBar()
+#        menuFile = wx.Menu()
+#        menuFile.Append(101, "&About", "")
+#        menuFile.Append(102, "&Save", "")
+#        menuFile.Append(103, "Save As...", "")
+#        menuFile.Append(104, "Load", "")
+#      menuFile.Append(107, "Import NrrdList")
+#      menuFile.Append(108, "Export NrrdList")
+#      menuFile.Append(106, "Import Transfer Function")
+#        menuFile.Append(105, "Export Transfer Function")
+#      menuFile.Append(109, "&Quit", "")
+#        menuBar.Append(menuFile, "File")
+#
+#        menuScene = wx.Menu()
+# menuScene.Append(201, "&Add/Remove Files", "Add and remove Nrrd files to the scene")
+# menuScene.Append(204, "Add &Histogram", "Add a histogram to the panel")
+#        menuScene.Append(202, "Scene Preferences")
+#        menuScene.Append(203, "&Generate")
+#        menuBar.Append(menuScene, "Scene")
+#
+#        menuHelp = wx.Menu()
+#        menuBar.Append(menuHelp, "Help")
+#      self.SetMenuBar(menuBar)
+#
+#        self.Bind(wx.EVT_MENU, self.Menu101, id=101)
+#        self.Bind(wx.EVT_MENU, self.Menu102, id=102)
+#        self.Bind(wx.EVT_MENU, self.Menu103, id=103)
+#        self.Bind(wx.EVT_MENU, self.Menu104, id=104)
+#        self.Bind(wx.EVT_MENU, self.Menu105, id=105)
+#        self.Bind(wx.EVT_MENU, self.Menu106, id=106)
+#        self.Bind(wx.EVT_MENU, self.Menu201, id=201)
+#        self.Bind(wx.EVT_MENU, self.Menu202, id=202)
+#      self.Bind(wx.EVT_MENU, self.Menu107, id=107)
+#      self.Bind(wx.EVT_MENU, self.Menu108, id=108)
+#      self.Bind(wx.EVT_MENU, self.Menu109, id=109)
+#      self.Bind(wx.EVT_MENU, self.Menu203, id=203)
+#      self.Bind(wx.EVT_MENU, self.Menu204, id=204)
+#      self.SetBackgroundColour(self.scene.bgColor)

    def Menu101(self, evt):
        self.log.write("about")
@@ -124,6 +124,7 @@
                Configuration.WriteConfiguration(self.scene, path)

    def Menu104(self,evt):
+        self.SetFocus()
        dlg = wx.FileDialog(self, message="Open file",
                defaultDir=os.getcwd(),
                defaultFile="",
@@ -180,6 +181,7 @@
        ################ Generate Scene #################
    def Menu203(self, evt):
        self.BuildScene()
+        self.scene.mantaFrame.StartEngine()

    ################ Add Histogram #################
    def Menu204(self, evt):
@@ -277,6 +279,52 @@
            self.visible = True

    def InitializeScene(self,frame, engine):
+
+        self.scene.mantaFrame = frame
+        menuBar = frame.menuBar
+
+        menuFile = frame.file_menu
+        dialog_id = wx.NewId()
+        menuFile.Append(dialog_id, "&About", "")
+        self.Bind(wx.EVT_MENU, self.Menu101, id=dialog_id)
+        menuFile.Append(102, "&Save", "")
+        menuFile.Append(103, "Save As...", "")
+        dialog_id = wx.NewId()
+        menuFile.Append(dialog_id, "Load", "")
+        self.Bind(wx.EVT_MENU, self.Menu104, id=dialog_id)
+       menuFile.Append(107, "Import NrrdList")
+       menuFile.Append(108, "Export NrrdList")
+       menuFile.Append(106, "Import Transfer Function")
+        menuFile.Append(105, "Export Transfer Function")
+       menuFile.Append(109, "&Quit", "")
+        #menuBar.Append(menuFile, "File")
+
+        menuScene = wx.Menu()
+ menuScene.Append(201, "&Add/Remove Files", "Add and remove Nrrd files to the scene")
+ menuScene.Append(204, "Add &Histogram", "Add a histogram to the panel")
+        menuScene.Append(202, "Scene Preferences")
+        menuScene.Append(203, "&Generate")
+        menuBar.Append(menuScene, "Scene")
+
+        menuHelp = wx.Menu()
+        menuBar.Append(menuHelp, "Help")
+#      self.SetMenuBar(menuBar)
+
+
+        self.Bind(wx.EVT_MENU, self.Menu102, id=102)
+        self.Bind(wx.EVT_MENU, self.Menu103, id=103)
+        self.Bind(wx.EVT_MENU, self.Menu105, id=105)
+        self.Bind(wx.EVT_MENU, self.Menu106, id=106)
+        self.Bind(wx.EVT_MENU, self.Menu201, id=201)
+        self.Bind(wx.EVT_MENU, self.Menu202, id=202)
+       self.Bind(wx.EVT_MENU, self.Menu107, id=107)
+       self.Bind(wx.EVT_MENU, self.Menu108, id=108)
+       self.Bind(wx.EVT_MENU, self.Menu109, id=109)
+       self.Bind(wx.EVT_MENU, self.Menu203, id=203)
+       self.Bind(wx.EVT_MENU, self.Menu204, id=204)
+       self.SetBackgroundColour(self.scene.bgColor)
+
+
        # Create a scene object.
        scene = manta_new(Scene())
        eye = manta_new(Vector(0.340429, 0.161851, -0.441882))
@@ -458,6 +506,8 @@
        vs.Add(hvs2,0,wx.ALIGN_BOTTOM|wx.ALIGN_CENTER)
#TODO: can't get the staticbox to friggin work with the buttons
#        vs.Add( animCtrlSizer, 0, wx.ALIGN_CENTRE|wx.ALL, 5 )
+        if (self.scene.mantaFrame != None):
+            vs.Add(self.scene.mantaFrame.panel, 0,wx.ALIGN_BOTTOM)

                
        self.Bind(wx.EVT_BUTTON, self.OnClickBack, self.backB)
@@ -494,9 +544,10 @@
        self.test.forwardAnimation()

def initialize_scene( frame, engine ):
-        frame = MyFrame(None, -1, "CSAFE Demo")
-        frame.Show(True)       
-        frame.InitializeScene(frame, engine)
+        frame1 = MyFrame(None, -1, "CSAFE Demo")
+        frame1.Show(True)      
+        frame1.InitializeScene(frame, engine)
+        frame1.LayoutWindow()


def usage():
@@ -516,7 +567,7 @@
###########################################################################
    # Create the application.
   app = wxManta.MantaApp( initialize_scene,
-                            num_workers, (512,512), False, None)
+ num_workers, (512,512), False, None, begin_rendering=False)


###########################################################################






Archive powered by MHonArc 2.6.16.

Top of page