aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/invrender.as.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/invrender.as.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/invrender.as.pamphlet')
-rw-r--r--src/algebra/invrender.as.pamphlet172
1 files changed, 172 insertions, 0 deletions
diff --git a/src/algebra/invrender.as.pamphlet b/src/algebra/invrender.as.pamphlet
new file mode 100644
index 00000000..a107b9b1
--- /dev/null
+++ b/src/algebra/invrender.as.pamphlet
@@ -0,0 +1,172 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra invrender.as}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{RenderTools}
+<<RenderTools>>=
+#include "axiom"
+
+POINT ==> Point DoubleFloat;
+NNI ==> NonNegativeInteger;
+SI ==> SingleInteger;
+
+RenderTools: with {
+ renderToFile!: (FileName, ThreeSpace DoubleFloat) -> ();
+ makeSceneGraph: (ThreeSpace DoubleFloat) -> IVNodeObject;
+} == add {
+ import from IVUtilities;
+
+ renderToFile!(f: FileName, space: ThreeSpace DoubleFloat): () == {
+ root := makeSceneGraph(space);
+ write!(f, root);
+ }
+
+ local makePts: (lpts: List POINT,
+ indicies: List List List NonNegativeInteger) ->
+ (List POINT, List DoubleFloat);
+
+ local makePts(lp: List POINT, indicies: List List List NonNegativeInteger):
+ (List POINT, List DoubleFloat) == {
+ local colorIdx: Integer;
+ indexList := concat concat indicies;
+ coordpts := lp;
+ if (# first lp = 4) then colorIdx := 4 else colorIdx := 3;
+ colors := [pt.colorIdx for pt in lp];
+ (coordpts, colors)
+ }
+
+ local makeBaseColor(l: List DoubleFloat): IVBaseColor == {
+ -- This works by interpolating between blue and green (via cyan).
+ -- There may well be better ways...
+ import from POINT;
+ import from List POINT;
+ import from DoubleFloat;
+ import from List DoubleFloat;
+ low := 10000.0;
+ high := -10000.0;
+ for df in l repeat {
+ if low > df then low := df;
+ if high < df then high := df;
+ }
+ if (high = low) then high := high + 1.0;
+ new [ point([0, (df - low)/(high - low), (high - df)/(high - low)])
+ for df in l]
+ }
+ makeSceneGraph(space: ThreeSpace DoubleFloat): IVNodeObject == {
+ import from List ThreeSpace DoubleFloat;
+ import from List List List NNI;
+ import from Integer;
+ import from Symbol;
+ import from IVValue;
+ check(space);
+ lpts := lp(space);
+ indicies := lllip(space);
+ root: IVSeparator := new();
+ (coordpts, colorvalues) := makePts(lpts, indicies);
+ coords: IVCoordinate3 := new coordpts;
+ colors: IVBaseColor := makeBaseColor(colorvalues);
+ addChild!(root, coerce coords);
+ addChild!(root, coerce colors);
+ binding: IVBasicNode := make "MaterialBinding";
+ addField!(binding, "value", symbol "PER__VERTEX");
+ addChild!(root, coerce binding);
+ offset: NNI := 0;
+ for ss in components space
+ for index in indicies repeat {
+ local coordIndex: List NNI;
+ default i: Integer;
+ closedCurve? ss => {
+ n: Integer := (#(index.1))::Integer;
+ coordIndex :=
+ [offset+coerce(i) for i in 0..n::Integer];
+ -- Close the curve
+ setlast!(coordIndex,offset);
+ curve : IVIndexedLineSet := new coordIndex;
+ addChild!(root, coerce curve);
+ offset := offset+n::NNI;
+ }
+ curve? ss => {
+ n := (#(index.1))::Integer;
+ coordIndex :=
+ [offset+coerce(i) for i in 0..(n-1)];
+ curve : IVIndexedLineSet := new coordIndex;
+ addChild!(root, coerce curve);
+ offset := offset+n::NNI;
+ }
+ polygon? ss => {
+ vertices := #(index.1) + #(index.2);
+ face : IVFaceSet := new(vertices::SI,offset::SI);
+ addChild!(root, coerce face);
+ offset := offset+vertices;
+ }
+ mesh? ss => {
+ xStep: SingleInteger := (#index)::SingleInteger;
+ yStep: SingleInteger := (#(first index))::SingleInteger;
+ quadMesh : IVQuadMesh :=
+ new(xStep,yStep,offset::SingleInteger);
+ addChild!(root, coerce quadMesh);
+ offset := offset+coerce(xStep*yStep);
+ }
+ point? ss => {
+ pt : IVPointSet := new(offset::SingleInteger,
+ 1$SingleInteger);
+ addChild!(root, coerce pt);
+ offset := offset+1;
+ }
+ error "Unrecognised SubSpace component";
+ }
+ coerce root;
+ }
+}
+
+@
+\section{License}
+<<license>>=
+--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+--All rights reserved.
+--
+--Redistribution and use in source and binary forms, with or without
+--modification, are permitted provided that the following conditions are
+--met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+@
+<<*>>=
+<<license>>
+
+<<RenderTools>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}