X3D Model Documentation: ExtrusionCrossSectionITSSPrototype.x3d

  1  <?xml version="1.0" encoding="UTF-8"?>
  2  <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
  3  <X3D profile='Immersive' version='3.3 xmlns:xsd='https://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'>
  4       <head>
  5            <meta name='titlecontent=' ExtrusionCrossSectionITSSPrototype.x3d '/>
  6            <meta name='creatorcontent='Don Brutzman'/>
  7            <meta name='creatorcontent='Sungmin Kwon'/>
  8            <meta name='createdcontent='23 October 2017'/>
  9            <meta name='modifiedcontent='14 July 2025'/>
 10            <meta name='descriptioncontent='Shape prototype for Enclosing IndexedTriangleStripSet that also draws spine line plus oriented, scaled cross sections at each spine point.'/>
 11            <meta name='hintcontent='Utilize ExtrusionCrossSectionITSS ProtoInstance as if it is a Shape node (with containerField="children") rather than an Extrusion node (with containerField="geometry") under a Shape.'/>
 12            <meta name=' TODO content=' Multiple Extrusion property fields not yet supported. '/>
 13            <meta name='referencecontent='https://en.wikipedia.org/wiki/Extrusion'/>
 14            <meta name='referencecontent='VRML 97 Specification, 6.18 Extrusion'/>
 15            <meta name='referencecontent='https://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html#Extrusion'/>
 16            <meta name='Imagecontent='VRML 97 Specification, Figure 6.6'/>
 17            <meta name='Imagecontent='https://www.web3d.org/technicalinfo/specifications/vrml97/Images/Extrusion.gif '/>
 18            <meta name='referencecontent=' http://realism.com/x3d/examples/Extrusion/_frame.html '/>
 19            <meta name='referencecontent=' http://www.cs.brown.edu/~gss/vrml/drawpoly.html '/>
 20            <meta name='referencecontent=' ExtrusionXj3dGoldberg1999.java '/>
 21            <meta name='referencecontent=' http://web3d.metrolink.com/cgi-bin/cvsweb.cgi/x3d/src/com/sun/j3d/loaders/vrml97/impl/Attic/Extrusion.java '/>
 22            <meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter06GeometryPointsLinesPolygons/ExtrusionCrossSectionITSSPrototype.x3d '/>
 23            <meta name='generatorcontent='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit'/>
 24            <meta name='licensecontent='../license.html'/>
 25       </head>
<!--

Event Graph ROUTE Table shows event connections.

--> <!-- to top DEF nodes index: CrossSectionFaces, CrossSectionFacesCoordinates, CrossSectionMaterial, CrossSectionScript, EnclosingExtrusion2, ExternalExtrusion2, ExtrusionAppearance2, ExtrusionCoordinates2, ExtrusionMaterial2, InternalCrossSections, Spine, SpineCoordinates, SpineLine, SpineMaterial, Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_index

Index for ProtoDeclare definition: ExtrusionCrossSectionITSS

-->
 26       <Scene>
 27            <WorldInfo title='ExtrusionCrossSectionITSSPrototype.x3d'/>
 28            <ProtoDeclare name='ExtrusionCrossSectionITSSappinfo='Shape prototype for Extrusion node that also draws spine line plus oriented scaled cross sections at each spine point' documentation='https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter06GeometryPointsLinesPolygons/ExtrusionCrossSectionPrototype.x3d'>
 29                 <ProtoInterface>
 30                      <field name='nametype='SFStringaccessType='initializeOnlyappinfo='Extrusion name'/>
 31                      <field name='crossSectiontype='MFVec2fvalue='1 1 1 -1 -1 -1 -1 1 1 1accessType='initializeOnlyappinfo='Extrusion field'/>
 32                      <field name='spinetype='MFVec3fvalue='0 0 0 0 1 0accessType='initializeOnlyappinfo='Extrusion field'/>
 33                      <field name='scaletype='MFVec2fvalue='1 1accessType='initializeOnlyappinfo='Extrusion field'/>
 34                      <field name='orientationtype='MFRotationvalue='0 0 1 0accessType='initializeOnlyappinfo='Extrusion field'/>
 35                      <field name='beginCaptype='SFBoolvalue='falseaccessType='initializeOnlyappinfo='Extrusion field'/>
 36                      <field name='endCaptype='SFBoolvalue='falseaccessType='initializeOnlyappinfo='Extrusion field'/>
 37                      <field name='ccwtype='SFBoolvalue='trueaccessType='initializeOnlyappinfo='Extrusion field'/>
 38                      <field name='convextype='SFBoolvalue='trueaccessType='initializeOnlyappinfo='Extrusion field'/>
 39                      <field name='creaseAngletype='SFFloatvalue='0accessType='initializeOnlyappinfo='Extrusion field'/>
 40                      <field name='solidtype='SFBoolvalue='trueaccessType='initializeOnlyappinfo='Extrusion field'/>
 41                      <field name='spineColortype='SFColorvalue='0 0.9 0.8accessType='inputOutputappinfo='emissiveColor of spine'/>
 42                      <field name='crossSectionColortype='SFColorvalue='0.2 0.8 0.3accessType='inputOutputappinfo='diffuseColor of crossSection'/>
 43                      <field name='crossSectionTransparencytype='SFFloatvalue='0.2accessType='inputOutputappinfo='transparency of crossSection'/>
 44                      <field name='extrusionColortype='SFColorvalue='0.3 0.3 0.3accessType='inputOutputappinfo='diffuseColor of extrusion hull'/>
 45                      <field name='extrusionTransparencytype='SFFloatvalue='0.7accessType='inputOutputappinfo='transparency of extrusion hull'/>
 46                      <field name='extrusionImageTexturetype='SFNodeaccessType='initializeOnlyappinfo='Image to apply to Extrusion'>
 47                           <!-- initialization node (if any) goes here -->
 48                      </field>
 49                      <field name='extrusionTextureTransformtype='SFNodeaccessType='initializeOnlyappinfo='TextureTransform coordinates of image applied to Extrusion'>
 50                           <!-- initialization node (if any) goes here -->
 51                      </field>
 52                      <field name='set_crossSectiontype='MFVec2faccessType='inputOnlyappinfo='Extrusion field'/>
 53                      <field name='set_spinetype='MFVec3faccessType='inputOnlyappinfo='Extrusion field'/>
 54                      <field name='set_scaletype='MFVec2faccessType='inputOnlyappinfo='Extrusion field'/>
 55                      <field name='set_orientationtype='MFRotationaccessType='inputOnlyappinfo='Extrusion field'/>
 56                      <field name='traceEnabledtype='SFBoolvalue='falseaccessType='initializeOnlyappinfo='Whether to provide initialization trace statements showing node construction'/>
 57                 </ProtoInterface>
 58                 <ProtoBody>
 59                      <Group>
 60                           <Shape DEF='Spine'>
 61 
                              <!-- ROUTE information for SpineLine node:  [from CrossSectionScript.spineIndex to set_coordIndex ] -->
                              <IndexedLineSet DEF='SpineLinecolorPerVertex='false'>
 62                                     <Coordinate DEF='SpineCoordinates'>
 63                                          <IS>
 64                                               <connect nodeField='pointprotoField='spine'/>
 65                                               <connect nodeField='set_pointprotoField='set_spine'/>
 66                                          </IS>
 67                                     </Coordinate>
 68                                </IndexedLineSet>
 69                                <Appearance>
 70                                     <Material DEF='SpineMaterial'>
 71                                          <IS>
 72                                               <connect nodeField='emissiveColorprotoField='spineColor'/>
 73                                          </IS>
 74                                     </Material>
 75                                </Appearance>
 76                           </Shape>
 77                           <Shape DEF='InternalCrossSections'>
 78 
                              <!-- ROUTE information for CrossSectionFaces node:  [from CrossSectionScript.facesIndex to set_index ] -->
                              <IndexedTriangleFanSet DEF='CrossSectionFacesccw='truecolorPerVertex='truenormalPerVertex='truesolid='falsecontainerField='geometry'>
 79 
                                   <!-- ROUTE information for CrossSectionFacesCoordinates node:  [from CrossSectionScript.facePoints to point ] -->
                                   <Coordinate DEF='CrossSectionFacesCoordinates'/>
 80                                </IndexedTriangleFanSet>
 81                                <Appearance>
 82                                     <Material DEF='CrossSectionMaterial'>
 83                                          <IS>
 84                                               <connect nodeField='diffuseColorprotoField='crossSectionColor'/>
 85                                               <connect nodeField='transparencyprotoField='crossSectionTransparency'/>
 86                                          </IS>
 87                                     </Material>
 88                                </Appearance>
 89                           </Shape>
 90                           <Shape DEF='ExternalExtrusion2'>
 91                                <Appearance DEF='ExtrusionAppearance2'>
 92                                     <IS>
 93                                          <connect nodeField='textureprotoField='extrusionImageTexture'/>
 94                                          <connect nodeField='textureTransformprotoField='extrusionTextureTransform'/>
 95                                     </IS>
 96                                     <Material DEF='ExtrusionMaterial2'>
 97                                          <IS>
 98                                               <connect nodeField='diffuseColorprotoField='extrusionColor'/>
 99                                               <connect nodeField='transparencyprotoField='extrusionTransparency'/>
100                                          </IS>
101                                     </Material>
102                                </Appearance>
103 
                              <!-- ROUTE information for EnclosingExtrusion2 node:  [from CrossSectionScript.triStripIndex to set_index ] -->
                              <IndexedTriangleStripSet DEF='EnclosingExtrusion2ccw='truecolorPerVertex='trueindex='0 1 2normalPerVertex='truesolid='truecontainerField='geometry'>
104 
                                   <!-- ROUTE information for ExtrusionCoordinates2 node:  [from CrossSectionScript.facePoints to point ] -->
                                   <Coordinate DEF='ExtrusionCoordinates2'/>
105                                </IndexedTriangleStripSet>
106                           </Shape>
107                           <!-- <Shape DEF='ExternalExtrusion'> <Extrusion DEF='EnclosingExtrusion' convex='false' solid='false'> <IS> <connect nodeField='crossSection' protoField='crossSection'/> <connect nodeField='spine' protoField='spine'/> <connect nodeField='scale' protoField='scale'/> <connect nodeField='orientation' protoField='orientation'/> <connect nodeField='set_crossSection' protoField='set_crossSection'/> <connect nodeField='set_spine' protoField='set_spine'/> <connect nodeField='set_scale' protoField='set_scale'/> <connect nodeField='set_orientation' protoField='set_orientation'/> <connect nodeField='beginCap' protoField='beginCap'/> <connect nodeField='endCap' protoField='endCap'/> <connect nodeField='ccw' protoField='ccw'/> <connect nodeField='convex' protoField='convex'/> <connect nodeField='creaseAngle' protoField='creaseAngle'/> <connect nodeField='solid' protoField='solid'/> </IS> </Extrusion> <Appearance DEF='ExtrusionAppearance'> <IS> <connect nodeField='texture' protoField='extrusionImageTexture'/> <connect nodeField='textureTransform' protoField='extrusionTextureTransform'/> </IS> <Material DEF='ExtrusionMaterial'> <IS> <connect nodeField='diffuseColor' protoField='extrusionColor'/> <connect nodeField='transparency' protoField='extrusionTransparency'/> </IS> </Material> </Appearance> </Shape> -->
108                      </Group>
109                      <!-- TODO hardwired local Script path to workaround BS Contact bug -->
110 
111                           <field name='nametype='SFStringaccessType='initializeOnly'/>
112                           <field name='crossSectiontype='MFVec2faccessType='initializeOnly'/>
113                           <field name='spinetype='MFVec3faccessType='initializeOnly'/>
114                           <field name='scaletype='MFVec2faccessType='initializeOnly'/>
115                           <field name='orientationtype='MFRotationaccessType='initializeOnly'/>
116                           <field name='spineColortype='SFColoraccessType='inputOutput'/>
117                           <field name='crossSectionColortype='SFColoraccessType='inputOutput'/>
118                           <field name='crossSectionTransparencytype='SFFloataccessType='inputOutput'/>
119                           <field name='extrusionColortype='SFColoraccessType='inputOutput'/>
120                           <field name='extrusionTransparencytype='SFFloataccessType='inputOutput'/>
121                           <field name='set_crossSectiontype='MFVec2faccessType='inputOnly'/>
122                           <field name='set_spinetype='MFVec3faccessType='inputOnly'/>
123                           <field name='set_scaletype='MFVec2faccessType='inputOnly'/>
124                           <field name='set_orientationtype='MFRotationaccessType='inputOnly'/>
125                           <field name='spineIndextype='MFInt32accessType='outputOnly'/>
126                           <field name='facesIndextype='MFInt32accessType='outputOnly'/>
127                           <field name='facePointstype='MFVec3faccessType='outputOnly'/>
128                           <field name='triStripIndextype='MFInt32accessType='outputOnly'/>
129                           <field name='traceEnabledtype='SFBoolaccessType='initializeOnly'/>
130                           <!-- local variables -->
131                           <field name='computedFacesIndextype='MFInt32accessType='initializeOnly'/>
132                           <field name='computedFacePointstype='MFVec3faccessType='initializeOnly'/>
133                           <field name='computedTriStripIndextype='MFInt32accessType='initializeOnly'/>
134                           <IS>
135                                <connect nodeField='nameprotoField='name'/>
136                                <connect nodeField='crossSectionprotoField='crossSection'/>
137                                <connect nodeField='spineprotoField='spine'/>
138                                <connect nodeField='scaleprotoField='scale'/>
139                                <connect nodeField='spineColorprotoField='spineColor'/>
140                                <connect nodeField='crossSectionColorprotoField='crossSectionColor'/>
141                                <connect nodeField='crossSectionTransparencyprotoField='crossSectionTransparency'/>
142                                <connect nodeField='extrusionColorprotoField='extrusionColor'/>
143                                <connect nodeField='extrusionTransparencyprotoField='extrusionTransparency'/>
144                                <connect nodeField='orientationprotoField='orientation'/>
145                                <connect nodeField='set_crossSectionprotoField='set_crossSection'/>
146                                <connect nodeField='set_spineprotoField='set_spine'/>
147                                <connect nodeField='set_scaleprotoField='set_scale'/>
148                                <connect nodeField='set_orientationprotoField='set_orientation'/>
149                                <connect nodeField='traceEnabledprotoField='traceEnabled'/>
150                           </IS>
151                      </Script>
152                      < ROUTE  fromNode='CrossSectionScript' fromField='spineIndex' toNode='SpineLine' toField='set_coordIndex'/>
153                      < ROUTE  fromNode='CrossSectionScript' fromField='facesIndex' toNode='CrossSectionFaces' toField='set_index'/>
154                      < ROUTE  fromNode='CrossSectionScript' fromField='facePoints' toNode='CrossSectionFacesCoordinates' toField='point'/>
155                      < ROUTE  fromNode='CrossSectionScript' fromField='triStripIndex' toNode='EnclosingExtrusion2' toField='set_index'/>
156                      <Group>
157                           <!-- ======= ROUTE Trace ============================================== -->
158 
                         <!-- ROUTE information for Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_index node:  [from CrossSectionScript.triStripIndex to traceValue ] -->
                         <Script DEF='Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_indexmustEvaluate='true'>
159                                <!-- Trace ROUTEd event values on X3D browser console -->
160                                <field name='reportIntervaltype='SFTimevalue='1.0accessType='initializeOnlyappinfo='Sampling frequency in seconds (0 means all values)'/>
161                                <field name='traceValuetype='MFInt32accessType='inputOnly'/>
162                                <field name='timeStampPreviousReporttype='SFTimevalue='-1accessType='initializeOnly'/>
  <![CDATA[
            
ecmascript:
    function traceValue (eventValue, timeStamp) {
      // input eventValue received for trace field
      if (timeStamp - timeStampPreviousReport >= reportInterval) {
        Browser.println ('Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_index type=MFInt32 value=' + eventValue.toString());
        timeStampPreviousReport = timeStamp;
      }
    }
    function timeOfDay (someTime) {
      hh = Math.floor (someTime /(60*60)) % 24;
      mm = Math.floor (someTime / 60)     % 60;
      ss = Math.floor (someTime)          % 60;
      if (hh < 9) hour   = '0' + hh;
      else        hour   =       hh;
      if (mm < 9) minute = '0' + mm;
      else        minute =       mm;
      if (ss < 9) second = '0' + ss;
      else        second =       ss;
      return '(' + hour + ':' + minute + ':' + second + ' GMT)';
    }

          
]]>
164                           </Script>
165                           < ROUTE  fromNode='CrossSectionScript' fromField='triStripIndex' toNode='Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_index' toField='traceValue'/>
166                           <!-- ======= ROUTE Trace block complete ===================================================== -->
167                      </Group>
168                      < ROUTE  fromNode='CrossSectionScript' fromField='facePoints' toNode='ExtrusionCoordinates2' toField='point'/>
169                      <!-- -->
170                 </ProtoBody>
171            </ProtoDeclare>
172            <!-- ==================== -->
173            <!-- Example instance adapted from Figure15.12Torus.x3d -->
174            <!-- https://www.web3d.org/x3d/content/examples/Basic/Vrml2Sourcebook/Chapter15-Extrusion/Figure15.12Torus.x3d -->
175            <!-- Redirection text in case a user examines this PROTO file via a 3D browser: -->
176            <Group>
177                 <Transform translation='0 0.5 0'>
178                      <Shape>
179                           <Appearance>
180                                <Material diffuseColor='0 1 1emissiveColor='0 1 1'/>
181                           </Appearance>
182                           <Text string='"ExtrusionCrossSectionITSS" "is a Prototype definition scene"'>
183                                <FontStyle justify='"MIDDLE" "MIDDLE"size='0.7'/>
184                           </Text>
185                      </Shape>
186                 </Transform>
187            </Group>
188       </Scene>
189  </X3D>
<!--

Event Graph ROUTE Table shows event connections.

--> <!-- to top DEF nodes index: CrossSectionFaces, CrossSectionFacesCoordinates, CrossSectionMaterial, CrossSectionScript, EnclosingExtrusion2, ExternalExtrusion2, ExtrusionAppearance2, ExtrusionCoordinates2, ExtrusionMaterial2, InternalCrossSections, Spine, SpineCoordinates, SpineLine, SpineMaterial, Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_index

Index for ProtoDeclare definition: ExtrusionCrossSectionITSS

-->
X3D Tooltips element index: to top Appearance, connect, Coordinate, field, FontStyle, Group, head, IndexedLineSet, IndexedTriangleFanSet, IndexedTriangleStripSet, IS, Material, meta, ProtoBody, ProtoDeclare, ProtoInterface, ROUTE, Scene, Script, Shape, Text, Transform, WorldInfo, X3D,
plus documentation for accessType definitions, type definitions, XML data types, and field types

🔖   Event Graph ROUTE Table entries with 2 ROUTE connections, showing X3D event-model relationships for this scene.

Each row with a ROUTE statement shows an event cascade that may occur during a single timestamp interval between frame renderings, performed as part of the X3D execution model.

CrossSectionScript
Script
spineIndex
MFInt32
→
ROUTE
event to
(1)
SpineLine
IndexedLineSet
set_coordIndex
MFInt32
CrossSectionScript
Script
facesIndex
MFInt32
→
ROUTE
event to
(1)
CrossSectionFaces
IndexedTriangleFanSet
set_index
MFInt32
CrossSectionScript
Script
facePoints
MFVec3f
→
ROUTE
event to
(1)
CrossSectionFacesCoordinates
Coordinate
point
MFVec3f
CrossSectionScript
Script
triStripIndex
MFInt32
→
ROUTE
event to
(1)
EnclosingExtrusion2
IndexedTriangleStripSet
set_index
MFInt32
CrossSectionScript
Script
triStripIndex
MFInt32
→
ROUTE
event to
(1)
Trace_ROUTE_CrossSectionScript_triStripIndex_TO_EnclosingExtrusion2_set_index
Script
traceValue
MFInt32
CrossSectionScript
Script
facePoints
MFVec3f
→
ROUTE
event to
(1)
ExtrusionCoordinates2
Coordinate
point
MFVec3f


Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets.
Have fun with X3D! 😀

-->
<!-- Online at
https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter06GeometryPointsLinesPolygons/ExtrusionCrossSectionITSSPrototypeIndex.html -->
<!-- SourceForge version control Version control at    
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter06GeometryPointsLinesPolygons/ExtrusionCrossSectionITSSPrototype.x3d -->

<!-- Color-coding legend: X3D terminology <X3dNode DEF='idNamefield='value'/> matches XML terminology <XmlElement DEF='idNameattribute='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> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->