[x3d-public] More Object Model Work: indicating nodes and statements for each profile within object model and X3DJSAIL

Don Brutzman brutzman at nps.edu
Thu Aug 31 00:47:22 PDT 2017


On 8/30/2017 10:23 AM, John Carlson wrote:
> Looks okay to me.

Thanks for double checks.

> On Aug 30, 2017 12:47 PM, "Don Brutzman" <brutzman at nps.edu <mailto:brutzman at nps.edu>> wrote:
> 
>     OK, have amended X3D XML Schema to include allowed nodes under each profile.  Also added allowed X3D statements under Core profile.
> 
>     Documentation at
>     http://www.web3d.org/specifications/X3dSchemaDocumentation3.3/x3d-3.3_profileNames.html#LinkDC <http://www.web3d.org/specifications/X3dSchemaDocumentation3.3/x3d-3.3_profileNames.html#LinkDC>
> 
>     Next: have extracted these node and statement lists for inclusion in the X3D Unified Object Model profile information.
> 
>     Result excerpt follows.  Please look at syntax, hope it looks OK.  As this gets integrated, will next apply by generating profile-validation tests in source code for X3DJSAIL.[...]

OK have taken the next step: added validation of profile and component information for each node in the respective validate() methods.

Example excerpt from AnchorObject follows, where Anchor-specific values for profiles/component/level get plugged in from entries in X3DObjectModel-3.3.xml:

// profile validation test, if connected to full scene
if (findAncestorX3DObject() != null)
{
	String     modelProfile = findAncestorX3DObject().getProfile();
	headObject modelHead    = findAncestorX3DObject().getHead();
	ArrayList<componentObject> sceneComponentsList = new ArrayList<>();
	if (modelHead != null)
		sceneComponentsList = modelHead.getComponentList();
	boolean hasSatisfactoryComponent = false;
	for (componentObject nextComponent : sceneComponentsList)
	{
		if ( nextComponent.getName().equals("Networking") &&
			(nextComponent.getLevel() >= 2))
			hasSatisfactoryComponent = true;
	}
	if (!hasSatisfactoryComponent &&
		!modelProfile.equals("CADInterchange") &&
		!modelProfile.equals("Interactive") &&
		!modelProfile.equals("Immersive") &&
		!modelProfile.equals("MedicalInterchange") &&
		!modelProfile.equals("MPEG4Interactive") &&
		!modelProfile.equals("Full"))
	{
		String errorNotice = ConfigurationProperties.ERROR_ILLEGAL_VALUE +
			": invalid X3D profile='" + getContainerFieldOverride() +
			"' for parent X3D model, add element <componentInfo name='Networking' level='2'/> or assignment " +
			"' findAncestorX3DObject().getHead().addComponentInfo(\"Networking\").setLevel(2);";
		validationResult.append(errorNotice).append("\n");
		throw new InvalidFieldException(errorNotice); // report error
	}
}

Tested satisfactorily on HelloWorldProgram.java which indeed self-diagnosed itself to reveal a missing component entry for Layering level 1.

Test program runs satisfactorily, a few other quirks appear to be adjusted/fixed.  Now running recently released Java JDK version "1.8.0_141".

Updates now uploading, autogeneration stylesheet changes and smoke tests checked in, this new release should be available in about an hour.

	http://www.web3d.org/specifications/java/X3DJSAIL.html

Looking things over, will probably add class constants for minimum COMPONENT and LEVEL later to simplify programmer access.

all the best, Don
-- 
Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman at nps.edu
Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman



More information about the x3d-public mailing list