public override void Run(RenderControl render)
        {
            var paramCurve = Sketch2dBuilder.MakeLine(new GPnt2d(0, 0), new GPnt2d(Math.PI * 20, 20));

            // curve one cone
            {
                var cone               = ShapeBuilder.MakeCone(GP.XOY(), 1, 10, 20, 0);
                var coneFace           = cone.FindChild(EnumTopoShapeType.Topo_FACE, 0);
                var curveOnConeSurface = SketchBuilder.MakeCurveOnSurface(paramCurve, coneFace);

                var material = LineDashedMaterial.Create("my.dashed.material");
                material.SetColor(ColorTable.Hex(0x0FFAA));
                var node = BrepSceneNode.Create(curveOnConeSurface, null, material);
                node.ComputeLineDistances(); // Enable dashed line style.

                render.ShowSceneNode(node);
            }
            // curve one cylinder
            {
                var cylinder     = ShapeBuilder.MakeCylinder(GP.XOY(), 2, 20, 0);
                var cylinderFace = cylinder.FindChild(EnumTopoShapeType.Topo_FACE, 0);

                var curveOnCylinderSurface = SketchBuilder.MakeCurveOnSurface(paramCurve, cylinderFace);

                var node2 = BrepSceneNode.Create(curveOnCylinderSurface, null, null);
                render.ShowSceneNode(node2);
            }
        }
        public override void Run(RenderControl render)
        {
            // prepare lines data
            const int COUNT  = 300;
            var       buffer = new Float32Buffer(0);

            buffer.Reserve(COUNT * 3);

            var colors = new Float32Buffer(0);

            Random random = new Random();

            for (int i = 0; i < COUNT; i++)
            {
                float x = 20 * (float)random.NextDouble() - 10;
                float y = 20 * (float)random.NextDouble() - 10;
                float z = 20 * (float)random.NextDouble() - 10;

                buffer.Append(x, y, z);
                colors.Append((float)random.NextDouble(), (float)random.NextDouble(), (float)random.NextDouble());
            }

            var primitive = GeometryBuilder.CreateLines(new Float32Array(buffer), null, new Float32Array(colors));

            GeometryBuilder.ComputeLineDistances(primitive);
            // prepare dashed line material
            var material = LineDashedMaterial.Create("dashed-line");

            // enable vertex color
            material.SetVertexColors(true);
            material.SetDashSize(1.0f);

            // add to scene
            var node = new PrimitiveSceneNode(primitive, material);

            render.ShowSceneNode(node);
        }