aboutsummaryrefslogtreecommitdiff
path: root/tool_src/QvLib/QvState.cpp
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
committerFelix Morgner <felix.morgner@gmail.com>2026-08-24 11:16:07 +0200
commitc068f22329d5cc722622a2183bbb22eef2093df7 (patch)
tree12d56c1aede67988a55e241364606bfbb4dba933 /tool_src/QvLib/QvState.cpp
downloadopenparsec-c068f22329d5cc722622a2183bbb22eef2093df7.tar.xz
openparsec-c068f22329d5cc722622a2183bbb22eef2093df7.zip
initial importHEADmain
Diffstat (limited to 'tool_src/QvLib/QvState.cpp')
-rw-r--r--tool_src/QvLib/QvState.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/tool_src/QvLib/QvState.cpp b/tool_src/QvLib/QvState.cpp
new file mode 100644
index 0000000..6a629b8
--- /dev/null
+++ b/tool_src/QvLib/QvState.cpp
@@ -0,0 +1,128 @@
+
+//[MSH_START]
+// 02/01/98: moved FetchCoordinate3State(), FetchMaterialState(), and
+// FetchMaterialBindingState() into class BRep.
+// 01/01/98: added new material retrieval code (msh)
+// 05/05/97: added new constructor (msh)
+// 04/03/97: added display of coordinate3 stack (msh)
+//[MSH_END]
+
+#include <QvState.h>
+
+
+const char *QvState::stackNames[NumStacks] = {
+ "Camera",
+ "Coordinate3",
+ "Light",
+ "MaterialBinding",
+ "Material",
+ "NormalBinding",
+ "Normal",
+ "ShapeHints",
+ "Texture2",
+ "Texture2Transformation",
+ "TextureCoordinate2",
+ "Transformation",
+};
+
+//[MSH_START]
+QvState::QvState( BSPLIB_NAMESPACE::VrmlFile *base )
+{
+ vrmlfile_base = base;
+ //stacks = new QvElement[NumStacks];
+
+ //stacks = (QvElement **) new QvElement[NumStacks];
+ //stacks = new QvElement * [NumStacks];
+
+ for (int i = 0; i < NumStacks; i++){
+ stacks[i] = NULL;
+ }
+ depth = 0;
+}
+//[MSH_END]
+
+QvState::QvState()
+{
+//[MSH_START]
+ vrmlfile_base = NULL;
+//[MSH_END]
+
+ //stacks = new QvElement[NumStacks];
+ //stacks = (QvElement **) new QvElement[NumStacks];
+ //stacks = new QvElement * [NumStacks];
+
+ int i = 0;
+ for (i = 0; i < NumStacks; i++){
+ stacks[i] = NULL;
+ }
+ depth = 0;
+}
+
+QvState::~QvState()
+{
+ while (depth > 0)
+ pop();
+
+ //delete [] stacks;
+}
+
+void
+QvState::addElement(StackIndex stackIndex, QvElement *elt)
+{
+ elt->depth = depth;
+ elt->next = stacks[stackIndex];
+ stacks[stackIndex] = elt;
+}
+
+void
+QvState::push()
+{
+ depth++;
+}
+
+void
+QvState::pop()
+{
+ depth--;
+
+ for (int i = 0; i < NumStacks; i++)
+ while (stacks[i] != NULL && stacks[i]->depth > depth)
+ popElement((StackIndex) i);
+}
+
+void
+QvState::popElement(StackIndex stackIndex)
+{
+ QvElement *elt = stacks[stackIndex];
+ stacks[stackIndex] = elt->next;
+ delete elt;
+}
+
+void
+QvState::print()
+{
+ printf("Traversal state:\n");
+
+ for (int i = 0; i < NumStacks; i++) {
+ printf("\tStack [%2d] (%s):\n", i, stackNames[i]);
+
+ if (stacks[i] == NULL){
+ printf("\t\tNULL\n");
+ } else {
+ for (QvElement *elt = stacks[i]; elt != NULL; elt = elt->next) {
+ elt->print();
+//[MSH_START]
+/*
+ if ( i == Coordinate3Index ) {
+ QvCoordinate3 *c3 = (QvCoordinate3 *) elt->data;
+ for ( int j = 0; j < c3->point.num; j++ )
+ printf( "point[%d]=%f %f %f\n", j, c3->point.values[ j*3 ], c3->point.values[ j*3 + 1 ], c3->point.values[ j*3 + 2 ] );
+
+ }
+*/
+//[MSH_END]
+ }
+ }
+
+ }
+}