| 1 |
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
|
| 3 | <X3D profile='Immersive' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'> |
| 4 | <head> |
| 5 | <meta name='title' content=' BathymetryGeneratorPrototype.x3d '/> |
| 6 | <meta name='description' content='This prototype generates bathymetry based on the input data using IndexedFaceSet.'/> |
| 7 | <meta name='creator' content='Don Brutzman, Jane Wu'/> |
| 8 | <meta name='created' content='8 February 2002'/> |
| 9 | <meta name='modified' content='28 November 2019'/> |
| 10 | <meta name='subject' content='bathymetry'/> |
| 11 | <meta name='identifier' content=' https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/BathymetryGeneratorPrototype.x3d '/> |
| 12 | <meta name='generator' content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit'/> |
| 13 | <meta name='license' content='../../license.html'/> |
| 14 | </head> |
| 15 | <Scene> |
| 16 | <WorldInfo title='BathymetryGeneratorPrototype.x3d'/> |
| 17 | <ProtoDeclare name='BathymetryGenerator' appinfo='BathymetryGenerator creates bottom topography'> |
| 18 | <ProtoInterface> |
| 19 | <field name='positionArray' type='MFVec3f' value='0.0 0 0 10 -4 0 25 -6 0 30 -8 5 38 -15 5 45 -18 5 55 -22 5 60 -25 15 60 -27 22 55 -30 35 48 -35 35 35 -35 35 25 -45 35 20 -55 35 15 -70 35 3 -70 35 -5 -72 40 -5 -75 50 0 -80 55 15 -75 55 30 -70 55 35 -60 55 40 -50 55 50 -34 55 65 -23 70' accessType='initializeOnly'/> |
| 20 | <field name='colorSchemeDepthRangeArray' type='MFVec2f' value='0 -10 -10 -20 -20 -30 -30 -40 -40 -50 -50 -60 -60 -70 -70 -999999' accessType='initializeOnly'/> |
| 21 | <field name='colorSchemeColorArray' type='MFColor' value='1 1 0.2 0.6 1 1 0 1 1 0.2 0.6 0.2 1 0 1 0.56 0 0.32 0.2 0.3 0.7 0 0 1' accessType='initializeOnly'/> |
| 22 | <field name='beamWidth' type='SFFloat' value='2' accessType='initializeOnly'/> |
| 23 | <field name='traceEnabled' type='SFBool' value='false' accessType='initializeOnly'/> |
| 24 | </ProtoInterface> |
| 25 | <ProtoBody> |
| 26 | <Group> |
| 27 | <Transform DEF='Bathymetry'> |
| 28 | <Shape> |
| 29 |
<!-- ROUTE information for BathymetryFaceSet node:
[from BathymetryScript.bathyCoordIndex to set_coordIndex
]
[from BathymetryScript.bathyColorIndex to set_colorIndex
]
-->
<IndexedFaceSet DEF='BathymetryFaceSet' ccw='false'> |
| 30 |
<!-- ROUTE information for BathymetryFaceColor node:
[from BathymetryScript.bathyFaceColorArray to color
]
-->
<Color DEF='BathymetryFaceColor'/> |
| 31 |
<!-- ROUTE information for BathymetryFaceCoord node:
[from BathymetryScript.bathyFaceCoordPoints to point
]
-->
<Coordinate DEF='BathymetryFaceCoord'/> |
| 32 | </IndexedFaceSet> |
| 33 | </Shape> |
| 34 |
<!-- ROUTE information for BathymetryScript node:
[from bathyFaceCoordPoints to BathymetryFaceCoord.point
]
[from bathyCoordIndex to BathymetryFaceSet.set_coordIndex
]
[from bathyFaceColorArray to BathymetryFaceColor.color
]
[from bathyColorIndex to BathymetryFaceSet.set_colorIndex
]
-->
<Script DEF='BathymetryScript'> |
| 35 | <field name='positionArray' type='MFVec3f' accessType='initializeOnly'/> |
| 36 | <field name='depthRangeArray' type='MFVec2f' accessType='initializeOnly'/> |
| 37 | <field name='depthColorArray' type='MFColor' accessType='initializeOnly'/> |
| 38 | <field name='beamWidth' type='SFFloat' accessType='initializeOnly'/> |
| 39 | <field name='bathyFaceCoordPoints' type='MFVec3f' accessType='outputOnly'/> |
| 40 | <field name='bathyCoordIndex' type='MFInt32' accessType='outputOnly'/> |
| 41 | <field name='bathyFaceColorArray' type='MFColor' accessType='outputOnly'/> |
| 42 | <field name='bathyColorIndex' type='MFInt32' accessType='outputOnly'/> |
| 43 | <field name='traceEnabled' type='SFBool' accessType='initializeOnly'/> |
| 44 |
<field name='dataValid' type='SFBool' value='false' accessType='initializeOnly'
appinfo='local variable'/> |
| 45 |
<field name='color' type='SFColor' value='1 1 1' accessType='initializeOnly'
appinfo='local variable'/> |
| 46 |
<field name='leftPoint' type='SFVec3f' value='0 0 0' accessType='initializeOnly'
appinfo='local variable'/> |
| 47 |
<field name='rightPoint' type='SFVec3f' value='0 0 0' accessType='initializeOnly'
appinfo='local variable'/> |
| 48 | <IS> |
| 49 | <connect nodeField='positionArray' protoField='positionArray'/> |
| 50 | <connect nodeField='depthRangeArray' protoField='colorSchemeDepthRangeArray'/> |
| 51 | <connect nodeField='depthColorArray' protoField='colorSchemeColorArray'/> |
| 52 | <connect nodeField='beamWidth' protoField='beamWidth'/> |
| 53 | <connect nodeField='traceEnabled' protoField='traceEnabled'/> |
| 54 | </IS> |
<![CDATA[
ecmascript:
function initialize()
{
dataValid = true;
checkDataValidity();
if (!dataValid)
return;
tracePrint('positionArray.length = ' + positionArray.length);
coordIndex = 0;
colorIndex = 0;
for (i = 0; i < positionArray.length; i++)
{
//determine the color for every position
determineFaceColor(positionArray[i].y)
bathyFaceColorArray[colorIndex++] = color;
//determine the 'leftPoint' for every poistion -- For the first
//position, use the first and second position.
if (i == 0)
{
determineLeftPoint(positionArray[0], positionArray[1]);
bathyFaceCoordPoints[coordIndex++] = leftPoint;
determineRightPoint(positionArray[0], positionArray[1]);
bathyFaceCoordPoints[coordIndex++] = rightPoint;
}
else
{
determineLeftPoint(positionArray[i], positionArray[i-1]);
bathyFaceCoordPoints[coordIndex++] = leftPoint;
determineRightPoint(positionArray[i], positionArray[i-1]);
bathyFaceCoordPoints[coordIndex++] = rightPoint;
}
}
tracePrint('bathyFaceCoordPoints = ' + bathyFaceCoordPoints);
j = 0;
for (i = 0; i < (positionArray.length - 1); i++)
{
bathyCoordIndex[j++] = i * 2;
bathyCoordIndex[j++] = i * 2 + 1;
bathyCoordIndex[j++] = i * 2 + 2;
bathyCoordIndex[j++] = i * 2 + 3;
bathyCoordIndex[j++] = -1;
bathyCoordIndex[j++] = i * 2 + 3;
bathyCoordIndex[j++] = i * 2 + 2;
bathyCoordIndex[j++] = i * 2 + 1;
bathyCoordIndex[j++] = i * 2;
bathyCoordIndex[j++] = -1;
}
tracePrint('bathyCoordIndex = ' + bathyCoordIndex);
}
function checkDataValidity()
{
if (depthRangeArray.length != depthColorArray.length)
{
alwaysPrint('<Error> colorSchemeDepthRangeArray must be the same length as colorSchemeColorArray');
dataValid = false;
return;
}
}
function determineFaceColor(depth)
{
for (j = 0; j < depthColorArray.length; j++)
{
if (depth <= depthRangeArray[j].x && depth >= depthRangeArray[j].y)
{
color = depthColorArray[j]
return;
}
}
color = null;
return;
}
function determineLeftPoint(currPosition, prevPosition)
{
deltaX = currPosition.x - prevPosition.x;
deltaZ = currPosition.z - prevPosition.z;
theta = Math.atan2(deltaX, deltaZ);
tracePrint('theta = ' + theta);
leftPoint = new SFVec3f(currPosition.x + Math.cos(theta),
currPosition.y,
currPosition.z - Math.sin(theta) * (beamWidth / 2));
}
function determineRightPoint(currPosition, prevPosition)
{
deltaX = currPosition.x - prevPosition.x;
deltaZ = currPosition.z - prevPosition.z;
theta = Math.atan2(deltaX, deltaZ);
rightPoint = new SFVec3f(currPosition.x - Math.cos(theta),
currPosition.y,
currPosition.z + Math.sin(theta) * (beamWidth / 2));
}
function alwaysPrint(string)
{
Browser.println ('[BathymetryGeneratorPrototype] ' + string);
}
function tracePrint(string)
{
if (traceEnabled)
Browser.println ('[BathymetryGeneratorPrototype] ' + string);
}
]]>
|
|
| 56 | </Script> |
| 57 | < ROUTE fromNode='BathymetryScript' fromField='bathyFaceCoordPoints' toNode='BathymetryFaceCoord' toField='point'/> |
| 58 | < ROUTE fromNode='BathymetryScript' fromField='bathyCoordIndex' toNode='BathymetryFaceSet' toField='set_coordIndex'/> |
| 59 | < ROUTE fromNode='BathymetryScript' fromField='bathyFaceColorArray' toNode='BathymetryFaceColor' toField='color'/> |
| 60 | < ROUTE fromNode='BathymetryScript' fromField='bathyColorIndex' toNode='BathymetryFaceSet' toField='set_colorIndex'/> |
| 61 | </Transform> |
| 62 | </Group> |
| 63 | </ProtoBody> |
| 64 | </ProtoDeclare> |
| 65 | <!-- ==================== --> |
| 66 | <!-- Example scene starts here, in case this prototype is examined. --> |
| 67 | <Anchor description='BathymetryGeneratorExample' parameter='"target=_blank"' url=' "BathymetryGeneratorExample.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/BathymetryGeneratorExample.x3d" "BathymetryGeneratorExample.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Animation/BathymetryGeneratorExample.wrl" '> |
| 68 | <Shape> |
| 69 | <Text string='"BathymetryGeneratorPrototype" "is a prototype definition file" "" "Click this text to see" "BathymetryGeneratorExample"'> |
| 70 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 71 | </Text> |
| 72 | <Appearance> |
| 73 | <Material diffuseColor='0.6 0.8 0.4'/> |
| 74 | </Appearance> |
| 75 | </Shape> |
| 76 | </Anchor> |
| 77 | </Scene> |
| 78 | </X3D> |
Event Graph ROUTE Table entries with 4 ROUTE connections total, showing X3D event-model relationships for this scene.
Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.
|
BathymetryScript
Script bathyFaceCoordPoints MFVec3f |
BathymetryFaceCoord
Coordinate point MFVec3f |
|
|
BathymetryScript
Script bathyCoordIndex MFInt32 |
BathymetryFaceSet
IndexedFaceSet set_coordIndex MFInt32 |
|
|
BathymetryScript
Script bathyFaceColorArray MFColor |
BathymetryFaceColor
Color color MFColor |
|
|
BathymetryScript
Script bathyColorIndex MFInt32 |
BathymetryFaceSet
IndexedFaceSet set_colorIndex MFInt32 |
| line 67
Anchor |
description='BathymetryGeneratorExample' User-interaction hint for this node. |
<!--
Color-coding legend: X3D terminology
<X3dNode
DEF='idName' field='value'/>
matches XML terminology
<XmlElement
DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement)
(Grey background inside box: inserted documentation)
(Magenta background: X3D Extensibility)
<ProtoDeclare name='ProtoName'>
<field
name='fieldName'/> </ProtoDeclare>
-->
<!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->