SOFILE(3iv)

πŸ’– SoFile β€” the whole vibe, bestie (3IV) πŸ’–

okay so. gather round 🫢 this is the manual page for SoFile from the 3IV manual, and it's genuinely one of my faves. It's the node that reads its children from a named file. yes. a file file. no cap ✨


🌸 NAME 🌸

SoFile β€” node that reads children from a named file πŸ’…

πŸ¦‹ INHERITS FROM πŸ¦‹

SoBase > SoFieldContainer > SoNode > SoFile

so it's got the whole family tree behind it, the way that it just inherits everything πŸ’œ


✨ SYNOPSIS ✨

#include <Inventor/nodes/SoFile.h>

πŸ’– Fields from class SoFile:

SoSFString          name

πŸ’– Methods from class SoFile:

                     SoFile()
SoGroup *            copyChildren() const
static SoType        getClassTypeId()

πŸ’– Methods from class SoNode:

void                 setOverride(SbBool state)
SbBool               isOverride() const
SoNode *             copy(SbBool copyConnections = FALSE) const
virtual SbBool       affectsState() const
static SoNode *      getByName(const SbName &name)
static int           getByName(const SbName &name, SoNodeList &list)

πŸ’– Methods from class SoFieldContainer:

void                 setToDefaults()
SbBool               hasDefaultValues() const
SbBool               fieldsAreEqual(const SoFieldContainer *fc) const
void                 copyFieldValues(const SoFieldContainer *fc, SbBool
                          copyConnections = FALSE)
SbBool               set(const char *fieldDataString)
void                 get(SbString &fieldDataString)
virtual int          getFields(SoFieldList &resultList) const
virtual SoField *    getField(const SbName &fieldName) const
SbBool               getFieldName(const SoField *field, SbName &fieldName)
                          const
SbBool               isNotifyEnabled() const
SbBool               enableNotify(SbBool flag)

πŸ’– Methods from class SoBase:

void                 ref()
void                 unref() const
void                 unrefNoDelete() const
void                 touch()
virtual SoType       getTypeId() const
SbBool               isOfType(SoType type) const
virtual void         setName(const SbName &name)
virtual SbName       getName() const

🌈 DESCRIPTION 🌈

okay so here's the tea β˜• this node represents a subgraph that was read from a named input file. That's literally its whole personality.

When an SoFile node gets written out, just the field containing the name of the file is written; no children are written out. not one. none. πŸ’€ When an SoFile is encountered during reading, reading continues from the named file, and all nodes read from the file are added as hidden children of the file node.

Whenever the name field changes, any existing children are removed and the contents of the new file is read in. The file node remembers what directory the last file was read from and will read the new file from the same directory after checking the standard list of directories (see SoInput), assuming the field isn't set to an absolute path name. it's giving "I know a guy, and the guy knows a directory" 🧚

The children of an SoFile node are hidden; there is no way of accessing or editing them. πŸ™ˆ If you wish to edit the contents of an SoFile node, you can modify the contents of the named file and then "touch" the name field (see SoField). Alternatively, you can use the copyChildren() method to get a editable copy of the file node's children. Note that this does not affect the original file on disk, however. the disk said "not my business" and honestly, respect.


πŸŽ€ FIELDS πŸŽ€

  • SoSFString name β€” Name of file from which to read children. that's it, that's the field, she's lowkey carrying the entire node πŸ’…

πŸ’… METHODS πŸ’…

  • SoFile() β€” Creates a file node with default settings. fresh out the box, default settings, main character energy ✨
  • SoGroup * copyChildren() const β€” Returns a new SoGroup containing copies of all of the file node's children. a little photocopy of the kids, and the original stays untouched 🫢
  • static SoType getClassTypeId() β€” Returns type identifier for this class. iykyk 🌟

πŸ”₯ ACTION BEHAVIOR πŸ”₯

SoGLRenderAction, SoCallbackAction, SoGetBoundingBoxAction, SoGetMatrixAction, SoHandleEventAction

Traverses its children just as SoGroup does. same energy, different node πŸ‘‘

SoRayPickAction

Traverses its hidden children, but, if intersections are found, generates paths that end at the SoFile node. so it goes in, does the work, and the path comes back ending at SoFile β€” no sneaking past it πŸ¦‹

SoWriteAction

Writes just the name field and no children. periodt. πŸ’–


⭐ FILE FORMAT/DEFAULTS ⭐

File {
   name  "<Undefined file>"
}

note that <Undefined file> is the default and it is, in fact, undefined. iconically honest. 😭


🌈 SEE ALSO 🌈

SoInput, SoPath β€” go read those too bestie, they're the supporting cast and they ate πŸŽ€


one last thing: the children of an SoFile are hidden and there is genuinely no way of accessing or editing them, and copyChildren() gives you a copy that does not affect the original file on disk. don't come for me when your edits don't stick β€” I warned you πŸ’€

okay that's the whole page!! this entire masterpiece lives in the SoFile(3IV) manual, and the footer is just SoFile(3IV)() β€” no version, no date, just mystery-era energy. iconic of her, honestly πŸ’œπŸŒΈβœ¨