DOM guide: Resolving SIDs
In COLLADA, some elements are identified with a sid (scoped identifier). In the COLLADA DOM, daeSIDResolver
is a helper class to resolve these COLLADA address syntax targets. It can also be used to do “sidRef”-type lookups (used often in COLLADA FX and COLLADA Physics).
Resolving normal SIDs
To resolve a normal/absolute COLLADA sid target (for example, in <animation>/<channel> elements), pass it:
- The containing element (same concept as in
daeURI
.) - The target string
- Optionally, the profile to look into (by default, it uses the COMMON profile. --Actually it had used ALL profiles by default, but this is surely a bug.)
Resolving SIDs in COLLADA FX
To “hack it” to do sid lookups used in COLLADA FX, you can pass in a relative target string. This must be done programmatically because the documents specify “sid refs” by sid alone and not in relative COLLADA addressing syntax. For example, SomeSID
would become ./SomeSID
. Then the container would be where to start looking.
Example
This example uses the daeSIDResolver
class to find the "pelvis" joint of a skeleton.
void sidResolve() { DAE dae; char* docUri = "file:///home/sthomas/models/skinnedModel.dae"; if (dae.load(docUri) != DAE_OK) return; // Get the first <skeleton> in the model daeElement* element = 0; dae.getDatabase()->getElement(&element, 0, 0, "skeleton"); domInstance_controller::domSkeleton* skeleton = daeSafeCast<domInstance_controller::domSkeleton>(element); if (!skeleton) return; // Get the root node of the <skeleton> daeElement* skeletonRootNode = skeleton->getValue().getElement(); // Find the joint named "pelvis". The "./" part is necessary. daeSIDResolver resolver(skeletonRootNode, "./pelvis"); domNode* pelvis = daeSafeCast<domNode>(resolver.getElement()); if (!pelvis) return; cout << pelvis->getId() << endl; }
COLLADA DOM - Version 2.4 Historical Reference |
---|
List of main articles under the DOM portal. |
User Guide chapters: • Intro • Architecture • Setting up • Working with documents • Creating docs • Importing docs • Representing elements • Working with elements • Resolving URIs • Resolving SIDs • Using custom COLLADA data • Integration templates • Error handling Systems: • URI resolver • Meta • Load/save flow • Runtime database • Memory • StringRef • Code generator |