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">
</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">
</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">
</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 "normal" 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 "owned" 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 "IS" 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">
</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&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>
|