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='Core' 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 | <component level='3'/> |
6 | <component name='Geometry2D'/> |
7 | <component level='3' name='Geometry2D'/> |
8 | <component level='3' name='Geometry2D'/> |
9 | <unit category='angle' conversionFactor='-1' name='nonPositiveConversionFactor'/> |
10 | <unit category='angle' conversionFactor='-1' name='nonPositiveConversionFactor'/> |
11 | <meta name='title' content='TestSchematronDiagnostics.x3d'/> |
12 | <meta name='description' content='Test Schematron diagnostics capabilities for detecting various content errors and style warnings.'/> |
13 | <meta name='description' content='Second meta tag to test warning that two description meta tags are present.'/> |
14 | <meta name='creator' content='Don Brutzman'/> |
15 | <meta name='created' content='19 October 2008'/> |
16 | <meta name='modified' content='25 October 2020'/> |
17 | <meta name=' warning ' content=' The regex is not finding IllegalMinusSignsTest. '/> |
18 | <meta name=' error ' content=' Test scene with many errors, primarily intended to exercise most of the rules in the X3D Schematron diagnostic set. '/> |
19 | <meta name=' warning ' content=' Test scene with many warnings embedded in comments. '/> |
20 | <meta name='hint' content='Test scene with many hints embedded in comments.'/> |
21 | <meta name='info' content='Perhaps the most erroneous X3D scene in the world!'/> |
22 | <meta name='info' content='Perhaps the most erroneous X3D scene in the world!'/> |
23 | <meta name='reference' content='https://www.web3d.org/x3d/tools/schematron/X3dSchematronValidityChecks.sch'/> |
24 | <meta name='reference' content='https://www.web3d.org/x3d/tools/schematron/X3dSchematron.html'/> |
25 | <meta name='reference' content='https://www.web3d.org/x3d/content/examples/X3dResources.html#QualityAssurance'/> |
26 | <meta name='identifier' content='https://www.web3d.org/x3d/content/examples/Basic/development/TestSchematronDiagnostics.x3d'/> |
27 | <meta name='generator' content='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/> |
28 | <meta name='license' content='../license.html'/> |
29 | </head> |
30 | <Scene USE='improperUSE'> |
31 | <!-- - illegal comment starts with extra hyphen - character --> |
32 | <!-- - illegal comment has intermediate paired-hyphen - - characters --> |
33 |
<!-- TouchSensor
IllegalCombinationDEFUSE is a DEF node that has 1 USE node: USE_1 --> <TouchSensor USE='IllegalCombinationDEFUSE'/> |
34 | <CylinderSensor DEF='DoubleDEF' enabled='false'/> |
35 | <TimeSensor DEF='DoubleDEF'/> |
36 | <WorldInfo DEF='FirstTitle' title='title #1'/> |
37 | <WorldInfo DEF='SecondTitle' title='title #2'/> |
38 | <WorldInfo DEF='DEFPrependedSpace'/> |
39 | <WorldInfo DEF='DEFEmbedded Space'/> |
40 | <WorldInfo DEF='DEFAppendedSpace'/> |
41 | <WorldInfo DEF='IllegalInfoQuotes' info='"WorldInfo info strings need to be quoted"'/> |
42 | <WorldInfo DEF='IllegalChild'> |
43 | <WorldInfo/> |
44 | </WorldInfo> |
45 | <WorldInfo DEF='LegalChild'> |
46 | <MetadataString/> |
47 | </WorldInfo> |
48 | <Anchor DEF='NoChildrenNoUrl'/> |
49 | <Anchor DEF='AnchorBookmark' parameter='"target=unquoted"' url=' "#missingBookmark" '> |
50 | <Group/> |
51 | </Anchor> |
52 | <Inline DEF='HelloWorld' url=' "../HelloWorld.x3d" "https://www.web3d.org/x3d/content/examples/Basic/HelloWorld.x3d" "../HelloWorld.wrl"'/> |
53 | <Inline DEF='UrlDotWrlPrecedesDotX3d' url=' "test.wrl" "test.x3d" "adjacentquote" "marks" '/> |
54 | <Inline DEF='NoUrlIllegalChild'> |
55 | <WorldInfo/> |
56 | </Inline> |
57 | <Inline DEF='NodeUrlVRML.wrl.PrecedingX3D.x3d' url=' "HelloWorld.wrl" "HelloWorld.x3d"'/> |
58 | <ExternProtoDeclare name='ExternProtoDeclareUrlVRML.wrl.PrecedingX3D.x3d' url=' "HelloWorld.wrl" "HelloWorld.x3d"'/> |
59 | <ExternProtoDeclare name='ExternProtoDeclareUrlVRML.wrl.MissingX3D.x3d' url=' "HelloWorld.x3d" "https://www.web3d.org/x3d/content/examples/Basic/development/HelloWorld.x3d" "HelloWorld.wrl" "https://www.web3d.org/x3d/content/examples/Basic/development/HelloWorld.wrl" '/> |
60 |
<!-- Shape
NoChildAppearance is a DEF node that has 3 USE nodes: USE_1, USE_2, USE_3 -->
<Shape DEF='NoChildAppearance'> |
61 | <Box/> |
62 | </Shape> |
63 | <Shape DEF='NoChildGeometry'> |
64 | |
65 | </Shape> |
66 | <!-- test no other fields if USE present --> |
67 | <Shape USE='NoChildAppearance'/> |
68 | <Shape USE='NoChildAppearance'/> |
69 | <Shape USE='NoChildAppearance'/> |
70 |
<!-- Shape
USEwithChildElement is a DEF node that has 1 USE node: USE_1 -->
<Shape DEF='USEwithChildElement'> |
71 | <Box/> |
72 | <Appearance DEF='AppearanceWithProtoInstanceChild'> |
73 | <ProtoInstance name='NodeSubstituteNoDeclaration'/> |
74 | </Appearance> |
75 | </Shape> |
76 | <Appearance DEF='MissingParentShape'/> |
77 | <Shape USE='USEwithChildElement'> |
78 | <Appearance USE='NoMaterialNoTexture'/> |
79 | </Shape> |
80 | <Shape DEF='SingleProtoInstanceChild'> |
81 | <ProtoInstance name='NodeSubstituteNoDeclaration'/> |
82 | </Shape> |
83 | <!-- no DEF name --> |
84 | <TimeSensor DEF='NoOutputROUTE'/> |
85 | <TimeSensor DEF='Clock' cycleInterval='100' loop='true'/> |
86 | <ColorInterpolator/> |
87 | <ColorInterpolator DEF='InterpolatorWithSingleKey' key='0'/> |
88 | <ColorInterpolator DEF='ColorInterpolatorColorProblems' key='0' keyValue='-1 1.2 0.3 0.4'/> |
89 | <!-- no DEF name --> |
90 | <PositionInterpolator DEF='NoROUTEsNoKeyValueArray' key='0 0'/> |
91 |
<!-- ROUTE information for MismatchedKeyArrays node:
[self-route from value_changed to set_fraction
]
-->
<ScalarInterpolator DEF='MismatchedKeyArrays' key='0' keyValue='0 0'/> |
92 |
<!-- ROUTE information for MismatchedKeyArraysSFVec3f node:
[self-route from value_changed to set_fraction
]
-->
<NormalInterpolator DEF='MismatchedKeyArraysSFVec3f' key='0 1' keyValue='0 0 0 1 1'/> |
93 | <!-- bogus ROUTEs to allow trapping deeper error --> |
94 | < ROUTE fromNode='MismatchedKeyArrays' fromField='value_changed' toNode='MismatchedKeyArrays' toField='set_fraction'/> |
95 | < ROUTE fromNode='MismatchedKeyArraysSFVec3f' fromField='value_changed' toNode='MismatchedKeyArraysSFVec3f' toField='set_fraction'/> |
96 | <BooleanSequencer/> |
97 | <BooleanSequencer DEF='NoROUTEs' key='0 0.5 1' keyValue='true false true'/> |
98 | <IntegerTrigger/> |
99 | <IntegerTrigger DEF='NoROUTE'/> |
100 | <OrientationInterpolator DEF='OI'/> |
101 | <LoadSensor DEF='ChildrenIncorrectContainerField'> |
102 | <ImageTexture DEF='textureContainerField' url=' "http:/bogus" "https://www.web3d.org/x3d/content/examples/Basic/development/http:/bogus" '/> |
103 | </LoadSensor> |
104 | <LoadSensor DEF='ChildrenCorrectContainerField'> |
105 | <ImageTexture DEF='watchListContainerField' containerField='watchList'/> |
106 | </LoadSensor> |
107 | <LoadSensor DEF='IncorrectChildNodes'> |
108 | <Group containerField='watchList'/> |
109 | <Anchor DEF='IllegalChildForLoadSensor'/> |
110 | </LoadSensor> |
111 | <Script DEF='HasLegalCDATA'> |
112 | <field name='duplicatedFieldName' type='SFBool' accessType='inputOnly'/> |
113 | <field name='duplicatedFieldName' type='SFBool' accessType='inputOnly'/> |
<![CDATA[
ecmascript: function initialize() { // initialize() method silences ROUTE check }
]]>
|
|
115 | </Script> |
116 | <Script DEF='HasCDATAwithoutEcmascriptHeader'> |
117 | <field name='noAccessType' type='SFBool'/> |
118 | <field name='noType' accessType='inputOnly'/> |
119 | <field type='noName' accessType='inputOnly'/> |
120 | <field name='neverSet' type='SFBool' accessType='outputOnly'/> |
<![CDATA[
ecmascript: // empty Script body
]]>
|
|
122 | </Script> |
123 | <Script DEF='HasUrlNoCDATA' url=' "TestSchematronDiagnostics.js" "https://www.web3d.org/x3d/content/examples/Basic/development/TestSchematronDiagnostics.js" '> |
124 | </Script> |
124 | <Script DEF='NoUrlNoCDATA'> |
125 | </Script> |
125 | <Script DEF='BothUrlAndCDATA' url=' "TestSchematronDiagnostics.js" "https://www.web3d.org/x3d/content/examples/Basic/development/TestSchematronDiagnostics.js" '> |
126 | <field name='inputFunctionDefinedTwice' type='SFBool' accessType='inputOnly'/> |
127 | <field name='noInputFunctionAllowed' type='SFBool' accessType='outputOnly'/> |
<![CDATA[
ecmascript: function set_noInputFunctionAllowed (newValue) { // cannot have input function for output field } function set_inputFunctionDefinedTwice (newValue) { // only one definition allowed; this is #1 } function set_inputFunctionDefinedTwice (newValue) { // only one definition allowed; this is #2 }
]]>
|
|
129 | </Script> |
130 | <Script DEF='RouteButNoFields' url=' "TestSchematronDiagnostics.js" "https://www.web3d.org/x3d/content/examples/Basic/development/TestSchematronDiagnostics.js" '> |
131 | </Script> |
131 | < ROUTE fromNode='NoFields' fromField='blah' toNode='NoFields' toField='blah'/> |
132 | <ProtoInstance name='NoDeclaration'/> |
133 | <ProtoDeclare name='MissingProtoBody'/> |
134 |
<!-- WorldInfo
DEFoutsideProtoDeclareScope is a DEF node that has 1 USE node: USE_1 --> <WorldInfo DEF='DEFoutsideProtoDeclareScope'/> |
135 | <ProtoDeclare name='DoubleMixedDeclaration' DEF='DuplicatedDeclaration'> |
136 | <ProtoBody> |
137 | <Group/> |
138 | <Viewpoint DEF='ISconnectDescription'> |
139 | <IS> |
140 | <connect nodeField='description' protoField='description'/> |
141 | </IS> |
142 | </Viewpoint> |
143 | <!-- TODO not yet working... --> |
144 | <WorldInfo USE='DEFoutsideProtoDeclareScope'/> |
145 |
<!-- WorldInfo
USEoutsideProtoDeclareScope is a DEF node that has 1 USE node: USE_1 --> <WorldInfo DEF='USEoutsideProtoDeclareScope'/> |
146 |
<!-- WorldInfo
DEF_USEinsideProtoDeclareScope is a DEF node that has 1 USE node: USE_1 --> <WorldInfo DEF='DEF_USEinsideProtoDeclareScope'/> |
147 | <WorldInfo USE='DEF_USEinsideProtoDeclareScope'/> |
148 | </ProtoBody> |
149 | </ProtoDeclare> |
150 | <WorldInfo USE='USEoutsideProtoDeclareScope'/> |
151 | <ExternProtoDeclare name='DoubleMixedDeclaration' url=' http://bogus#DifferentRemotePrototypeName '/> |
152 | <ProtoInstance name='DoubleMixedDeclaration' DEF='DoubleDeclaration2'> |
153 | <fieldValue name='duplicatedFieldValueName' value='blah'/> |
154 | <fieldValue name='duplicatedFieldValueName'/> |
155 | <fieldValue value='noName'/> |
156 | </ProtoInstance> |
157 | <ProtoDeclare name='DoubleProtoDeclaration' url=' "http:/bogus" "https://www.web3d.org/x3d/content/examples/Basic/development/http:/bogus" '/> |
158 | <ProtoDeclare name='DoubleProtoDeclaration' url=' http:///bogus '/> |
159 | <ExternProtoDeclare name='DoubleDeclarationUrlMissingPoundProtoName' url=' http:///bogus '/> |
160 | <ExternProtoDeclare name='DoubleDeclarationUrlMissingPoundProtoName' url=' "http:/bogus" "https://www.web3d.org/x3d/content/examples/Basic/development/http:/bogus" '/> |
161 | <ProtoDeclare name='EmptyProtoInterfaceEmptyProtoBody'> |
162 | <ProtoInterface/> |
163 | <ProtoBody/> |
164 | </ProtoDeclare> |
165 | <ProtoDeclare name='IllegalProtoInterface'> |
166 | <ProtoInterface> |
167 | <Group DEF='OnlyFieldDeclarationsAllowedInProtoInterface'/> |
168 | </ProtoInterface> |
169 | <ProtoBody> |
170 | <Group/> |
171 | </ProtoBody> |
172 | </ProtoDeclare> |
173 | <ExternProtoDeclare name='ExternProtoDeclareBeforeInstance' url=' "httpsMissing" "https://www.web3d.org/x3d/content/examples/Basic/development/httpsMissing" '/> |
174 | <ProtoInstance name='ExternProtoDeclareBeforeInstance'/> |
175 | <ProtoInstance name='ExternProtoDeclareAfterInstance'/> |
176 | <ExternProtoDeclare name='ExternProtoDeclareAfterInstance' url=' "httpMissing" "https://www.web3d.org/x3d/content/examples/Basic/development/httpMissing" '/> |
177 | <ProtoDeclare name='ProtoDeclareBeforeInstance'> |
178 | <ProtoBody> |
179 | <Group/> |
180 | </ProtoBody> |
181 | </ProtoDeclare> |
182 | <ProtoInstance name='ProtoDeclareBeforeInstance'/> |
183 | <ProtoInstance name='ProtoDeclareAfterInstance'/> |
184 | <ProtoDeclare name='ProtoDeclareAfterInstance'> |
185 | <ProtoBody> |
186 | <Group> |
187 | <IS> |
188 | <connect nodeField='danglingConnectNodeField' protoField='danglingConnectProtoField'/> |
189 | </IS> |
190 | </Group> |
191 | </ProtoBody> |
192 | </ProtoDeclare> |
193 | <Group DEF='ContainsISchildButNoParentProtoDeclare'> |
194 | <IS> |
195 | <connect nodeField='isolatedConnectNodeField' protoField='isolatedConnectProtoField'/> |
196 | </IS> |
197 | </Group> |
198 | <!-- test isolated (invalid) connect element <connect nodeField="isolatedConnectNodeField" protoField="isolatedConnectProtoField"/> --> |
199 | <Shape DEF='BadBoundingBoxValues' bboxCenter='1a 2b 3c' bboxSize='-1 -2 -3'> |
200 | <Extrusion DEF='ExtrusionCrossSectionMiscountSpineMismatchCrossSectionMiscount' crossSection='1 2 3' orientation='0 0 1 0 0 0 1 0 0 0 1 0' scale='1 1 1 1 1 1 1 1 1 1 1 1' spine='0 0 0 0 2 0'/> |
201 | <!-- check for reserved word in DEF --> |
202 | <Appearance DEF='DEF'> |
203 | <TwoSidedMaterial DEF='separateBackColorWrong' backShininess='0.123'/> |
204 | </Appearance> |
205 | </Shape> |
206 | < ROUTE fromNode='blah' fromField='set_blah' toNode='bleah' toField='bleah_changed'/> |
207 | <Viewpoint DEF='OKviewpoint' description='this viewpoint is OK'/> |
208 | <Viewpoint DEF='DEFdescriptionMatch' description='DEFdescriptionMatch'/> |
209 | <OrthoViewpoint DEF='NoSpacesInDescription' description='NeedToPutSpacesInDescription'/> |
210 | <GeoViewpoint DEF='IllegalFields' navType='"OTHER"' containerField='children'/> |
211 | <GeoMetadata DEF='BadChild' containerField='children'> |
212 | <GeoViewpoint DEF='BadContainerField' containerField='children'/> |
213 | </GeoMetadata> |
214 | <!-- check for reserved word in name definitions --> |
215 | <ProtoDeclare name='X3D'> |
216 | <ProtoBody> |
217 | <Group DEF='PrototypeRootNode'/> |
218 | </ProtoBody> |
219 | </ProtoDeclare> |
220 | <ExternProtoDeclare name='X3D'> |
221 | <field name='X3D' type='SFBool' accessType='inputOnly'/> |
222 | </ExternProtoDeclare> |
223 | <ProtoInstance name='X3D' DEF='BadNameBadFieldValueNameMissingInitialization'> |
224 | <fieldValue name='X3D'/> |
225 | </ProtoInstance> |
226 | <ProtoInstance name='X3D'> |
227 | <fieldValue name='X3D' value='doubleInitialization'> |
228 | <Shape/> |
229 | </fieldValue> |
230 | </ProtoInstance> |
231 | <LOD> |
232 | <Background DEF='BackgroundWithParentLOD'/> |
233 | <Fog DEF='FogWithParentLOD'/> |
234 | <NavigationInfo DEF='NavigationInfoWithParentLOD'/> |
235 | <Viewpoint DEF='ViewpointWithParentLOD'/> |
236 | </LOD> |
237 | <ViewpointGroup DEF='IllegalViewpointGroupChild'> |
238 | <Transform/> |
239 | </ViewpointGroup> |
240 | <Shape> |
241 | <Box/> |
242 | <Appearance> |
243 | <PixelTexture DEF='NoImageData'/> |
244 | </Appearance> |
245 | </Shape> |
246 | <Shape> |
247 | <Box/> |
248 | <Appearance> |
249 | <PixelTexture DEF='IllegalImageData' image='1 a b c d'/> |
250 | </Appearance> |
251 | </Shape> |
252 | <Shape> |
253 | <Box/> |
254 | <Appearance> |
255 | <PixelTexture DEF='DefaultImageData'/> |
256 | </Appearance> |
257 | </Shape> |
258 | <Shape> |
259 | <Box/> |
260 | <Appearance> |
261 | <PixelTexture DEF='DuplicateImageData'/> |
262 | </Appearance> |
263 | </Shape> |
264 | <Shape> |
265 | <Box/> |
266 | <Appearance> |
267 | <PixelTexture DEF='ImageDataTest' image='1 1 1 0xAA'/> |
268 | </Appearance> |
269 | </Shape> |
270 |
<!-- WorldInfo
USEandDEFtogether is a DEF node that has 1 USE node: USE_1 --> <WorldInfo USE='USEandDEFtogether'/> |
271 | <WorldInfo USE='USEprecedesDEF'/> |
272 |
<!-- WorldInfo
USEprecedesDEF is a DEF node that has 1 USE node: USE_1 --> <WorldInfo DEF='USEprecedesDEF'/> |
273 | <WorldInfo USE='noDEFforUSE'/> |
274 |
<!-- WorldInfo
noChildNodeforUSE is a DEF node that has 1 USE node: USE_1 --> <WorldInfo DEF='noChildNodeforUSE'/> |
275 | <WorldInfo USE='noChildNodeforUSE'> |
276 | <MetadataSet> |
277 | <MetadataString name='someStringArray' value='"unquoted string values"'/> |
278 | </MetadataSet> |
279 | </WorldInfo> |
280 |
<!-- Group
DEFcontainsUSEcopyOfSelf is a DEF node that has 1 USE node: USE_1 -->
<Group DEF='DEFcontainsUSEcopyOfSelf'> |
281 | <Group USE='DEFcontainsUSEcopyOfSelf'/> |
282 | </Group> |
283 |
<!-- WorldInfo
USEmismatchDEFnodeType is a DEF node that has 1 USE node: USE_1 --> <WorldInfo DEF='USEmismatchDEFnodeType'/> |
284 | <Group USE='USEmismatchDEFnodeType'/> |
285 | <LocalFog DEF='NoLocalFogV3.0'/> |
286 | <PointLight/> |
287 | <Shape> |
288 | <IndexedFaceSet DEF='CountTests' creaseAngle='-1.234' coordIndex='0 1 2 -1'> |
289 | <Coordinate point='0 0 0 0 1 0 1 0 0 5'/> |
290 | <Color DEF='IllegalValuesColor' color='-1 2 3'/> |
291 | <ColorRGBA DEF='IllegalValuesColorRGBA' color='-1 1.2 0.3 0.4'/> |
292 | <TextureCoordinate/> |
293 | <TextureCoordinateGenerator/> |
294 | </IndexedFaceSet> |
295 | <Appearance USE='NoMaterialNoTexture'/> |
296 | </Shape> |
297 | <Shape> |
298 | <Text DEF='CharacterBeforeQuotes' string='x " "'> |
299 | <FontStyle family='"unquotedFontFamilyName"' justify='"unquotedIllegalJustification"'/> |
300 | </Text> |
301 | <Appearance USE='NoMaterialNoTexture'/> |
302 | </Shape> |
303 | <Shape> |
304 | <Text DEF='ThreeUnescapedQuoteMarksMissingSpaceEndsApostrophe' string='"" x" ''> |
305 | <FontStyle DEF='familyValuesMissingIntermediateQuotes' family='"SANS SERIF"' justify='"BEGIN" "BEGIN"'/> |
306 | </Text> |
307 | <Appearance USE='NoMaterialNoTexture'/> |
308 | </Shape> |
309 | <Shape> |
310 | <Text DEF='EscapedQuoteMarkWarning' string='"here is a single escaped \" quote mark character"'> |
311 | <FontStyle justify='"IllegalValue"'/> |
312 | </Text> |
313 | <Appearance USE='NoMaterialNoTexture'/> |
314 | </Shape> |
315 | <Shape> |
316 | <Text DEF='NeedQuoteMarks' string='"quote marks are required for single string"'> |
317 | <FontStyle/> |
318 | </Text> |
319 | <Appearance USE='NoMaterialNoTexture'/> |
320 | </Shape> |
321 | <Shape> |
322 | <Text DEF='EmbeddedQuoteMarksOK' string='"plain text with \"quote marks\" embedded"'> |
323 | <FontStyle DEF='FontStyleFieldsContainIllegalQuotes' language='"noquo"' style='"PLAIN"'/> |
324 | </Text> |
325 | <Appearance USE='NoMaterialNoTexture'/> |
326 | </Shape> |
327 | <Shape> |
328 | <IndexedQuadSet DEF='MissingIndex' ccw='true' colorPerVertex='true' normalPerVertex='true' solid='true'> |
329 | <Coordinate DEF='DuplicatedCoordinatePointArray' point='0 0 0 0 1 0 1 0 0 5'/> |
330 | </IndexedQuadSet> |
331 | <Appearance USE='NoMaterialNoTexture'/> |
332 | </Shape> |
333 | <NormalInterpolator DEF='NormalPath' key='0 0.5 1' keyValue='0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 5'/> |
334 | <GeoLocation DEF='LegalGeoSystem' geoCoords='36.607 -121.885 0.0' containerField='children'/> |
335 | <ProtoDeclare name='ReferenceTest'> |
336 | <ProtoInterface> |
337 | <field name='defaultTest' type='SInt32' value='78' accessType='initializeOnly'/> |
338 | <field name='incorrectInitializationSFColorRGBA' type='SFColorRGBA' value='1 1 1' accessType='initializeOnly'/> |
339 | </ProtoInterface> |
340 | <ProtoBody> |
341 | <Script url=' "http:///bogus" '> |
342 | <field name='missingInitializationValue1' type='SFBool' accessType='initializeOnly'/> |
343 | <field name='missingInitializationValue2' type='SFInt32' accessType='initializeOnly'/> |
344 | <field name='incorrectInitializationSFVec3f' type='SFVec3f' value='0.0' accessType='initializeOnly'/> |
345 | <field name='incorrectInitializationMFColor' type='MFColor' value='1 2 3 4 5 6 7' accessType='initializeOnly'/> |
346 | <field name='missingInitializationValueHasIS' type='SFBool' value='true' accessType='initializeOnly'/> |
347 | <fieldValue name='shouldBeField'/> |
348 | <IS> |
349 | <connect nodeField='missingInitializationValue2' protoField='defaultTest'/> |
350 | <connect nodeField='missingInitializationValueHasIS' protoField='test'/> |
351 | </IS> |
352 | </Script> |
353 | <!-- Subsequent nodes do not render, but still must be a valid X3D subgraph --> |
354 | </ProtoBody> |
355 | </ProtoDeclare> |
356 | <ProtoInstance name='ReferenceTest'> |
357 | <fieldValue name='defaultTest' value='78'/> |
358 | <fieldValue name='incorrectInitializationSFColorRGBA' value='1 1 1 1 1'/> |
359 | <field name='shouldBeFieldValue'/> |
360 | </ProtoInstance> |
361 | <Transform DEF='ZeroMagnitudeRotationAxes' scaleOrientation='0 0 0 0'/> |
362 | <Box DEF='GeometryNodeNeedsShapeParent'/> |
363 | <Collision DEF='IllegalGeometryProxyNode'> |
364 | <Box DEF='GeometryNodeCollisionParentNeedsParentShapeWithProxyContainerField' containerField='proxy'/> |
365 | </Collision> |
366 | <NavigationInfo DEF='UnquotedTypeAndTransitionTypeErrors' transitionType='"ALTERNATE"' type='OTHER'/> |
367 | <NavigationInfo DEF='NavigationInfoWithTypeALL' type='"ALL"'/> |
368 |
<!-- Group
IllegalParentChild-DEF-USE is a DEF node that has 1 USE node: USE_1 -->
<Group DEF='IllegalParentChild-DEF-USE'> |
369 | <Group USE='IllegalParentChild-DEF-USE'/> |
370 | </Group> |
371 | <CADLayer name='contains whitespace and incorrect boolean value' visible='true false wrong'/> |
372 | <Shape> |
373 | <ImageTexture DEF='IllegalParent1'/> |
374 | <MovieTexture DEF='IllegalParent2'/> |
375 | <PixelTexture DEF='IllegalParent3'/> |
376 | </Shape> |
377 | <Shape> |
378 |
<!-- TextureTransform
TextureTransformWithNoSiblingTextureNode is a DEF node that has 1 USE node: USE_1 --> <TextureTransform DEF='TextureTransformWithNoSiblingTextureNode'/> |
379 | </Shape> |
380 | <Shape> |
381 | <Appearance> |
382 | <TextureTransform USE='TextureTransformWithNoSiblingTextureNode'/> |
383 | <TextureCoordinateGenerator DEF='TextureCoordinateGeneratorIllegalMode' mode='Bogus'/> |
384 | <TextureCoordinateGenerator DEF='TextureCoordinateGeneratorIllegalParameterCount' mode='NOISE' parameter='1 2 3 4'/> |
385 | </Appearance> |
386 | </Shape> |
387 | <Shape> |
388 | <Appearance> |
389 | <MultiTexture DEF='NoTextureChildren' function='"BogusFunction1Value" "BogusFunction2Value" "' mode='"BogusMode1Value" BogusMode2Value"' source='"BogusSourceValue"'/> |
390 | </Appearance> |
391 | </Shape> |
392 | <Background DEF='NoBackgroundChildrenAllowed'> |
393 | <ImageTexture DEF='IllegalBackgroundChild'/> |
394 | </Background> |
395 | <TextureBackground> |
396 | <ImageTexture DEF='LegalChild1'/> |
397 | <MovieTexture DEF='LegalChild2'/> |
398 | <PixelTexture DEF='LegalChild3'/> |
399 | <Group DEF='IllegalTextureBackgroundChild'/> |
400 | <ImageTexture DEF='IllegalTextureBackgroundChildContainerField' containerField='frontUrl'/> |
401 | </TextureBackground> |
402 | <Group DEF='Embedded Blanks DEF'/> |
403 | <Group USE='Embedded Blanks USE'/> |
404 | <Group DEF='"QuotedDEF"'/> |
405 | <Group USE='"QuotedUSE"'/> |
406 | <MetadataSet> |
407 | <MetadataBoolean/> |
408 | <MetadataFloat containerField='value'/> |
409 | <MetadataDouble containerField='illegalName'/> |
410 | </MetadataSet> |
411 | <MetadataString DEF='IllegalMetadataContainerField' containerField='value'/> |
412 | <ScalarInterpolator DEF='IllegalDecimalPointsTest' key='0.00.5 1.0' keyValue='1 2 3'/> |
413 | <ScalarInterpolator DEF='IllegalMinusSignsTest' key='0.0 0.5 1.0' keyValue='-1-2 3'/> |
414 | <!-- test of NeedsChildNode --> |
415 | <Group DEF='EmptyGroup'/> |
416 | <Switch whichChoice='-1'> |
417 | <!-- test of NeedsChildNode --> |
418 | <Group DEF='EmptyGroupInsideSwitch'/> |
419 | </Switch> |
420 | <Group DEF='EmptyGroupContainsComment'> |
421 | <!-- test of NeedsChildNode --> |
422 | </Group> |
423 | <Switch DEF='EmptySwitchContainsROUTE' whichChoice='-1'> |
424 | <!-- test of NeedsChildNode --> |
425 | < ROUTE fromNode='NoFields' fromField='blah' toNode='NoFields' toField='blah'/> |
426 | </Switch> |
427 | <CADLayer visible='false'> |
428 | <CADAssembly> |
429 | <CADPart> |
430 | <CADFace DEF='CADFaceOneShapeChild'> |
431 | <Transform containerField='shape'> |
432 | <Shape/> |
433 | </Transform> |
434 | </CADFace> |
435 | <CADFace DEF='CADFaceMultipleShapeChildren'> |
436 | <Transform DEF='containerFieldNot_shape'> |
437 | <Shape/> |
438 | <Shape/> |
439 | </Transform> |
440 | </CADFace> |
441 | </CADPart> |
442 | </CADAssembly> |
443 | </CADLayer> |
444 | <GeoOrigin DEF='DeprecatedNodeUnquotedGeoSystem' geoSystem='"GD WE"'/> |
445 | <Viewpoint DEF='ViewHumanoidMissingCenterOfRotation'/> |
446 | <Shape DEF='EmptyShapeWithCommentSilencesWarning'> |
447 | <!-- silence warning --> |
448 | </Shape> |
449 | <Shape> |
450 | <Appearance> |
451 | <Material DEF='IllegalColorValuesMaterial' diffuseColor='-1 1.2 0.3 0.4' emissiveColor='-1 1.2 0.3 0.4' specularColor='-1 1.2 0.3 0.4'/> |
452 | </Appearance> |
453 | </Shape> |
454 | <Background DEF='BackgroundColorProblems' groundColor='-1 1.2 0.3 0.4' skyColor='-1 1.2 0.3 0.4'/> |
455 | <Fog DEF='FogColorProblems' color='-1 1.2 0.3 0.4'/> |
456 | <DirectionalLight DEF='DirectionalLightColorProblems' color='-1 1.2 0.3 0.4'/> |
457 | <PointLight DEF='PointLightColorProblems' color='-1 1.2 0.3 0.4'/> |
458 | <SpotLight DEF='SpotLightColorProblems' color='-1 1.2 0.3 0.4'/> |
459 | <ClipPlane DEF='IllegalPlaneEquationValues' plane='1 2 3 4 5'/> |
460 | <HAnimHumanoid DEF='notUniqueName1' name='JimDandy' version='1.1'/> |
461 | <HAnimHumanoid DEF='notUniqueName2' name='JimDandy' version='2.0'> |
462 | <!-- keep the following Group node as first child so that it is reported by diagnostic test --> |
463 | <Group DEF='HumanoidCannotContainChildrenNodes' name='IllegalGroupChildrenNode'/> |
464 | <HAnimJoint containerField='skeleton' name='HumanoidRoot' ulimit='0 0 0' llimit='0 0 0'> |
465 |
<!-- HAnimJoint
MissingComponentH-AnimLevel1 is a DEF node that has 1 USE node: USE_1 -->
<HAnimJoint DEF='MissingComponentH-AnimLevel1' ulimit='0 0 0' llimit='0 0 0'> |
466 | <HAnimHumanoid DEF='incorrectlyNestedHumanoidMissingNameAttribute' version='2.0'/> |
467 | </HAnimJoint> |
468 |
<!-- HAnimJoint
MissingNameAttributeCheckContainerField is a DEF node that has 2 USE nodes: USE_1, USE_2 --> <HAnimJoint DEF='MissingNameAttributeCheckContainerField' ulimit='0 0 0' llimit='0 0 0'/> |
469 | <HAnimJoint USE='MissingNameAttributeCheckContainerField'/> |
470 | <HanimJoint DEF='ImproperCapitalizationOfNodeName'/> |
471 |
<!-- HAnimJoint
duplicateName1 is a DEF node that has 2 USE nodes: USE_1, USE_2 --> <HAnimJoint DEF='duplicateName1' name='sacroiliac' ulimit='0 0 0' llimit='0 0 0'/> |
472 |
<!-- HAnimJoint
duplicateName2 is a DEF node that has 1 USE node: USE_1 --> <HAnimJoint DEF='duplicateName2' name='sacroiliac' ulimit='0 0 0' llimit='0 0 0'/> |
473 | <HAnimJoint USE='duplicateName1' containerField='joints'/> |
474 |
<!-- ROUTE information for JointInterpolator node:
[from value_changed to MissingNameAttribute.translation
]
-->
<PositionInterpolator DEF='JointInterpolator' key='0 0' keyValue='0 0 0 1 0 0'/> |
475 | < ROUTE fromNode='JointInterpolator' fromField='value_changed' toNode='MissingNameAttribute' toField='translation'/> |
476 |
<!-- HAnimJoint
ImproperDEFname is a DEF node that has 1 USE node: USE_1 --> <HAnimJoint DEF='ImproperDEFname' name='l_acromioclavicular' ulimit='0 0 0' llimit='0 0 0'/> |
477 |
<!-- HAnimJoint
hanim_HumanoidRoot is a DEF node that has 1 USE node: USE_1 -->
<HAnimJoint DEF='hanim_HumanoidRoot' name='HumanoidRoot' ulimit='0 0 0' llimit='0 0 0'> |
478 |
<!-- HAnimSegment
JointNameSegmentNameHierarchyTest is a DEF node that has 1 USE node: USE_1 -->
<HAnimSegment DEF='JointNameSegmentNameHierarchyTest' name='notSacrum'> |
479 | <!-- the following construct is OK and should not throw errors --> |
480 |
<!-- HAnimSite
hanim_Top_view is a DEF node that has 3 USE nodes: USE_1, USE_2, USE_3 -->
<HAnimSite DEF='hanim_Top_view' containerField='viewpoints' name='Top_view' rotation='1 0 0 -1.57' translation='0 3.5 0'> |
481 | <Viewpoint DEF='hanim_Top_viewpoint' centerOfRotation='0 0.9 0' description='Top' position='0 0 0'/> |
482 | </HAnimSite> |
483 | </HAnimSegment> |
484 |
<!-- HAnimJoint
negativeCenterHeight is a DEF node that has 1 USE node: USE_1 -->
<HAnimJoint DEF='negativeCenterHeight' center='0 -1 0' name='negativeCenterHeight' ulimit='0 0 0' llimit='0 0 0'> |
485 |
<!-- HAnimSegment
IllegalChildrenContainerFields is a DEF node that has 2 USE nodes: USE_1, USE_2 -->
<HAnimSegment DEF='IllegalChildrenContainerFields' name='IllegalChildrenContainerFields'> |
486 |
<!-- HAnimSite
negativeTranslationHeight is a DEF node that has 1 USE node: USE_1 -->
<HAnimSite DEF='negativeTranslationHeight' name='negativeTranslationHeight' translation='0 -1 0'> |
487 | <HAnimDisplacer DEF='IllegalHAnimDisplacerInHAnimSiteNode'/> |
488 | </HAnimSite> |
489 | <Coordinate/> |
490 | <CoordinateDouble/> |
491 | </HAnimSegment> |
492 | </HAnimJoint> |
493 |
<!-- HAnimJoint
MismatchedJointCenter_l_knee is a DEF node that has 1 USE node: USE_1 --> <HAnimJoint DEF='MismatchedJointCenter_l_knee' center='1 2 3' name='l_knee' ulimit='0 0 0' llimit='0 0 0'/> |
494 |
<!-- HAnimJoint
MismatchedJointCenter_r_knee is a DEF node that has 1 USE node: USE_1 --> <HAnimJoint DEF='MismatchedJointCenter_r_knee' center='4 5 6' name='r_knee' ulimit='0 0 0' llimit='0 0 0'/> |
495 | <HAnimJoint USE='IllegalEmbeddedHAnimUse'/> |
496 |
<!-- HAnimSite
IllegalNameIllegalParent is a DEF node that has 1 USE node: USE_1 --> <HAnimSite DEF='IllegalNameIllegalParent' name='IllegalNameIllegalParent'/> |
497 | <!-- TODO test IllegalEmbeddedHAnimUse in another HAnimHumanoid --> |
498 | </HAnimJoint> |
499 | </HAnimJoint> |
500 | <HAnimSite USE='hanim_Top_view' containerField='viewpoints'/> |
501 | <HAnimSite USE='hanim_Top_view' containerField='viewpoints'/> |
502 | <HAnimSegment USE='JointNameSegmentNameHierarchyTest' containerField='segments'/> |
503 | <HAnimSegment USE='IllegalChildrenContainerFields' containerField='segments'/> |
504 | <!-- test for duplicated USE node --> |
505 | <HAnimSegment USE='IllegalChildrenContainerFields' containerField='segments'/> |
506 | <Coordinate DEF='HAnimCoordinateCorrectContainerField' containerField='skinCoord' point='0 0 0'/> |
507 | <Coordinate DEF='HAnimCoordinateIncorrectContainerField'/> |
508 | <CoordinateDouble DEF='HAnimCoordinateDoubleCorrectContainerField' containerField='skinCoord' point='0 0 0'/> |
509 | <CoordinateDouble DEF='HAnimCoordinateDoubleIncorrectContainerField'/> |
510 | <Normal DEF='HAnimNormalIncorrectContainerField'/> |
511 | <HAnimJoint USE='MissingComponentH-AnimLevel1' containerField='joints'/> |
512 | <HAnimJoint USE='MissingNameAttributeCheckContainerField' containerField='joints'/> |
513 | <HAnimJoint USE='duplicateName1' containerField='joints'/> |
514 | <HAnimJoint USE='duplicateName2' containerField='joints'/> |
515 | <HAnimJoint USE='ImproperDEFname' containerField='joints'/> |
516 | <HAnimJoint USE='hanim_HumanoidRoot' containerField='joints'/> |
517 | <HAnimJoint USE='negativeCenterHeight' containerField='joints'/> |
518 | <HAnimJoint USE='MismatchedJointCenter_l_knee' containerField='joints'/> |
519 | <HAnimJoint USE='MismatchedJointCenter_r_knee' containerField='joints'/> |
520 | <HAnimSite USE='hanim_Top_view' containerField='sites'/> |
521 | <HAnimSite USE='negativeTranslationHeight' containerField='sites'/> |
522 | <HAnimSite USE='IllegalNameIllegalParent' containerField='sites'/> |
523 | </HAnimHumanoid> |
524 | <Sound DEF='NoChildren'/> |
525 | <AudioClip DEF='NoParentSoundNode' description='bad clip reference' url=' "blah" "https://www.web3d.org/x3d/content/examples/Basic/development/blah" '/> |
526 | <Sound class='must separate classes with;space characters' location='0 2 0'> |
527 | <AudioClip description='bad clip reference' url=' "blah" "https://www.web3d.org/x3d/content/examples/Basic/development/blah" '/> |
528 | </Sound> |
529 | <Sound DEF='SoundDefaults' location='0 2 0'> |
530 |
<!-- AudioClip
ReusableAudioClip is a DEF node that has 5 USE nodes: USE_1, USE_2, USE_3, USE_4, USE_5 --> <AudioClip DEF='ReusableAudioClip' description='reusable' url=' "../Vrml97Specification/click.wav" "https://www.web3d.org/x3d/content/examples/Basic/Vrml97Specification/click.wav" '/> |
531 | </Sound> |
532 | <Sound DEF='SoundMinNegative' location='0 2 0' minBack='-1' minFront='-1'> |
533 | <AudioClip USE='ReusableAudioClip'/> |
534 | </Sound> |
535 | <Sound DEF='SoundMaxNegative' location='0 2 0' maxBack='-10' maxFront='-10'> |
536 | <AudioClip USE='ReusableAudioClip'/> |
537 | </Sound> |
538 | <Sound DEF='SoundMinGreaterThanMax' location='0 2 0' maxBack='11' maxFront='11' minBack='12' minFront='12'> |
539 | <AudioClip USE='ReusableAudioClip'/> |
540 | </Sound> |
541 | <Sound DEF='SoundMinGreaterThanDefaultMax' location='0 2 0' minBack='13' minFront='13'> |
542 | <AudioClip USE='ReusableAudioClip'/> |
543 | </Sound> |
544 | <Sound DEF='SoundMaxLessThanDefaultMin' location='0 2 0' maxBack='0.5' maxFront='0.5'> |
545 | <AudioClip USE='ReusableAudioClip'/> |
546 | </Sound> |
547 | < ROUTE fromNode='DuplicateROUTE' fromField='test1' toNode='test2' toField='test3'/> |
548 | < ROUTE fromNode='DuplicateROUTE' fromField='test1' toNode='test2' toField='test3'/> |
549 | < ROUTE fromNode='DuplicateROUTE' fromField='test1' toNode='test2' toField='test3'/> |
550 | < ROUTE fromNode='NodeFollowsRoute1' fromField='children' toNode='NodeFollowsRoute2' toField='children'/> |
551 |
<!-- ROUTE information for NodeFollowsRoute1 node:
[from children to NodeFollowsRoute2.children
]
-->
<Group DEF='NodeFollowsRoute1'> |
552 |
<!-- ROUTE information for NodeFollowsRoute2 node:
[from NodeFollowsRoute1.children to children
]
-->
<Group DEF='NodeFollowsRoute2'> |
553 | <!-- silence warning --> |
554 | </Group> |
555 | </Group> |
556 | <Shape DEF='ElevationGridInsufficientHeights'> |
557 | <ElevationGrid solid='false' xSpacing='0' zDimension='3' zSpacing='0' height='1 2 3 4 5'/> |
558 | </Shape> |
559 | <Shape DEF='ElevationGridTooManyHeights'> |
560 | <ElevationGrid solid='false' xSpacing='-1' zDimension='3' zSpacing='-1' height='1 2 3 4 5 6 7'/> |
561 | </Shape> |
562 | <Shape DEF='ElevationGridBadDimensions'> |
563 | <ElevationGrid solid='false' xDimension='-2' zDimension='-3' height='1 2 3 4 5 6'/> |
564 | </Shape> |
565 | <StaticGroup DEF='StaticGroupChildTests' containerField='children'> |
566 | <Group> |
567 | <TimeSensor DEF='StaticGroupDescendantsCannotProduceEvents'/> |
568 | <PositionInterpolator DEF='StaticGroupDescendantsCannotConsumeEvents'/> |
569 | <PositionInterpolator USE='StaticGroupDescendantsCannotBeUsed'/> |
570 | </Group> |
571 | <!-- note mistake capitalization, correct form is ROUTE --> |
572 | <Route fromField='fraction_changed' fromNode='StaticGroupDescendantsCannotProduceEvents' toField='set_fraction' toNode='StaticGroupDescendantsCannotConsumeEvents'/> |
573 | </StaticGroup> |
574 | <Group DEF='CaseSensitive'> |
575 | <!-- test case sensitivity of DEF/USE --> |
576 | </Group> |
577 | <Group USE='CASESENSITIVE'/> |
578 | <Group> |
579 | <TouchSensor DEF='PeerTouchSensor'/> |
580 | <CylinderSensor DEF='PeerCylinderSensor'/> |
581 | <Billboard DEF='PeerBillboard'/> |
582 | </Group> |
583 | <Inline DEF='RecursiveInlineInvocation' url=' "TestSchematronDiagnostics.x3d" "https://www.web3d.org/x3d/content/examples/Basic/development/TestSchematronDiagnostics.x3d" "TestSchematronDiagnostics.wrl" "https://www.web3d.org/x3d/content/examples/Basic/development/TestSchematronDiagnostics.wrl" '/> |
584 | <Shape> |
585 | <IndexedFaceSet DEF='IfsEmptyChildren'> |
586 | <Coordinate DEF='EmptyCoordinate'/> |
587 | <Color DEF='EmptyColor'/> |
588 | <Normal DEF='EmptyNormal'/> |
589 | <TextureCoordinate DEF='EmptyTextureCoordinate'/> |
590 | </IndexedFaceSet> |
591 | </Shape> |
592 | <Shape> |
593 | <IndexedFaceSet DEF='IfsSingletonChildren'> |
594 | <Coordinate DEF='SingleCoordinate' point='1 2 3'/> |
595 | <Color DEF='SingleColor' color='0.1 0.2 0.3'/> |
596 | <Normal DEF='SingleNormal' vector='0 1 0'/> |
597 | <TextureCoordinate DEF='SingleTextureCoordinate' point='0.4 0.8'/> |
598 | </IndexedFaceSet> |
599 | </Shape> |
600 | <GeoLOD containerField='children'> |
601 | <Shape DEF='rootNodeContainerFieldIsCorrect'/> |
602 | </GeoLOD> |
603 | <TextureProjector/> |
604 | <TextureProjectorParallel DEF='DistanceMismatchIllegalFieldOfView' farDistance='.1' fieldOfView='1 2 3 4 5' nearDistance='20'/> |
605 | </Scene> |
606 | </X3D> |
============================================================================================================================= HAnimHumanoid notUniqueName1 skeleton holds X3D3 HAnim1 joints/segments. [key] jointname : segmentname ^ sitename [nodes] HAnimJoint (0), : HAnimSegment (0), % HAnimDisplacer (0), $ HAnimMotion (0), ^ HAnimSite (0), @ skin nodes (0) ============================================================================================================================= HAnimHumanoid DEF='notUniqueName1 name='JimDandy' loa='' skeleton =============================================================================================================================
The following inset decorates the original HAnimHumanoid skeleton with additional visualization shapes. Authors can copy/paste this version to assist in visually diagnosing skeleton correctness.
Key to author-assist additions inserted in the HAnimHumanoid skeleton:
<HAnimHumanoid DEF='notUniqueName1' name='JimDandy' version ='1.1' > | |
31 | <!-- - illegal comment starts with extra hyphen - character --> |
32 | <!-- - illegal comment has intermediate paired-hyphen - - characters --> |
66 | <!-- test no other fields if USE present --> |
83 | <!-- no DEF name --> |
89 | <!-- no DEF name --> |
93 | <!-- bogus ROUTEs to allow trapping deeper error --> |
198 | <!-- test isolated (invalid) connect element <connect nodeField="isolatedConnectNodeField" protoField="isolatedConnectProtoField"/> --> |
214 | <!-- check for reserved word in name definitions --> |
414 | <!-- test of NeedsChildNode --> |
</HAnimHumanoid> |
============================================================================================================================= HAnimHumanoid notUniqueName2 skeleton holds X3D3 HAnim2 joints/segments/sites. [key] jointname : segmentname ^ sitename [nodes] HAnimJoint (8), : HAnimSegment (2), % HAnimDisplacer (0), $ HAnimMotion (0), ^ HAnimSite (3), @ skin nodes (0) ============================================================================================================================= HAnimHumanoid DEF='notUniqueName2 name='JimDandy' loa='' skeleton HumanoidRoot | (HAnimJoint/@name not found) ============================================================================================================================= HAnimHumanoid incorrectlyNestedHumanoidMissingNameAttribute skeleton holds X3D3 HAnim2 joints/segments. [key] jointname : segmentname ^ sitename [nodes] HAnimJoint (0), : HAnimSegment (0), % HAnimDisplacer (0), $ HAnimMotion (0), ^ HAnimSite (0), @ skin nodes (0) ============================================================================================================================= | | HAnimHumanoid DEF='incorrectlyNestedHumanoidMissingNameAttribute name='' loa='' skeleton ============================================================================================================================= | (HAnimJoint/@name not found) | sacroiliac | sacroiliac | l_acromioclavicular | HumanoidRoot : notSacrum ^ Top_view | negativeCenterHeight : IllegalChildrenContainerFields ^ negativeTranslationHeight % | l_knee | r_knee % HAnimSite negativeTranslationHeight holds 1 HAnimDisplacer node: HAnimDisplacer DEF='IllegalHAnimDisplacerInHAnimSiteNode' ^ HAnimJoint HumanoidRoot holds 1 HAnimSite node: IllegalNameIllegalParent ^ HAnimSegment notSacrum holds 1 HAnimSite node: Top_view ^ HAnimSegment IllegalChildrenContainerFields holds 1 HAnimSite node: negativeTranslationHeight =============================================================================================================================
The following inset decorates the original HAnimHumanoid skeleton with additional visualization shapes. Authors can copy/paste this version to assist in visually diagnosing skeleton correctness.
Key to author-assist additions inserted in the HAnimHumanoid skeleton:
<HAnimHumanoid DEF='notUniqueName2' name='JimDandy' version ='2.0' > | |||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||
31 | <!-- - illegal comment starts with extra hyphen - character --> | ||||||||||||||||||||||||||||||||||||
32 | <!-- - illegal comment has intermediate paired-hyphen - - characters --> | ||||||||||||||||||||||||||||||||||||
66 | <!-- test no other fields if USE present --> | ||||||||||||||||||||||||||||||||||||
83 | <!-- no DEF name --> | ||||||||||||||||||||||||||||||||||||
89 | <!-- no DEF name --> | ||||||||||||||||||||||||||||||||||||
93 | <!-- bogus ROUTEs to allow trapping deeper error --> | ||||||||||||||||||||||||||||||||||||
198 | <!-- test isolated (invalid) connect element <connect nodeField="isolatedConnectNodeField" protoField="isolatedConnectProtoField"/> --> | ||||||||||||||||||||||||||||||||||||
214 | <!-- check for reserved word in name definitions --> | ||||||||||||||||||||||||||||||||||||
414 | <!-- test of NeedsChildNode --> | ||||||||||||||||||||||||||||||||||||
500 |
<HAnimSite USE='hanim_Top_view' containerField='viewpoints'/>
|
501 |
<HAnimSite USE='hanim_Top_view' containerField='viewpoints'/>
|
502 |
<HAnimSegment USE='JointNameSegmentNameHierarchyTest' containerField='segments'/>
|
503 |
<HAnimSegment USE='IllegalChildrenContainerFields' containerField='segments'/>
|
504 |
<!-- test for duplicated USE node -->
|
505 |
<HAnimSegment USE='IllegalChildrenContainerFields' containerField='segments'/>
|
511 |
<HAnimJoint USE='MissingComponentH-AnimLevel1' containerField='joints'/>
|
512 |
<HAnimJoint USE='MissingNameAttributeCheckContainerField' containerField='joints'/>
|
513 |
<HAnimJoint USE='duplicateName1' containerField='joints'/>
|
514 |
<HAnimJoint USE='duplicateName2' containerField='joints'/>
|
515 |
<HAnimJoint USE='ImproperDEFname' containerField='joints'/>
|
516 |
<HAnimJoint USE='hanim_HumanoidRoot' containerField='joints'/>
|
517 |
<HAnimJoint USE='negativeCenterHeight' containerField='joints'/>
|
518 |
<HAnimJoint USE='MismatchedJointCenter_l_knee' containerField='joints'/>
|
519 |
<HAnimJoint USE='MismatchedJointCenter_r_knee' containerField='joints'/>
|
520 |
<HAnimSite USE='hanim_Top_view' containerField='sites'/>
|
521 |
<HAnimSite USE='negativeTranslationHeight' containerField='sites'/>
|
522 |
<HAnimSite USE='IllegalNameIllegalParent' containerField='sites'/>
|
|
|
</HAnimHumanoid> |
Event Graph ROUTE Table entries with 10 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.
HasLegalCDATA
Script |
No ROUTE connection found for output events from this node. This Script has no direct access to other nodes. |
ProtoInstance NodeSubstituteNoDeclaration |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance NodeSubstituteNoDeclaration |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance NoDeclaration |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance ExternProtoDeclareBeforeInstance |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance ExternProtoDeclareAfterInstance |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance ProtoDeclareBeforeInstance |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance ProtoDeclareAfterInstance |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance X3D |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declaration with direct access to other nodes, and thus has potential to produce run-time animation. |
ProtoInstance ReferenceTest |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
BadNameBadFieldValueNameMissingInitialization
ProtoInstance X3D |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
DoubleDeclaration2
ProtoInstance DoubleMixedDeclaration |
No ROUTE connection found for output events from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
<!--
Color 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)
<ProtoInstance
name='ProtoName'>
<field
name='fieldName'/> </ProtoInstance>
-->
<!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->