Update procedures
[shapes.git] / source / facettypes.h
blobd13d05d0fb9ebfe3a8fe1f93cbe4cc51a074cb4b
1 /* This file is part of Shapes.
3 * Shapes is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * any later version.
8 * Shapes is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with Shapes. If not, see <http://www.gnu.org/licenses/>.
16 * Copyright 2008, 2014 Henrik Tidefelt
19 #pragma once
21 #include "Shapes_Ast_decls.h"
22 #include "Shapes_Kernel_decls.h"
23 #include "Shapes_Lang_decls.h"
24 #include "Shapes_Computation_decls.h"
26 #include "ptrowner.h"
27 #include "refcount.h"
28 #include "environment.h"
29 #include "statetypes.h"
30 #include "elementarylength.h"
31 #include "concretecolors.h"
33 #include <list>
34 #include <iostream>
35 #include <stack>
36 #include <set>
39 namespace Shapes
41 namespace Lang
44 class ReflectionsBinding : public DynamicBindings
46 const Ast::DynamicBindingExpression * bindingExpr_;
47 RefCountPtr< const Lang::SpecularReflection > reflections_;
48 const Ast::PlacedIdentifier * id_;
49 public:
50 ReflectionsBinding( const Ast::PlacedIdentifier * id, const Ast::DynamicBindingExpression * bindingExpr, const RefCountPtr< const Lang::SpecularReflection > & reflections );
51 virtual ~ReflectionsBinding( );
52 virtual void bind( MapType & bindings, Kernel::SystemDynamicVariables ** sysBindings ) const;
53 virtual void show( std::ostream & os ) const;
54 virtual void gcMark( Kernel::GCMarkedSet & marked );
57 class AutoIntensityBinding : public DynamicBindings
59 const Ast::DynamicBindingExpression * bindingExpr_;
60 RefCountPtr< const Lang::Color > color_;
61 const Ast::PlacedIdentifier * id_;
62 public:
63 AutoIntensityBinding( const Ast::PlacedIdentifier * id, const Ast::DynamicBindingExpression * bindingExpr, const RefCountPtr< const Lang::Color > & color );
64 virtual ~AutoIntensityBinding( );
65 virtual void bind( MapType & bindings, Kernel::SystemDynamicVariables ** sysBindings ) const;
66 virtual void show( std::ostream & os ) const;
67 virtual void gcMark( Kernel::GCMarkedSet & marked );
70 class AutoScatteringBinding : public DynamicBindings
72 const Ast::DynamicBindingExpression * bindingExpr_;
73 RefCountPtr< const Lang::SpecularReflection > reflections_;
74 const Ast::PlacedIdentifier * id_;
75 public:
76 AutoScatteringBinding( const Ast::PlacedIdentifier * id, const Ast::DynamicBindingExpression * bindingExpr, const RefCountPtr< const Lang::SpecularReflection > & reflections );
77 virtual ~AutoScatteringBinding( );
78 virtual void bind( MapType & bindings, Kernel::SystemDynamicVariables ** sysBindings ) const;
79 virtual void show( std::ostream & os ) const;
80 virtual void gcMark( Kernel::GCMarkedSet & marked );
83 class ViewResolutionBinding : public DynamicBindings
85 const Ast::DynamicBindingExpression * bindingExpr_;
86 Concrete::Length resolution_;
87 const Ast::PlacedIdentifier * id_;
88 public:
89 ViewResolutionBinding( const Ast::PlacedIdentifier * id, const Ast::DynamicBindingExpression * bindingExpr, const Concrete::Length resolution );
90 virtual ~ViewResolutionBinding( );
91 virtual void bind( MapType & bindings, Kernel::SystemDynamicVariables ** sysBindings ) const;
92 virtual void show( std::ostream & os ) const;
93 virtual void gcMark( Kernel::GCMarkedSet & marked );
96 class ShadeOrderBinding : public DynamicBindings
98 const Ast::DynamicBindingExpression * bindingExpr_;
99 Computation::FacetShadeOrder order_;
100 const Ast::PlacedIdentifier * id_;
101 public:
102 ShadeOrderBinding( const Ast::PlacedIdentifier * id, const Ast::DynamicBindingExpression * bindingExpr, const Computation::FacetShadeOrder order );
103 virtual ~ShadeOrderBinding( );
104 virtual void bind( MapType & bindings, Kernel::SystemDynamicVariables ** sysBindings ) const;
105 virtual void show( std::ostream & os ) const;
106 virtual void gcMark( Kernel::GCMarkedSet & marked );
111 namespace Kernel
114 class ReflectionsDynamicVariableProperties : public Kernel::DynamicVariableProperties
116 public:
117 ReflectionsDynamicVariableProperties( const Ast::PlacedIdentifier * id );
118 virtual ~ReflectionsDynamicVariableProperties( );
119 virtual Kernel::VariableHandle fetch( const Kernel::PassedDyn & dyn ) const;
120 virtual void makeBinding( Kernel::VariableHandle val, const Ast::DynamicBindingExpression * bindingExpr, Kernel::EvalState * evalState ) const;
123 class AutoIntensityDynamicVariableProperties : public Kernel::DynamicVariableProperties
125 public:
126 AutoIntensityDynamicVariableProperties( const Ast::PlacedIdentifier * id );
127 virtual ~AutoIntensityDynamicVariableProperties( );
128 virtual Kernel::VariableHandle fetch( const Kernel::PassedDyn & dyn ) const;
129 virtual void makeBinding( Kernel::VariableHandle val, const Ast::DynamicBindingExpression * bindingExpr, Kernel::EvalState * evalState ) const;
132 class AutoScatteringDynamicVariableProperties : public Kernel::DynamicVariableProperties
134 public:
135 AutoScatteringDynamicVariableProperties( const Ast::PlacedIdentifier * id );
136 virtual ~AutoScatteringDynamicVariableProperties( );
137 virtual Kernel::VariableHandle fetch( const Kernel::PassedDyn & dyn ) const;
138 virtual void makeBinding( Kernel::VariableHandle val, const Ast::DynamicBindingExpression * bindingExpr, Kernel::EvalState * evalState ) const;
141 class ViewResolutionDynamicVariableProperties : public Kernel::DynamicVariableProperties
143 public:
144 ViewResolutionDynamicVariableProperties( const Ast::PlacedIdentifier * id );
145 virtual ~ViewResolutionDynamicVariableProperties( );
146 virtual Kernel::VariableHandle fetch( const Kernel::PassedDyn & dyn ) const;
147 virtual void makeBinding( Kernel::VariableHandle val, const Ast::DynamicBindingExpression * bindingExpr, Kernel::EvalState * evalState ) const;
150 class ShadeOrderDynamicVariableProperties : public Kernel::DynamicVariableProperties
152 public:
153 ShadeOrderDynamicVariableProperties( const Ast::PlacedIdentifier * id );
154 virtual ~ShadeOrderDynamicVariableProperties( );
155 virtual Kernel::VariableHandle fetch( const Kernel::PassedDyn & dyn ) const;
156 virtual void makeBinding( Kernel::VariableHandle val, const Ast::DynamicBindingExpression * bindingExpr, Kernel::EvalState * evalState ) const;
159 class FacetState
161 public:
162 RefCountPtr< const Lang::SpecularReflection > reflections_; // Use SpecularReflectionNumm for no-op, and NullPtr for undefined
163 RefCountPtr< const Lang::Color > autoIntensity_; // Use Gray( -1 ) for no-op, and NullPtr for undefined
164 RefCountPtr< const Lang::SpecularReflection > autoScattering_; // Use SpecularReflectionNumm for no-op, and NullPtr for undefined
165 Concrete::Length viewResolution_; // Use NaN for undefined
166 Computation::FacetShadeOrder shadeOrder_; // Use -1 for undefined
167 public:
168 FacetState( );
169 explicit FacetState( const Kernel::FacetState & orig ); // explicit, since reference counting shall be used in most cases
170 FacetState( const Kernel::FacetState & newValues, const Kernel::FacetState & oldValues );
171 FacetState( bool setDefaults );
172 ~FacetState( );
174 void print( std::ostream & os, const std::string & indentation ) const;