DOM guide: Resolving SIDs

From COLLADA Public Wiki
Revision as of 01:10, 16 June 2007 by SteveT (talk | contribs)
Jump to navigation Jump to search

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
Additional information:  • What's new  • Backward compatibility  • Future work
Terminology categories:  • COLLADA  • DOM  • XML