![]() |
http://www.sim.no http://www.coin3d.org |
This class is instantiated once for each class of objects which use fields, and which needs to be able to import and export them. More...
#include <Inventor/fields/SoFieldData.h>
Public Member Functions | |
SoFieldData (void) | |
SoFieldData (const SoFieldData &fd) | |
SoFieldData (const SoFieldData *fd) | |
SoFieldData (int numfields) | |
~SoFieldData () | |
void | addField (SoFieldContainer *base, const char *name, const SoField *field) |
void | overlay (SoFieldContainer *to, const SoFieldContainer *from, SbBool copyconnections) const |
int | getNumFields (void) const |
const SbName & | getFieldName (int index) const |
SoField * | getField (const SoFieldContainer *object, int index) const |
int | getIndex (const SoFieldContainer *fc, const SoField *field) const |
void | addEnumValue (const char *enumname, const char *valuename, int value) |
void | getEnumData (const char *enumname, int &num, const int *&values, const SbName *&names) |
SbBool | read (SoInput *in, SoFieldContainer *object, SbBool erroronunknownfield, SbBool ¬builtin) const |
SbBool | read (SoInput *in, SoFieldContainer *object, const SbName &fieldname, SbBool &foundname) const |
void | write (SoOutput *out, const SoFieldContainer *object) const |
void | copy (const SoFieldData *src) |
SbBool | isSame (const SoFieldContainer *c1, const SoFieldContainer *c2) const |
SbBool | readFieldDescriptions (SoInput *in, SoFieldContainer *object, int numdescriptionsexpected, const SbBool readfieldvalues=1) const |
void | writeFieldDescriptions (SoOutput *out, const SoFieldContainer *object) const |
This class is instantiated once for each class of objects which use fields, and which needs to be able to import and export them.
Each field of a class is stored with the name it has been given within its "owner" class and a pointer offset to the dynamic instance of the field itself.
Enumeration sets are stored with (name, value) pairs, to make it possible to address, read and save enum type fields by name.
It is unlikely that application programmers should need to use any of the methods of this class directly.
SoFieldData::SoFieldData | ( | void | ) |
Default constructor.
SoFieldData::SoFieldData | ( | const SoFieldData & | fd | ) |
Copy constructor.
References copy().
SoFieldData::SoFieldData | ( | const SoFieldData * | fd | ) |
Copy constructor taking a pointer value as an argument. Handles NULL
pointers by behaving like the default constructor.
References copy().
SoFieldData::SoFieldData | ( | int | numfields | ) |
Constructor. Takes an indication on the number of fields which should be stored, to make sure the memory handling is efficient.
SoFieldData::~SoFieldData | ( | ) |
Destructor.
void SoFieldData::addField | ( | SoFieldContainer * | base, | |
const char * | name, | |||
const SoField * | field | |||
) |
Add a new field to our internal list.
The name will be stored along with an pointer offset between base and field, which will be valid for all instances of the class type of base.
References SbList< Type >::append(), SoTexture2::getClassTypeId(), SbList< Type >::getLength(), SoType::getName(), SbName::getString(), SoBase::getTypeId(), SoBase::isOfType(), and SoDebugError::postInfo().
Referenced by SoVRMLScript::copyContents(), readFieldDescriptions(), and SoTexture2::SoTexture2().
void SoFieldData::overlay | ( | SoFieldContainer * | to, | |
const SoFieldContainer * | from, | |||
SbBool | copyconnections | |||
) | const |
Copy fields from container from to container to. If copyconnections is TRUE
, we'll also copy the connections field from has made.
If you think the method signature is a bit strange, you're correct. This should really have been a static method (the owner this
instance of the method isn't used at all, due to how the internal representation of field template list are stored), but for unknown reasons this is a dynamic method in Open Inventor. So also in Coin, to keep compatibility.
References SoField::copyConnection(), SoField::copyFrom(), SoField::enableNotify(), SoField::fixCopy(), getField(), SoFieldContainer::getFieldData(), SoField::getFieldType(), getNumFields(), SoField::isDefault(), SoField::isIgnored(), SoField::isNotifyEnabled(), SoField::setDefault(), SoField::setFieldType(), and SoField::setIgnored().
Referenced by SoFieldContainer::copyFieldValues(), and SoFieldContainer::setToDefaults().
int SoFieldData::getNumFields | ( | void | ) | const |
Returns number of fields contained within this instance.
References SbList< Type >::getLength().
Referenced by SoVRMLScript::copyContents(), SoFieldContainer::getAllFields(), SoFieldContainer::getField(), SoFieldContainer::getFields(), isSame(), overlay(), SoBaseKit::readInstance(), SoVRMLParent::updateChildList(), write(), SoVRMLScript::write(), and writeFieldDescriptions().
const SbName & SoFieldData::getFieldName | ( | int | index | ) | const |
Returns the name of the field at index.
Referenced by SoVRMLScript::copyContents(), SoFieldContainer::getField(), SoFieldContainer::getFieldName(), read(), SoBaseKit::readInstance(), write(), SoVRMLScript::write(), and writeFieldDescriptions().
SoField * SoFieldData::getField | ( | const SoFieldContainer * | object, | |
int | index | |||
) | const |
Returns a pointer to the field at index within the object instance.
References SoTexture2::getClassTypeId(), and SbList< Type >::getLength().
Referenced by SoVRMLScript::copyContents(), SoFieldContainer::getAllFields(), SoFieldContainer::getField(), SoFieldContainer::getFields(), isSame(), overlay(), read(), readFieldDescriptions(), SoBaseKit::readInstance(), SoVRMLParent::updateChildList(), write(), SoVRMLScript::write(), and writeFieldDescriptions().
int SoFieldData::getIndex | ( | const SoFieldContainer * | fc, | |
const SoField * | field | |||
) | const |
Returns the internal index value of field in fc. If field is not part of fc, returns -1.
References SoTexture2::getClassTypeId(), SbList< Type >::getLength(), SoType::getName(), SoField::getTypeId(), and SoBase::isOfType().
Referenced by SoFieldContainer::getFieldName().
void SoFieldData::addEnumValue | ( | const char * | enumname, | |
const char * | valuename, | |||
int | value | |||
) |
Either adds a new enum set (with an initial member), or adds a new value member to an existing enum set.
References SbList< Type >::append(), SbList< Type >::getLength(), and SoDebugError::postInfo().
void SoFieldData::getEnumData | ( | const char * | enumname, | |
int & | num, | |||
const int *& | values, | |||
const SbName *& | names | |||
) |
Returns the names and values of enumeration entry with the enumname. The number of (name, value) pairs available in the enumeration is returned in num.
References SbList< Type >::getLength().
SbBool SoFieldData::read | ( | SoInput * | in, | |
SoFieldContainer * | object, | |||
SbBool | erroronunknownfield, | |||
SbBool & | notbuiltin | |||
) | const |
Read field data from the in stream for fields belonging to object. Returns TRUE
if everything went ok, or FALSE
if any error conditions occurs.
erroronunknownfield decides whether or not FALSE
should be returned if a name identifier not recognized as a fieldname of object is encountered. Note that erroronunknownfield should be FALSE
if object is a container with child objects, otherwise the code will fail upon the first child name specification.
If notbuiltin is TRUE
on return, object is an unknown node or engine type. Unknown nodes are recognized by the fields
keyword first in their file format definition, and unknown engines by the inputs
keyword.
References SoInput::addProto(), SoInput::checkISReference(), SbList< Type >::getLength(), SoType::getName(), SbName::getString(), SoBase::getTypeId(), SoInput::isBinary(), SoInput::isFileVRML2(), SoReadError::post(), SoDebugError::postInfo(), SoDebugError::postWarning(), SoInput::putBack(), SoInput::read(), readFieldDescriptions(), and SoBase::readRoute().
Referenced by SoFieldContainer::readInstance(), SoFieldContainer::set(), and SoBaseKit::set().
SbBool SoFieldData::read | ( | SoInput * | in, | |
SoFieldContainer * | object, | |||
const SbName & | fieldname, | |||
SbBool & | foundname | |||
) | const |
Find field fieldname in object, and if it is available, set foundname to TRUE
and try to read the field specification from in. If foundname is set to TRUE
, the return value says whether or not the field specification could be read without any problems.
If fieldname is not part of object, returns FALSE
with foundname also set to FALSE
.
References getField(), getFieldName(), SbList< Type >::getLength(), and SoField::read().
void SoFieldData::write | ( | SoOutput * | out, | |
const SoFieldContainer * | object | |||
) | const |
Write to out field names and field values for the fields of object.
References SoOutput::getCurrentProto(), getField(), getFieldName(), SoFieldContainer::getIsBuiltIn(), SbName::getLength(), getNumFields(), SoOutput::getStage(), SbName::getString(), SoOutput::indent(), SoOutput::isBinary(), SoField::shouldWrite(), SoOutput::write(), SoField::write(), and writeFieldDescriptions().
Referenced by SoFieldContainer::addWriteReference(), SoFieldContainer::get(), SoSwitch::write(), SoNode::write(), SoGroup::write(), SoVRMLParent::write(), and SoFieldContainer::writeInstance().
void SoFieldData::copy | ( | const SoFieldData * | src | ) |
Copy contents of src into this instance.
If there was any data set up in this instance before the method was called, the old data is removed first.
Note that this only copies the field set template specification from src, not actual field contents. For copying field contents, see the SoFieldData::overlay() method.
References SbList< Type >::append(), enums, fields, and SbList< Type >::getLength().
Referenced by SoFieldData().
SbBool SoFieldData::isSame | ( | const SoFieldContainer * | c1, | |
const SoFieldContainer * | c2 | |||
) | const |
Compares c1 and c2 to see if they have the same field data set and if the fields of c1 have the same values as the fields of c2.
Field connections are not considered (i.e. we will return TRUE
if the values of the fields of c1 are equal to the fields of c2, even if they differ in how they have made connections to other fields).
If you think the method signature is a bit strange, you're correct. This should really have been a static method (the owner this
instance of the method isn't used at all, due to how the internal representations of field template lists are stored), but for unknown reasons this is a dynamic method in Open Inventor. So also in Coin, to keep compatibility.
References getField(), SoFieldContainer::getFieldData(), and getNumFields().
Referenced by SoFieldContainer::fieldsAreEqual(), and SoFieldContainer::hasDefaultValues().
SbBool SoFieldData::readFieldDescriptions | ( | SoInput * | in, | |
SoFieldContainer * | object, | |||
int | numdescriptionsexpected, | |||
const SbBool | readfieldvalues = 1 | |||
) | const |
Reads a set of field specifications from in for an unknown nodeclass type, in the form "[ FIELDCLASS FIELDNAME, FIELDCLASS FIELDNAME, ... ]".
numdescriptionsexpected is used for binary format import to know how many descriptions should be parsed.
If readfieldvalues is TRUE (the default), the field initial value is expected after the field name in the SoInput stream.
References addField(), SoType::badType(), SoType::canCreateInstance(), SoInput::checkISReference(), SoType::createInstance(), SoType::fromName(), SoField::getClassTypeId(), getField(), SbList< Type >::getLength(), SoType::getName(), SbString::getString(), SbName::getString(), SoBase::getTypeId(), SoInput::isBinary(), SoType::isDerivedFrom(), SoReadError::post(), SoDebugError::postInfo(), SoInput::putBack(), SoInput::read(), and SbString::sprintf().
Referenced by read().
void SoFieldData::writeFieldDescriptions | ( | SoOutput * | out, | |
const SoFieldContainer * | object | |||
) | const |
Write a set of field specifications to out for an unknown nodeclass type, in the form "[ FIELDCLASS FIELDNAME, FIELDCLASS FIELDNAME, ... ]".
References getField(), getFieldName(), SoType::getName(), getNumFields(), SoField::getTypeId(), SoOutput::indent(), SoOutput::isBinary(), and SoOutput::write().
Referenced by write().
Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.
Generated on Mon Feb 23 16:33:48 2009 for Coin by Doxygen. 1.5.8