From 1fe29c7ec43ec93663f0484c1cc3e2105b16f95a Mon Sep 17 00:00:00 2001 From: ChrisDenham Date: Tue, 5 Nov 2013 17:16:29 +0000 Subject: [PATCH] Adding Geometry clone function. Maybe someone will find a use for this. I use it to allow editing of the geometry of a cloned mesh. Note that Mesh.clone() only performs a shallow copy of reference to contained geometry, so this can be used to perform a deeper copy of the mesh object as required. --- .../engine3d/resources/Geometry.as | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) 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. */