Renderer.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.6 $
00022 // $Date: 2003/05/15 23:20:47 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/renderer/Renderer.cpp,v $
00024                                                                         
00025                                                                         
00026 // File: ~/renderer/Renderer.C
00027 //
00028 // Written: fmk 
00029 // Created: 10/98
00030 // Revision: A
00031 //
00032 // Description: This file contains the class interface for Renderer.
00033 // Renderer is an abstract base class. An Renderer object is used
00034 // to create an image of the domain.
00035 //
00036 // What: "@(#) Renderer.h, revA"
00037 
00038 #include <Renderer.h>
00039 #include <ColorMap.h>
00040 #include <Domain.h>
00041 
00042 
00043 int        Renderer::numRenderers(0);
00044 char     **Renderer::theTitles =0;
00045 Renderer **Renderer::theRenderers =0;
00046 
00047 Renderer::Renderer(ColorMap &_theMap)
00048   :theMap(&_theMap)
00049 {
00050 
00051 }
00052 
00053 
00054 Renderer::Renderer(const char *title, ColorMap &_theMap)
00055   :theMap(&_theMap)
00056 {
00057   int loc = -1;
00058 
00059   // look for an empty slot
00060   for (int i=0; i<numRenderers; i++)
00061     if (theRenderers[i] == 0) {
00062       loc = i;
00063       i = numRenderers;
00064     }
00065 
00066   // if no space or not already there add
00067   if (loc == -1) {
00068     Renderer **theNewRenderers = new Renderer *[numRenderers+1];
00069     char **theNewTitles = new char *[numRenderers+1];
00070 
00071     for (int i=0; i<numRenderers; i++) {
00072       theNewRenderers[i] = theRenderers[i];
00073       theNewTitles[i] = theTitles[i];
00074     }
00075 
00076     loc = numRenderers;
00077     numRenderers++;
00078     
00079     if (theRenderers != 0) 
00080       delete [] theRenderers;
00081     if (theTitles != 0)
00082       delete [] theTitles;
00083 
00084     theRenderers = theNewRenderers;
00085     theTitles = theNewTitles;
00086   }
00087 
00088   // set this in current slot
00089   theRenderers[loc] = this;
00090   char *titleCopy = new char [strlen(title)+1];
00091   strcpy(titleCopy, title);
00092   theTitles[loc] = titleCopy;
00093 }
00094 
00095 Renderer::~Renderer()
00096 {
00097   for (int i=0; i<numRenderers; i++)
00098     if (theRenderers[i] == this) {
00099       theRenderers[i] = 0;
00100       delete [] (theTitles[i]);
00101       theTitles[i] = 0;
00102     }
00103 }
00104 
00105 int
00106 Renderer::saveImage(const char *fileName)
00107 {
00108   opserr << "Renderer::saveImage - no default implementation provided\n";
00109   return 0;
00110 }
00111 
00112 
00113 int
00114 Renderer::saveImage(const char *rendererTitle, const char *fileName)
00115 {
00116   for (int i=0; i<numRenderers; i++)
00117     if (theRenderers[i] != 0) 
00118       if (strcmp(rendererTitle, theTitles[i]) == 0)
00119         return theRenderers[i]->saveImage(fileName);
00120 
00121   opserr << "Renderer::saveImage - no renderer with title: " << rendererTitle << " found\n";
00122   return 0;
00123 }
00124 
00125 int
00126 Renderer::drawVector(const Vector &position, const Vector &value, double factor)
00127 {
00128     return 0;
00129 }
00130 
00131 
00132 void
00133 Renderer::setColorMap(ColorMap &map)
00134 {
00135     theMap = &map;
00136 }
00137 
00138 
00139 
00140 
00141 
00142 
00143 
00144 
00145 
00146 
00147 
00148 
00149 
00150 

Generated on Mon Oct 23 15:05:27 2006 for OpenSees by doxygen 1.5.0