DOM guide: Resolving SIDs: Difference between revisions

From COLLADA Public Wiki
Jump to navigation Jump to search
Elf (talk | contribs)
m catg up a level
SteveT (talk | contribs)
No edit summary
Line 1: Line 1:
In [[COLLADA]], some elements are identified with an ''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 of 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 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
Additional information:  • What's new  • Backward compatibility  • Future work
Terminology categories:  • COLLADA  • DOM  • XML