.TH "SoPath" 3 "Tue Dec 26 2023 17:59:22" "Version 4.0.2" "Coin" \" -*- nroff -*- .ad l .nh .SH NAME SoPath \- The \fBSoPath\fP class is a container class for traversal path descriptions\&. .SH SYNOPSIS .br .PP .PP \fC#include \fP .PP Inherits \fBSoBase\fP\&. .PP Inherited by \fBSoFullPath\fP, and \fBSoNodeKitPath\fP\&. .SS "Public Member Functions" .in +1c .ti -1c .RI "\fBSoPath\fP (\fBconst\fP int \fBapproxlength\fP=4)" .br .ti -1c .RI "\fBSoPath\fP (\fBSoNode\fP *\fBconst\fP head)" .br .ti -1c .RI "\fBSoPath\fP (\fBconst\fP \fBSoPath\fP &rhs)" .br .ti -1c .RI "\fBSoPath\fP & \fBoperator=\fP (\fBconst\fP \fBSoPath\fP &rhs)" .br .ti -1c .RI "\fBvirtual\fP \fBSoType\fP \fBgetTypeId\fP (\fBvoid\fP) \fBconst\fP" .br .RI "Returns the type identification of an object derived from a class inheriting \fBSoBase\fP\&. This is used for runtime type checking and 'downward' casting\&. " .ti -1c .RI "\fBvoid\fP \fBsetHead\fP (\fBSoNode\fP *\fBconst\fP head)" .br .ti -1c .RI "\fBSoNode\fP * \fBgetHead\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBappend\fP (\fBconst\fP int \fBchildindex\fP)" .br .ti -1c .RI "\fBvoid\fP \fBappend\fP (\fBSoNode\fP *\fBconst\fP node)" .br .ti -1c .RI "\fBvoid\fP \fBappend\fP (\fBconst\fP \fBSoPath\fP *\fBconst\fP \fBfrompath\fP)" .br .ti -1c .RI "\fBvoid\fP \fBpush\fP (\fBconst\fP int \fBchildindex\fP)" .br .ti -1c .RI "\fBvoid\fP \fBpop\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBSoNode\fP * \fBgetTail\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBSoNode\fP * \fBgetNode\fP (\fBconst\fP int index) \fBconst\fP" .br .ti -1c .RI "\fBSoNode\fP * \fBgetNodeFromTail\fP (\fBconst\fP int index) \fBconst\fP" .br .ti -1c .RI "int \fBgetIndex\fP (\fBconst\fP int index) \fBconst\fP" .br .ti -1c .RI "int \fBgetIndexFromTail\fP (\fBconst\fP int index) \fBconst\fP" .br .ti -1c .RI "int \fBgetLength\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBtruncate\fP (\fBconst\fP int length)" .br .ti -1c .RI "int \fBfindFork\fP (\fBconst\fP \fBSoPath\fP *\fBconst\fP path) \fBconst\fP" .br .ti -1c .RI "int \fBfindNode\fP (\fBconst\fP \fBSoNode\fP *\fBconst\fP node) \fBconst\fP" .br .ti -1c .RI "SbBool \fBcontainsNode\fP (\fBconst\fP \fBSoNode\fP *\fBconst\fP node) \fBconst\fP" .br .ti -1c .RI "SbBool \fBcontainsPath\fP (\fBconst\fP \fBSoPath\fP *\fBconst\fP path) \fBconst\fP" .br .ti -1c .RI "\fBSoPath\fP * \fBcopy\fP (\fBconst\fP int \fBstartfromnodeindex\fP=0, int \fBnumnodes\fP=0) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBinsertIndex\fP (\fBSoNode\fP *\fBconst\fP parent, \fBconst\fP int \fBnewindex\fP)" .br .ti -1c .RI "\fBvoid\fP \fBremoveIndex\fP (\fBSoNode\fP *\fBconst\fP parent, \fBconst\fP int \fBoldindex\fP)" .br .ti -1c .RI "\fBvoid\fP \fBreplaceIndex\fP (\fBSoNode\fP *\fBconst\fP parent, \fBconst\fP int index, \fBSoNode\fP *\fBconst\fP \fBnewchild\fP)" .br .ti -1c .RI "SbBool \fBisRelevantNotification\fP (\fBSoNotList\fP *\fBconst\fP \fBl\fP) \fBconst\fP" .br .ti -1c .RI "\fBvirtual\fP \fBvoid\fP \fBwrite\fP (\fBSoWriteAction\fP *action)" .br .in -1c Public Member Functions inherited from \fBSoBase\fP .in +1c .ti -1c .RI "\fBvoid\fP \fBref\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBunref\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBunrefNoDelete\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "int32_t \fBgetRefCount\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBtouch\fP (\fBvoid\fP)" .br .ti -1c .RI "SbBool \fBisOfType\fP (\fBSoType\fP type) \fBconst\fP" .br .RI "Returns \fCTRUE\fP if the type of this object is either of the same type or inherited from \fItype\fP\&. " .ti -1c .RI "\fBvirtual\fP \fBSbName\fP \fBgetName\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvirtual\fP \fBvoid\fP \fBsetName\fP (\fBconst\fP \fBSbName\fP &\fBnewname\fP)" .br .ti -1c .RI "\fBvirtual\fP \fBvoid\fP \fBstartNotify\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBvirtual\fP \fBvoid\fP \fBnotify\fP (\fBSoNotList\fP *\fBl\fP)" .br .ti -1c .RI "\fBvoid\fP \fBaddAuditor\fP (\fBvoid\fP *\fBconst\fP \fBauditor\fP, \fBconst\fP \fBSoNotRec::Type\fP type)" .br .ti -1c .RI "\fBvoid\fP \fBremoveAuditor\fP (\fBvoid\fP *\fBconst\fP \fBauditor\fP, \fBconst\fP \fBSoNotRec::Type\fP type)" .br .ti -1c .RI "\fBconst\fP \fBSoAuditorList\fP & \fBgetAuditors\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvirtual\fP \fBvoid\fP \fBaddWriteReference\fP (\fBSoOutput\fP *\fBout\fP, SbBool \fBisfromfield\fP=FALSE)" .br .ti -1c .RI "SbBool \fBshouldWrite\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBvoid\fP \fBassertAlive\fP (\fBvoid\fP) \fBconst\fP" .br .in -1c .SS "Static Public Member Functions" .in +1c .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBinitClass\fP (\fBvoid\fP)" .br .RI "Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system\&. " .ti -1c .RI "\fBstatic\fP \fBSoType\fP \fBgetClassTypeId\fP (\fBvoid\fP)" .br .RI "This static method returns the \fBSoType\fP object associated with objects of this class\&. " .ti -1c .RI "\fBstatic\fP \fBSoPath\fP * \fBgetByName\fP (\fBconst\fP \fBSbName\fP name)" .br .ti -1c .RI "\fBstatic\fP int \fBgetByName\fP (\fBconst\fP \fBSbName\fP name, \fBSoPathList\fP &\fBl\fP)" .br .in -1c Static Public Member Functions inherited from \fBSoBase\fP .in +1c .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBinitClass\fP (\fBvoid\fP)" .br .RI "Sets up initialization for data common to all instances of this class, like submitting necessary information to the Coin type system\&. " .ti -1c .RI "\fBstatic\fP \fBSoType\fP \fBgetClassTypeId\fP (\fBvoid\fP)" .br .RI "This static method returns the \fBSoType\fP object associated with objects of this class\&. " .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBaddName\fP (\fBSoBase\fP *\fBconst\fP base, \fBconst\fP char *\fBconst\fP name)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBremoveName\fP (\fBSoBase\fP *\fBconst\fP base, \fBconst\fP char *\fBconst\fP name)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBincrementCurrentWriteCounter\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBdecrementCurrentWriteCounter\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBstatic\fP \fBSoBase\fP * \fBgetNamedBase\fP (\fBconst\fP \fBSbName\fP &name, \fBSoType\fP type)" .br .ti -1c .RI "\fBstatic\fP int \fBgetNamedBases\fP (\fBconst\fP \fBSbName\fP &name, \fBSoBaseList\fP &\fBbaselist\fP, \fBSoType\fP type)" .br .ti -1c .RI "\fBstatic\fP SbBool \fBread\fP (\fBSoInput\fP *input, \fBSoBase\fP *&base, \fBSoType\fP \fBexpectedtype\fP)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBsetInstancePrefix\fP (\fBconst\fP \fBSbString\fP &c)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBsetTraceRefs\fP (SbBool \fBtrace\fP)" .br .ti -1c .RI "\fBstatic\fP SbBool \fBgetTraceRefs\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBstatic\fP SbBool \fBconnectRoute\fP (\fBSoInput\fP *input, \fBconst\fP \fBSbName\fP &\fBfromnodename\fP, \fBconst\fP \fBSbName\fP &\fBfromfieldname\fP, \fBconst\fP \fBSbName\fP &\fBtonodename\fP, \fBconst\fP \fBSbName\fP &\fBtofieldname\fP)" .br .ti -1c .RI "\fBstatic\fP SbBool \fBreadRoute\fP (\fBSoInput\fP *input)" .br .in -1c .SS "Protected Member Functions" .in +1c .ti -1c .RI "\fBvirtual\fP \fB~SoPath\fP ()" .br .ti -1c .RI "\fBvoid\fP \fBauditPath\fP (\fBconst\fP SbBool \fBflag\fP)" .br .in -1c Protected Member Functions inherited from \fBSoBase\fP .in +1c .ti -1c .RI "\fBSoBase\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBvirtual\fP \fB~SoBase\fP ()" .br .ti -1c .RI "\fBvirtual\fP \fBvoid\fP \fBdestroy\fP (\fBvoid\fP)" .br .ti -1c .RI "SbBool \fBhasMultipleWriteRefs\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "SbBool \fBwriteHeader\fP (\fBSoOutput\fP *\fBout\fP, SbBool \fBisgroup\fP, SbBool \fBisengine\fP) \fBconst\fP" .br .ti -1c .RI "\fBvoid\fP \fBwriteFooter\fP (\fBSoOutput\fP *\fBout\fP) \fBconst\fP" .br .ti -1c .RI "\fBvirtual\fP \fBconst\fP char * \fBgetFileFormatName\fP (\fBvoid\fP) \fBconst\fP" .br .ti -1c .RI "\fBvirtual\fP \fBSoNotRec\fP \fBcreateNotRec\fP (\fBvoid\fP)" .br .in -1c .SS "Additional Inherited Members" Protected Types inherited from \fBSoBase\fP .in +1c .ti -1c .RI "enum \fBBaseFlags\fP { \fBIS_ENGINE\fP = 0x01, \fBIS_GROUP\fP = 0x02 }" .br .in -1c Static Protected Member Functions inherited from \fBSoBase\fP .in +1c .ti -1c .RI "\fBstatic\fP uint32_t \fBgetCurrentWriteCounter\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBstaticDataLock\fP (\fBvoid\fP)" .br .ti -1c .RI "\fBstatic\fP \fBvoid\fP \fBstaticDataUnlock\fP (\fBvoid\fP)" .br .in -1c .SH "Detailed Description" .PP The \fBSoPath\fP class is a container class for traversal path descriptions\&. \fBSoPath\fP objects contain a list of \fBSoNode\fP pointers and a list of child indices\&. Indices are necessary to disambiguate situations where a node uses the same node as a child multiple times\&. .PP Paths can be export and imported to/from file, like other \fBSoBase\fP derived objects\&. Read the documentation on the \fBwrite()\fP method to see how the file format is\&. .PP It's important to know the difference between this class and \fBSoFullPath\fP when working with paths\&. \fBSoPath::getTail()\fP will return the first node in the path that doesn't inherit \fBSoGroup\fP, and \fBgetLength()\fP returns the number of nodes down to this node\&. .PP If you need the actual path length, or the actual tail node, you need to cast the path to \fBSoFullPath\fP\&. .SH "Constructor & Destructor Documentation" .PP .SS "SoPath::SoPath (\fBconst\fP int approxlength = \fC4\fP)" The default constructor\&. \fIapproxlength\fP is used to indicate in advance the length of the path to minimize the number of reallocations\&. .SS "SoPath::SoPath (\fBSoNode\fP *\fBconst\fP head)" A constructor\&. The argument is set as the \fIhead\fP (and only) node of the path\&. .SS "SoPath::SoPath (\fBconst\fP \fBSoPath\fP & rhs)" Copy constructor\&. Not part of the original Open Inventor API\&. .SS "SoPath::~SoPath (\fBvoid\fP)\fC [protected]\fP, \fC [virtual]\fP" The destructor is protected as destruction of \fBSoPath\fP instances happens through \fBunref()\fP (as for all objects derived from classes inheriting \fBSoBase\fP)\&. .SH "Member Function Documentation" .PP .SS "\fBSoPath\fP & SoPath::operator= (\fBconst\fP \fBSoPath\fP & rhs)" Assignment operator, copies the \fIrhs\fP path into this\&. Not part of the original Open Inventor API\&. .SS "\fBSoType\fP SoPath::getTypeId (\fBvoid\fP) const\fC [virtual]\fP" .PP Returns the type identification of an object derived from a class inheriting \fBSoBase\fP\&. This is used for runtime type checking and 'downward' casting\&. Usage example: .PP .PP .nf void foo(SoNode * node) { if (node\->getTypeId() == SoFile::getClassTypeId()) { SoFile * filenode = (SoFile *)node; // safe downward cast, knows the type } } .fi .PP .PP For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in \fIall\fP subclasses\&. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the predefined macros available through for instance \fBInventor/nodes/SoSubNode\&.h\fP (SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), \fBInventor/engines/SoSubEngine\&.h\fP (for engine classes) and so on\&. .PP For more information on writing Coin extensions, see the class documentation of the top level superclasses for the various class groups\&. .PP Implements \fBSoBase\fP\&. .SS "\fBvoid\fP SoPath::setHead (\fBSoNode\fP *\fBconst\fP node)" This method sets the head of the path to \fInode\fP\&. If the object already has a path set, it will be truncated\&. .SS "\fBSoNode\fP * SoPath::getHead (\fBvoid\fP) const" This method returns the head of the path, or \fCNULL\fP if the path is empty\&. .SS "\fBvoid\fP SoPath::append (\fBconst\fP int childindex)" This function appends the \fIchildindex\fP child of the path's tail to the end of the path\&. It can only be used after the head is set\&. .SS "\fBvoid\fP SoPath::append (\fBSoNode\fP *\fBconst\fP node)" This function adds \fInode\fP to the end if it is a child of the current tail\&. If path is empty, this is equivalent to calling \fBsetHead()\fP\&. .SS "\fBvoid\fP SoPath::append (\fBconst\fP \fBSoPath\fP *\fBconst\fP frompath)" This method appends the path to the end of the path if the head of \fIfrompath\fP is either the tail of the path or a child of the path's tail\&. If the head of \fIfrompath\fP is used multiple times as a child of the path tail, the lowest child index is used\&. .SS "\fBvoid\fP SoPath::push (\fBconst\fP int childindex)\fC [inline]\fP" This method pushes the child at \fIchildindex\fP on the tail on the path\&. .SS "\fBvoid\fP SoPath::pop (\fBvoid\fP)\fC [inline]\fP" This method pops the tail off the path\&. .SS "\fBSoNode\fP * SoPath::getTail (\fBvoid\fP) const" This method returns the tail node of the path\&. Please note that this method only considers group nodes without hidden children (nodes inheriting \fBSoGroup\fP) when finding the tail\&. .PP If you want to find the real tail node (also below node kits and VRML nodes with hidden children), you have to use \fBSoFullPath::getTail()\fP\&. You don't have to create an \fBSoFullPath\fP instance to do this, just cast the \fBSoPath\fP instance to \fBSoFullPath\fP before getting the tail node: .PP .PP .nf SoNode * tail = static_cast(path)\->getTail(); .fi .PP .SS "\fBSoNode\fP * SoPath::getNode (\fBconst\fP int index) const" This method returns the node at \fIindex\fP in the path, counted from 0 at the head\&. .SS "\fBSoNode\fP * SoPath::getNodeFromTail (\fBconst\fP int index) const" This method returns the node at \fIindex\fP in the path, counting from the tail\&. The \fIindex\fP argument should be zero or positive\&. .SS "int SoPath::getIndex (\fBconst\fP int index) const" This method returns the child index of the node at \fIindex\fP in the path\&. .SS "int SoPath::getIndexFromTail (\fBconst\fP int index) const" This method returns the child index of the node at \fIindex\fP in the path, counting from the tail\&. The \fIindex\fP argument should be zero or positive\&. .SS "int SoPath::getLength (\fBvoid\fP) const" This method returns the number of nodes in the path\&. Only the 'visible' nodes are counted, i\&.e\&. hidden nodes of e\&.g\&. nodekits are not included\&. .PP If you need the actual path length, you need to cast your path to \fBSoFullPath\fP and use \fBSoFullPath::getLength()\fP\&. .SS "\fBvoid\fP SoPath::truncate (\fBconst\fP int length)" This method truncates the path to the given \fIlength\fP (i\&.e\&. all nodes in the path list from index \fIlength\fP and onwards will be removed from the path list)\&. .SS "int SoPath::findFork (\fBconst\fP \fBSoPath\fP *\fBconst\fP path) const" This method returns the index of the last node that is the same for both paths, or \fC-1\fP if the paths don't even start on the same node\&. .SS "int SoPath::findNode (\fBconst\fP \fBSoNode\fP *\fBconst\fP node) const" Returns the index of \fInode\fP if found in the \fIfull\fP path (possibly also in the normally hidden parts), or \fC-1\fP otherwise\&. .PP Note that this method is not part of the original Open Inventor API\&. .SS "SbBool SoPath::containsNode (\fBconst\fP \fBSoNode\fP *\fBconst\fP node) const" This method returns \fCTRUE\fP is \fInode\fP is contained somewhere in the \fIfull\fP path (possibly also in the normally hidden parts), and \fCFALSE\fP otherwise\&. .SS "SbBool SoPath::containsPath (\fBconst\fP \fBSoPath\fP *\fBconst\fP path) const" This method returns \fCTRUE\fP if path is contained in the path, and \fCFALSE\fP otherwise\&. .SS "\fBSoPath\fP * SoPath::copy (\fBconst\fP int startfromnodeindex = \fC0\fP, int numnodes = \fC0\fP) const" This method returns a copy of the path starting at \fIstartfromnodeindex\fP with length \fInumnodes\fP\&. If \fInumnodes\fP is 0 (default) the path will be copied to the end\&. .PP The returned \fBSoPath\fP instance will have an initial reference count of 0\&. It is the caller's responsibility to \fBref()\fP and \fBunref()\fP it according to use\&. .SS "\fBSoPath\fP * SoPath::getByName (\fBconst\fP \fBSbName\fP name)\fC [static]\fP" This static method is for retrieving an \fBSoPath\fP by its \fIname\fP\&. The last registered \fBSoPath\fP with the given \fIname\fP is returned, or \fCNULL\fP if no \fBSoPath\fP by \fIname\fP exists\&. .SS "int SoPath::getByName (\fBconst\fP \fBSbName\fP name, \fBSoPathList\fP & l)\fC [static]\fP" This static method is for finding all the paths with a given \fIname\fP and append them to the \fIl\fP list\&. The number of \fBSoPath\fP instances with \fIname\fP found is returned\&. .SS "\fBvoid\fP SoPath::insertIndex (\fBSoNode\fP *\fBconst\fP parent, \fBconst\fP int newindex)" This method is called when a node in the path chain has a child added, to update the index of its child\&. .PP \fInewindex\fP is the index of the child which was inserted\&. If \fInewindex\fP is lower than the index value of the child node stored in the path, the path is updated accordingly\&. .SS "\fBvoid\fP SoPath::removeIndex (\fBSoNode\fP *\fBconst\fP parent, \fBconst\fP int oldindex)" This method is called when a node in the path chain has a child removed, to update the index of its child\&. .PP \fIoldindex\fP was the index of the removed child\&. If \fIoldindex\fP is lower than or equal to the index value of the child node stored in the path, the path is updated accordingly\&. .SS "\fBvoid\fP SoPath::replaceIndex (\fBSoNode\fP *\fBconst\fP parent, \fBconst\fP int index, \fBSoNode\fP *\fBconst\fP newchild)" This method is called when a node \fInewchild\fP replaces a node in the path\&. \fIindex\fP is the position of the child which has been replaced\&. .SS "SbBool SoPath::isRelevantNotification (\fBSoNotList\fP *\fBconst\fP l) const" Return TRUE if the notification chain \fIl\fP will affect the path\&. \fIl\fP will affect the path either if the notification is in the path (the notification started on a field in a node in the path), or off the path (the notification started in a non-separator node that is left of the path's node)\&. .SS "\fBvoid\fP SoPath::write (\fBSoWriteAction\fP * action)\fC [virtual]\fP" This method is used to write the contents of an \fBSoPath\fP\&. .PP A path is written as: .PP .nf Path { HEAD\-NODE\-OF\-SUBGRAPH NUMBER\-OF\-INDICES INDEX0 INDEX1 \&.\&.\&. } .fi .PP .PP [The rest of the documentation for this method only explains the reason behind a mismatch in behavior between the original Open Inventor and Coin\&. Don't read it if you're not taking a particular interest\&. (Short version: we do \fBSoPath\fP export in a somewhat more inefficient way to avoid the potential for bugs)\&.] .PP Note that unlike Open Inventor, we write the complete subgraph below the head node\&. Only writing the parts of the subgraph affecting the state for nodes within the path is error prone if a subgraph is written out as part of path \fIbefore\fP it is written out 'properly'\&. Consider writing a scene graph which looks like this (in memory): .PP .PP .nf DEF top_sep Separator { Cone { } DEF a_sphere Sphere { } Cube { } } DEF path_switch PathSwitch { path Path { \&.\&.\&.path from "top_sep" to "a_sphere"\&.\&.\&. } } .fi .PP .PP \&.\&.if we now do: .PP .PP .nf SoSeparator * root = new SoSeparator; root\->addChild([ptr to path_switch]); root\->addChild([ptr to top_sep]); SoWriteAction wa; wa\&.apply(root); .fi .PP .PP \&.\&.we would get the scene graph exported like this: .PP .PP .nf Separator { DEF path_switch PathSwitch { path Path { DEF top_sep Separator { DEF a_sphere Sphere { } } 1 0 } } USE top_sep } .fi .PP .PP \&.\&.and as you can see, \fIboth\fP the Cone and the Cube nodes have vanished, as they were not important for the part per se, and not written as part of it\&. .PP This is why we do full subgraph export for head nodes in paths\&. .SS "\fBvoid\fP SoPath::auditPath (\fBconst\fP SbBool flag)\fC [protected]\fP" Set whether or not to audit the nodes in the path to detect changes\&. .SH "Author" .PP Generated automatically by Doxygen for Coin from the source code\&.