DOM guide: Resolving SIDs: Difference between revisions

From COLLADA Public Wiki
Jump to navigation Jump to search
Elf (talk | contribs)
m DOM SID resolver system moved to DOM guide: Resolving SIDs: better name for content
2.4 notes
 
(11 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Notes about the [[COLLADA DOM]] '''SID Resolver''' {{editor | what=  Andy says to put in the user guide--maybe merge.}}
In [[COLLADA]], some elements are identified with a ''sid'' (scoped identifier). 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]]).


<code>daeSIDResolver</code> is a helper class to resolve COLLADA address syntax targets. It can also be used to do “sidRef” type of lookups (used a lot in [[CFX]] and [[CPhysics]]).
==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 <code>daeURI</code>.)
* The target string
* <s>Optionally, the profile to look into (by default, it uses the COMMON profile.)</s>
* Optionally, the profile to look into (as of 2.4, by default, it looks in any and all profiles; potentially mixing them. Selecting the technique_common profile is impossible--this will change in 2.5.)


To resolve a normal/absolute COLLADA sid target (like in animation channel elements), you need to pass in the containing element (same concept as in <code>daeURI</code>), the target string, and optionally the profile to look into (defaults to use 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, <code>SomeSID</code> would become <code>./SomeSID</code>. Then the container would be where to start looking.


With normal/absolute target resolving, the container can actually be any element that belongs to the same document since the document URI is the only piece of data it requires.
==Example==
This example uses the <code>daeSIDResolver</code> class to find the "pelvis" joint of a skeleton.


To “hack it” to do sid lookups used in CFX, you can pass in a relative target string. This will need to be made programmatically since the documents specify “sid refs” by sid alone and not in relative COLLADA addressing syntax. An example, <code>SomeSID</code> would become <code>./SomeSID</code>. Then the container would be where to start the look from.
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;
}


{{DOM navigation}}
{{DOM navigation}}


[[Category:DOM subsystems|SID resolver system]]
[[Category:COLLADA DOM|Resolving SIDs]]

Latest revision as of 00:19, 16 May 2016

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.)
  • Optionally, the profile to look into (as of 2.4, by default, it looks in any and all profiles; potentially mixing them. Selecting the technique_common profile is impossible--this will change in 2.5.)

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