DOM guide: Resolving SIDs: Difference between revisions

From COLLADA Public Wiki
Jump to navigation Jump to search
SteveT (talk | contribs)
No edit summary
Elf (talk | contribs)
subheads & small edits
Line 1: Line 1:
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]]).
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 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:
To resolve a normal/absolute COLLADA ''sid'' target (for example, in <animation>/<channel> elements), pass it:
* The containing element (same concept as in <code>daeURI</code>); 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 containing element (same concept as in <code>daeURI</code>); 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
* The target string
* Optionally, the profile to look into (defaults to use COMMON profile)
* Optionally, the profile to look into (by default, it uses the 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, <code>SomeSID</code> would become <code>./SomeSID</code>. Then the container would be where to start the look from.
==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, <code>SomeSID</code> would become <code>./SomeSID</code>. Then the container would be where to start looking.


Here is an example of using the daeSIDResolver class to find the "pelvis" joint of a skeleton.
==Example==
This example uses the <code>daeSIDResolver</code> class to find the "pelvis" joint of a skeleton.


  void sidResolve() {
  void sidResolve() {

Revision as of 03:49, 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 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); 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 (by default, it uses the COMMON profile)

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"
	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