<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
<X3D profile='Immersiveversion='3.1xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation=' http://www.web3d.org/specifications/x3d-3.1.xsd '>
<head>
<meta name='titlecontent='CADGeometryPrototypes.x3d'/>
<meta name='descriptioncontent='X3D Amendment 1 CAD Component node prototypes for backwards compatibility with VRML97 and X3D v3.0.'/>
<meta name='creatorcontent='Travis Rauch, Alan Shaffer, Mounir Sidhom, Patrick Sullivan and Don Brutzman'/>
<meta name='createdcontent='28 April 2005'/>
<meta name='modifiedcontent='3 December 2011'/>
<meta name='warningcontent='Example scenes using these prototypes do not get support for making embdedded metadata values visible at run time, though metadata can certainly be saved in the scene file OK.'/>
<meta name='referencecontent='CADGeometryExternPrototypes.x3d'/>
<meta name='referencecontent=' http://www.web3d.org/x3d/specifications/ISO-IEC-FDIS-19775-1.2-X3D-AbstractSpecification/Part01/components/CADGeometry.html '/>
<meta name='referencecontent=' http://www.web3d.org/x3d/specifications/ISO-IEC-FDIS-19775-1.2-X3D-AbstractSpecification/Part01/CADInterchange.html '/>
<meta name='subjectcontent='CADAssembly CADFace CADLayer CADPart IndexedQuadSet QuadSet'/>
<meta name='identifiercontent=' http://www.web3d.org/x3d/content/examples/Basic/CAD/CADGeometryPrototypes.x3d '/>
<meta name='generatorcontent='X3D-Edit, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!-- -->
<Scene>
<!-- =========================================== -->
<ProtoDeclare name='IndexedQuadSetappinfo='The IndexedQuadSet node represents a 3D shape composed of a collection of individual quadrilaterals (quads). IndexedQuadSet uses the indices in its index field to specify the vertices of each quad from the coord field. Each quad is formed from a set of four vertices of the Coordinate node identified by four consecutive indices from the index field If the index field does not contain a multiple of four coordinate values the remaining vertices shall be ignored.documentation=' http://www.web3d.org/x3d/specifications/ISO-IEC-19775-Amendment1-PDAM-X3DAbstractSpecification/Part01/components/CADGeometry.html#IndexedQuadSet '>
<ProtoInterface>
<field name='set_indextype='MFInt32accessType='inputOnly'
 appinfo='range [0..∞) or -1'>
<!-- No specific initialization value -->
</field>
<field name='attribtype='MFNodeaccessType='inputOutput'
 appinfo='[X3DVertexAttributeNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='colortype='SFNodeaccessType='inputOutput'
 appinfo='[X3DColorNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='coordtype='SFNodeaccessType='inputOutput'
 appinfo='[X3DCoordinateNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='fogCoordtype='SFNodeaccessType='inputOutput'
 appinfo='[FogCoordinate]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='normaltype='SFNodeaccessType='inputOutput'
 appinfo='[X3DNormalNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='texCoordtype='SFNodeaccessType='inputOutput'
 appinfo='[X3DTextureCoordinateNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='ccwtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='colorPerVertextype='SFBoolvalue='trueaccessType='initializeOnly'
 appinfo='colorPerVertex ignored in IndexedQuadSet. and always treated as true'/>
<field name='normalPerVertextype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='solidtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='indextype='MFInt32accessType='initializeOnly'
 appinfo='range [0..∞) or -1'>
<!-- No specific initialization value -->
</field>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='[X3DMetadataObject]'>
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<IndexedFaceSet DEF='RenderedIQS'>
<IS>
<connect nodeField='attribprotoField='attrib'/>
<connect nodeField='colorprotoField='color'/>
<connect nodeField='colorPerVertexprotoField='colorPerVertex'/>
<connect nodeField='coordprotoField='coord'/>
<connect nodeField='fogCoordprotoField='fogCoord'/>
<connect nodeField='normalprotoField='normal'/>
<connect nodeField='texCoordprotoField='texCoord'/>
<connect nodeField='ccwprotoField='ccw'/>
<connect nodeField='normalPerVertexprotoField='normalPerVertex'/>
<connect nodeField='solidprotoField='solid'/>
</IS>
</IndexedFaceSet>
<!-- Initial node in the PROTO body is actual node type, and the only node rendered. Remaining ProtoBody nodes not rendered -->
<Group DEF='UnrenderedIQS'>
<Script DEF='IndexedQuadSetToIndexedFaceSetdirectOutput='true'>
<field name='indextype='MFInt32accessType='initializeOnly'/>
<field name='set_indextype='MFInt32accessType='inputOnly'/>
<field name='renderedIQStype='SFNodeaccessType='initializeOnly'>
<IndexedFaceSet USE='RenderedIQS'/>
</field>
<field name='localTraceEnabledtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='coordIndexNewtype='MFInt32accessType='initializeOnly'>
<!-- constructed during initialization -->
</field>
<IS>
<connect nodeField='indexprotoField='index'/>
<connect nodeField='set_indexprotoField='set_index'/>
</IS>
<![CDATA[
            ecmascript:

function initialize()
{
	//colorPerVertex ignored in IndexedQuadSet, and always treated as "true"
	RenderedIQS.colorPerVertex = true;

	// index is an array of quad indices. The ordering of
	// the vertices is ccw (counter-clockwise).

	// ensure legal index values
	for (ii=0; ii <= index.length-1; ii++)
	{
	  if (index[ii] < -1)
	  {
		alwaysPrint ('error, index[' + ii + ']=' + index[ii] + ' is illegal value');
		return;
	  }
	}
	tracePrint ('index.length=' + index.length);
	tracePrint ('index=' + index);

	if (index.length < 4)
	{
		alwaysPrint ('warning, index.length=' + index.length + ' insufficient to construct a quad, IQS ignored');
		return;
	}

	coordIndexNew = new MFInt32 ();

	// ii walks through index array,
	// goal is to initialize coordIndexNew list to match quads
	for (ii=0; ii <= index.length-1; ii+=4)
	{
		if ((index[ii]   == index[ii+1]) || (index[ii]   == index[ii+2]) || (index[ii] == index[ii+3]) ||
		    (index[ii+1] == index[ii+2]) || (index[ii+1] == index[ii+3]) ||
		    (index[ii+2] == index[ii+3]))
		{
			alwaysPrint ('index=' + index);
			alwaysPrint ('error, pair of equal indices in quad');
			return;
		}

		if (index[ii] >= 0)
		{
			// add another quad from latest 4 points of fan set to IQS
			// order is ccw, i.e. in correct halfplane direction
			// note: there is an implicit "malloc" here for the'length' element of the array
			coordIndexNew [coordIndexNew.length] = index[ii];
			coordIndexNew [coordIndexNew.length] = index[ii+1];
			coordIndexNew [coordIndexNew.length] = index[ii+2];
			coordIndexNew [coordIndexNew.length] = index[ii+3];
			coordIndexNew [coordIndexNew.length] = -1;
		}

		if (index.length % 4 != 0) {
			alwaysPrint ('error, index field does not contain a multiple of four coordinate values.');
			alwaysPrint ('The remaining vertices shall be ignored');
			return;
		}

	  // incremental trace of array being built
	  tracePrint ('coordIndexNew=' + coordIndexNew);
	}
	renderedIQS.set_coordIndex = coordIndexNew;
	tracePrint ('renderedIQS.coordIndex=' + renderedIQS.coordIndex);
	// match colorIndex if any Color node exists
//	if (nodesHolder.color)
//	{
//	  if (nodesHolder.color.color.length > 0)
//	  {
		//  Could implement color count check here
//	  }
//	}

	// no need to set colorIndex since indexedFaceSet semantics handles this
}
function set_index (value, timestamp)
{
	index = value;
	initialize ();
}
function tracePrint(outputString)
{
    if (localTraceEnabled)
	  Browser.print ('[IndexedQuadSet]' + outputString);
}
function alwaysPrint(outputString)
{
	Browser.print ('[IndexedQuadSet]' + outputString);
}

          
]]>
</Script>
<Group>
<!-- metadata holder -->
<MetadataString containerField='metadata'>
<IS>
<connect nodeField='metadataprotoField='metadata'/>
</IS>
</MetadataString>
</Group>
</Group>
</ProtoBody>
</ProtoDeclare>
<!-- =========================================== -->
<ProtoDeclare name='QuadSetappinfo='The QuadSet node represents a 3D shape that represents a collection of individual planar quadrilaterals. The coord field contains a Coordinate node that defines the 3D vertices that define the quad. Each quad is formed from a consecutive set of four vertices of the coordinate node. If the coordinate node does not contain a multiple of four coordinate values the remaining vertices shall be ignored.documentation=' http://www.web3d.org/x3d/specifications/ISO-IEC-19775-Amendment1-PDAM-X3DAbstractSpecification/Part01/components/CADGeometry.html#QuadSet '>
<ProtoInterface>
<field name='attribtype='MFNodeaccessType='inputOutput'
 appinfo='[X3DVertexAttributeNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='colortype='SFNodeaccessType='inputOutput'
 appinfo='[X3DColorNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='coordtype='SFNodeaccessType='inputOutput'
 appinfo='[X3DCoordinateNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='fogCoordtype='SFNodeaccessType='inputOutput'
 appinfo='[FogCoordinate]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='normaltype='SFNodeaccessType='inputOutput'
 appinfo='[X3DNormalNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='texCoordtype='SFNodeaccessType='inputOutput'
 appinfo='[X3DTextureCoordinateNode]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='ccwtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='colorPerVertextype='SFBoolvalue='trueaccessType='initializeOnly'
 appinfo='colorPerVertex ignored in QuadSet and always treated as true'/>
<field name='normalPerVertextype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='solidtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='[X3DMetadataObject]'>
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<IndexedFaceSet DEF='RenderedQS'>
<IS>
<connect nodeField='attribprotoField='attrib'/>
<connect nodeField='colorprotoField='color'/>
<connect nodeField='colorPerVertexprotoField='colorPerVertex'/>
<connect nodeField='coordprotoField='coord'/>
<connect nodeField='fogCoordprotoField='fogCoord'/>
<connect nodeField='normalprotoField='normal'/>
<connect nodeField='texCoordprotoField='texCoord'/>
<connect nodeField='ccwprotoField='ccw'/>
<connect nodeField='normalPerVertexprotoField='normalPerVertex'/>
<connect nodeField='solidprotoField='solid'/>
</IS>
</IndexedFaceSet>
<!-- Initial node in the PROTO body is actual node type, and the only node rendered. Remaining ProtoBody nodes not rendered -->
<Group DEF='UnrenderedQS'>
<Script DEF='QuadSetToIndexedFaceSetdirectOutput='true'>
<field name='indextype='MFInt32accessType='initializeOnly'>
<!-- initialized in ecmascript -->
</field>
<field name='set_indextype='MFInt32accessType='inputOnly'/>
<field name='renderedQStype='SFNodeaccessType='initializeOnly'>
<IndexedFaceSet USE='RenderedQS'/>
</field>
<field name='localTraceEnabledtype='SFBoolvalue='trueaccessType='initializeOnly'/>
<field name='coordIndexNewtype='MFInt32accessType='initializeOnly'>
<!-- constructed during initialization -->
</field>
<![CDATA[
            ecmascript:

function initialize()
{
	//colorPerVertex ignored in QuadSet, and always treated as "true"
	RenderedQS.colorPerVertex = true;

	// calculate index value from QuadSet coord values
	if (renderedQS.coord)
	{
		numberOfCoordinatePoints = renderedQS.coord.point.length;
	}
	else
	{
		tracePrint ('no Coordinate node found');
		return;
	}
	if (numberOfCoordinatePoints < 4)
	{
		alwaysPrint ('warning, numberOfCoordinatePoints=' + numberOfCoordinatePoints + ' insufficient to construct a quad, QuadSet ignored');
		return;
	}

	coordIndexNew = new MFInt32 ();

	// ii walks through index array,
	// goal is to initialize coordIndexNew list to match quads
	for (ii=0; ii <= numberOfCoordinatePoints-1; ii+=4)
	{
		// check if at least 4 vertices remaining to build a quad
		if ((numberOfCoordinatePoints - ii) < 4)
		{
			alwaysPrint ('error, index field does not contain a multiple' +
' of four coordinate values.');
			alwaysPrint ('The remaining vertices shall be ignored');
			return;
		}

		if ((index[ii]   == index[ii+1]) || (index[ii]   == index[ii+2]) || (index[ii] == index[ii+3]) ||
		    (index[ii+1] == index[ii+2]) || (index[ii+1] == index[ii+3]) ||
		    (index[ii+2] == index[ii+3]))
		{
			alwaysPrint ('index=' + index);
			alwaysPrint ('error, pair of equal indices in quad');
			return;
		}

		if (index[ii] >= 0)
		{
			// add another quad from latest 4 points of fan set to QS
			// order is ccw, i.e. in correct halfplane direction
			// note: there is an implicit "malloc" here for the'length' element of the array
			coordIndexNew [coordIndexNew.length] = index[ii];
			coordIndexNew [coordIndexNew.length] = index[ii+1];
			coordIndexNew [coordIndexNew.length] = index[ii+2];
			coordIndexNew [coordIndexNew.length] = index[ii+3];
			coordIndexNew [coordIndexNew.length] = -1;
		}

	  // incremental trace of array being built
	  tracePrint ('coordIndexNew=' + coordIndexNew);
	}
	renderedQS.set_coordIndex = coordIndexNew;
	tracePrint ('renderedQS.coordIndex=' + renderedQS.coordIndex);
	// match colorIndex if any Color node exists
//	if (nodesHolder.color)
//	{
//	  if (nodesHolder.color.color.length > 0)
//	  {
		//  Could implement color count check here
//	  }
//	}

	// no need to set colorIndex since indexedFaceSet semantics handles this
}
function set_index (value, timestamp)
{
	index = value;
	initialize ();
}
function tracePrint(outputString)
{
    if (localTraceEnabled)
	  Browser.print ('[IndexedQuadSet]' + outputString);
}
function alwaysPrint(outputString)
{
	Browser.print ('[IndexedQuadSet]' + outputString);
}
          
          
]]>
</Script>
<Group>
<!-- metadata holder -->
<MetadataString containerField='metadata'>
<IS>
<connect nodeField='metadataprotoField='metadata'/>
</IS>
</MetadataString>
</Group>
</Group>
</ProtoBody>
</ProtoDeclare>
<!-- ======================================== -->
<ProtoDeclare name='CADAssemblyappinfo='The CADAssembly node holds a set of assemblies or parts grouped together.'>
<ProtoInterface>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'
 appinfo='The children field can contain X3DProductStructureChildNode types. Each child will be either a sub-assembly or a part.'>
<!-- Specification initialization: NULL node -->
</field>
<field name='nametype='SFStringaccessType='inputOutput'
 appinfo='The name field documents the name of this CADAssembly.'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'
 appinfo='Bounding box center: position offset from origin of local coordinate system.'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'
 appinfo='Bounding box size: automatically calculated can be specified as an optimization or constraint.'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='[X3DMetadataObject]'>
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Group>
<IS>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
</IS>
</Group>
<Group>
<!-- metadata holder -->
<MetadataString containerField='metadata'>
<IS>
<connect nodeField='metadataprotoField='metadata'/>
</IS>
</MetadataString>
<!-- name holder -->
<Anchor
  url=' "#hideWarning1" '>
<IS>
<connect nodeField='descriptionprotoField='name'/>
</IS>
</Anchor>
</Group>
</ProtoBody>
</ProtoDeclare>
<!-- ======================================== -->
<ProtoDeclare name='ShapeHolderappinfo='local dummy node to hold value for CADFace'>
<ProtoInterface>
<field name='shapetype='SFNodeaccessType='inputOutput'>
<!-- no initialization value -->
</field>
</ProtoInterface>
<ProtoBody>
<Script directOutput='true'>
<field name='shapetype='SFNodeaccessType='inputOutput'
 appinfo='holder for IS field'>
<!-- no initialization node -->
</field>
<IS>
<connect nodeField='shapeprotoField='shape'/>
</IS>
<![CDATA[
          
ecmascript:
// no script code, this node is simply a container

        
]]>
</Script>
</ProtoBody>
</ProtoDeclare>
<!-- = = = = = -->
<ProtoDeclare name='CADFaceappinfo='The CADFace node holds the geometry representing a face of a part.documentation=' http://www.web3d.org/x3d/specifications/ISO-IEC-19775-Amendment1-PDAM-X3DAbstractSpecification/Part01/components/CADGeometry.html#CADPart '>
<ProtoInterface>
<field name='nametype='SFStringaccessType='inputOutput'
 appinfo='The name field documents the name of this CADFace.'/>
<field name='shapetype='SFNodeaccessType='inputOutput'
 appinfo='[X3DShapeNode | LOD]'>
<!-- Specification initialization: NULL node -->
</field>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'
 appinfo='Bounding box center: position offset from origin of local coordinate system.'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'
 appinfo='Bounding box size: automatically calculated can be specified as an optimization or constraint.'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='[X3DMetadataObject]'>
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<ProtoInstance name='ShapeHolder'>
<IS>
<connect nodeField='shapeprotoField='shape'/>
</IS>
</ProtoInstance>
<Group>
<IS>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
</IS>
<!-- metadata holder -->
<MetadataString containerField='metadata'>
<IS>
<connect nodeField='metadataprotoField='metadata'/>
</IS>
</MetadataString>
<!-- name holder -->
<Anchor
  url=' "#hideWarning2" '>
<IS>
<connect nodeField='descriptionprotoField='name'/>
</IS>
</Anchor>
</Group>
</ProtoBody>
</ProtoDeclare>
<!-- ======================================== -->
<ProtoDeclare name='CADLayerappinfo='The CADLayer node defines a hierarchy of nodes used for showing layer structure.documentation=' http://www.web3d.org/x3d/specifications/ISO-IEC-19775-Amendment1-PDAM-X3DAbstractSpecification/Part01/components/CADGeometry.html#CADPart '>
<ProtoInterface>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'
 appinfo='The children field can contain X3DChildNode types.'>
<!-- Specification initialization: NULL node -->
</field>
<field name='nametype='SFStringaccessType='inputOutput'
 appinfo='The name field documents the name of this CADLayer.'/>
<field name='visibletype='MFBoolaccessType='inputOutput'
 appinfo='specifies whether a particular child and its subchildren are visible. If the number of values is less than the number of children the remaining children shall be visible.'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'
 appinfo='Bounding box center: position offset from origin of local coordinate system.'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'
 appinfo='Bounding box size: automatically calculated can be specified as an optimization or constraint.'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='[X3DMetadataObject]'>
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Group>
<IS>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
</IS>
</Group>
<Group>
<!-- metadata holder -->
<MetadataString containerField='metadata'>
<IS>
<connect nodeField='metadataprotoField='metadata'/>
</IS>
</MetadataString>
<!-- name holder -->
<Anchor
  url=' "#hideWarning3" '>
<IS>
<connect nodeField='descriptionprotoField='name'/>
</IS>
</Anchor>
</Group>
<Script>
<field name='visibletype='MFBoolaccessType='inputOutput'>
<!-- no initialization node -->
</field>
<IS>
<connect nodeField='visibleprotoField='visible'/>
</IS>
<![CDATA[
          
ecmascript:
// no script code, this node is simply a container

        
]]>
</Script>
<!-- No support for MFBool in VRML97, so no functionality provided for visible -->
</ProtoBody>
</ProtoDeclare>
<!-- ======================================== -->
<ProtoDeclare name='CADPartappinfo='CADPart represents the location and faces that constitute apartdocumentation=' http://www.web3d.org/x3d/specifications/ISO-IEC-19775-Amendment1-PDAM-X3DAbstractSpecification/Part01/components/CADGeometry.html#CADPart '>
<ProtoInterface>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'
 appinfo='The children field can only contain CADFace nodes.'>
<!-- Specification initialization: NULL node -->
</field>
<field name='nametype='SFStringaccessType='inputOutput'/>
<field name='translationtype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='rotationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='centertype='SFVec3fvalue='0 0 0accessType='inputOutput'/>
<field name='scaletype='SFVec3fvalue='1 1 1accessType='inputOutput'/>
<field name='scaleOrientationtype='SFRotationvalue='0 0 1 0accessType='inputOutput'/>
<field name='bboxCentertype='SFVec3fvalue='0 0 0accessType='initializeOnly'/>
<field name='bboxSizetype='SFVec3fvalue='-1 -1 -1accessType='initializeOnly'/>
<field name='metadatatype='SFNodeaccessType='inputOutput'
 appinfo='[X3DMetadataObject]'>
<!-- Specification initialization: NULL node -->
</field>
</ProtoInterface>
<ProtoBody>
<Transform>
<IS>
<connect nodeField='childrenprotoField='children'/>
<connect nodeField='addChildrenprotoField='addChildren'/>
<connect nodeField='removeChildrenprotoField='removeChildren'/>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
<connect nodeField='centerprotoField='center'/>
<connect nodeField='scaleprotoField='scale'/>
<connect nodeField='scaleOrientationprotoField='scaleOrientation'/>
<connect nodeField='bboxCenterprotoField='bboxCenter'/>
<connect nodeField='bboxSizeprotoField='bboxSize'/>
</IS>
</Transform>
<Group>
<!-- metadata holder -->
<MetadataString containerField='metadata'>
<IS>
<connect nodeField='metadataprotoField='metadata'/>
</IS>
</MetadataString>
<!-- name holder -->
<Anchor
  url=' "#hideWarning4" '>
<IS>
<connect nodeField='descriptionprotoField='name'/>
</IS>
</Anchor>
</Group>
</ProtoBody>
</ProtoDeclare>
<!-- ======================================== -->
<Anchor description='CADGeometryExternPrototypesparameter='"target=_blank"'
  url=' "CADGeometryExternPrototypes.x3d" "http://www.web3d.org/x3d/content/examples/Basic/development/CADGeometryExternPrototypes.x3d" "CADGeometryExternPrototypes.wrl" "http://www.web3d.org/x3d/content/examples/Basic/development/CADGeometryExternPrototypes.wrl" '>
<Shape>
<Text string='"CADGeometryExternPrototypes" "defines prototype examples" "" "Click text to see" "CADGeometryExternPrototypes"solid='false'>
<FontStyle justify='"MIDDLE" "MIDDLE"size='0.9'/>
</Text>
<Appearance>
<Material diffuseColor='1 1 0.2'/>
</Appearance>
</Shape>
</Anchor>
</Scene>
</X3D>
<!--

Index for ProtoDeclare definitions: IndexedQuadSet, QuadSet, CADAssembly, ShapeHolder, CADFace, CADLayer, CADPart
Index for DEF nodes: IndexedQuadSetToIndexedFaceSet, QuadSetToIndexedFaceSet, RenderedIQS, RenderedQS, UnrenderedIQS, UnrenderedQS
-->

<!-- Color key: <X3dNode DEF='idName' field='value'/> matches <XmlElement DEF='idName' attribute='value'/>     <Prototype name='ProtoName'> <field name='fieldName'/> </Prototype> -->