File: X3DNodes.TX3DPrototypeNode.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (171 lines) | stat: -rw-r--r-- 12,481 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: X3DNodes: Class TX3DPrototypeNode</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TX3DPrototypeNode"></a><h1 class="cio">Class TX3DPrototypeNode</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td>Fields</td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td><a class="section" href="#PasDoc-Properties">Properties</a></td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="X3DNodes.html">X3DNodes</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TX3DPrototypeNode = class(<a class="normal" href="X3DNodes.TX3DNode.html">TX3DNode</a>)</code></p>
<h2 class="description">Description</h2>
<p>
Node with information about a VRML/X3D prototype.

<p>This node will have fields initialized according to associated Prototype.InterfaceDeclarations. This way you can simply parse this node (just like any other node) to parse prototype instance.

<p>The prototype may be instantiated. After parsing you can do it by <a class="normal" href="X3DNodes.TX3DPrototypeNode.html#Instantiate">Instantiate</a> method. In case of non-external prototype, this should always be possible (for a valid VRML files, that is), in case of external prototype this may requite loading the external prototype file.

<p>This node cannot be created by standard Create method, always use <a class="normal" href="X3DNodes.TX3DPrototypeNode.html#CreatePrototypeNode">CreatePrototypeNode</a>.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TPersistent</li>
<li class="ancestor"><a class="normal" href="CastleInterfaces.TNonRefCountedInterfacedPersistent.html">TNonRefCountedInterfacedPersistent</a></li>
<li class="ancestor"><a class="normal" href="X3DFields.TX3DFileItem.html">TX3DFileItem</a></li>
<li class="ancestor"><a class="normal" href="X3DNodes.TX3DNode.html">TX3DNode</a></li>
<li class="thisitem">TX3DPrototypeNode</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>function <b><a  href="X3DNodes.TX3DPrototypeNode.html#DeepCopyCreate">DeepCopyCreate</a></b>(CopyState: <a  href="X3DNodes.TX3DNodeDeepCopyState.html">TX3DNodeDeepCopyState</a>): <a  href="X3DNodes.TX3DNode.html">TX3DNode</a>; override;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>constructor <b><a  href="X3DNodes.TX3DPrototypeNode.html#Create">Create</a></b>(const ANodeName, ABaseUrl: string); override;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>constructor <b><a  href="X3DNodes.TX3DPrototypeNode.html#CreatePrototypeNode">CreatePrototypeNode</a></b>(const ANodeName, ABaseUrl: string; APrototype: <a  href="X3DNodes.TX3DPrototypeBase.html">TX3DPrototypeBase</a>);</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="X3DNodes.TX3DPrototypeNode.html#NodeTypeName">NodeTypeName</a></b>: string; override;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>function <b><a  href="X3DNodes.TX3DPrototypeNode.html#Instantiate">Instantiate</a></b>: <a  href="X3DNodes.TX3DNode.html">TX3DNode</a>;</code></td>
</tr>
</table>
<a name="PasDoc-Properties"></a><h3 class="summary">Properties</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>property <b><a  href="X3DNodes.TX3DPrototypeNode.html#Prototype">Prototype</a></b>: <a  href="X3DNodes.TX3DPrototypeBase.html">TX3DPrototypeBase</a> read FPrototype;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="DeepCopyCreate"></a><code>function <b>DeepCopyCreate</b>(CopyState: <a  href="X3DNodes.TX3DNodeDeepCopyState.html">TX3DNodeDeepCopyState</a>): <a  href="X3DNodes.TX3DNode.html">TX3DNode</a>; override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Create"></a><code>constructor <b>Create</b>(const ANodeName, ABaseUrl: string); override;</code></td>
</tr>
<tr><td colspan="2">
<p>
This constructor will raise exception for <a class="normal" href="X3DNodes.TX3DPrototypeNode.html">TX3DPrototypeNode</a>. Always use <a class="normal" href="X3DNodes.TX3DPrototypeNode.html#CreatePrototypeNode">CreatePrototypeNode</a> for this node class.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="CreatePrototypeNode"></a><code>constructor <b>CreatePrototypeNode</b>(const ANodeName, ABaseUrl: string; APrototype: <a  href="X3DNodes.TX3DPrototypeBase.html">TX3DPrototypeBase</a>);</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="NodeTypeName"></a><code>function <b>NodeTypeName</b>: string; override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Instantiate"></a><code>function <b>Instantiate</b>: <a  href="X3DNodes.TX3DNode.html">TX3DNode</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Instantiate the prototype, that is create new VRML node (of &quot;normal&quot; classs, not <a class="normal" href="X3DNodes.TX3DPrototypeNode.html">TX3DPrototypeNode</a>) using prototype description.

<p>For non-external prototype, in essense it just takes Prototype.Node and returns it's copy. For external prototype it first loads external file, and then uses non-external prototype there. Eventually, for external prototype we may also use build-in node (if URN will indicate so).

<p>Actually, the process is a little more involved (see below for details), but the idea is that returned node can be simply inserted into VRML hierarchy and works just like a normal node. The important feature is that returned instance class is the same that was specified as a first prototype node. For example, if the prototype should expand to Material node, then this returns <a class="normal" href="X3DNodes.TMaterialNode.html">TMaterialNode</a>. Just like Material node would be normally specified, not created by some prototype.

<p>Note that this <a class="normal" href="X3DNodes.TX3DPrototypeNode.html">TX3DPrototypeNode</a> becomes &quot;owned&quot; by returned node instance, in <a class="normal" href="X3DNodes.TX3DNode.html#PrototypeInstanceSourceNode">PrototypeInstanceSourceNode</a>. (that's needed for returned node's <a class="normal" href="X3DNodes.TX3DNode.html#SaveToStream">SaveToStream</a> to work correctly).

<p>Details: </p>

<ul class="paragraph_spacing">
  <li><p> Prototype.Node may be just a wrapper, i.e. <a class="normal" href="X3DNodes.TX3DRootNode.html">TX3DRootNode</a>.

<p>In this case the first children of Prototype.Node is used to create instance. The rest of the wrapper (with this first children removed, to not cause cycles) is also duplicated and set as new node's <a class="normal" href="X3DNodes.TX3DNode.html#PrototypeInstanceHelpers">PrototypeInstanceHelpers</a>.</p></li>
  <li><p> Returned Node (with all it's helpers in <a class="normal" href="X3DNodes.TX3DNode.html#PrototypeInstanceHelpers">PrototypeInstanceHelpers</a>) has &quot;IS&quot; clauses everywhere filled, according to our field values.</p></li>
  <li><p><a class="normal" href="X3DNodes.TX3DNode.html#NodeName">NodeName</a> of returned node is copied from our <a class="normal" href="X3DNodes.TX3DNode.html#NodeName">NodeName</a>.</p></li>
  <li><p> For <a class="normal" href="X3DNodes.TX3DNode.html#SaveToStream">SaveToStream</a> to work, returned Node has <a class="normal" href="X3DNodes.TX3DNode.html#PrototypeInstance">PrototypeInstance</a> = <code>True</code>, and <a class="normal" href="X3DNodes.TX3DNode.html#PrototypeInstanceSourceNode">PrototypeInstanceSourceNode</a> set to Self. This allows <a class="normal" href="X3DNodes.TX3DNode.html#SaveToStream">SaveToStream</a> to correctly save using <a class="normal" href="X3DNodes.TX3DNode.html#PrototypeInstanceSourceNode">PrototypeInstanceSourceNode</a>, instead of writing actual node contents.</p></li>
</ul>

<p>

<p></p>
<h6 class="description_section">Exceptions raised</h6>
<dl class="exceptions_raised">
<dt><a class="normal" href="X3DNodes.EX3DPrototypeInstantiateError.html">EX3DPrototypeInstantiateError</a></dt>
<dd>if for some reason the prototype cannot be instantiated. You can catch this and replace with <a class="normal" href="CastleWarnings.html#OnWarning">OnWarning</a>, if possible.</dd>
</dl>
</td></tr>
</table>
<h3 class="detail">Properties</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Prototype"></a><code>property <b>Prototype</b>: <a  href="X3DNodes.TX3DPrototypeBase.html">TX3DPrototypeBase</a> read FPrototype;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:17</em>
</span>
</td></tr></table></body></html>