]> git.mxchange.org Git - flightgear.git/commitdiff
Restructured code a bit to split out the bits that create objects on the
authorcurt <curt>
Thu, 12 Jul 2001 15:03:09 +0000 (15:03 +0000)
committercurt <curt>
Thu, 12 Jul 2001 15:03:09 +0000 (15:03 +0000)
fly.  More work needs to be done.
Added apt_signs.[ch]xx

src/Objects/Makefile.am
src/Objects/apt_signs.cxx [new file with mode: 0644]
src/Objects/apt_signs.hxx [new file with mode: 0644]
src/Objects/obj.cxx
src/Objects/obj.hxx

index 57ccc7ae7dfc804f83193e6e285b031a8d49ab08..42ec6b40092f563f52b3421b29efc0553f9541d7 100644 (file)
@@ -1,6 +1,7 @@
 noinst_LIBRARIES = libObjects.a
 
 libObjects_a_SOURCES = \
+       apt_signs.cxx apt_signs.hxx \
        newmat.cxx newmat.hxx \
        matlib.cxx matlib.hxx \
        obj.cxx obj.hxx \
diff --git a/src/Objects/apt_signs.cxx b/src/Objects/apt_signs.cxx
new file mode 100644 (file)
index 0000000..51b2dfc
--- /dev/null
@@ -0,0 +1,155 @@
+// apt_signs.cxx -- build airport signs on the fly
+//
+// Written by Curtis Olson, started July 2001.
+//
+// Copyright (C) 2001  Curtis L. Olson  - curt@flightgear.org
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#include <simgear/math/sg_types.hxx>
+
+#include "apt_signs.hxx"
+#include "obj.hxx"
+
+
+ssgBranch *gen_taxi_sign( const string path, const string content ) {
+    // for demo purposes we assume each element (letter) is 1x1 meter.
+    // Sign is placed 0.25 meters above the ground
+
+    ssgBranch *object = new ssgBranch();
+    object->setName( (char *)content.c_str() );
+
+    double offset = content.length() / 2.0;
+
+    for ( unsigned int i = 0; i < content.length(); ++i ) {
+       string material;
+
+       char item = content[i];
+       if ( item == '<' ) {
+           material = "ArrowL.rgb";
+       } else if ( item == '>' ) {
+           material = "ArrowR.rgb";
+       } else if ( item >= 'A' && item <= 'Z' ) {
+           material = "Letter";
+           material += item;
+           material += ".rgb";
+       } else if ( item >= 'a' && item <= 'z' ) {
+           int tmp = item - 'a';
+           char c = 'A' + tmp;
+           material = "Black";
+           material += c;
+           material += ".rgb";
+       } else {
+           cout << "Unknown taxi sign code = '" << item << "' !!!!" << endl;
+           return NULL;
+       }
+
+       point_list nodes; nodes.clear();
+       point_list normals; normals.clear();
+       point_list texcoords; texcoords.clear();
+       int_list vertex_index; vertex_index.clear();
+       int_list tex_index; tex_index.clear();
+
+       nodes.push_back( Point3D( -offset + i, 0, 0.25 ) );
+       nodes.push_back( Point3D( -offset + i + 1, 0, 0.25 ) );
+       nodes.push_back( Point3D( -offset + i, 0, 1.25 ) );
+       nodes.push_back( Point3D( -offset + i + 1, 0, 1.25 ) );
+
+       normals.push_back( Point3D( 0, -1, 0 ) );
+       normals.push_back( Point3D( 0, -1, 0 ) );
+       normals.push_back( Point3D( 0, -1, 0 ) );
+       normals.push_back( Point3D( 0, -1, 0 ) );
+
+       texcoords.push_back( Point3D( 0, 0, 0 ) );
+       texcoords.push_back( Point3D( 1, 0, 0 ) );
+       texcoords.push_back( Point3D( 0, 1, 0 ) );
+       texcoords.push_back( Point3D( 1, 1, 0 ) );
+
+       vertex_index.push_back( 0 );
+       vertex_index.push_back( 1 );
+       vertex_index.push_back( 2 );
+       vertex_index.push_back( 3 );
+
+       tex_index.push_back( 0 );
+       tex_index.push_back( 1 );
+       tex_index.push_back( 2 );
+       tex_index.push_back( 3 );
+
+       ssgLeaf *leaf = gen_leaf( path, GL_TRIANGLE_STRIP, material,
+                                 nodes, normals, texcoords,
+                                 vertex_index, tex_index,
+                                 false, NULL );
+
+       object->addKid( leaf );
+    }
+
+    return object;
+}
+
+
+ssgBranch *gen_runway_sign( const string path, const string name ) {
+    // for demo purposes we assume each element (letter) is 1x1 meter.
+    // Sign is placed 0.25 meters above the ground
+
+    ssgBranch *object = new ssgBranch();
+    object->setName( (char *)name.c_str() );
+
+    double width = name.length() / 3.0;
+
+    string material = name + ".rgb";
+
+    point_list nodes; nodes.clear();
+    point_list normals; normals.clear();
+    point_list texcoords; texcoords.clear();
+    int_list vertex_index; vertex_index.clear();
+    int_list tex_index; tex_index.clear();
+
+    nodes.push_back( Point3D( -width, 0, 0.25 ) );
+    nodes.push_back( Point3D( width + 1, 0, 0.25 ) );
+    nodes.push_back( Point3D( -width, 0, 1.25 ) );
+    nodes.push_back( Point3D( width + 1, 0, 1.25 ) );
+
+    normals.push_back( Point3D( 0, -1, 0 ) );
+    normals.push_back( Point3D( 0, -1, 0 ) );
+    normals.push_back( Point3D( 0, -1, 0 ) );
+    normals.push_back( Point3D( 0, -1, 0 ) );
+
+    texcoords.push_back( Point3D( 0, 0, 0 ) );
+    texcoords.push_back( Point3D( 1, 0, 0 ) );
+    texcoords.push_back( Point3D( 0, 1, 0 ) );
+    texcoords.push_back( Point3D( 1, 1, 0 ) );
+
+    vertex_index.push_back( 0 );
+    vertex_index.push_back( 1 );
+    vertex_index.push_back( 2 );
+    vertex_index.push_back( 3 );
+
+    tex_index.push_back( 0 );
+    tex_index.push_back( 1 );
+    tex_index.push_back( 2 );
+    tex_index.push_back( 3 );
+
+    ssgLeaf *leaf = gen_leaf( path, GL_TRIANGLE_STRIP, material,
+                             nodes, normals, texcoords,
+                             vertex_index, tex_index,
+                             false, NULL );
+
+    object->addKid( leaf );
+
+    return object;
+}
diff --git a/src/Objects/apt_signs.hxx b/src/Objects/apt_signs.hxx
new file mode 100644 (file)
index 0000000..2d77051
--- /dev/null
@@ -0,0 +1,54 @@
+// apt_signs.hxx -- build airport signs on the fly
+//
+// Written by Curtis Olson, started July 2001.
+//
+// Copyright (C) 2001  Curtis L. Olson  - curt@flightgear.org
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License as
+// published by the Free Software Foundation; either version 2 of the
+// License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// $Id$
+
+
+#ifndef _APT_SIGNS_HXX
+#define _APT_SIGNS_HXX
+
+
+#ifndef __cplusplus                                                          
+# error This library requires C++
+#endif                                   
+
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <simgear/compiler.h>
+
+#include STL_STRING
+
+#include <plib/ssg.h>          // plib include
+
+SG_USING_STD(string);
+
+
+// Generate a taxi sign
+ssgBranch *gen_taxi_sign( const string path, const string content );
+
+
+// Generate a runway sign
+ssgBranch *gen_runway_sign( const string path, const string name );
+
+
+#endif // _APT_SIGNS_HXX
index 45410798a6a2b43309ce946b6587803ece08d458..16611116920f37bb33ea9e543384706b01924869 100644 (file)
@@ -761,13 +761,13 @@ ssgBranch *fgAsciiObjLoad( const string& path, FGTileEntry *t,
 }
 
 
-static ssgLeaf *gen_leaf( const string& path,
-                         const GLenum ty, const string& material,
-                         const point_list& nodes, const point_list& normals,
-                         const point_list& texcoords,
-                         const int_list node_index,
-                         const int_list& tex_index,
-                         const bool calc_lights, ssgVertexArray *lights )
+ssgLeaf *gen_leaf( const string& path,
+                  const GLenum ty, const string& material,
+                  const point_list& nodes, const point_list& normals,
+                  const point_list& texcoords,
+                  const int_list node_index,
+                  const int_list& tex_index,
+                  const bool calc_lights, ssgVertexArray *lights )
 {
     double tex_width = 1000.0, tex_height = 1000.0;
     ssgSimpleState *state = NULL;
@@ -965,131 +965,3 @@ ssgBranch *fgBinObjLoad( const string& path, FGTileEntry *t,
 
     return object;
 }
-
-
-ssgBranch *gen_taxi_sign( const string path, const string content ) {
-    // for demo purposes we assume each element (letter) is 1x1 meter.
-    // Sign is placed 0.25 meters above the ground
-
-    ssgBranch *object = new ssgBranch();
-    object->setName( (char *)content.c_str() );
-
-    double offset = content.length() / 2.0;
-
-    for ( unsigned int i = 0; i < content.length(); ++i ) {
-       string material;
-
-       char item = content[i];
-       if ( item == '<' ) {
-           material = "ArrowL.rgb";
-       } else if ( item == '>' ) {
-           material = "ArrowR.rgb";
-       } else if ( item >= 'A' && item <= 'Z' ) {
-           material = "Letter";
-           material += item;
-           material += ".rgb";
-       } else if ( item >= 'a' && item <= 'z' ) {
-           int tmp = item - 'a';
-           char c = 'A' + tmp;
-           material = "Black";
-           material += c;
-           material += ".rgb";
-       } else {
-           cout << "Unknown taxi sign code = '" << item << "' !!!!" << endl;
-           return NULL;
-       }
-
-       point_list nodes; nodes.clear();
-       point_list normals; normals.clear();
-       point_list texcoords; texcoords.clear();
-       int_list vertex_index; vertex_index.clear();
-       int_list tex_index; tex_index.clear();
-
-       nodes.push_back( Point3D( -offset + i, 0, 0.25 ) );
-       nodes.push_back( Point3D( -offset + i + 1, 0, 0.25 ) );
-       nodes.push_back( Point3D( -offset + i, 0, 1.25 ) );
-       nodes.push_back( Point3D( -offset + i + 1, 0, 1.25 ) );
-
-       normals.push_back( Point3D( 0, -1, 0 ) );
-       normals.push_back( Point3D( 0, -1, 0 ) );
-       normals.push_back( Point3D( 0, -1, 0 ) );
-       normals.push_back( Point3D( 0, -1, 0 ) );
-
-       texcoords.push_back( Point3D( 0, 0, 0 ) );
-       texcoords.push_back( Point3D( 1, 0, 0 ) );
-       texcoords.push_back( Point3D( 0, 1, 0 ) );
-       texcoords.push_back( Point3D( 1, 1, 0 ) );
-
-       vertex_index.push_back( 0 );
-       vertex_index.push_back( 1 );
-       vertex_index.push_back( 2 );
-       vertex_index.push_back( 3 );
-
-       tex_index.push_back( 0 );
-       tex_index.push_back( 1 );
-       tex_index.push_back( 2 );
-       tex_index.push_back( 3 );
-
-       ssgLeaf *leaf = gen_leaf( path, GL_TRIANGLE_STRIP, material,
-                                 nodes, normals, texcoords,
-                                 vertex_index, tex_index,
-                                 false, NULL );
-
-       object->addKid( leaf );
-    }
-
-    return object;
-}
-
-
-ssgBranch *gen_runway_sign( const string path, const string name ) {
-    // for demo purposes we assume each element (letter) is 1x1 meter.
-    // Sign is placed 0.25 meters above the ground
-
-    ssgBranch *object = new ssgBranch();
-    object->setName( (char *)name.c_str() );
-
-    double width = name.length() / 3.0;
-
-    string material = name + ".rgb";
-
-    point_list nodes; nodes.clear();
-    point_list normals; normals.clear();
-    point_list texcoords; texcoords.clear();
-    int_list vertex_index; vertex_index.clear();
-    int_list tex_index; tex_index.clear();
-
-    nodes.push_back( Point3D( -width, 0, 0.25 ) );
-    nodes.push_back( Point3D( width + 1, 0, 0.25 ) );
-    nodes.push_back( Point3D( -width, 0, 1.25 ) );
-    nodes.push_back( Point3D( width + 1, 0, 1.25 ) );
-
-    normals.push_back( Point3D( 0, -1, 0 ) );
-    normals.push_back( Point3D( 0, -1, 0 ) );
-    normals.push_back( Point3D( 0, -1, 0 ) );
-    normals.push_back( Point3D( 0, -1, 0 ) );
-
-    texcoords.push_back( Point3D( 0, 0, 0 ) );
-    texcoords.push_back( Point3D( 1, 0, 0 ) );
-    texcoords.push_back( Point3D( 0, 1, 0 ) );
-    texcoords.push_back( Point3D( 1, 1, 0 ) );
-
-    vertex_index.push_back( 0 );
-    vertex_index.push_back( 1 );
-    vertex_index.push_back( 2 );
-    vertex_index.push_back( 3 );
-
-    tex_index.push_back( 0 );
-    tex_index.push_back( 1 );
-    tex_index.push_back( 2 );
-    tex_index.push_back( 3 );
-
-    ssgLeaf *leaf = gen_leaf( path, GL_TRIANGLE_STRIP, material,
-                             nodes, normals, texcoords,
-                             vertex_index, tex_index,
-                             false, NULL );
-
-    object->addKid( leaf );
-
-    return object;
-}
index 5ad0804e00cdd6d5bd3df967213ad5a9f96deff9..05a7180d7afc78f3180197b4646519de4e49abeb 100644 (file)
@@ -46,6 +46,8 @@
 
 #include <plib/ssg.h>          // plib include
 
+#include <simgear/math/sg_types.hxx>
+
 #include <Scenery/tileentry.hxx>
 
 SG_USING_STD(string);
@@ -67,12 +69,14 @@ ssgBranch *fgAsciiObjLoad(const string& path, FGTileEntry *tile,
 ssgBranch *fgGenTile( const string& path, FGTileEntry *t);
 
 
-// Generate a taxi sign
-ssgBranch *gen_taxi_sign( const string path, const string content );
-
-
-// Generate a runway sign
-ssgBranch *gen_runway_sign( const string path, const string name );
+// Create an ssg leaf
+ssgLeaf *gen_leaf( const string& path,
+                  const GLenum ty, const string& material,
+                  const point_list& nodes, const point_list& normals,
+                  const point_list& texcoords,
+                  const int_list node_index,
+                  const int_list& tex_index,
+                  const bool calc_lights, ssgVertexArray *lights );
 
 
 #endif // _OBJ_HXX