public override bool Run(FeatureContext context)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter = "IGES File (*.igs;*.iges)|*.igs;*.iges||";
            if (DialogResult.OK != dlg.ShowDialog())
            {
                return(true);
            }

            var shape = GlobalInstance.BrepTools.LoadFile(new Path(dlg.FileName));

            var size = shape.GetBBox().Size();

            var entity = GlobalInstance.TopoShapeConvert.ToEntity(shape, 1);

            for (int ii = 0; ii < 7; ++ii)
            {
                for (int jj = 0; jj < 7; ++jj)
                {
                    var node = new EntitySceneNode();
                    node.SetEntity(entity);

                    var trf = GlobalInstance.MatrixBuilder.MakeTranslate(new Vector3(size.X * ii, size.Y * jj, 0));
                    node.SetTransform(trf);

                    context.ShowSceneNode(node);
                }
            }

            return(true);
        }
        public override bool Run(FeatureContext context)
        {
            TopoShape        box    = GlobalInstance.BrepTools.MakeBox(Vector3.ZERO, Vector3.UNIT_Z, new Vector3(10, 10, 10));
            RenderableEntity entity = GlobalInstance.TopoShapeConvert.ToEntity(box, 0);

            for (int ii = 0; ii < 10; ++ii)
            {
                EntitySceneNode node = new EntitySceneNode();
                node.SetEntity(entity);
                Matrix4 trf = GlobalInstance.MatrixBuilder.MakeTranslate(new Vector3(11 * ii, 0, 0));
                node.SetTransform(trf);

                context.ShowSceneNode(node);
            }
            context.RequestDraw();

            SceneNodeIterator itr = context.RenderView.SceneManager.NewSceneNodeIterator();
            String            msg = "Node Ids: ";

            while (itr.More())
            {
                SceneNode node = itr.Next();
                msg += String.Format(" {0}", node.GetId().AsInt());
            }

            MessageBox.Show(msg);

            return(true);
        }
Beispiel #3
0
        private void customToolStripMenuItem_Click(object sender, EventArgs e)
        {
            float[]          vb     = { 0, 0, 0, 100, 0, 0, 100, 100, 0 };
            uint[]           ib     = { 0, 1, 2 };
            float[]          cb     = { 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1 };
            float[]          nb     = {};
            RenderableEntity entity = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(vb, ib, nb, cb, new AABox(Vector3.ZERO, new Vector3(100, 100, 1)));

            EntitySceneNode node = new EntitySceneNode();

            node.SetEntity(entity);

            renderView.SceneManager.AddNode(node);
            renderView.RequestDraw();
        }
        private void customToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShapeConvert con = new TopoShapeConvert();
            float[] vb ={0,0,0,100,0,0,100,100,0};
            uint[] ib = { 0, 1, 2 };
            float[] cb = { 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1 };
            float[] nb = {};
            RenderableEntity entity = con.CreateColoredFaceEntity(vb, ib, nb, cb, new AABox(Vector3.ZERO, new Vector3(100, 100, 1)));

            EntitySceneNode node = new EntitySceneNode();
            node.SetEntity(entity);

            renderView.SceneManager.AddNode(node);
            renderView.RequestDraw();
        }
Beispiel #5
0
        private void faceTriangulateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape circle = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 100, Vector3.UNIT_Z);
            TopoShape face   = GlobalInstance.BrepTools.MakeFace(circle);

            if (face.GetShapeType() == (int)EnShapeType.Topo_FACE)
            {
                MessageBox.Show("This is a face!");
            }

            FaceTriangulation ft = new FaceTriangulation();

            ft.SetTolerance(5);
            ft.Perform(face);
            float[] points     = ft.GetVertexBuffer();
            int     pointCount = points.Length / 3;

            uint[] indexBuffer = ft.GetIndexBuffer();
            int    faceCount   = indexBuffer.Length / 3;

            float[] normals = ft.GetNormalBuffer();

            MessageBox.Show(String.Format("Point Count: {0}\n Face Count: {1}", pointCount, faceCount));

            float[] colorBuffer = new float[pointCount * 4];

            Random num = new Random();

            for (int ii = 0; ii < pointCount; ++ii)
            {
                int idx = ii * 4;
                colorBuffer[idx]     = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 1] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 2] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 3] = 1;
            }

            RenderableEntity entity = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(points, indexBuffer, normals, colorBuffer, face.GetBBox());

            EntitySceneNode node = new EntitySceneNode();

            node.SetEntity(entity);

            renderView.SceneManager.AddNode(node);
            renderView.RequestDraw();
            //////////////////////////////////////////////////////////////////////////
            // Code to get the mesh

            /*
             * for (int ii = 0; ii < faceCount; ++ii)
             * {
             *  int p0 = (int)indexBuffer[ii * 3];
             *  int p1 = (int)indexBuffer[ii * 3 + 1];
             *  int p2 = (int)indexBuffer[ii * 3 + 2];
             *
             *  Vector3 pt0 = new Vector3(points[p0 * 3], points[p0 * 3 + 1], points[p0 * 3 + 2]);
             *  Vector3 pt1 = new Vector3(points[p1 * 3], points[p1 * 3 + 1], points[p1 * 3 + 2]);
             *  Vector3 pt2 = new Vector3(points[p2 * 3], points[p2 * 3 + 1], points[p2 * 3 + 2]);
             *
             *  // ....
             *  // use the same way to get the normal data for each point.
             * }
             * */
            //////////////////////////////////////////////////////////////////////////
        }
Beispiel #6
0
        private void faceTriangulateToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape circle = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 100, Vector3.UNIT_Z);
            TopoShape face = GlobalInstance.BrepTools.MakeFace(circle);
            if (face.GetShapeType() == EnumTopoShapeType.Topo_FACE)
            {
                MessageBox.Show("This is a face!");
            }

            FaceTriangulation ft = new FaceTriangulation();
            ft.SetTolerance(5);
            ft.Perform(face);
            float[] points = ft.GetVertexBuffer();
            int pointCount = points.Length / 3;
            uint[] indexBuffer = ft.GetIndexBuffer();
            int faceCount = indexBuffer.Length / 3;
            float[] normals = ft.GetNormalBuffer();

            MessageBox.Show(String.Format("Point Count: {0}\n Face Count: {1}", pointCount, faceCount));

            float[] colorBuffer = new float[pointCount * 4];
            
            Random num = new Random();
            for (int ii = 0; ii < pointCount; ++ii)
            {
                int idx = ii * 4;
                colorBuffer[idx] = num.Next(0, 256)/256.0f;
                colorBuffer[idx+1] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx+2] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx+3] = 1;
            }

            RenderableEntity entity = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(points, indexBuffer, normals, colorBuffer, face.GetBBox());

            EntitySceneNode node = new EntitySceneNode();
            node.SetEntity(entity);

            renderView.SceneManager.AddNode(node);
            renderView.RequestDraw();
            //////////////////////////////////////////////////////////////////////////
            // Code to get the mesh
            /*
            for (int ii = 0; ii < faceCount; ++ii)
            {
                int p0 = (int)indexBuffer[ii * 3];
                int p1 = (int)indexBuffer[ii * 3 + 1];
                int p2 = (int)indexBuffer[ii * 3 + 2];

                Vector3 pt0 = new Vector3(points[p0 * 3], points[p0 * 3 + 1], points[p0 * 3 + 2]);
                Vector3 pt1 = new Vector3(points[p1 * 3], points[p1 * 3 + 1], points[p1 * 3 + 2]);
                Vector3 pt2 = new Vector3(points[p2 * 3], points[p2 * 3 + 1], points[p2 * 3 + 2]);

                // ....
                // use the same way to get the normal data for each point.
            }
             * */
            //////////////////////////////////////////////////////////////////////////
        }
Beispiel #7
0
        private void performanceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            TopoShape box = GlobalInstance.BrepTools.MakeBox(Vector3.ZERO, Vector3.UNIT_Z, Vector3.UNIT_SCALE);
            RenderableGeometry geom = new RenderableGeometry();
            geom.SetGeometry(box);

            for (int ii = 0; ii < 100; ++ii)
            {
                for (int jj = 0; jj < 200; ++jj)
                {
                    EntitySceneNode node = new EntitySceneNode();
                    node.SetEntity(geom);
                    node.SetTransform(GlobalInstance.MatrixBuilder.MakeTranslate(ii * 5 - 250, jj * 5 - 500, 0));
                    renderView.ShowSceneNode(node);
                }
            }

            renderView.RequestDraw();
        }
        public override bool Run(FeatureContext context)
        {
            TopoShape circle = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 100, Vector3.UNIT_Z);
            TopoShape face   = GlobalInstance.BrepTools.MakeFace(circle);

            FaceTriangulation ft = new FaceTriangulation();

            ft.SetTolerance(5);
            ft.Perform(face);
            float[] points     = ft.GetVertexBuffer();
            int     pointCount = points.Length / 3;

            uint[] indexBuffer = ft.GetIndexBuffer();
            int    faceCount   = indexBuffer.Length / 3;

            float[] normals = ft.GetNormalBuffer();


            float[] colorBuffer = new float[pointCount * 4];

            Random num = new Random();

            for (int ii = 0; ii < pointCount; ++ii)
            {
                int idx = ii * 4;
                colorBuffer[idx]     = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 1] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 2] = num.Next(0, 256) / 256.0f;
                colorBuffer[idx + 3] = 1;
            }

            RenderableEntity entity = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(points, indexBuffer, normals, colorBuffer, face.GetBBox());

            EntitySceneNode node = new EntitySceneNode();

            node.SetEntity(entity);

            context.ShowSceneNode(node);

            //////////////////////////////////////////////////////////////////////////
            // Code to get the mesh

            /*
             * for (int ii = 0; ii < faceCount; ++ii)
             * {
             *  int p0 = (int)indexBuffer[ii * 3];
             *  int p1 = (int)indexBuffer[ii * 3 + 1];
             *  int p2 = (int)indexBuffer[ii * 3 + 2];
             *
             *  Vector3 pt0 = new Vector3(points[p0 * 3], points[p0 * 3 + 1], points[p0 * 3 + 2]);
             *  Vector3 pt1 = new Vector3(points[p1 * 3], points[p1 * 3 + 1], points[p1 * 3 + 2]);
             *  Vector3 pt2 = new Vector3(points[p2 * 3], points[p2 * 3 + 1], points[p2 * 3 + 2]);
             *
             *  // ....
             *  // use the same way to get the normal data for each point.
             * }
             * */


            return(true);
        }
        public override bool Run(FeatureContext context)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter = "Deformation File (*.xls)|*.xls||";
            if (DialogResult.OK != dlg.ShowDialog())
            {
                return(true);
            }


            String       fileName = dlg.FileName;
            StreamReader sr       = new StreamReader(fileName, Encoding.Default);
            String       line     = sr.ReadLine();

            Dictionary <uint, HexNode> nodes = new Dictionary <uint, HexNode>();
            float maxValue = float.NegativeInfinity;
            float minValue = float.PositiveInfinity;

            while ((line = sr.ReadLine()) != null)
            {
                String[] items = line.Split('\t');

                HexNode node = new HexNode();
                node.Id      = uint.Parse(items[0]) - 1;
                node.Value.X = float.Parse(items[1]);
                node.Value.Y = float.Parse(items[2]);
                node.Value.Z = float.Parse(items[3]);
                node.Data    = float.Parse(items[4]);

                nodes[node.Id] = node;

                if (node.Data > maxValue)
                {
                    maxValue = node.Data;
                }
                if (node.Data < minValue)
                {
                    minValue = node.Data;
                }
            }

            float[] pointBuffer = new float[nodes.Count * 3];
            float[] colorBuffer = new float[nodes.Count * 3];
            float   range       = maxValue - minValue;

            List <ColorValue> colorTables = new List <ColorValue>();

            colorTables.Add(new ColorValue(0, 0, 1.0f));
            colorTables.Add(new ColorValue(0, 108.0f / 255.0f, 1.0f));
            colorTables.Add(new ColorValue(0, 197.0f / 255.0f, 1.0f));
            colorTables.Add(new ColorValue(0, 243 / 255.0f, 1.0f));
            colorTables.Add(new ColorValue(0, 1.0f, 219.0f / 255.0f));
            colorTables.Add(new ColorValue(0, 1.0f, 165.0f / 255.0f));
            colorTables.Add(new ColorValue(0, 1.0f, 54.0f / 255.0f));
            colorTables.Add(new ColorValue(54.0f / 255.0f, 1.0f, 0));
            colorTables.Add(new ColorValue(219.0f / 255.0f, 1.0f, 0));
            //colorTables.Add(new ColorValue(238.0f / 255.0f, 249.0f/255.0f, 0));
            colorTables.Add(new ColorValue(238.0f / 255.0f, 249.0f / 255.0f, 0));
            colorTables.Add(new ColorValue(255.0f / 255.0f, 197.0f / 255.0f, 0));
            colorTables.Add(new ColorValue(251.0f / 255.0f, 102.0f / 255.0f, 17.0f / 255.0f));
            colorTables.Add(new ColorValue(1.0f, 0.0f, 0.0f));

            float segment = range / (colorTables.Count);

            //int ii=-1;
            //foreach(HexNode node in nodes)
            //{
            //    int idx = (int)(node.Data / segment);

            //    if (idx >= colorTables.Count)
            //        idx -= 1;

            //    ColorValue clr = colorTables.ElementAt(idx);

            //    pointBuffer[++ii] = node.X;
            //    colorBuffer[ii] = clr.R;
            //    pointBuffer[++ii] = node.Y;
            //    colorBuffer[ii] = clr.G;
            //    pointBuffer[++ii] = node.Z;
            //    colorBuffer[ii] = clr.B;
            //}
            dlg        = new OpenFileDialog();
            dlg.Filter = "Hex20 File (*.xls)|*.xls||";
            if (DialogResult.OK != dlg.ShowDialog())
            {
                return(true);
            }


            fileName = dlg.FileName;
            sr       = new StreamReader(fileName, Encoding.Default);
            line     = sr.ReadLine();

            List <Hex20> hex20s = new List <Hex20>();

            while ((line = sr.ReadLine()) != null)
            {
                String[] items = line.Split('\t');

                Hex20 hex = new Hex20();
                hex.Id = uint.Parse(items[0]) - 1;

                for (int ii = 0; ii < 20; ++ii)
                {
                    hex.NodeIds[ii] = uint.Parse(items[ii + 2]) - 1;
                }

                hex20s.Add(hex);
            }

            //Hex20 hexItem = hex20s[0];
            //for(int ii=0; ii<20; ++ii)
            //{

            //    HexNode n = nodes[hexItem.NodeIds[ii]];
            //    PointNode node = new PointNode();
            //    node.SetName(n.Id.ToString());
            //    node.SetShowText(true);
            //    node.SetPoint(new Vector3(n.X, n.Y, n.Z));

            //    context.ShowSceneNode(node);
            //}
            //GlobalInstance.TopoShapeConvert.
            List <uint> ib = new List <uint>();

            for (int ii = 0; ii < hex20s.Count; ++ii)
            {
                Hex20 hexItem = hex20s[ii];


                // TOP
                ib.Add(hexItem.NodeIds[0]);
                ib.Add(hexItem.NodeIds[8]);
                ib.Add(hexItem.NodeIds[11]);

                ib.Add(hexItem.NodeIds[8]);
                ib.Add(hexItem.NodeIds[1]);
                ib.Add(hexItem.NodeIds[9]);

                ib.Add(hexItem.NodeIds[9]);
                ib.Add(hexItem.NodeIds[2]);
                ib.Add(hexItem.NodeIds[10]);

                ib.Add(hexItem.NodeIds[10]);
                ib.Add(hexItem.NodeIds[3]);
                ib.Add(hexItem.NodeIds[11]);

                ib.Add(hexItem.NodeIds[8]);
                ib.Add(hexItem.NodeIds[10]);
                ib.Add(hexItem.NodeIds[11]);

                ib.Add(hexItem.NodeIds[8]);
                ib.Add(hexItem.NodeIds[9]);
                ib.Add(hexItem.NodeIds[10]);


                // BOTTOM
                ib.Add(hexItem.NodeIds[4]);
                ib.Add(hexItem.NodeIds[12]);
                ib.Add(hexItem.NodeIds[15]);

                ib.Add(hexItem.NodeIds[12]);
                ib.Add(hexItem.NodeIds[5]);
                ib.Add(hexItem.NodeIds[13]);

                ib.Add(hexItem.NodeIds[13]);
                ib.Add(hexItem.NodeIds[6]);
                ib.Add(hexItem.NodeIds[14]);

                ib.Add(hexItem.NodeIds[14]);
                ib.Add(hexItem.NodeIds[7]);
                ib.Add(hexItem.NodeIds[15]);

                ib.Add(hexItem.NodeIds[12]);
                ib.Add(hexItem.NodeIds[14]);
                ib.Add(hexItem.NodeIds[15]);

                ib.Add(hexItem.NodeIds[12]);
                ib.Add(hexItem.NodeIds[13]);
                ib.Add(hexItem.NodeIds[14]);

                // FRONT
                ib.Add(hexItem.NodeIds[1]);
                ib.Add(hexItem.NodeIds[9]);
                ib.Add(hexItem.NodeIds[17]);

                ib.Add(hexItem.NodeIds[9]);
                ib.Add(hexItem.NodeIds[2]);
                ib.Add(hexItem.NodeIds[18]);

                ib.Add(hexItem.NodeIds[18]);
                ib.Add(hexItem.NodeIds[6]);
                ib.Add(hexItem.NodeIds[13]);

                ib.Add(hexItem.NodeIds[13]);
                ib.Add(hexItem.NodeIds[5]);
                ib.Add(hexItem.NodeIds[17]);

                ib.Add(hexItem.NodeIds[9]);
                ib.Add(hexItem.NodeIds[18]);
                ib.Add(hexItem.NodeIds[17]);

                ib.Add(hexItem.NodeIds[18]);
                ib.Add(hexItem.NodeIds[13]);
                ib.Add(hexItem.NodeIds[17]);

                // BACK
                ib.Add(hexItem.NodeIds[0]);
                ib.Add(hexItem.NodeIds[11]);
                ib.Add(hexItem.NodeIds[16]);

                ib.Add(hexItem.NodeIds[11]);
                ib.Add(hexItem.NodeIds[3]);
                ib.Add(hexItem.NodeIds[19]);

                ib.Add(hexItem.NodeIds[19]);
                ib.Add(hexItem.NodeIds[7]);
                ib.Add(hexItem.NodeIds[15]);

                ib.Add(hexItem.NodeIds[15]);
                ib.Add(hexItem.NodeIds[4]);
                ib.Add(hexItem.NodeIds[16]);

                ib.Add(hexItem.NodeIds[11]);
                ib.Add(hexItem.NodeIds[19]);
                ib.Add(hexItem.NodeIds[16]);

                ib.Add(hexItem.NodeIds[19]);
                ib.Add(hexItem.NodeIds[15]);
                ib.Add(hexItem.NodeIds[16]);

                // LEFT
                ib.Add(hexItem.NodeIds[1]);
                ib.Add(hexItem.NodeIds[17]);
                ib.Add(hexItem.NodeIds[8]);

                ib.Add(hexItem.NodeIds[17]);
                ib.Add(hexItem.NodeIds[5]);
                ib.Add(hexItem.NodeIds[12]);

                ib.Add(hexItem.NodeIds[12]);
                ib.Add(hexItem.NodeIds[4]);
                ib.Add(hexItem.NodeIds[16]);

                ib.Add(hexItem.NodeIds[16]);
                ib.Add(hexItem.NodeIds[0]);
                ib.Add(hexItem.NodeIds[8]);

                ib.Add(hexItem.NodeIds[8]);
                ib.Add(hexItem.NodeIds[17]);
                ib.Add(hexItem.NodeIds[12]);

                ib.Add(hexItem.NodeIds[12]);
                ib.Add(hexItem.NodeIds[16]);
                ib.Add(hexItem.NodeIds[8]);

                // RIGHT
                ib.Add(hexItem.NodeIds[2]);
                ib.Add(hexItem.NodeIds[10]);
                ib.Add(hexItem.NodeIds[18]);

                ib.Add(hexItem.NodeIds[10]);
                ib.Add(hexItem.NodeIds[3]);
                ib.Add(hexItem.NodeIds[19]);

                ib.Add(hexItem.NodeIds[19]);
                ib.Add(hexItem.NodeIds[7]);
                ib.Add(hexItem.NodeIds[14]);

                ib.Add(hexItem.NodeIds[14]);
                ib.Add(hexItem.NodeIds[6]);
                ib.Add(hexItem.NodeIds[18]);

                ib.Add(hexItem.NodeIds[10]);
                ib.Add(hexItem.NodeIds[14]);
                ib.Add(hexItem.NodeIds[18]);

                ib.Add(hexItem.NodeIds[10]);
                ib.Add(hexItem.NodeIds[19]);
                ib.Add(hexItem.NodeIds[14]);
            }

            Vector3[] normals = new Vector3[nodes.Count];
            for (int ii = 0; ii < ib.Count / 3; ++ii)
            {
                uint a = ib[ii * 3];
                uint b = ib[ii * 3 + 1];
                uint c = ib[ii * 3 + 2];

                Vector3 p1 = nodes[a].Value;
                Vector3 p2 = nodes[b].Value;
                Vector3 p3 = nodes[c].Value;

                Vector3 normal = (p2 - p1).CrossProduct(p3 - p1);

                if (normals[a] == null)
                {
                    normals[a] = Vector3.ZERO;
                }
                if (normals[b] == null)
                {
                    normals[b] = Vector3.ZERO;
                }
                if (normals[c] == null)
                {
                    normals[c] = Vector3.ZERO;
                }

                normals[a] += normal;
                normals[b] += normal;
                normals[c] += normal;
            }

            float[] vb = new float[nodes.Count * 3];
            float[] nb = new float[nodes.Count * 3];
            float[] cb = new float[nodes.Count * 3];

            AABox bbox = new AABox();

            for (uint ii = 0; ii < nodes.Count; ++ii)
            {
                var nd = nodes[ii];

                bbox.Merge(new AABox(nd.Value, nd.Value));

                vb[ii * 3]     = (float)nd.Value.X;
                vb[ii * 3 + 1] = (float)nd.Value.Y;
                vb[ii * 3 + 2] = (float)nd.Value.Z;

                var normal = normals[ii];
                normal.Normalize();

                nb[ii * 3]     = (float)normal.X;
                nb[ii * 3 + 1] = (float)normal.Y;
                nb[ii * 3 + 2] = (float)normal.Z;


                int idx = (int)((nd.Data - minValue) / segment);

                if (idx >= colorTables.Count)
                {
                    idx = colorTables.Count - 1;
                }

                ColorValue clr = colorTables.ElementAt(idx);

                cb[ii * 3]     = clr.R;
                cb[ii * 3 + 1] = clr.G;
                cb[ii * 3 + 2] = clr.B;
            }

            var pEntity     = GlobalInstance.TopoShapeConvert.CreateColoredFaceEntity(vb, ib.ToArray(), nb, cb, bbox);
            var nEntityNode = new EntitySceneNode();

            nEntityNode.SetEntity(pEntity);
            context.ShowSceneNode(nEntityNode);

            return(true);
        }