|
|
@@ -0,0 +1,261 @@
|
|
|
+// Filename: qpgeomVertexRewriter.I
|
|
|
+// Created by: drose (28Mar05)
|
|
|
+//
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+//
|
|
|
+// PANDA 3D SOFTWARE
|
|
|
+// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
|
|
+//
|
|
|
+// All use of this software is subject to the terms of the Panda 3d
|
|
|
+// Software license. You should have received a copy of this license
|
|
|
+// along with this source code; you will also find a current copy of
|
|
|
+// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
|
|
+//
|
|
|
+// To contact the maintainers of this program write to
|
|
|
+// [email protected] .
|
|
|
+//
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::Constructor
|
|
|
+// Access: Published
|
|
|
+// Description: Constructs a new rewriter to process the vertices of
|
|
|
+// the indicated data object.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE qpGeomVertexRewriter::
|
|
|
+qpGeomVertexRewriter(qpGeomVertexData *vertex_data) :
|
|
|
+ qpGeomVertexWriter(vertex_data),
|
|
|
+ qpGeomVertexReader(vertex_data)
|
|
|
+{
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::Constructor
|
|
|
+// Access: Published
|
|
|
+// Description: Constructs a new rewriter to process the vertices of
|
|
|
+// the indicated data object. This flavor creates the
|
|
|
+// rewriter specifically to process the named data type.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE qpGeomVertexRewriter::
|
|
|
+qpGeomVertexRewriter(qpGeomVertexData *vertex_data, const string &name) :
|
|
|
+ qpGeomVertexWriter(vertex_data),
|
|
|
+ qpGeomVertexReader(vertex_data)
|
|
|
+{
|
|
|
+ set_data_type(name);
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::Constructor
|
|
|
+// Access: Published
|
|
|
+// Description: Constructs a new rewriter to process the vertices of
|
|
|
+// the indicated data object. This flavor creates the
|
|
|
+// rewriter specifically to process the named data type.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE qpGeomVertexRewriter::
|
|
|
+qpGeomVertexRewriter(qpGeomVertexData *vertex_data, const InternalName *name) :
|
|
|
+ qpGeomVertexWriter(vertex_data),
|
|
|
+ qpGeomVertexReader(vertex_data)
|
|
|
+{
|
|
|
+ set_data_type(name);
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::Destructor
|
|
|
+// Access: Published
|
|
|
+// Description:
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE qpGeomVertexRewriter::
|
|
|
+~qpGeomVertexRewriter() {
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::get_vertex_data
|
|
|
+// Access: Published
|
|
|
+// Description: Returns the vertex data object that the
|
|
|
+// rewriter is processing.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE qpGeomVertexData *qpGeomVertexRewriter::
|
|
|
+get_vertex_data() const {
|
|
|
+ nassertr(qpGeomVertexWriter::get_vertex_data() ==
|
|
|
+ qpGeomVertexReader::get_vertex_data(), NULL);
|
|
|
+ return qpGeomVertexWriter::get_vertex_data();
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::set_data_type
|
|
|
+// Access: Published
|
|
|
+// Description: Sets up the rewriter to use the nth data type of the
|
|
|
+// GeomVertexFormat, numbering from 0.
|
|
|
+//
|
|
|
+// This also resets both the read and write vertex
|
|
|
+// numbers to the start vertex (the same value passed to
|
|
|
+// a previous call to set_vertex(), or 0 if set_vertex()
|
|
|
+// was never called.)
|
|
|
+//
|
|
|
+// The return value is true if the data type is valid,
|
|
|
+// false otherwise.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE bool qpGeomVertexRewriter::
|
|
|
+set_data_type(int data_type) {
|
|
|
+ // It's important to invoke the writer first, then the reader. See
|
|
|
+ // set_vertex().
|
|
|
+ qpGeomVertexWriter::set_data_type(data_type);
|
|
|
+ return qpGeomVertexReader::set_data_type(data_type);
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::set_data_type
|
|
|
+// Access: Published
|
|
|
+// Description: Sets up the rewriter to use the data type with the
|
|
|
+// indicated name.
|
|
|
+//
|
|
|
+// This also resets both the read and write vertex
|
|
|
+// numbers to the start vertex (the same value passed to
|
|
|
+// a previous call to set_vertex(), or 0 if set_vertex()
|
|
|
+// was never called.)
|
|
|
+//
|
|
|
+// The return value is true if the data type is valid,
|
|
|
+// false otherwise.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE bool qpGeomVertexRewriter::
|
|
|
+set_data_type(const string &name) {
|
|
|
+ return set_data_type(InternalName::make(name));
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::set_data_type
|
|
|
+// Access: Published
|
|
|
+// Description: Sets up the rewriter to use the data type with the
|
|
|
+// indicated name.
|
|
|
+//
|
|
|
+// This also resets both the read and write vertex
|
|
|
+// numbers to the start vertex (the same value passed to
|
|
|
+// a previous call to set_vertex(), or 0 if set_vertex()
|
|
|
+// was never called.)
|
|
|
+//
|
|
|
+// The return value is true if the data type is valid,
|
|
|
+// false otherwise.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE bool qpGeomVertexRewriter::
|
|
|
+set_data_type(const InternalName *name) {
|
|
|
+ // It's important to invoke the writer first, then the reader. See
|
|
|
+ // set_vertex().
|
|
|
+ qpGeomVertexWriter::set_data_type(name);
|
|
|
+ return qpGeomVertexReader::set_data_type(name);
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::set_data_type
|
|
|
+// Access: Published
|
|
|
+// Description: Sets up the rewriter to use the indicated data_type
|
|
|
+// description on the given array.
|
|
|
+//
|
|
|
+// This also resets both the read and write vertex
|
|
|
+// numbers to the start vertex (the same value passed to
|
|
|
+// a previous call to set_vertex(), or 0 if set_vertex()
|
|
|
+// was never called.)
|
|
|
+//
|
|
|
+// The return value is true if the data type is valid,
|
|
|
+// false otherwise.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+bool qpGeomVertexRewriter::
|
|
|
+set_data_type(int array, const qpGeomVertexDataType *data_type) {
|
|
|
+ // It's important to invoke the writer first, then the reader. See
|
|
|
+ // set_vertex().
|
|
|
+ qpGeomVertexWriter::set_data_type(array, data_type);
|
|
|
+ return qpGeomVertexReader::set_data_type(array, data_type);
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::has_data_type
|
|
|
+// Access: Published
|
|
|
+// Description: Returns true if a valid data type has been
|
|
|
+// successfully set, or false if the data type does not
|
|
|
+// exist.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE bool qpGeomVertexRewriter::
|
|
|
+has_data_type() const {
|
|
|
+ nassertr(qpGeomVertexWriter::get_data_type() ==
|
|
|
+ qpGeomVertexReader::get_data_type(), false);
|
|
|
+ return qpGeomVertexWriter::has_data_type();
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::get_array
|
|
|
+// Access: Published
|
|
|
+// Description: Returns the array index containing the data type that
|
|
|
+// the rewriter is working on.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE int qpGeomVertexRewriter::
|
|
|
+get_array() const {
|
|
|
+ nassertr(qpGeomVertexWriter::get_array() ==
|
|
|
+ qpGeomVertexReader::get_array(), -1);
|
|
|
+ return qpGeomVertexWriter::get_array();
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::get_data_type
|
|
|
+// Access: Published
|
|
|
+// Description: Returns the description of the data type that the
|
|
|
+// rewriter is working on.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE const qpGeomVertexDataType *qpGeomVertexRewriter::
|
|
|
+get_data_type() const {
|
|
|
+ nassertr(qpGeomVertexWriter::get_data_type() ==
|
|
|
+ qpGeomVertexReader::get_data_type(), NULL);
|
|
|
+ return qpGeomVertexWriter::get_data_type();
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::set_vertex
|
|
|
+// Access: Published
|
|
|
+// Description: Sets the start, write, and write index to the
|
|
|
+// indicated value. The rewriter will begin traversing
|
|
|
+// from the given vertex.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE void qpGeomVertexRewriter::
|
|
|
+set_vertex(int vertex) {
|
|
|
+ // It's important to invoke the Writer first, since that might force
|
|
|
+ // a recopy of the array, which might invalidate the pointer already
|
|
|
+ // stored by the Reader if we invoked the Reader first.
|
|
|
+ qpGeomVertexWriter::set_vertex(vertex);
|
|
|
+ qpGeomVertexReader::set_vertex(vertex);
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::get_start_vertex
|
|
|
+// Access: Published
|
|
|
+// Description: Returns the vertex index at which the rewriter
|
|
|
+// started. It will return to this vertex if you reset
|
|
|
+// the current data_type.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE int qpGeomVertexRewriter::
|
|
|
+get_start_vertex() const {
|
|
|
+ nassertr(qpGeomVertexWriter::get_start_vertex() ==
|
|
|
+ qpGeomVertexReader::get_start_vertex(), 0);
|
|
|
+ return qpGeomVertexWriter::get_start_vertex();
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::get_num_vertices
|
|
|
+// Access: Published
|
|
|
+// Description: Returns the number of vertices in the vertex data.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE int qpGeomVertexRewriter::
|
|
|
+get_num_vertices() const {
|
|
|
+ nassertr(qpGeomVertexWriter::get_num_vertices() ==
|
|
|
+ qpGeomVertexReader::get_num_vertices(), 0);
|
|
|
+ return qpGeomVertexWriter::get_num_vertices();
|
|
|
+}
|
|
|
+
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+// Function: qpGeomVertexRewriter::is_at_end
|
|
|
+// Access: Published
|
|
|
+// Description: Returns true if the reader or writer is currently at
|
|
|
+// the end of the list of vertices, false otherwise.
|
|
|
+////////////////////////////////////////////////////////////////////
|
|
|
+INLINE bool qpGeomVertexRewriter::
|
|
|
+is_at_end() const {
|
|
|
+ return qpGeomVertexWriter::is_at_end() || qpGeomVertexReader::is_at_end();
|
|
|
+}
|