X3D
type: NamedIndividual
has head: head
has scene: Scene
profile: Immersive
version: 3.0
no namespace schema location: https://www.web3d.org/specifications/x3d-3.0.xsd

meta 1 1
type: NamedIndividual
type: meta
has parent: head
content: RenderingComponentPrototypes.x3d
name: title

meta 1 2
type: NamedIndividual
type: meta
has parent: head
content: Prototype implementations of X3D Rendering component nodes (IndexedTriangleFanSet IndexedTriangleSet IndexedTriangleStripSet LineSet TriangleFanSet TriangleSet TriangleStripSet) implemented as prototypes for backwards compatibility with VRML 97.
name: description

meta 1 3
type: NamedIndividual
type: meta
has parent: head
content: X3dToVrml97.xslt translation stylesheet automatically invokes these prototypes upon encountering any new Rendering nodes.
name: info

meta 1 4
type: NamedIndividual
type: meta
has parent: head
content: Don Brutzman, George Dabrowski, Ken Curtin, Duane Davis, Christos Kalogrias
name: creator

meta 1 5
type: NamedIndividual
type: meta
has parent: head
content: 17 November 2003
name: created

meta 1 6
type: NamedIndividual
type: meta
has parent: head
content: 9 October 2023
name: modified

meta 1 7
type: NamedIndividual
type: meta
has parent: head
content: RenderingComponentExamples.x3d
name: reference

meta 1 8
type: NamedIndividual
type: meta
has parent: head
content: RenderingComponentExternProtoDefinitions.x3d
name: reference

meta 1 9
type: NamedIndividual
type: meta
has parent: head
content: https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/rendering.html
name: reference

meta 1 10
type: NamedIndividual
type: meta
has parent: head
content: https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter13-PointsLinesFaces/Figure13.11IndexedLineSetBoxWireframe.x3d
name: reference

meta 1 11
type: NamedIndividual
type: meta
has parent: head
content: X3D Rendering component nodes (IndexedTriangleFanSet IndexedTriangleSet IndexedTriangleStripSet LineSet TriangleFanSet TriangleSet TriangleStripSet)
name: subject

meta 1 12
type: NamedIndividual
type: meta
has parent: head
content: https://www.web3d.org/x3d/content/examples/Basic/development/RenderingComponentPrototypes.x3d
name: identifier

meta 1 13
type: NamedIndividual
type: meta
has parent: head
content: X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit
name: generator

meta 1 14
type: NamedIndividual
type: meta
has parent: head
content: ../license.html
name: license

RenderingComponentPrototypes.x3d
description: Prototype implementations of X3D Rendering component nodes (IndexedTriangleFanSet IndexedTriangleSet IndexedTriangleStripSet LineSet TriangleFanSet TriangleSet TriangleStripSet) implemented as prototypes for backwards compatibility with VRML 97.
info: X3dToVrml97.xslt translation stylesheet automatically invokes these prototypes upon encountering any new Rendering nodes.
creator: Don Brutzman, George Dabrowski, Ken Curtin, Duane Davis, Christos Kalogrias
created: 17 November 2003
modified: 9 October 2023
reference: RenderingComponentExamples.x3d
reference: RenderingComponentExternProtoDefinitions.x3d
reference: https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/rendering.html
reference: https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Chapter13-PointsLinesFaces/Figure13.11IndexedLineSetBoxWireframe.x3d
subject: X3D Rendering component nodes (IndexedTriangleFanSet IndexedTriangleSet IndexedTriangleStripSet LineSet TriangleFanSet TriangleSet TriangleStripSet)
generator: X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit
license: ../license.html

WorldInfo 2 1
type: NamedIndividual
type: WorldInfo
has parent: Scene
title: RenderingComponentPrototypes.x3d

ProtoDeclare 2 2
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 2 1
has proto body: ProtoBody 2 2 2
appinfo: ColorRGBA defines a set of RGBA colors. Warning: VRML 97 support does not include alpha values.
name: ColorRGBA

field 2 2 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 2 1
access type: inputOutput
appinfo: locally override MFColorRGBA type (which is not supported in VRML 97) in order to downgrade to Color RGB
name: color
type: MFRotation

field 2 2 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 2 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

ColorRGB
type: NamedIndividual
type: Color
has parent: ProtoBody 2 2 2
DEF: ColorRGB
color: 0.8

ColorRGBAholder
type: NamedIndividual
type: OrientationInterpolator
has parent: ProtoBody 2 2 2
has IS: IS 2 2 2 2 1
DEF: ColorRGBAholder

connect 2 2 2 2 1 1
type: NamedIndividual
type: connect
has parent: IS 2 2 2 2 1
node field: keyValue
proto field: color

ConvertColorRGBAtoRGB
type: NamedIndividual
type: Script
has parent: ProtoBody 2 2 2
has field: field 2 2 2 3 1
has field: field 2 2 2 3 2
DEF: ConvertColorRGBAtoRGB
direct output: true
source code: ecmascript: function initialize () { // Browser.println ('colorRGBAnode.keyValue.length=' + colorRGBAnode.keyValue.length); for (i=0; i<=colorRGBAnode.keyValue.length-1; i++) { // type conversion of each array element // specifically, colorRGBAnode.keyValue[i] is an SFRotation // and individual element values are then extracted from that nextColor = new SFColor ( colorRGBAnode.keyValue[i].x, colorRGBAnode.keyValue[i].y, colorRGBAnode.keyValue[i].z); // note colorRGBAnode.keyValue[i].angle holds the alpha value; ignored // Browser.println ('color[' + i + ']=' + nextColor); colorRGBnode.color[i] = nextColor; } }

field 2 2 2 3 1
type: NamedIndividual
type: field
has parent: ConvertColorRGBAtoRGB
has children: ColorRGBAholder-USE-1
access type: initializeOnly
name: colorRGBAnode
type: SFNode

field 2 2 2 3 2
type: NamedIndividual
type: field
has parent: ConvertColorRGBAtoRGB
has color: ColorRGB-USE-1
access type: initializeOnly
name: colorRGBnode
type: SFNode

connect 2 2 2 4 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 2 2 4 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 3
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 3 1
has proto body: ProtoBody 2 3 2
appinfo: IndexedTriangleFanSet represents a 3D shape composed of triangles that form a fan shape around the first vertex declared in each fan.
name: IndexedTriangleFanSet

field 2 3 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: initializeOnly
name: ccw
type: SFBool
value: true

field 2 3 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: initializeOnly
name: colorPerVertex
type: SFBool
value: true

field 2 3 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: initializeOnly
name: normalPerVertex
type: SFBool
value: true

field 2 3 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: initializeOnly
name: solid
type: SFBool
value: true

field 2 3 1 5
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: inputOnly
appinfo: [0 infinity] or -1
name: set_index
type: MFInt32

field 2 3 1 6
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: initializeOnly
appinfo: [0 infinity] or -1
name: index
type: MFInt32

field 2 3 1 7
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 3 1 8
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 3 1 9
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

field 2 3 1 10
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: inputOutput
appinfo: Normal node only
name: normal
type: SFNode

field 2 3 1 11
type: NamedIndividual
type: field
has parent: ProtoInterface 2 3 1
access type: inputOutput
appinfo: TextureCoordinate node only
name: texCoord
type: SFNode

RenderedITFS
type: NamedIndividual
type: IndexedFaceSet
has parent: ProtoBody 2 3 2
has IS: IS 2 3 2 1 1
DEF: RenderedITFS

connect 2 3 2 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: ccw
proto field: ccw

connect 2 3 2 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: normalPerVertex
proto field: normalPerVertex

connect 2 3 2 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: solid
proto field: solid

connect 2 3 2 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: color
proto field: color

connect 2 3 2 1 1 5
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: coord
proto field: coord

connect 2 3 2 1 1 6
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: normal
proto field: normal

connect 2 3 2 1 1 7
type: NamedIndividual
type: connect
has parent: IS 2 3 2 1 1
node field: texCoord
proto field: texCoord

UnrenderedITFS
type: NamedIndividual
type: Group
has parent: ProtoBody 2 3 2
has children: Shape 2 3 2 2 1
has children: IndexedTriangleFanSetToIndexedFaceSet
has children: Group 2 3 2 2 3
DEF: UnrenderedITFS

NodesHolderITFS
type: NamedIndividual
type: IndexedFaceSet
has parent: Shape 2 3 2 2 1
has IS: IS 2 3 2 2 1 1 1
DEF: NodesHolderITFS

connect 2 3 2 2 1 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 1 1 1
node field: color
proto field: color

connect 2 3 2 2 1 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 1 1 1
node field: coord
proto field: coord

connect 2 3 2 2 1 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 1 1 1
node field: normal
proto field: normal

connect 2 3 2 2 1 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 1 1 1
node field: texCoord
proto field: texCoord

IndexedTriangleFanSetToIndexedFaceSet
type: NamedIndividual
type: Script
has parent: UnrenderedITFS
has field: field 2 3 2 2 2 1
has field: field 2 3 2 2 2 2
has field: field 2 3 2 2 2 3
has field: field 2 3 2 2 2 4
has field: field 2 3 2 2 2 5
has field: field 2 3 2 2 2 6
has IS: IS 2 3 2 2 2 7
DEF: IndexedTriangleFanSetToIndexedFaceSet
direct output: true
source code: ecmascript: function initialize() { // index is an array of triangle indices that form a fan shape // around the first vertex declared in each fan. The ordering of // the vertices is ccw (counter-clockwise). // ensure terminated by -1 if (index[index.length-1] != -1) index[index.length] = -1; // ensure legal index values for (i=0; i <= index.length-1; i++) { if (index[i] < -1) { alwaysPrint ('error, index[' + i + ']=' + index[i] + ' is illegal value, treated as -1'); index[i] = -1; } } tracePrint ('index.length=' + index.length); tracePrint ('index=' + index); if (index.length < 4) { alwaysPrint ('warning, index.length=' + index.length + ' insufficient to construct a triangle, ITFS ignored'); return; } j = 0; // coordIndexNew counter coordIndexNew = new MFInt32 (); // i walks through index array, // goal is to initialize coordIndexNew list to match triangles for (i=2; i <= index.length-1; i++) { if ((index[i] == index[i-1]) || (index[i] == index[i-2]) || (index[i-1] == index[i-2])) { alwaysPrint ('index=' + index); alwaysPrint ('error, pair of equal indices in triangle'); return; } if (index[i] >= 0) { // add another triangle from latest 3 points of fan set to IFS // swap order to ensure normal is ccw, i.e. in correct halfplane direction coordIndexNew [coordIndexNew.length] = 0; coordIndexNew [coordIndexNew.length] = index[i]; coordIndexNew [coordIndexNew.length] = index[i-1]; coordIndexNew [coordIndexNew.length] = -1; // terminate } else if (index[i] == -1) // finish current triangle, fan { // ensure done, or sufficient points remain to build another triangle if ( (i!=index.length-1) && (index.length - i < 2)) { alwaysPrint ('index=' + index); alwaysPrint ('error, insufficient index values after' + 'index[' + i + ']=-1'); return; } // ensure done, or enough legal index values remain to build another triangle if ( (i!=index.length-1) && ((index[i+1] == -1) || (index[i+2] == -1) || (index[i+3] == -1))) { alwaysPrint ('index=' + index); alwaysPrint ('error, insufficie…

field 2 3 2 2 2 1
type: NamedIndividual
type: field
has parent: IndexedTriangleFanSetToIndexedFaceSet
access type: initializeOnly
name: index
type: MFInt32

field 2 3 2 2 2 2
type: NamedIndividual
type: field
has parent: IndexedTriangleFanSetToIndexedFaceSet
access type: inputOnly
name: set_index
type: MFInt32

field 2 3 2 2 2 3
type: NamedIndividual
type: field
has parent: IndexedTriangleFanSetToIndexedFaceSet
has geometry: RenderedITFS-USE-1
access type: initializeOnly
name: renderedITFS
type: SFNode

field 2 3 2 2 2 4
type: NamedIndividual
type: field
has parent: IndexedTriangleFanSetToIndexedFaceSet
has geometry: NodesHolderITFS-USE-1
access type: initializeOnly
name: nodesHolder
type: SFNode

field 2 3 2 2 2 5
type: NamedIndividual
type: field
has parent: IndexedTriangleFanSetToIndexedFaceSet
access type: initializeOnly
name: localTraceEnabled
type: SFBool
value: true

field 2 3 2 2 2 6
type: NamedIndividual
type: field
has parent: IndexedTriangleFanSetToIndexedFaceSet
access type: initializeOnly
name: coordIndexNew
type: MFInt32

connect 2 3 2 2 2 7 1
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 2 7
node field: index
proto field: index

connect 2 3 2 2 2 7 2
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 2 7
node field: set_index
proto field: set_index

connect 2 3 2 2 3 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 3 2 2 3 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 4
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 4 1
has proto body: ProtoBody 2 4 2
appinfo: IndexedTriangleSet represents a 3D shape composed of a collection of individual triangles.
name: IndexedTriangleSet

field 2 4 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: initializeOnly
name: ccw
type: SFBool
value: true

field 2 4 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: initializeOnly
name: colorPerVertex
type: SFBool
value: true

field 2 4 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: initializeOnly
name: normalPerVertex
type: SFBool
value: true

field 2 4 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: initializeOnly
name: solid
type: SFBool
value: true

field 2 4 1 5
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: inputOnly
appinfo: [0 infinity] or -1
name: set_index
type: MFInt32

field 2 4 1 6
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: initializeOnly
appinfo: [0 infinity] or -1
name: index
type: MFInt32

field 2 4 1 7
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 4 1 8
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 4 1 9
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: inputOutput
appinfo: Normal node only
name: normal
type: SFNode

field 2 4 1 10
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: inputOutput
appinfo: TextureCoordinate node only
name: texCoord
type: SFNode

field 2 4 1 11
type: NamedIndividual
type: field
has parent: ProtoInterface 2 4 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

RenderedITS
type: NamedIndividual
type: IndexedFaceSet
has parent: ProtoBody 2 4 2
has IS: IS 2 4 2 1 1
DEF: RenderedITS

connect 2 4 2 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: ccw
proto field: ccw

connect 2 4 2 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: normalPerVertex
proto field: normalPerVertex

connect 2 4 2 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: solid
proto field: solid

connect 2 4 2 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: color
proto field: color

connect 2 4 2 1 1 5
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: coord
proto field: coord

connect 2 4 2 1 1 6
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: normal
proto field: normal

connect 2 4 2 1 1 7
type: NamedIndividual
type: connect
has parent: IS 2 4 2 1 1
node field: texCoord
proto field: texCoord

UnrenderedITS
type: NamedIndividual
type: Group
has parent: ProtoBody 2 4 2
has children: Shape 2 4 2 2 1
has children: IndexedTriangleSetToIndexedFaceSet
has children: Group 2 4 2 2 3
DEF: UnrenderedITS

NodesHolderITS
type: NamedIndividual
type: IndexedFaceSet
has parent: Shape 2 4 2 2 1
has IS: IS 2 4 2 2 1 1 1
DEF: NodesHolderITS

connect 2 4 2 2 1 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 1 1 1
node field: color
proto field: color

connect 2 4 2 2 1 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 1 1 1
node field: coord
proto field: coord

connect 2 4 2 2 1 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 1 1 1
node field: normal
proto field: normal

connect 2 4 2 2 1 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 1 1 1
node field: texCoord
proto field: texCoord

IndexedTriangleSetToIndexedFaceSet
type: NamedIndividual
type: Script
has parent: UnrenderedITS
has field: field 2 4 2 2 2 1
has field: field 2 4 2 2 2 2
has field: field 2 4 2 2 2 3
has field: field 2 4 2 2 2 4
has field: field 2 4 2 2 2 5
has field: field 2 4 2 2 2 6
has IS: IS 2 4 2 2 2 7
DEF: IndexedTriangleSetToIndexedFaceSet
direct output: true
source code: ecmascript: function initialize() { // index is an array of triangle 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 < 3) { alwaysPrint ('warning, index.length=' + index.length + ' insufficient to construct a triangle, ITS ignored'); return; } coordIndexNew = new MFInt32 (); // ii walks through index array, // goal is to initialize coordIndexNew list to match triangles for (ii=0; ii <= index.length-1; ii+=3) { if ((index[ii] == index[ii+1]) || (index[ii] == index[ii+2]) || (index[ii+1] == index[ii+2])) { alwaysPrint ('index=' + index); alwaysPrint ('error, pair of equal indices in triangle'); return; } if (index[ii] >= 0) { // add another triangle from latest 3 points of fan set to ITS // order is ccw, i.e. in correct halfplane direction coordIndexNew [coordIndexNew.length] = index[ii]; coordIndexNew [coordIndexNew.length] = index[ii+1]; coordIndexNew [coordIndexNew.length] = index[ii+2]; coordIndexNew [coordIndexNew.length] = -1; } if (index.length % 3 != 0) { alwaysPrint ('error, index field does not contain a multiple' + 'of three coordinate values.'); alwaysPrint ('The remaining vertices shall be ignored'); return; } // ensure done, or sufficient points remain to build another triangle // if ( (i!=index.length-1) && (index.length - i < 2)) // { // alwaysPrint ('index=' + index); // alwaysPrint ('error, insufficient index values after' + // 'index[' + i + ']=-1'); // return; // } // ensure done, or enough legal index values remain to build another triangle // if ( (i!=index.length-1) && // ((index[i+1] == -1) || (index[i+2] == -1) || (index[i+3] == -1))) // { // alwaysPrint ('index=' + index); // alwaysPrint ('error, insufficient non-negative-one index values after' + // 'i…

field 2 4 2 2 2 1
type: NamedIndividual
type: field
has parent: IndexedTriangleSetToIndexedFaceSet
access type: initializeOnly
name: index
type: MFInt32

field 2 4 2 2 2 2
type: NamedIndividual
type: field
has parent: IndexedTriangleSetToIndexedFaceSet
access type: inputOnly
name: set_index
type: MFInt32

field 2 4 2 2 2 3
type: NamedIndividual
type: field
has parent: IndexedTriangleSetToIndexedFaceSet
has geometry: RenderedITS-USE-1
access type: initializeOnly
name: renderedITS
type: SFNode

field 2 4 2 2 2 4
type: NamedIndividual
type: field
has parent: IndexedTriangleSetToIndexedFaceSet
has geometry: NodesHolderITS-USE-1
access type: initializeOnly
name: nodesHolder
type: SFNode

field 2 4 2 2 2 5
type: NamedIndividual
type: field
has parent: IndexedTriangleSetToIndexedFaceSet
access type: initializeOnly
name: localTraceEnabled
type: SFBool
value: true

field 2 4 2 2 2 6
type: NamedIndividual
type: field
has parent: IndexedTriangleSetToIndexedFaceSet
access type: initializeOnly
name: coordIndexNew
type: MFInt32

connect 2 4 2 2 2 7 1
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 2 7
node field: index
proto field: index

connect 2 4 2 2 2 7 2
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 2 7
node field: set_index
proto field: set_index

connect 2 4 2 2 3 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 4 2 2 3 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 5
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 5 1
has proto body: ProtoBody 2 5 2
appinfo: IndexedTriangleStripSet represents a 3D shape composed of strips of triangles.
name: IndexedTriangleStripSet

field 2 5 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: initializeOnly
name: ccw
type: SFBool
value: true

field 2 5 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: initializeOnly
name: colorPerVertex
type: SFBool
value: true

field 2 5 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: initializeOnly
name: normalPerVertex
type: SFBool
value: true

field 2 5 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: initializeOnly
name: solid
type: SFBool
value: true

field 2 5 1 5
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: inputOnly
name: set_index
type: MFInt32

field 2 5 1 6
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: initializeOnly
name: index
type: MFInt32

field 2 5 1 7
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 5 1 8
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 5 1 9
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: inputOutput
appinfo: Normal node only
name: normal
type: SFNode

field 2 5 1 10
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: inputOutput
appinfo: TextureCoordinate node only
name: texCoord
type: SFNode

field 2 5 1 11
type: NamedIndividual
type: field
has parent: ProtoInterface 2 5 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

RenderedTSS
type: NamedIndividual
type: IndexedFaceSet
has parent: ProtoBody 2 5 2
has IS: IS 2 5 2 1 1
DEF: RenderedTSS

connect 2 5 2 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: ccw
proto field: ccw

connect 2 5 2 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: normalPerVertex
proto field: normalPerVertex

connect 2 5 2 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: solid
proto field: solid

connect 2 5 2 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: color
proto field: color

connect 2 5 2 1 1 5
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: coord
proto field: coord

connect 2 5 2 1 1 6
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: normal
proto field: normal

connect 2 5 2 1 1 7
type: NamedIndividual
type: connect
has parent: IS 2 5 2 1 1
node field: texCoord
proto field: texCoord

NodesHolderTSS
type: NamedIndividual
type: IndexedFaceSet
has parent: Shape 2 5 2 2 1
has IS: IS 2 5 2 2 1 1 1
DEF: NodesHolderTSS

connect 2 5 2 2 1 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 1 1 1
node field: color
proto field: color

connect 2 5 2 2 1 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 1 1 1
node field: coord
proto field: coord

connect 2 5 2 2 1 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 1 1 1
node field: normal
proto field: normal

connect 2 5 2 2 1 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 1 1 1
node field: texCoord
proto field: texCoord

IndexedTriangleStripSetToIndexedFaceSet
type: NamedIndividual
type: Script
has parent: Group 2 5 2 2
has field: field 2 5 2 2 2 1
has field: field 2 5 2 2 2 2
has field: field 2 5 2 2 2 3
has field: field 2 5 2 2 2 4
has field: field 2 5 2 2 2 5
has field: field 2 5 2 2 2 6
has IS: IS 2 5 2 2 2 7
DEF: IndexedTriangleStripSetToIndexedFaceSet
direct output: true
source code: ecmascript: function initialize() { // index is an array of triangle 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 < 3) { alwaysPrint ('warning, index.length=' + index.length + ' insufficient to construct a triangle, ITS ignored'); return; } coordIndexNew = new MFInt32 (); // ii walks through index array, // goal is to initialize coordIndexNew list to match triangles for (ii=2; ii <= index.length-1; ii++) { if ((index[ii] == index[ii-1]) || (index[ii] == index[ii-2]) || (index[ii-1] == index[ii-2])) { alwaysPrint ('index=' + index); alwaysPrint ('error, pair of equal indices in triangle'); return; } if (index[ii] >= 0) { // add another triangle from latest 3 points of fan set to ITS // order is ccw, i.e. in correct halfplane direction coordIndexNew [coordIndexNew.length] = index[ii-2]; coordIndexNew [coordIndexNew.length] = index[ii-1]; coordIndexNew [coordIndexNew.length] = index[ii]; coordIndexNew [coordIndexNew.length] = -1; } // ensure done, or sufficient points remain to build another triangle // if ( (i!=index.length-1) && (index.length - i < 2)) // { // alwaysPrint ('index=' + index); // alwaysPrint ('error, insufficient index values after' + // 'index[' + i + ']=-1'); // return; // } // ensure done, or enough legal index values remain to build another triangle // if ( (i!=index.length-1) && // ((index[i+1] == -1) || (index[i+2] == -1) || (index[i+3] == -1))) // { // alwaysPrint ('index=' + index); // alwaysPrint ('error, insufficient non-negative-one index values after' + // 'index[' + i + ']=-1'); // return; // } // incremental trace of array being built tracePrint ('TSScoordIndexNew=' + coordIndexNew); } renderedTSS.set_coordIndex = coordIndexNew; tracePrint ('rend…

field 2 5 2 2 2 1
type: NamedIndividual
type: field
has parent: IndexedTriangleStripSetToIndexedFaceSet
access type: initializeOnly
name: index
type: MFInt32

field 2 5 2 2 2 2
type: NamedIndividual
type: field
has parent: IndexedTriangleStripSetToIndexedFaceSet
access type: inputOnly
name: set_index
type: MFInt32

field 2 5 2 2 2 3
type: NamedIndividual
type: field
has parent: IndexedTriangleStripSetToIndexedFaceSet
has geometry: RenderedTSS-USE-1
access type: initializeOnly
name: renderedTSS
type: SFNode

field 2 5 2 2 2 4
type: NamedIndividual
type: field
has parent: IndexedTriangleStripSetToIndexedFaceSet
has geometry: NodesHolderTSS-USE-1
access type: initializeOnly
name: nodesHolder
type: SFNode

field 2 5 2 2 2 5
type: NamedIndividual
type: field
has parent: IndexedTriangleStripSetToIndexedFaceSet
access type: initializeOnly
name: localTraceEnabled
type: SFBool
value: true

field 2 5 2 2 2 6
type: NamedIndividual
type: field
has parent: IndexedTriangleStripSetToIndexedFaceSet
access type: initializeOnly
name: coordIndexNew
type: MFInt32

connect 2 5 2 2 2 7 1
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 2 7
node field: index
proto field: index

connect 2 5 2 2 2 7 2
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 2 7
node field: set_index
proto field: set_index

connect 2 5 2 2 3 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 5 2 2 3 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 6
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 6 1
has proto body: ProtoBody 2 6 2
appinfo: LineSet represents a 3D geometry formed by constructing polylines from 3D vertices.
name: LineSet

field 2 6 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 6 1
access type: inputOutput
name: vertexCount
type: MFInt32

field 2 6 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 6 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 6 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 6 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 6 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 6 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

RenderedILS
type: NamedIndividual
type: IndexedLineSet
has parent: ProtoBody 2 6 2
has IS: IS 2 6 2 1 1
DEF: RenderedILS

connect 2 6 2 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 6 2 1 1
node field: color
proto field: color

NodesHolderILS
type: NamedIndividual
type: IndexedLineSet
has parent: Shape 2 6 2 2 1
has IS: IS 2 6 2 2 1 1 1
DEF: NodesHolderILS

connect 2 6 2 2 1 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 6 2 2 1 1 1
node field: color
proto field: color

connect 2 6 2 2 1 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 6 2 2 1 1 1
node field: coord
proto field: coord

UnusedAppearance
type: NamedIndividual
type: Appearance
has parent: Shape 2 6 2 2 1
has material: Material 2 6 2 2 1 2 1
DEF: UnusedAppearance

Material 2 6 2 2 1 2 1
type: NamedIndividual
type: Material
has parent: UnusedAppearance
emissive color: 0.8

LineSetToIndexedLineSet
type: NamedIndividual
type: Script
has parent: Group 2 6 2 2
has field: field 2 6 2 2 2 1
has field: field 2 6 2 2 2 2
has field: field 2 6 2 2 2 3
has field: field 2 6 2 2 2 4
has field: field 2 6 2 2 2 5
has IS: IS 2 6 2 2 2 6
DEF: LineSetToIndexedLineSet
direct output: true
source code: ecmascript: function initialize() { vertexCountSum = 0; tracePrint ('vertexCount=' + vertexCount); for (i=0; i < vertexCount.length; i++) { if (vertexCount[i] < 2) { alwaysPrint ('error, vertexCount[' + i + ']=' + vertexCount[i] + ' is illegal value, must be >= 2'); return; } vertexCountSum = vertexCountSum + vertexCountSum[i]; } tracePrint ('vertexCountSum=' + vertexCountSum); numberPoints = nodesHolder.coord.point.length; if (numberPoints < vertexCountSum) { alwaysPrint ('warning, Coordinate.point.length=' + numberPoints + ' is less than vertexCountSum=' + vertexCountSum + ', LS ignored'); return; } coordIndexNew = new MFInt32 (); numberSegments = vertexCountSum.length; // need validity check // i walks through array of points to build line-segment indices i = 0; for (seg=0; seg < numberSegments; seg++) { for (j=0; j < vertexCount[seg]; j++) { coordIndexNew [coordIndexNew.length] = i; i++; } coordIndexNew [coordIndexNew.length] = -1; // terminate current fan // incremental trace of array being built tracePrint ('coordIndexNew=' + coordIndexNew); } // repeat for all vertices renderedILS.coordIndex = coordIndexNew; tracePrint ('renderedILS.coordIndex=' + renderedILS.coordIndex); // match colorIndex if any Color node exists if (nodesHolder.color) { if (nodesHolder.color.color.length > 0) { renderedILS.colorIndex = coordIndexNew; tracePrint ('set_colorIndex=' + coordIndexNew); } } } function tracePrint(outputString) { if (localTraceEnabled) Browser.println ('[TriangleFanSet]' + outputString); } function alwaysPrint(outputString) { Browser.println ('[TriangleFanSet]' + outputString); }

field 2 6 2 2 2 1
type: NamedIndividual
type: field
has parent: LineSetToIndexedLineSet
access type: inputOutput
name: vertexCount
type: MFInt32

field 2 6 2 2 2 2
type: NamedIndividual
type: field
has parent: LineSetToIndexedLineSet
has geometry: RenderedILS-USE-1
access type: initializeOnly
name: renderedILS
type: SFNode

field 2 6 2 2 2 3
type: NamedIndividual
type: field
has parent: LineSetToIndexedLineSet
has geometry: NodesHolderILS-USE-1
access type: initializeOnly
name: nodesHolder
type: SFNode

field 2 6 2 2 2 4
type: NamedIndividual
type: field
has parent: LineSetToIndexedLineSet
access type: initializeOnly
name: localTraceEnabled
type: SFBool
value: true

field 2 6 2 2 2 5
type: NamedIndividual
type: field
has parent: LineSetToIndexedLineSet
access type: initializeOnly
name: coordIndexNew
type: MFInt32

connect 2 6 2 2 2 6 1
type: NamedIndividual
type: connect
has parent: IS 2 6 2 2 2 6
node field: vertexCount
proto field: vertexCount

connect 2 6 2 2 3 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 6 2 2 3 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 7
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 7 1
has proto body: ProtoBody 2 7 2
appinfo: TriangleFanSet represents a 3D shape composed of triangles that form a fan shape around the first vertex declared in each fan.
name: TriangleFanSet

field 2 7 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: inputOutput
name: fanCount
type: MFInt32

field 2 7 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: initializeOnly
name: ccw
type: SFBool
value: true

field 2 7 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: initializeOnly
name: colorPerVertex
type: SFBool
value: true

field 2 7 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: initializeOnly
name: normalPerVertex
type: SFBool
value: true

field 2 7 1 5
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: initializeOnly
name: solid
type: SFBool
value: true

field 2 7 1 6
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 7 1 7
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 7 1 8
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: inputOutput
appinfo: Normal node only
name: normal
type: SFNode

field 2 7 1 9
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: inputOutput
appinfo: TextureCoordinate node only
name: texCoord
type: SFNode

field 2 7 1 10
type: NamedIndividual
type: field
has parent: ProtoInterface 2 7 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

RenderedTFS
type: NamedIndividual
type: IndexedFaceSet
has parent: ProtoBody 2 7 2
has IS: IS 2 7 2 1 1
DEF: RenderedTFS

connect 2 7 2 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: ccw
proto field: ccw

connect 2 7 2 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: colorPerVertex
proto field: colorPerVertex

connect 2 7 2 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: normalPerVertex
proto field: normalPerVertex

connect 2 7 2 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: solid
proto field: solid

connect 2 7 2 1 1 5
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: color
proto field: color

connect 2 7 2 1 1 6
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: coord
proto field: coord

connect 2 7 2 1 1 7
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: normal
proto field: normal

connect 2 7 2 1 1 8
type: NamedIndividual
type: connect
has parent: IS 2 7 2 1 1
node field: texCoord
proto field: texCoord

UnrenderedTFS
type: NamedIndividual
type: Group
has parent: ProtoBody 2 7 2
has children: Shape 2 7 2 2 1
has children: TriangleFanSetToIndexedFaceSet
has children: Group 2 7 2 2 3
DEF: UnrenderedTFS

NodesHolderTFS
type: NamedIndividual
type: IndexedFaceSet
has parent: Shape 2 7 2 2 1
has IS: IS 2 7 2 2 1 1 1
DEF: NodesHolderTFS

connect 2 7 2 2 1 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 7 2 2 1 1 1
node field: color
proto field: color

connect 2 7 2 2 1 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 7 2 2 1 1 1
node field: coord
proto field: coord

connect 2 7 2 2 1 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 7 2 2 1 1 1
node field: normal
proto field: normal

connect 2 7 2 2 1 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 7 2 2 1 1 1
node field: texCoord
proto field: texCoord

TriangleFanSetToIndexedFaceSet
type: NamedIndividual
type: Script
has parent: UnrenderedTFS
has field: field 2 7 2 2 2 1
has field: field 2 7 2 2 2 2
has field: field 2 7 2 2 2 3
has field: field 2 7 2 2 2 4
has field: field 2 7 2 2 2 5
has IS: IS 2 7 2 2 2 6
DEF: TriangleFanSetToIndexedFaceSet
direct output: true
source code: ecmascript: function initialize() { fanCountSum = 0; tracePrint ('fanCount=' + fanCount); for (i=0; i < fanCount.length; i++) { if (fanCount[i] < 3) { alwaysPrint ('error, fanCount[' + i + ']=' + fanCount[i] + ' is illegal value, must be >= 3'); return; } fanCountSum = fanCountSum + fanCount[i]; } tracePrint ('fanCountSum=' + fanCountSum); numberPoints = nodesHolder.coord.point.length; if (numberPoints < fanCountSum) { alwaysPrint ('warning, Coordinate.point.length=' + numberPoints + ' is less than fanCountSum=' + fanCountSum + ', TFS ignored'); return; } coordIndexNew = new MFInt32 (); numberFans = fanCount.length; // need validity check // i walks through array of points to build polygon indices i = 0; for (fan=0; fan < numberFans; fan++) { for (j=0; j < fanCount[fan]; j++) { coordIndexNew [coordIndexNew.length] = i; i++; } coordIndexNew [coordIndexNew.length] = -1; // terminate current fan // incremental trace of array being built tracePrint ('coordIndexNew=' + coordIndexNew); } // repeat for all fans renderedTFS.coordIndex = coordIndexNew; tracePrint ('renderedTFS.coordIndex=' + renderedTFS.coordIndex); // match colorIndex if any Color node exists if (nodesHolder.color) { if (nodesHolder.color.color.length > 0) { renderedTFS.set_colorIndex = coordIndexNew; tracePrint ('set_colorIndex=' + coordIndexNew); } } } function tracePrint(outputString) { if (localTraceEnabled) Browser.println ('[TriangleFanSet]' + outputString); } function alwaysPrint(outputString) { Browser.println ('[TriangleFanSet]' + outputString); }

field 2 7 2 2 2 1
type: NamedIndividual
type: field
has parent: TriangleFanSetToIndexedFaceSet
access type: inputOutput
name: fanCount
type: MFInt32

field 2 7 2 2 2 2
type: NamedIndividual
type: field
has parent: TriangleFanSetToIndexedFaceSet
has geometry: RenderedTFS-USE-1
access type: initializeOnly
name: renderedTFS
type: SFNode

field 2 7 2 2 2 3
type: NamedIndividual
type: field
has parent: TriangleFanSetToIndexedFaceSet
has geometry: NodesHolderTFS-USE-1
access type: initializeOnly
name: nodesHolder
type: SFNode

field 2 7 2 2 2 4
type: NamedIndividual
type: field
has parent: TriangleFanSetToIndexedFaceSet
access type: initializeOnly
name: localTraceEnabled
type: SFBool
value: true

field 2 7 2 2 2 5
type: NamedIndividual
type: field
has parent: TriangleFanSetToIndexedFaceSet
access type: initializeOnly
name: coordIndexNew
type: MFInt32

connect 2 7 2 2 2 6 1
type: NamedIndividual
type: connect
has parent: IS 2 7 2 2 2 6
node field: fanCount
proto field: fanCount

connect 2 7 2 2 3 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 7 2 2 3 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 8
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 8 1
has proto body: ProtoBody 2 8 2
appinfo: TriangleSet represents a 3D shape that represents a collection of individual triangles.
name: TriangleSet

field 2 8 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: initializeOnly
name: ccw
type: SFBool
value: true

field 2 8 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: initializeOnly
name: colorPerVertex
type: SFBool
value: true

field 2 8 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: initializeOnly
name: normalPerVertex
type: SFBool
value: true

field 2 8 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: initializeOnly
name: solid
type: SFBool
value: true

field 2 8 1 5
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 8 1 6
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 8 1 7
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: inputOutput
appinfo: Normal node only
name: normal
type: SFNode

field 2 8 1 8
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: inputOutput
appinfo: TextureCoordinate node only
name: texCoord
type: SFNode

field 2 8 1 9
type: NamedIndividual
type: field
has parent: ProtoInterface 2 8 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

RenderedTS
type: NamedIndividual
type: IndexedFaceSet
has parent: ProtoBody 2 8 2
has IS: IS 2 8 2 1 1
DEF: RenderedTS

connect 2 8 2 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: ccw
proto field: ccw

connect 2 8 2 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: normalPerVertex
proto field: normalPerVertex

connect 2 8 2 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: solid
proto field: solid

connect 2 8 2 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: color
proto field: color

connect 2 8 2 1 1 5
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: coord
proto field: coord

connect 2 8 2 1 1 6
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: normal
proto field: normal

connect 2 8 2 1 1 7
type: NamedIndividual
type: connect
has parent: IS 2 8 2 1 1
node field: texCoord
proto field: texCoord

UnrenderedTS
type: NamedIndividual
type: Group
has parent: ProtoBody 2 8 2
has children: Shape 2 8 2 2 1
has children: TriangleSetToIndexedFaceSet
has children: Group 2 8 2 2 3
DEF: UnrenderedTS

NodesHolderTS
type: NamedIndividual
type: IndexedFaceSet
has parent: Shape 2 8 2 2 1
has IS: IS 2 8 2 2 1 1 1
DEF: NodesHolderTS

connect 2 8 2 2 1 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 8 2 2 1 1 1
node field: color
proto field: color

connect 2 8 2 2 1 1 1 2
type: NamedIndividual
type: connect
has parent: IS 2 8 2 2 1 1 1
node field: coord
proto field: coord

connect 2 8 2 2 1 1 1 3
type: NamedIndividual
type: connect
has parent: IS 2 8 2 2 1 1 1
node field: normal
proto field: normal

connect 2 8 2 2 1 1 1 4
type: NamedIndividual
type: connect
has parent: IS 2 8 2 2 1 1 1
node field: texCoord
proto field: texCoord

TriangleSetToIndexedFaceSet
type: NamedIndividual
type: Script
has parent: UnrenderedTS
has field: field 2 8 2 2 2 1
has field: field 2 8 2 2 2 2
has field: field 2 8 2 2 2 3
has field: field 2 8 2 2 2 4
has field: field 2 8 2 2 2 5
has field: field 2 8 2 2 2 6
DEF: TriangleSetToIndexedFaceSet
direct output: true
source code: ecmascript: function initialize() { // index is an array of triangle 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 < 3) { alwaysPrint ('warning, index.length=' + index.length + ' insufficient to construct a triangle, ITS ignored'); return; } coordIndexNew = new MFInt32 (); // ii walks through index array, // goal is to initialize coordIndexNew list to match triangles for (ii=0; ii <= index.length-1; ii+=3) { if ((index[ii] == index[ii+1]) || (index[ii] == index[ii+2]) || (index[ii+1] == index[ii+2])) { alwaysPrint ('index=' + index); alwaysPrint ('error, pair of equal indices in triangle'); return; } if (index[ii] >= 0) { // add another triangle from latest 3 points of fan set to ITS // order is ccw, i.e. in correct halfplane direction coordIndexNew [coordIndexNew.length] = index[ii]; coordIndexNew [coordIndexNew.length] = index[ii+1]; coordIndexNew [coordIndexNew.length] = index[ii+2]; coordIndexNew [coordIndexNew.length] = -1; } if (index.length % 3 != 0) { alwaysPrint ('error, index field does not contain a multiple' + 'of three coordinate values.'); alwaysPrint ('The remaining vertices shall be ignored'); return; } // ensure done, or sufficient points remain to build another triangle // if ( (i!=index.length-1) && (index.length - i < 2)) // { // alwaysPrint ('index=' + index); // alwaysPrint ('error, insufficient index values after' + // 'index[' + i + ']=-1'); // return; // } // ensure done, or enough legal index values remain to build another triangle // if ( (i!=index.length-1) && // ((index[i+1] == -1) || (index[i+2] == -1) || (index[i+3] == -1))) // { // alwaysPrint ('index=' + index); // alwaysPrint ('error, insufficient non-negative-one index values after' + // 'i…

field 2 8 2 2 2 1
type: NamedIndividual
type: field
has parent: TriangleSetToIndexedFaceSet
access type: initializeOnly
name: index
type: MFInt32

field 2 8 2 2 2 2
type: NamedIndividual
type: field
has parent: TriangleSetToIndexedFaceSet
access type: inputOnly
name: set_index
type: MFInt32

field 2 8 2 2 2 3
type: NamedIndividual
type: field
has parent: TriangleSetToIndexedFaceSet
has geometry: RenderedTS-USE-1
access type: initializeOnly
name: renderedTS
type: SFNode

field 2 8 2 2 2 4
type: NamedIndividual
type: field
has parent: TriangleSetToIndexedFaceSet
has geometry: NodesHolderTS-USE-1
access type: initializeOnly
name: nodesHolder
type: SFNode

field 2 8 2 2 2 5
type: NamedIndividual
type: field
has parent: TriangleSetToIndexedFaceSet
access type: initializeOnly
name: localTraceEnabled
type: SFBool
value: true

field 2 8 2 2 2 6
type: NamedIndividual
type: field
has parent: TriangleSetToIndexedFaceSet
access type: initializeOnly
name: coordIndexNew
type: MFInt32

connect 2 8 2 2 3 1 1 1
type: NamedIndividual
type: connect
has parent: IS 2 8 2 2 3 1 1
node field: metadata
proto field: metadata

ProtoDeclare 2 9
type: NamedIndividual
type: ProtoDeclare
has parent: Scene
has proto interface: ProtoInterface 2 9 1
has proto body: ProtoBody 2 9 2
appinfo: TriangleStripSet represents a 3D shape composed of strips of triangles.
name: TriangleStripSet

field 2 9 1 1
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: inputOutput
name: stripCount
type: MFInt32

field 2 9 1 2
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: initializeOnly
name: ccw
type: SFBool
value: true

field 2 9 1 3
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: initializeOnly
name: colorPerVertex
type: SFBool
value: true

field 2 9 1 4
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: initializeOnly
name: normalPerVertex
type: SFBool
value: true

field 2 9 1 5
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: initializeOnly
name: solid
type: SFBool
value: true

field 2 9 1 6
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: inputOutput
appinfo: Color ColorRGBA node only
name: color
type: SFNode

field 2 9 1 7
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: inputOutput
appinfo: Coordinate node only
name: coord
type: SFNode

field 2 9 1 8
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: inputOutput
appinfo: Normal node only
name: normal
type: SFNode

field 2 9 1 9
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: inputOutput
appinfo: TextureCoordinate node only
name: texCoord
type: SFNode

field 2 9 1 10
type: NamedIndividual
type: field
has parent: ProtoInterface 2 9 1
access type: inputOutput
appinfo: Metadata node only
name: metadata
type: SFNode

Background 2 10
type: NamedIndividual
type: Background
has parent: Scene
ground color: 0.2
sky color: 0.2

LinkToExamples
type: NamedIndividual
type: Anchor
has parent: Scene
has children: Shape 2 11 1
has children: Shape 2 11 2
DEF: LinkToExamples
description: link to examples
url: "RenderingComponentExamples.x3d" "https://www.web3d.org/x3d/content/examples/Basic/development/RenderingComponentExamples.x3d" "RenderingComponentExamples.wrl" "https://www.web3d.org/x3d/content/examples/Basic/development/RenderingComponentExamples.wrl"

Material 2 11 1 1 1
type: NamedIndividual
type: Material
has parent: Appearance 2 11 1 1
diffuse color: 1

Text 2 11 1 2
type: NamedIndividual
type: Text
has parent: Shape 2 11 1
has font style: FontStyle 2 11 1 2 1
string: "RenderingComponentPrototypes" "is a developmental file." "Click this text to view" "RenderingComponentExamples"

FontStyle 2 11 1 2 1
type: NamedIndividual
type: FontStyle
has parent: Text 2 11 1 2
justify: "MIDDLE" "MIDDLE"

Box 2 11 2 1
type: NamedIndividual
type: Box
has parent: Shape 2 11 2
size: 12
size: 5
size: .001

Material 2 11 2 2 1
type: NamedIndividual
type: Material
has parent: Appearance 2 11 2 2
transparency: 0.8