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. */