00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#ifndef COIN_SOPATH_H
00021
#define COIN_SOPATH_H
00022
00023
#include <Inventor/misc/SoBase.h>
00024
#include <Inventor/lists/SbList.h>
00025
#include <Inventor/lists/SoNodeList.h>
00026
00027
#ifndef COIN_INTERNAL
00028
00029
#include <Inventor/SoLists.h>
00030
#endif // !COIN_INTERNAL
00031
00032
00033
class SoWriteAction;
00034
class SoNotList;
00035
class SoInput;
00036
class SoPathList;
00037
00038
00039 class COIN_DLL_API SoPath :
public SoBase {
00040
typedef SoBase inherited;
00041
00042
public:
00043
static void initClass(
void);
00044
00045 SoPath(
const int approxlength = 4);
00046 SoPath(
SoNode *
const head);
00047 SoPath(
const SoPath & rhs);
00048
00049 SoPath & operator=(
const SoPath & rhs);
00050
00051
static SoType getClassTypeId(
void);
00052
virtual SoType getTypeId(
void)
const;
00053
00054
void setHead(
SoNode *
const head);
00055
SoNode * getHead(
void)
const;
00056
void append(
const int childindex);
00057
void append(
SoNode *
const node);
00058
void append(
const SoPath *
const frompath);
00059
void push(
const int childindex);
00060
void pop(
void);
00061
SoNode * getTail(
void)
const;
00062
SoNode * getNode(
const int index)
const;
00063
SoNode * getNodeFromTail(
const int index)
const;
00064
int getIndex(
const int index)
const;
00065
int getIndexFromTail(
const int index)
const;
00066
int getLength(
void)
const;
00067
void truncate(
const int length);
00068
00069
int findFork(
const SoPath *
const path)
const;
00070
int findNode(
const SoNode *
const node)
const;
00071
00072 SbBool containsNode(
const SoNode *
const node)
const;
00073 SbBool containsPath(
const SoPath *
const path)
const;
00074 SoPath * copy(
const int startfromnodeindex = 0,
int numnodes = 0)
const;
00075
friend COIN_DLL_API SbBool operator==(
const SoPath & lhs,
const SoPath & rhs);
00076
friend COIN_DLL_API SbBool operator!=(
const SoPath & lhs,
const SoPath & rhs);
00077
00078
static SoPath * getByName(
const SbName name);
00079
static int getByName(
const SbName name,
SoPathList & l);
00080
00081
void insertIndex(
SoNode *
const parent,
const int newindex);
00082
void removeIndex(
SoNode *
const parent,
const int oldindex);
00083
void replaceIndex(
SoNode *
const parent,
const int index,
00084
SoNode *
const newchild);
00085 SbBool isRelevantNotification(
SoNotList *
const l)
const;
00086
00087
virtual void write(
SoWriteAction * action);
00088
00089
protected:
00090
virtual ~SoPath();
00091
void auditPath(
const SbBool flag);
00092
00093
private:
00094
static void * createInstance(
void);
00095
void append(
SoNode *
const node,
const int index);
00096
int getFullLength(
void)
const;
00097
void truncate(
const int length,
const SbBool donotify);
00098
virtual SbBool readInstance(
SoInput * in,
unsigned short flags);
00099
void setFirstHidden(
void);
00100
00101
SoNodeList nodes;
00102
SbList<int> indices;
00103 SbBool isauditing;
00104
int firsthidden;
00105 SbBool firsthiddendirty;
00106
static SoType classTypeId;
00107
00108
friend class SoFullPath;
00109
friend class SoNodeKitPath;
00110
friend class SoAction;
00111
friend class SoTempPath;
00112 };
00113
00115
00116
inline int
00117 SoPath::getFullLength(
void)
const
00118
{
00119
return this->nodes.
getLength();
00120 }
00121
00122
inline void
00123 SoPath::push(
const int childindex)
00124 {
00125 this->
append(childindex);
00126 }
00127
00128
inline void
00129 SoPath::pop(
void)
00130 {
00131 this->
truncate(this->getFullLength() - 1);
00132 }
00133
00135
00136
00137
#ifndef COIN_INTERNAL
00138
00139
#include <Inventor/SoFullPath.h>
00140
#include <Inventor/misc/SoLightPath.h>
00141
#endif // COIN_INTERNAL
00142
00143
#endif // !COIN_SOPATH_H