MPQC  2.3.1
render.h
1 //
2 // render.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 #ifdef __GNUC__
29 #pragma interface
30 #endif
31 
32 #ifndef _util_render_render_h
33 #define _util_render_render_h
34 
35 #include <util/class/class.h>
36 #include <util/render/appearance.h>
37 #include <util/render/material.h>
38 #include <util/render/transform.h>
39 #include <util/render/stack.h>
40 
41 namespace sc {
42 
43 class RenderedObject;
44 class AnimatedObject;
45 class RenderedObjectSet;
46 class RenderedSphere;
47 class RenderedPolygons;
48 class RenderedPolylines;
49 
50 class Render: public DescribedClass {
51  protected:
52  Ref<Material> default_material_;
53  Ref<Appearance> default_appearance_;
54  Ref<Transform> default_transform_;
55 
56  Stack<Ref<Material> > material_stack_;
57  Stack<Ref<Appearance> > appearance_stack_;
58  Stack<Ref<Transform> > transform_stack_;
59 
60  virtual void push_material(const Ref<Material>& m);
61  virtual void push_appearance(const Ref<Appearance>& a);
62  virtual void push_transform(const Ref<Transform>& t);
63  virtual Ref<Material> pop_material();
64  virtual Ref<Appearance> pop_appearance();
65  virtual Ref<Transform> pop_transform();
66 
67  public:
68  Render();
69  Render(const Ref<KeyVal>&);
70  virtual ~Render();
71 
72  Ref<Material> default_material() { return default_material_; }
73  Ref<Appearance> default_appearance() { return default_appearance_; }
74  Ref<Transform> default_transform() { return default_transform_; }
75  void default_material(const Ref<Material>& m) { default_material_ = m; }
76  void default_appearance(const Ref<Appearance>& a) {default_appearance_ = a;}
77  void default_transform(const Ref<Transform>& t) {default_transform_ = t;}
78 
79  virtual void clear() = 0;
80 
81  virtual void render(const Ref<RenderedObject>&);
82  virtual void animate(const Ref<AnimatedObject> &);
83 
84  virtual void set(const Ref<RenderedObjectSet>&);
85  virtual void sphere(const Ref<RenderedSphere>&);
86  virtual void polygons(const Ref<RenderedPolygons>&) = 0;
87  virtual void polylines(const Ref<RenderedPolylines>&) = 0;
88 };
89 
90 
91 class FileRender: public Render {
92  protected:
93  char* filename_;
94  char* basename_;
95  std::streambuf *sbuf_;
96  int delete_sbuf_;
97  int depth_;
98 
99  char *get_filename(const char *objectname);
100  void open_sbuf(const char *objectname);
101  void close_sbuf();
102  public:
103  FileRender(const char * filename);
104  FileRender(std::ostream &o = ExEnv::out0());
105  FileRender(const Ref<KeyVal>&);
106  virtual ~FileRender();
107 
108  void clear();
109 
110  virtual void set_filename(const char *name);
111  virtual void set_basename(const char *name);
112  virtual const char *file_extension();
113 };
114 
115 }
116 
117 #endif
118 
119 // Local Variables:
120 // mode: c++
121 // c-file-style: "CLJ"
122 // End:
sc::FileRender
Definition: render.h:91
sc::Ref
A template class that maintains references counts.
Definition: ref.h:332
sc::Render
Definition: render.h:50
sc::Stack
Definition: stack.h:37
sc::DescribedClass
Classes which need runtime information about themselves and their relationship to other classes can v...
Definition: class.h:244
sc::ExEnv::out0
static std::ostream & out0()
Return an ostream that writes from node 0.

Generated at Sun Jan 26 2020 23:33:04 for MPQC 2.3.1 using the documentation package Doxygen 1.8.16.