DOM guide: Resolving SIDs: Difference between revisions
m catg up a level |
No edit summary |
||
Line 1: | Line 1: | ||
In [[COLLADA]], some elements are identified with | In [[COLLADA]], some elements are identified with a ''sid''. In the [[COLLADA DOM]], <code>daeSIDResolver</code> is a helper class to resolve these COLLADA address syntax targets. It can also be used to do “sidRef” type lookups (used a lot in [[COLLADA FX]] and [[COLLADA Physics]]). | ||
To resolve a normal/absolute COLLADA ''sid'' target (for example, in <animation>/<channel> elements), pass it: | To resolve a normal/absolute COLLADA ''sid'' target (for example, in <animation>/<channel> elements), pass it: | ||
Line 7: | Line 7: | ||
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, <code>SomeSID</code> would become <code>./SomeSID</code>. Then the container would be where to start the look from. | 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, <code>SomeSID</code> would become <code>./SomeSID</code>. Then the container would be where to start the look from. | ||
Here is an example of using 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" | |||
daeSIDResolver resolver(skeletonRootNode, "pelvis"); | |||
domNode* pelvis = daeSafeCast<domNode>(resolver.getElement()); | |||
if (!pelvis) | |||
return; | |||
cout << pelvis->getId() << endl; | |||
} | |||
{{DOM navigation}} | {{DOM navigation}} | ||
[[Category:COLLADA DOM|Resolving SIDs]] | [[Category:COLLADA DOM|Resolving SIDs]] |
Revision as of 01:10, 16 June 2007
In COLLADA, some elements are identified with a sid. 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 a lot in COLLADA FX and COLLADA Physics).
To resolve a normal/absolute COLLADA sid target (for example, in <animation>/<channel> elements), pass it:
- The containing element (same concept as in
daeURI
); this can actually be any element that belongs to the same document because the document URI is the only piece of data it requires. - The target string
- Optionally, the profile to look into (defaults to use COMMON profile)
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 the look from.
Here is an example of using 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" 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 |