Panda3D
fltVectorRecord.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file fltVectorRecord.cxx
10  * @author drose
11  * @date 2002-08-30
12  */
13 
14 #include "fltVectorRecord.h"
15 #include "fltRecordReader.h"
16 #include "fltRecordWriter.h"
17 
18 TypeHandle FltVectorRecord::_type_handle;
19 
20 /**
21  *
22  */
23 FltVectorRecord::
24 FltVectorRecord(FltHeader *header) : FltRecord(header) {
25  _vector.set(0.0f, 0.0f, 0.0f);
26 }
27 
28 /**
29  * Returns the vector value.
30  */
31 const LVector3 &FltVectorRecord::
32 get_vector() const {
33  return _vector;
34 }
35 
36 /**
37  * Fills in the information in this record based on the information given in
38  * the indicated datagram, whose opcode has already been read. Returns true
39  * on success, false if the datagram is invalid.
40  */
41 bool FltVectorRecord::
42 extract_record(FltRecordReader &reader) {
43  if (!FltRecord::extract_record(reader)) {
44  return false;
45  }
46 
47  nassertr(reader.get_opcode() == FO_vector, false);
48  DatagramIterator &iterator = reader.get_iterator();
49 
50  _vector[0] = iterator.get_be_float32();
51  _vector[1] = iterator.get_be_float32();
52  _vector[2] = iterator.get_be_float32();
53 
54  check_remaining_size(iterator);
55  return true;
56 }
57 
58 /**
59  * Fills up the current record on the FltRecordWriter with data for this
60  * record, but does not advance the writer. Returns true on success, false if
61  * there is some error.
62  */
63 bool FltVectorRecord::
64 build_record(FltRecordWriter &writer) const {
65  if (!FltRecord::build_record(writer)) {
66  return false;
67  }
68 
69  writer.set_opcode(FO_vector);
70  Datagram &datagram = writer.update_datagram();
71 
72  datagram.add_be_float32(_vector[0]);
73  datagram.add_be_float32(_vector[1]);
74  datagram.add_be_float32(_vector[2]);
75 
76  return true;
77 }
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
const LVector3 & get_vector() const
Returns the vector value.
This class writes a sequence of FltRecords to an ostream, handling opcode and size counts properly.
This class turns an istream into a sequence of FltRecords by reading a sequence of Datagrams and extr...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void check_remaining_size(const DatagramIterator &di, const std::string &name=std::string()) const
Checks that the iterator has no bytes left, as it should at the end of a successfully read record.
Definition: fltRecord.cxx:254
DatagramIterator & get_iterator()
Returns an iterator suitable for extracting data from the current record.
This is the first bead in the file, the top of the bead hierarchy, and the primary interface to readi...
Definition: fltHeader.h:44
void add_be_float32(PN_float32 value)
Adds a 32-bit single-precision big-endian floating-point number to the datagram.
Definition: datagram.I:200
The base class for all kinds of records in a MultiGen OpenFlight file.
Definition: fltRecord.h:36
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
FltOpcode get_opcode() const
Returns the opcode associated with the current record.
A class to retrieve the individual data elements previously stored in a Datagram.
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
void set_opcode(FltOpcode opcode)
Sets the opcode associated with the current record.
Datagram & update_datagram()
Returns a modifiable reference to the datagram associated with the current record.
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38