private void ExtractData(List <JVector> vertices, List <JOctree.TriangleVertexIndices> indices, Model model)
        {
            var bones = new Matrix[model.Bones.Count];

            model.CopyAbsoluteBoneTransformsTo(bones);
            foreach (ModelMesh mm in model.Meshes)
            {
                Matrix xform = bones[mm.ParentBone.Index];
                foreach (ModelMeshPart mmp in mm.MeshParts)
                {
                    int offset = vertices.Count;
                    var a      = new Vector3[mmp.NumVertices];
                    mm.VertexBuffer.GetData(mmp.StreamOffset + mmp.BaseVertex * mmp.VertexStride,
                                            a, 0, mmp.NumVertices, mmp.VertexStride);
                    for (int i = 0; i != a.Length; ++i)
                    {
                        Vector3.Transform(ref a[i], ref xform, out a[i]);
                    }

                    for (int i = 0; i < a.Length; i++)
                    {
                        vertices.Add(new JVector(a[i].X, a[i].Y, a[i].Z));
                    }

                    if (mm.IndexBuffer.IndexElementSize != IndexElementSize.SixteenBits)
                    {
                        throw new Exception(
                                  String.Format("Model uses 32-bit indices, which are not supported."));
                    }

                    var s = new short[mmp.PrimitiveCount * 3];
                    mm.IndexBuffer.GetData(mmp.StartIndex * 2, s, 0, mmp.PrimitiveCount * 3);
                    var tvi = new JOctree.TriangleVertexIndices[mmp.PrimitiveCount];
                    for (int i = 0; i != tvi.Length; ++i)
                    {
                        tvi[i].I0 = s[i * 3 + 2] + offset;
                        tvi[i].I1 = s[i * 3 + 1] + offset;
                        tvi[i].I2 = s[i * 3 + 0] + offset;
                    }
                    indices.AddRange(tvi);
                }
            }
        }
        // Extracts the vertices and vertexindices of a model
        #region  public void ExtractData(List<JVector> vertices, List<TriangleVertexIndices> indices, Model model)
        public void ExtractData(List<JVector> vertices, List<JOctree.TriangleVertexIndices> indices, Model model)
        {
            Matrix[] bones_ = new Matrix[model.Bones.Count];
            model.CopyAbsoluteBoneTransformsTo(bones_);
            foreach (ModelMesh mm in model.Meshes)
            {
                Matrix xform = bones_[mm.ParentBone.Index];
                foreach (ModelMeshPart mmp in mm.MeshParts)
                {
                    int offset = vertices.Count;
                    Vector3[] a = new Vector3[mmp.NumVertices];
                    mm.VertexBuffer.GetData<Vector3>(mmp.StreamOffset + mmp.BaseVertex * mmp.VertexStride,
                        a, 0, mmp.NumVertices, mmp.VertexStride);
                    for (int i = 0; i != a.Length; ++i)
                        Vector3.Transform(ref a[i], ref xform, out a[i]);

                    for (int i = 0; i < a.Length; i++) vertices.Add(new JVector(a[i].X, a[i].Y, a[i].Z));

                    if (mm.IndexBuffer.IndexElementSize != IndexElementSize.SixteenBits)
                        throw new Exception(
                            String.Format("Model uses 32-bit indices, which are not supported."));
                    short[] s = new short[mmp.PrimitiveCount * 3];
                    mm.IndexBuffer.GetData<short>(mmp.StartIndex * 2, s, 0, mmp.PrimitiveCount * 3);
                    JOctree.TriangleVertexIndices[] tvi = new JOctree.TriangleVertexIndices[mmp.PrimitiveCount];
                    for (int i = 0; i != tvi.Length; ++i)
                    {
                        tvi[i].I0 = s[i * 3 + 2] + offset;
                        tvi[i].I1 = s[i * 3 + 1] + offset;
                        tvi[i].I2 = s[i * 3 + 0] + offset;
                    }
                    indices.AddRange(tvi);
                }
            }
        }