diff --git a/src/alternativa/engine3d/resources/Geometry.as b/src/alternativa/engine3d/resources/Geometry.as
index 10860fa..f453633 100644
--- a/src/alternativa/engine3d/resources/Geometry.as
+++ b/src/alternativa/engine3d/resources/Geometry.as
@@ -141,6 +141,34 @@ package alternativa.engine3d.resources {
}
}
+ /**
+ * Returns a copy of object.
+ * @return A copy of this Geometry.
+ */
+ public function clone():Geometry
+ {
+ var geometry:Geometry = new Geometry();
+ geometry.clonePropertiesFrom(this);
+ return geometry;
+ }
+
+ /**
+ * Copies basic properties of Geometry. This method calls from clone() method.
+ * @param source Geometry, properties of which will be copied.
+ */
+ protected function clonePropertiesFrom(source:Geometry):void {
+ var n:int = source._vertexStreams.length;
+ for (var i:int = 0; i < n; ++i)
+ {
+ addVertexStream(source.getVertexStreamAttributes(i));
+ _vertexStreams[i].data.length = source._vertexStreams[i].data.length;
+ _vertexStreams[i].data.writeBytes(source._vertexStreams[i].data);
+ _vertexStreams[i].data.position = source._vertexStreams[i].data.position;
+ }
+ _numVertices = source._numVertices;
+ _indices = source._indices.slice();
+ }
+
/**
* Calculation of vertex normals.
*/