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
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
21 #include "Shapes_Ast_decls.h"
22 #include "Shapes_Kernel_decls.h"
23 #include "Shapes_Lang_decls.h"
24 #include "Shapes_Computation_decls.h"
28 #include "environment.h"
29 #include "statetypes.h"
30 #include "elementarylength.h"
31 #include "concretecolors.h"
44 class ReflectionsBinding
: public DynamicBindings
46 const Ast::DynamicBindingExpression
* bindingExpr_
;
47 RefCountPtr
< const Lang::SpecularReflection
> reflections_
;
48 const Ast::PlacedIdentifier
* id_
;
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_
;
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_
;
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_
;
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_
;
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
);
114 class ReflectionsDynamicVariableProperties
: public Kernel::DynamicVariableProperties
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
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
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
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
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;
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
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
);
174 void print( std::ostream
& os
, const std::string
& indentation
) const;