Пример #1
0
        private static void AddColoredQuadToPackage(IRenderPackage package)
        {
            // Triangle 1
            package.AddTriangleVertex(0, 0, 0);
            package.AddTriangleVertex(1, 0, 0);
            package.AddTriangleVertex(1, 1, 0);

            // For each vertex, add a color.
            package.AddTriangleVertexColor(255, 0, 0, 255);
            package.AddTriangleVertexColor(0, 255, 0, 255);
            package.AddTriangleVertexColor(0, 0, 255, 255);

            //Triangle 2
            package.AddTriangleVertex(0, 0, 0);
            package.AddTriangleVertex(1, 1, 0);
            package.AddTriangleVertex(0, 1, 0);
            package.AddTriangleVertexColor(255, 0, 0, 255);
            package.AddTriangleVertexColor(0, 255, 0, 255);
            package.AddTriangleVertexColor(0, 0, 255, 255);

            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);

            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
        }
Пример #2
0
        private static void AddColoredLineToPackage(IRenderPackage package)
        {
            package.AddLineStripVertex(0,0,0);
            package.AddLineStripVertex(5,5,5);

            package.AddLineStripVertexColor(255,0,0,255);
            package.AddLineStripVertexColor(255,0,0,255);

            // Specify line segments by adding a line vertex count.
            // Ex. The above line has two vertices, so we add a line
            // vertex count of 2. If we had tessellated a curve with n
            // vertices, we would add a line vertex count of n.
            package.AddLineStripVertexCount(2);
        }
Пример #3
0
        public void Tessellate(IRenderPackage package, TessellationParameters parameters)
        {
            // Dynamo's renderer uses IRenderPackage objects
            // to store data for rendering. The Tessellate method
            // give you an IRenderPackage object which you can fill
            // with render data.

            // Set RequiresPerVertexColoration to let the renderer
            // know that you needs to use a per-vertex color shader.
            package.RequiresPerVertexColoration = true;

            AddColoredQuadToPackage(package);
            AddColoredLineToPackage(package);
        }
Пример #4
0
        public void Tessellate(List<object> objects, IRenderPackage package)
        {
            foreach (var item in objects)
            {
                List<IGraphicItem> graphicItems = GetGraphicItems(item);
                if (null == graphicItems || graphicItems.Count == 0)
                    continue;

                foreach (var g in graphicItems)
                {
                    g.Tessellate(package);
                }
            }
        }
Пример #5
0
        public void Tessellate(IRenderPackage package, TessellationParameters parameters)
        {
            package.RequiresPerVertexColoration = true;

            // As you add more data to the render package, you need
            // to keep track of the index where this coloration will 
            // start from.

            geometry.Tessellate(package, parameters);

            if (parameters.ShowEdges)
            {
                var surf = geometry as Surface;
                if (surf != null)
                {
                    foreach (var curve in surf.PerimeterCurves())
                    {
                        curve.Tessellate(package, parameters);
                        curve.Dispose();
                    }
                }

                var solid = geometry as Solid;
                if (solid != null)
                {
                    foreach (var geom in solid.Edges.Select(edge => edge.CurveGeometry))
                    {
                        geom.Tessellate(package, parameters);
                        geom.Dispose();
                    }
                }
            }

            if (package.LineVertexCount > 0)
            {
                package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, color.Red, color.Green, color.Blue, color.Alpha));
            }

            if (package.PointVertexCount > 0)
            {
                package.ApplyPointVertexColors(CreateColorByteArrayOfSize(package.PointVertexCount, color.Red, color.Green, color.Blue, color.Alpha));
            }

            if (package.MeshVertexCount > 0)
            {
                package.ApplyMeshVertexColors(CreateColorByteArrayOfSize(package.MeshVertexCount, color.Red, color.Green, color.Blue, color.Alpha));
            }
        }
Пример #6
0
        public static void PushMesh(Autodesk.Revit.DB.Mesh mesh, IRenderPackage package)
        {
            for (var i = 0; i < mesh.NumTriangles; i++)
            {
                var triangle = mesh.get_Triangle(i);
                for (var j = 0; j < 3; j++)
                {
                    var xyz = triangle.get_Vertex(j);
                    package.PushTriangleVertex(xyz.X, xyz.Y, xyz.Z);
                }

                var a = mesh.get_Triangle(i).get_Vertex(1).Subtract(mesh.get_Triangle(i).get_Vertex(0)).Normalize();
                var b = mesh.get_Triangle(i).get_Vertex(2).Subtract(mesh.get_Triangle(i).get_Vertex(0)).Normalize();
                var norm = a.CrossProduct(b);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
                package.PushTriangleVertexNormal(norm.X, norm.Y, norm.Z);
            }
        }
Пример #7
0
        /// <summary>
        /// Returns drawables for transient geometry associated with Gizmo
        /// </summary>
        /// <returns></returns>
        public override RenderPackageCache GetDrawablesForTransientGraphics()
        {
            var drawables = new RenderPackageCache();

            if (null != hitAxis)
            {
                IRenderPackage package = RenderPackageFactory.CreateRenderPackage();
                DrawAxisLine(ref package, hitAxis, "xAxisLine");
                drawables.Add(package);
            }
            if (null != hitPlane)
            {
                IRenderPackage package = RenderPackageFactory.CreateRenderPackage();
                DrawAxisLine(ref package, hitPlane.XAxis, "xAxisLine");
                drawables.Add(package);

                package = RenderPackageFactory.CreateRenderPackage();
                DrawAxisLine(ref package, hitPlane.YAxis, "yAxisLine");
                drawables.Add(package);
            }

            return(drawables);
        }
Пример #8
0
        /// <summary>
        /// Returns drawables to render this Gizmo
        /// </summary>
        /// <returns>List of render package</returns>
        public override RenderPackageCache GetDrawables()
        {
            var drawables = new RenderPackageCache();

            foreach (Vector axis in axes)
            {
                IRenderPackage package = RenderPackageFactory.CreateRenderPackage();
                DrawAxis(ref package, axis);
                drawables.Add(package);
            }

            var p = Planes.xyPlane;

            foreach (Plane plane in planes)
            {
                IRenderPackage package = RenderPackageFactory.CreateRenderPackage();
                DrawPlane(ref package, plane, p++);
                drawables.Add(package);
            }
            drawables.Add(GetDrawablesForTransientGraphics());

            return(drawables);
        }
Пример #9
0
        /// <summary>
        /// Gets drawables to render this Gizmo
        /// </summary>
        /// <param name="factory">Render package factory</param>
        /// <returns>List of render package</returns>
        public IEnumerable <IRenderPackage> GetDrawables(IRenderPackageFactory factory)
        {
            List <IRenderPackage> drawables = new List <IRenderPackage>();

            foreach (var axis in axes)
            {
                IRenderPackage package = factory.CreateRenderPackage();
                DrawAxis(ref package, axis);
                drawables.Add(package);
            }

            var p = Planes.xyPlane;

            foreach (var plane in planes)
            {
                IRenderPackage package = factory.CreateRenderPackage();
                DrawPlane(ref package, plane, p++);
                drawables.Add(package);
            }
            drawables.AddRange(GetDrawablesForTransientGeometry(factory));

            return(drawables);
        }
Пример #10
0
        private static int TotalCurvesOfColor(this IRenderPackage package, Color4 color)
        {
            var count = 0;
            var idx   = 0;

            for (var i = 0; i < package.LineStripVertexCounts.Count(); i++)
            {
                var currCount = package.LineStripVertexCounts.ElementAt(i);
                if (currCount == 0)
                {
                    continue;
                }

                var colorBytes = package.LineStripVertexColors.Skip(idx).Take(currCount * 4);
                if (colorBytes.IsArrayOfColor(color))
                {
                    count++;
                }
                idx += currCount * 4;
            }

            return(count);
        }
        public void Tessellate(IRenderPackage package, TessellationParameters parameters)
        {
            for (var i = 0; i < width - 1; i++)
            {
                for (var j = 0; j < length - 1; j++)
                {
                    var a = vertexCoords[i , j];
                    var b = vertexCoords[i , j + 1];
                    var c = vertexCoords[i + 1, j];
                    var d = vertexCoords[i + 1, j + 1];

                    var v1 = Vector.ByTwoPoints(b, a).Cross(Vector.ByTwoPoints(c, b)).Normalized().Reverse();
                    var v2 = Vector.ByTwoPoints(c, d).Cross(Vector.ByTwoPoints(b, d)).Normalized().Reverse();

                    PushTriangleVertex(package, a, v1);
                    PushTriangleVertex(package, b, v1);
                    PushTriangleVertex(package, c, v1);

                    PushTriangleVertex(package, d, v2);
                    PushTriangleVertex(package, c, v2);
                    PushTriangleVertex(package, b, v2);
                }
            }
        }
Пример #12
0
        public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512)
        {
            for (var i = 0; i < width - 1; i++)
            {
                for (var j = 0; j < length - 1; j++)
                {
                    var a = vertexCoords[i, j];
                    var b = vertexCoords[i, j + 1];
                    var c = vertexCoords[i + 1, j];
                    var d = vertexCoords[i + 1, j + 1];

                    var v1 = Vector.ByTwoPoints(b, a).Cross(Vector.ByTwoPoints(c, b)).Normalized().Reverse();
                    var v2 = Vector.ByTwoPoints(c, d).Cross(Vector.ByTwoPoints(b, d)).Normalized().Reverse();

                    PushTriangleVertex(package, a, v1);
                    PushTriangleVertex(package, b, v1);
                    PushTriangleVertex(package, c, v1);

                    PushTriangleVertex(package, d, v2);
                    PushTriangleVertex(package, c, v2);
                    PushTriangleVertex(package, b, v2);
                }
            }
        }
Пример #13
0
        /// <summary>
        /// Pushes an uncolored quad into a package.
        /// </summary>
        private static void PushQuadIntoPackage(IRenderPackage package)
        {
            package.AddTriangleVertex(0, 0, 0);
            package.AddTriangleVertex(1, 0, 0);
            package.AddTriangleVertex(1, 1, 0);

            package.AddTriangleVertex(0, 0, 0);
            package.AddTriangleVertex(1, 1, 0);
            package.AddTriangleVertex(0, 1, 0);

            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);

            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
        }
Пример #14
0
        private void CreateColorMapOnSurface(IRenderPackage package, TessellationParameters parameters)
        {
            const byte gray = 80;
            var        previousMeshVertexCount = package.MeshVertexCount;
            var        previousLineVertexCount = package.LineVertexCount;

            geometry.Tessellate(package, parameters);

            var colorBytes = new List <byte>();

            foreach (var colorArr in colorMap)
            {
                foreach (var c in colorArr)
                {
                    colorBytes.Add(c.Blue);
                    colorBytes.Add(c.Green);
                    colorBytes.Add(c.Red);
                    colorBytes.Add(c.Alpha);
                }
            }

            TessellateEdges(package, parameters);

            if (package is IRenderPackageSupplement packageSupplement)
            {
                packageSupplement.AddTextureMapForMeshVerticesRange(previousMeshVertexCount, package.MeshVertexCount - 1, colorBytes.ToArray(),
                                                                    colorMap.First().Length * 4);

                if (package.LineVertexCount > previousLineVertexCount)
                {
                    packageSupplement.UpdateLineVertexColorForRange(previousLineVertexCount, package.LineVertexCount - 1,
                                                                    gray, gray,
                                                                    gray, 255);
                }
            }
        }
Пример #15
0
 public void Tessellate(IRenderPackage package, TessellationParameters parameters)
 {
     // This example contains information to draw a point
     package.AddPointVertex(point.X, point.Y, point.Z);
     package.AddPointVertexColor(255, 0, 0, 255);
 }
Пример #16
0
 public void Tessellate(IRenderPackage package, TessellationParameters parameters)
 {
 }
Пример #17
0
 internal override bool TessellateCore(IRenderPackage package)
 {
     if(!base.TessellateCore(package))
         this.Geometry.Tessellate(package);
     return true;
 }
Пример #18
0
 public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512)
 {
     AsVector().Tessellate(package, tol, maxGridLines);
 }
Пример #19
0
        private void TessellateEdges(IRenderPackage package, TessellationParameters parameters)
        {
            if (!parameters.ShowEdges) return;

            var surf = geometry as Surface;
            if (surf != null)
            {
                foreach (var curve in surf.PerimeterCurves())
                {
                    curve.Tessellate(package, parameters);
                    curve.Dispose();
                }
            }

            var solid = geometry as Solid;
            if (solid != null)
            {
                foreach (var geom in solid.Edges.Select(edge => edge.CurveGeometry))
                {
                    geom.Tessellate(package, parameters);
                    geom.Dispose();
                }
            }
        }
Пример #20
0
 public void Tessellate(List<object> objects, IRenderPackage package, TessellationParameters parameters)
 {
     throw new NotImplementedException();
 }
Пример #21
0
        /// <summary>
        /// Draws plane at half the scale.
        /// </summary>
        /// <param name="package"></param>
        /// <param name="plane"></param>
        /// <param name="name"></param>
        private void DrawPlane(ref IRenderPackage package, Plane plane, Planes name)
        {
            package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.ManipulatorPlane, Name, name.ToString()); 
            var p1 = Origin.Add(plane.XAxis.Scale(scale/2));
            var p2 = p1.Add(plane.YAxis.Scale(scale/2));
            var p3 = Origin.Add(plane.YAxis.Scale(scale/2));
            
            package.AddLineStripVertexCount(3);
            package.AddLineStripVertexColor(0, 0, 255, 255);
            package.AddLineStripVertex(p1.X, p1.Y, p1.Z);

            package.AddLineStripVertexColor(0, 0, 255, 255);
            package.AddLineStripVertex(p2.X, p2.Y, p2.Z);

            package.AddLineStripVertexColor(0, 0, 255, 255);
            package.AddLineStripVertex(p3.X, p3.Y, p3.Z);
        }
Пример #22
0
 public static void DrawLine(IRenderPackage package, Triple start, Triple end)
 => DrawLine(package, start, end, DefaultLineColor);
Пример #23
0
 public static void DrawPolyline(IRenderPackage package, List <Triple> vertices)
 => DrawPolyline(package, vertices, DefaultLineColor);
Пример #24
0
 public static void DrawPoints(IRenderPackage package, List <Triple> points)
 => DrawPoints(package, points, DefaultPointColor);
Пример #25
0
 public static void DrawPoint(IRenderPackage package, Triple point)
 => DrawPoint(package, point, DefaultPointColor);
Пример #26
0
 public static void DrawPoint(IRenderPackage package, Triple point, Color color)
 {
     package.AddPointVertex(point.X, point.Y, point.Z);
     package.AddPointVertexColor(color.R, color.G, color.B, color.A);
 }
Пример #27
0
 public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512)
 {
     // This example contains information to draw a point
     package.AddPointVertex(point.X, point.Y, point.Z);
     package.AddPointVertexColor(255, 0, 0, 255);
 }
Пример #28
0
 private static void PushGraphicItemIntoPackage(IGraphicItem graphicItem, IRenderPackage package, string tag, double size)
 {
     graphicItem.Tessellate(package, -1.0, 32);
     package.Tag = tag;
 }
Пример #29
0
 private void PushTriangleVertex(IRenderPackage package, Point p, Vector n)
 {
     package.PushTriangleVertex(p.X, p.Y, p.Z);
     package.PushTriangleVertexColor(255, 255, 0, 255);
     package.PushTriangleVertexNormal(n.X, n.Y, n.Z);
 }
Пример #30
0
 public void Tessellate(IRenderPackage package, double tol, int gridLines)
 {
     // Do nothing. We implement this method only to prevent the GraphicDataProvider from
     // attempting to interrogate the public properties, some of which may require regeneration
     // or transactions and which must necessarily be threaded in a specific way.
 }
Пример #31
0
 public void Tessellate(List <object> objects, IRenderPackage package)
 {
     throw new NotImplementedException();
 }
Пример #32
0
 public void Tessellate(IRenderPackage package, TessellationParameters parameters)
 {
     // This example contains information to draw a point
     package.AddPointVertex(point.X, point.Y, point.Z);
     package.AddPointVertexColor(255, 0, 0, 255);
 }
Пример #33
0
        private void CreateGeometryRenderData(Color color, IRenderPackage package, TessellationParameters parameters)
        {
            package.RequiresPerVertexColoration = true;

            // As you add more data to the render package, you need
            // to keep track of the index where this coloration will 
            // start from.

            geometry.Tessellate(package, parameters);

            TessellateEdges(package, parameters);

            if (package.LineVertexCount > 0)
            {
                package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, color.Red, color.Green,
                    color.Blue, color.Alpha));
            }

            if (package.PointVertexCount > 0)
            {
                package.ApplyPointVertexColors(CreateColorByteArrayOfSize(package.PointVertexCount, color.Red, color.Green,
                    color.Blue, color.Alpha));
            }

            if (package.MeshVertexCount > 0)
            {
                package.ApplyMeshVertexColors(CreateColorByteArrayOfSize(package.MeshVertexCount, color.Red, color.Green,
                    color.Blue, color.Alpha));
            }
        }
Пример #34
0
 public override void DrawGraphics(IRenderPackage package, TessellationParameters parameters, List <Node> allNodes)
 => GeometryRender.DrawLine(
     package,
     allNodes[NodeIndices[0]].Position,
     allNodes[NodeIndices[1]].Position,
     Color);
Пример #35
0
        private static void CreateVertexColoredMesh(Point[] vertices, Color[] colors, IRenderPackage package, TessellationParameters parameters)
        {
            package.RequiresPerVertexColoration = true;

            for (var i = 0; i <= vertices.Count()-3; i+=3)
            {
                var ptA = vertices[i];
                var ptB = vertices[i+1];
                var ptC = vertices[i+2];

                if (ptA.IsAlmostEqualTo(ptB) ||
                    ptB.IsAlmostEqualTo(ptC) ||
                    ptA.IsAlmostEqualTo(ptC))
                {
                    continue;
                }

                var alongLine = false;
                using (var l = Line.ByStartPointEndPoint(ptA, ptC))
                {
                    alongLine = ptB.DistanceTo(l) < 0.00001;
                }
                if (alongLine)
                {
                    continue;
                }

                var cA = colors[i];
                var cB = colors[i+1];
                var cC = colors[i+2];

                var s1 = ptB.AsVector().Subtract(ptA.AsVector()).Normalized();
                var s2 = ptC.AsVector().Subtract(ptA.AsVector()).Normalized();
                var n = s1.Cross(s2);

                package.AddTriangleVertex(ptA.X, ptA.Y, ptA.Z);
                package.AddTriangleVertexNormal(n.X, n.Y, n.Z);
                package.AddTriangleVertexColor(cA.Red, cA.Green, cA.Blue, cA.Alpha);
                package.AddTriangleVertexUV(0, 0);

                package.AddTriangleVertex(ptB.X, ptB.Y, ptB.Z);
                package.AddTriangleVertexNormal(n.X, n.Y, n.Z);
                package.AddTriangleVertexColor(cB.Red, cB.Green, cB.Blue, cB.Alpha);
                package.AddTriangleVertexUV(0, 0);

                package.AddTriangleVertex(ptC.X, ptC.Y, ptC.Z);
                package.AddTriangleVertexNormal(n.X, n.Y, n.Z);
                package.AddTriangleVertexColor(cC.Red, cC.Green, cC.Blue, cC.Alpha);
                package.AddTriangleVertexUV(0, 0);
            }
        }
Пример #36
0
 /// <summary>
 /// Pushes an uncolored line into a package.
 /// </summary>
 internal static void PushLineIntoPackage(IRenderPackage package)
 {
     package.AddLineStripVertex(0, 0, 0);
     package.AddLineStripVertex(1, 1, 1);
     package.AddLineStripVertexCount(2);
 }
Пример #37
0
        /// <summary>
        /// Pushes an uncolored quad into a package.
        /// </summary>
        private static void PushQuadIntoPackage(IRenderPackage package)
        {
            package.AddTriangleVertex(0,0,0);
            package.AddTriangleVertex(1,0,0);
            package.AddTriangleVertex(1,1,0);

            package.AddTriangleVertex(0,0,0);
            package.AddTriangleVertex(1,1,0);
            package.AddTriangleVertex(0,1,0);

            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);
            package.AddTriangleVertexNormal(0, 0, 1);

            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
            package.AddTriangleVertexUV(0, 0);
        }
Пример #38
0
 public void Tessellate(IRenderPackage package, TessellationParameters parameters)
 {
     AsVector().Tessellate(package, parameters);
 }
Пример #39
0
 /// <summary>
 /// Pushes an uncolored line into a package.
 /// </summary>
 internal static void PushLineIntoPackage(IRenderPackage package)
 {
     package.AddLineStripVertex(0,0,0);
     package.AddLineStripVertex(1,1,1);
     package.AddLineStripVertexCount(2);
 }
Пример #40
0
 /// <summary>
 /// Pushes a point into a package.
 /// </summary>
 private static void PushPointIntoPackage(IRenderPackage package)
 {
     package.AddPointVertex(0,0,0);
 }
Пример #41
0
 /// <summary>
 /// Pushes a point into a package.
 /// </summary>
 private static void PushPointIntoPackage(IRenderPackage package)
 {
     package.AddPointVertex(0, 0, 0);
 }
Пример #42
0
 public void Tessellate(IRenderPackage package)
 {
     mEntity.Tessellate(package);
 }
Пример #43
0
 public override void Tessellate(IRenderPackage package, double tol, int gridLines)
 {
     InternalEdge.AsCurve().Tessellate()
         .ToList()
         .ForEach(x => package.PushLineStripVertex(x.X, x.Y, x.Z));
 }
Пример #44
0
 internal virtual bool TessellateCore(IRenderPackage package)
 {
     //Does nothing
     return(false);
 }
Пример #45
0
        private void PushGraphicItemIntoPackage(IGraphicItem graphicItem, IRenderPackage package, string tag, double size)
        {
            try
            {

                graphicItem.Tessellate(package, -1.0, dynSettings.Controller.VisualizationManager.MaxTesselationDivisions);
                package.Tag = tag;
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine("PushGraphicItemIntoPackage: " + e);
            }
        }
Пример #46
0
        /// <summary>
        /// Draws plane at half the scale.
        /// </summary>
        /// <param name="package"></param>
        /// <param name="plane"></param>
        /// <param name="name"></param>
        private void DrawPlane(ref IRenderPackage package, Plane plane, Planes name)
        {
            package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.ManipulatorPlane, Name, name);
            using (var vec1 = plane.XAxis.Scale(scale/3))
            using (var vec2 = plane.YAxis.Scale(scale/3))
            using (var vec3 = plane.YAxis.Scale(scale/3))
            {
                using (var p1 = Origin.Add(vec1))
                using (var p2 = p1.Add(vec2))
                using (var p3 = Origin.Add(vec3))
                {
                    var axis = plane.Normal;
                    var color = GetAxisColor(GetAlignedAxis(axis));

                    package.AddLineStripVertexCount(3);
                    package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                    package.AddLineStripVertex(p1.X, p1.Y, p1.Z);

                    package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                    package.AddLineStripVertex(p2.X, p2.Y, p2.Z);

                    package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                    package.AddLineStripVertex(p3.X, p3.Y, p3.Z);
                    
                }
            }
        }
Пример #47
0
        public void Tessellate(IRenderPackage package, double tol, int gridLines)
        {
            //Ensure that the object is still alive
            if (!IsAlive) return;

            this.Curve.Tessellate(package, tol);
        }
Пример #48
0
 public void Tessellate(IRenderPackage package)
 {
     mEntity.Tessellate(package);
 }
Пример #49
0
 public void Tessellate(IRenderPackage package, TessellationParameters parameters)
 {
     // Do nothing. We implement this method only to prevent the GraphicDataProvider from
     // attempting to interrogate the public properties, some of which may require regeneration
     // or transactions and which must necessarily be threaded in a specific way.
 }
Пример #50
0
 public void Tessellate(IRenderPackage package, TessellationParameters parameters)
 {
     package.AddPointVertex(point.X, point.Y, point.Z);
     package.Description = label;
 }
Пример #51
0
 /// <summary>
 /// Draws axis line
 /// </summary>
 /// <param name="package"></param>
 /// <param name="axis"></param>
 /// <param name="name"></param>
 private void DrawAxisLine(ref IRenderPackage package, Vector axis, string name)
 {
     package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.AxisLine, Name, name);
     using (var line = RayExtensions.ToOriginCenteredLine(Origin, axis))
     {
         var color = GetAxisColor(GetAlignedAxis(axis));
         package.AddLineStripVertexCount(2);
         package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
         package.AddLineStripVertex(line.StartPoint.X, line.StartPoint.Y, line.StartPoint.Z);
         package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
         package.AddLineStripVertex(line.EndPoint.X, line.EndPoint.Y, line.EndPoint.Z);
     }
 }
Пример #52
0
        public void Tessellate(IRenderPackage package, TessellationParameters parameters)
        {
            if(vertices != null)
            {
                CreateVertexColoredMesh(vertices, meshVertexColors, package, parameters);
                return;
            }

            if (singleColor != null)
            {
                CreateGeometryRenderData(singleColor, package, parameters);
                return;
            }

            if (colorMap != null)
            {
                if (!colorMap.Any())
                {
                    return;
                }

                CreateColorMapOnSurface(colorMap, package, parameters);
                return;
            }
        }
Пример #53
0
        /// <summary>
        /// Draws axis as 3D arrow based on scale factor.
        /// </summary>
        /// <param name="package"></param>
        /// <param name="axis"></param>
        private void DrawAxis(ref IRenderPackage package, Vector axis)
        {
            var axisType = GetAlignedAxis(axis);
            package.Description = string.Format("{0}_{1}_{2}", RenderDescriptions.ManipulatorAxis, Name, axisType.ToString());

            using (var axisEnd = Origin.Add(axis.Scale(scale)))
            {
                var color = GetAxisColor(axisType);
                package.AddLineStripVertexCount(2);
                package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                package.AddLineStripVertex(Origin.X, Origin.Y, Origin.Z);
                package.AddLineStripVertexColor(color.R, color.G, color.B, color.A);
                package.AddLineStripVertex(axisEnd.X, axisEnd.Y, axisEnd.Z);
            }
        }
Пример #54
0
        private void CreateColorMapOnSurface(Color[][] colorMap , IRenderPackage package, TessellationParameters parameters)
        {
            const byte gray = 80;
 
            geometry.Tessellate(package, parameters);

            var colorBytes = new List<byte>();

            foreach (var colorArr in colorMap)
            {
                foreach (var c in colorArr)
                {
                    colorBytes.Add(c.Blue);
                    colorBytes.Add(c.Green);
                    colorBytes.Add(c.Red);
                    colorBytes.Add(c.Alpha);
                }
            }

            package.SetColors(colorBytes.ToArray());
            package.ColorsStride = colorMap.First().Length * 4;

            TessellateEdges(package, parameters);

            if (package.LineVertexCount > 0)
            {
                package.ApplyLineVertexColors(CreateColorByteArrayOfSize(package.LineVertexCount, gray, gray,
                    gray, 255));
            }
        }
Пример #55
0
        private static void CreateVertexColoredMesh(Point[] vertices, Color[] colors, IRenderPackage package, TessellationParameters parameters)
        {
            package.RequiresPerVertexColoration = true;

            for (var i = 0; i <= vertices.Count() - 3; i += 3)
            {
                var ptA = vertices[i];
                var ptB = vertices[i + 1];
                var ptC = vertices[i + 2];

                if (ptA.IsAlmostEqualTo(ptB) ||
                    ptB.IsAlmostEqualTo(ptC) ||
                    ptA.IsAlmostEqualTo(ptC))
                {
                    continue;
                }

                var alongLine = false;
                using (var l = Line.ByStartPointEndPoint(ptA, ptC))
                {
                    alongLine = ptB.DistanceTo(l) < 0.00001;
                }
                if (alongLine)
                {
                    continue;
                }

                var cA = colors[i];
                var cB = colors[i + 1];
                var cC = colors[i + 2];

                var s1 = ptB.AsVector().Subtract(ptA.AsVector()).Normalized();
                var s2 = ptC.AsVector().Subtract(ptA.AsVector()).Normalized();
                var n  = s1.Cross(s2);

                package.AddTriangleVertex(ptA.X, ptA.Y, ptA.Z);
                package.AddTriangleVertexNormal(n.X, n.Y, n.Z);
                package.AddTriangleVertexColor(cA.Red, cA.Green, cA.Blue, cA.Alpha);
                package.AddTriangleVertexUV(0, 0);

                package.AddTriangleVertex(ptB.X, ptB.Y, ptB.Z);
                package.AddTriangleVertexNormal(n.X, n.Y, n.Z);
                package.AddTriangleVertexColor(cB.Red, cB.Green, cB.Blue, cB.Alpha);
                package.AddTriangleVertexUV(0, 0);

                package.AddTriangleVertex(ptC.X, ptC.Y, ptC.Z);
                package.AddTriangleVertexNormal(n.X, n.Y, n.Z);
                package.AddTriangleVertexColor(cC.Red, cC.Green, cC.Blue, cC.Alpha);
                package.AddTriangleVertexUV(0, 0);
            }
        }
Пример #56
0
        private IRenderPackage RollBackPackage(IRenderPackage package, int previousPointVertexCount, int previousLineVertexCount, int previousMeshVertexCount)
        {
            var newPackage = factory.CreateRenderPackage();

            newPackage.Description   = package.Description;
            newPackage.IsSelected    = package.IsSelected;
            newPackage.DisplayLabels = package.DisplayLabels;



            var ptVertices = package.PointVertices.ToArray();

            for (var i = 0; i < previousPointVertexCount * 3 && i < ptVertices.Length; i += 3)
            {
                newPackage.AddPointVertex(ptVertices[i], ptVertices[i + 1], ptVertices[i + 2]);
            }

            var ptColors = package.PointVertexColors.ToArray();

            for (var i = 0; i < previousPointVertexCount * 4 && i < ptColors.Length; i += 4)
            {
                newPackage.AddPointVertexColor(ptColors[i], ptColors[i + 1], ptColors[i + 2], ptColors[i + 3]);
            }

            var lineVertices = package.LineStripVertices.ToArray();

            for (var i = 0; i < previousLineVertexCount * 3 && i < lineVertices.Length; i += 3)
            {
                newPackage.AddLineStripVertex(lineVertices[i], lineVertices[i + 1], lineVertices[i + 2]);
            }

            var lineColors = package.LineStripVertexColors.ToArray();

            for (var i = 0; i < previousLineVertexCount * 4 && i < lineColors.Length; i += 4)
            {
                newPackage.AddLineStripVertexColor(lineColors[i], lineColors[i + 1], lineColors[i + 2], lineColors[i + 3]);
            }

            var lineVerticesCounts = package.LineStripVertexCounts.ToArray();
            var count = 0;
            var index = 0;

            while (count < lineVerticesCounts.Length && count < previousLineVertexCount)
            {
                newPackage.AddLineStripVertexCount(lineVerticesCounts[index]);
                count += lineVerticesCounts[index];
                index++;
            }

            var meshVertices = package.MeshVertices.ToArray();

            for (var i = 0; i < previousMeshVertexCount * 3 && i < meshVertices.Length; i += 3)
            {
                newPackage.AddTriangleVertex(meshVertices[i], meshVertices[i + 1], meshVertices[i + 2]);
            }

            var meshNormals = package.MeshNormals.ToArray();

            for (var i = 0; i < previousMeshVertexCount * 3 && i < meshNormals.Length; i += 3)
            {
                newPackage.AddTriangleVertexNormal(meshNormals[i], meshNormals[i + 1], meshNormals[i + 2]);
            }

            var meshUV = package.MeshTextureCoordinates.ToArray();

            for (var i = 0; i < previousMeshVertexCount * 2 && i < meshUV.Length; i += 2)
            {
                newPackage.AddTriangleVertexUV(meshUV[i], meshUV[i + 1]);
            }

            var meshColors = package.MeshVertexColors.ToArray();

            for (var i = 0; i < previousMeshVertexCount * 4 && i < meshColors.Length; i += 4)
            {
                newPackage.AddTriangleVertexColor(meshColors[i], meshColors[i + 1], meshColors[i + 2], meshColors[i + 3]);
            }

            //Todo Need to obsolete ITransformable
            if (package is ITransformable transformable && newPackage is ITransformable newTransformable)
            {
                newTransformable.RequiresCustomTransform = transformable.RequiresCustomTransform;
                var t = transformable.Transform;
                if (t.Length == 16)
                {
                    newTransformable.SetTransform(t[0], t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], t[10], t[11], t[12], t[13], t[14], t[15]);
                }
            }

            if (package is IRenderPackageSupplement packageSupplement && newPackage is IRenderPackageSupplement newPackageSupplement)
            {
                var textureMapsList       = packageSupplement.TextureMapsList;
                var textureMapsStrideList = packageSupplement.TextureMapsStrideList;
                var meshVerticesRange     = packageSupplement.MeshVerticesRangesAssociatedWithTextureMaps;
                packageSupplement.AllowLegacyColorOperations = false;

                for (var i = 0; i < textureMapsList.Count; i++)
                {
                    newPackageSupplement.AddTextureMapForMeshVerticesRange(meshVerticesRange[i].Item1, meshVerticesRange[i].Item2, textureMapsList[i], textureMapsStrideList[i]);
                }
            }

            if (package is IRenderLabels renderLabels && newPackage is IRenderLabels newRenderLabels)
            {
                var labelData = renderLabels.LabelData;

                foreach (var(label, pt) in labelData)
                {
                    newRenderLabels.AddLabel(label, pt[0], pt[1], pt[2]);
                }
            }

            return(newPackage);
        }
Пример #57
0
 public void Tessellate(List<object> objects, IRenderPackage package, double tol)
 {
     throw new NotImplementedException();
 }
Пример #58
0
 public void Tessellate(IRenderPackage package, double tol = -1, int maxGridLines = 512)
 {
     package.AddPointVertex(point.X, point.Y, point.Z);
     package.Description = label;
 }
Пример #59
0
 internal static void AddColouredVertex(IRenderPackage package, gVertex vertex, DSCore.Color color)
 {
     package.AddPointVertex(vertex.X, vertex.Y, vertex.Z);
     package.AddPointVertexColor(color.Red, color.Green, color.Blue, color.Alpha);
 }
Пример #60
0
        internal override sealed bool TessellateCore(IRenderPackage package)
        {
            if (base.TessellateCore(package))
                return true;

            DSColor c = (this.Color == null) ? DSColor.Yellow : this.Color;
            int nMaxSamples = 16;
            IPointEntity[] samples = GetSamplePoints(nMaxSamples);

            foreach (var item in samples)
            {
                package.PushLineStripVertex(item.X, item.Y, item.Z);
                package.PushLineStripVertexColor(c.RedValue, c.GreenValue, c.BlueValue, c.AlphaValue);
            }

            int nSamples = samples.Length;
            if (this.IsClosed)
            {
                package.PushLineStripVertex(samples[0].X, samples[0].Y, samples[0].Z);
                package.PushLineStripVertexColor(c.RedValue, c.GreenValue, c.BlueValue, c.AlphaValue);
                ++nSamples;
            }
            package.PushLineStripVertexCount(nSamples);
            return true;
        }