1 // 2 // object.h 3 // 4 // Copyright (C) 1996 Limit Point Systems, Inc. 5 // 6 // Author: Curtis Janssen <cljanss@limitpt.com> 7 // Maintainer: LPS 8 // 9 // This file is part of the SC Toolkit. 10 // 11 // The SC Toolkit is free software; you can redistribute it and/or modify 12 // it under the terms of the GNU Library General Public License as published by 13 // the Free Software Foundation; either version 2, or (at your option) 14 // any later version. 15 // 16 // The SC Toolkit is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU Library General Public License for more details. 20 // 21 // You should have received a copy of the GNU Library General Public License 22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to 23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 24 // 25 // The U.S. Government is granted a limited license as per AL 91-7. 26 // 27 28 #ifndef _util_render_object_h 29 #define _util_render_object_h 30 31 #ifdef __GNUC__ 32 #pragma interface 33 #endif 34 35 #include <iostream> 36 37 #include <util/keyval/keyval.h> 38 #include <util/render/material.h> 39 #include <util/render/appearance.h> 40 #include <util/render/transform.h> 41 42 namespace sc { 43 44 class Render; 45 46 class RenderedObject: public DescribedClass { 47 protected: 48 char* name_; 49 Ref<Material> material_; 50 Ref<Appearance> appearance_; 51 Ref<Transform> transform_; 52 53 friend class Render; 54 public: 55 RenderedObject(const Ref<Material>& = 0); 56 RenderedObject(const Ref<KeyVal>&); 57 ~RenderedObject(); name()58 const char* name() const { return name_; } 59 void set_name(const char *); material()60 Ref<Material> material() const { return material_; } appearance()61 Ref<Appearance> appearance() const { return appearance_; } transform()62 Ref<Transform> transform() const { return transform_; } material(const Ref<Material> & m)63 void material(const Ref<Material>&m) { material_ = m; } appearance(const Ref<Appearance> & a)64 void appearance(const Ref<Appearance>&a) { appearance_ = a; } transform(const Ref<Transform> & t)65 void transform(const Ref<Transform>&t) { transform_ = t; } 66 67 virtual void print(std::ostream& = ExEnv::out0()) const; 68 69 // to be called only by derivatives of Render 70 virtual void render(const Ref<Render>&) = 0; 71 }; 72 73 74 class RenderedObjectSet: public RenderedObject { 75 private: 76 int capacity_; 77 int n_; 78 Ref<RenderedObject> *array_; 79 protected: 80 void render(const Ref<Render>&); 81 public: 82 RenderedObjectSet(int capacity = 10); 83 RenderedObjectSet(const Ref<KeyVal>&); 84 ~RenderedObjectSet(); n()85 int n() const { return n_; } element(int i)86 const Ref<RenderedObject>& element(int i) const { return array_[i]; } 87 virtual void add(const Ref<RenderedObject>&); 88 }; 89 90 } 91 92 #endif 93 94 // Local Variables: 95 // mode: c++ 96 // c-file-style: "CLJ" 97 // End: 98