Example #1
0
        private void WireframeHelper(GeometryModel3D model, Matrix3DStack matrixStack)
        {
            var geometry = model.Geometry;
            var mesh     = geometry as MeshGeometry3D;

            if (mesh == null)
            {
                return;
            }
            var positions = new Point3D[mesh.Positions.Count];

            mesh.Positions.CopyTo(positions, 0);
            matrixStack.Peek().Transform(positions);

            var indices = mesh.TriangleIndices;

            if (indices.Count > 0)
            {
                var limit = positions.Length - 1;

                for (int i = 2, count = indices.Count; i < count; i += 3)
                {
                    var i0 = indices[i - 2];
                    var i1 = indices[i - 1];
                    var i2 = indices[i];

                    // WPF halts rendering on the first deformed triangle.  We should
                    // do the same.
                    if ((0 > i0 || i0 > limit) ||
                        (0 > i1 || i1 > limit) ||
                        (0 > i2 || i2 > limit))
                    {
                        break;
                    }

                    AddTriangle(positions, i0, i1, i2);
                }
            }
            else
            {
                for (int i = 2, count = positions.Length; i < count; i += 3)
                {
                    var i0 = i - 2;
                    var i1 = i - 1;
                    var i2 = i;

                    AddTriangle(positions, i0, i1, i2);
                }
            }
        }