Exemple #1
0
        public static void GenerateXml(BendingGroup bendings, string file)
        {
            XmlSerializer writer = new XmlSerializer(typeof(BendingGroup));
            var           path   = new System.IO.StreamWriter(file);

            writer.Serialize(path, bendings);
            path.Close();
            MessageBox.Show("输出成功!", "输出提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Exemple #2
0
        public static BendingGroup ReadXml(string file)
        {
            XmlSerializer reader   = new XmlSerializer(typeof(BendingGroup));
            var           path     = new System.IO.StreamReader(file);
            BendingGroup  bendings = reader.Deserialize(path) as BendingGroup;

            path.Close();
            //MessageBox.Show("Last id: " + bendings.Bendings.Last().Index.ToString(), "输入提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            return(bendings);
        }
Exemple #3
0
        public BendingGroup(BendingGroup previousBG)
        {
            Vertexes = new List <Vector3>(previousBG.Vertexes);
            var temp = new List <Bending>();

            foreach (var m in previousBG.Bendings)
            {
                temp.Add(new Bending(m));
            }
            Bendings = temp;
        }
        private void DrawUnfoldGroup(BendingGroup bends)
        {
            renderViewDraw.ClearScene();

            #region 绘制底面
            TopoShape baseShape = GlobalInstance.BrepTools.FillFace(bends.Vertexes);

            SceneManager sceneMgr = renderViewDraw.SceneManager;
            SceneNode    root     = GlobalInstance.TopoShapeConvert.ToSceneNode(baseShape, 0.1f);
            sceneMgr.AddNode(root);
            #endregion

            #region  逆时针方向依次折弯
            Queue <Vector3> vertexQueue = new Queue <Vector3>(bends.Vertexes);
            for (int i = 0; i < vertexQueue.Count(); i++)
            {
                var sPt = vertexQueue.Dequeue();
                var ePt = vertexQueue.Peek();
                vertexQueue.Enqueue(sPt);
                var line      = GlobalInstance.BrepTools.MakeLine(sPt, ePt);
                var face      = baseShape;
                var groupEdge = from m in bends.Bendings
                                where m.Orientation == Math.Round(((ePt - sPt).Y >= 0 ? (ePt - sPt).AngleBetween(Vector3.UNIT_X) : (360 - (ePt - sPt).AngleBetween(Vector3.UNIT_X))), 3)
                                orderby m.Index
                                select m;
                foreach (var bending in groupEdge)
                {
                    if (face == null || line == null)
                    {
                        return;
                    }
                    if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE)
                    {
                        break;
                    }
                    BendHelper helper = new BendHelper();
                    var        temp   = new Bending(bending);
                    temp.Length += temp.Radius * temp.Angle * Math.PI / 180;
                    temp.Angle   = 0;
                    helper       = BendUp(face, line, temp);
                    ElementId id   = new ElementId(bending.Index);
                    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
                    node.SetId(id);
                    sceneMgr.AddNode(node);
                    face = helper.EdFace;
                    line = helper.EdLine;
                }
            }
            #endregion

            renderViewDraw.FitAll();
            renderViewDraw.RequestDraw(EnumRenderHint.RH_LoadScene);
        }
        private static IEnumerable <BendingGroup> GetStepShapes(BendingGroup bends)
        {
            BendingGroup   group = new BendingGroup(bends);
            List <Bending> temp  = new List <Bending>(group.Bendings.OrderBy(m => m.Index).ToList());

            foreach (var item in temp)
            {
                item.Length   += item.Radius * item.Angle * Math.PI / 180;
                item.Angle     = 0;
                group.Bendings = temp;
                yield return(group);
            }
        }
        private void BtnUnfold_Click(object sender, EventArgs e)
        {
            BendingGroup group = new BendingGroup(bendings);

            stepBendings.Add(bendings);
            DrawUnfoldGroup(bendings);
            foreach (var item in GetStepShapes(group))
            {
                if (stepBendings.Contains(item))
                {
                    break;
                }
                stepBendings.Add(new BendingGroup(item));
            }
            posOfStep = stepBendings.Count();
        }
 private void BtnDraw_Click(object sender, EventArgs e)
 {
     //var w = GlobalInstance.BrepTools.MakeWire(EdgeG);
     //var t = GlobalInstance.BrepTools.MakeFace(w);
     //t = GlobalInstance.BrepTools.FillFace(Vecs);
     //renderViewDraw.ShowGeometry(t, 100);
     Vecs.Clear();
     Vecs.Add(new Vector3(0, 0, 0));
     Vecs.Add(new Vector3(Convert.ToDouble(txtL.Text), 0, 0));
     Vecs.Add(new Vector3(Convert.ToDouble(txtL.Text), Convert.ToDouble(txtW.Text), 0));
     Vecs.Add(new Vector3(0, Convert.ToDouble(txtW.Text), 0));
     bendings = new BendingGroup
     {
         Vertexes = Vecs,
     };
     var face = DrawRect(Vecs);
 }
        private void DrawBendingGroup(BendingGroup bends)
        {
            renderViewDraw.ClearScene();

            #region 绘制底面
            //var pt0 = new Vector3(0, 0, 0);
            //var pt1 = new Vector3(bends.Length, 0, 0);
            //var pt2 = new Vector3(bends.Length, bends.Width, 0);
            //var pt3 = new Vector3(0, bends.Width, 0);
            //TopoShape baseEdge1 = GlobalInstance.BrepTools.MakeLine(pt0, pt1);
            //TopoShape baseEdge2 = GlobalInstance.BrepTools.MakeLine(pt1, pt2);
            //TopoShape baseEdge3 = GlobalInstance.BrepTools.MakeLine(pt2, pt3);
            //TopoShape baseEdge4 = GlobalInstance.BrepTools.MakeLine(pt3, pt0);
            //TopoShape rect = GlobalInstance.BrepTools.MakeRectangle(bends.Length, bends.Width, 0, Coordinate3.UNIT_XYZ);
            //TopoShape baseShape = GlobalInstance.BrepTools.MakeFace(rect);
            TopoShape baseShape = GlobalInstance.BrepTools.FillFace(bends.Vertexes);

            SceneManager sceneMgr = renderViewDraw.SceneManager;
            SceneNode    root     = GlobalInstance.TopoShapeConvert.ToSceneNode(baseShape, 0.1f);
            sceneMgr.AddNode(root);
            #endregion

            #region  逆时针方向依次折弯
            //var oris = bends.Bendings.OrderBy(m => m.Orientation).Select(m => m.Orientation).Distinct();
            Queue <Vector3> vertexQueue = new Queue <Vector3>(bends.Vertexes);
            for (int i = 0; i < vertexQueue.Count(); i++)
            {
                var sPt = vertexQueue.Dequeue();
                var ePt = vertexQueue.Peek();
                vertexQueue.Enqueue(sPt);
                var line      = GlobalInstance.BrepTools.MakeLine(sPt, ePt);
                var face      = baseShape;
                var groupEdge = from m in bends.Bendings
                                where m.Orientation == Math.Round(((ePt - sPt).Y >= 0 ? (ePt - sPt).AngleBetween(Vector3.UNIT_X) : (360 - (ePt - sPt).AngleBetween(Vector3.UNIT_X))), 3)
                                orderby m.Index
                                select m;
                foreach (var bending in groupEdge)
                {
                    if (face == null || line == null)
                    {
                        return;
                    }
                    if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE)
                    {
                        break;
                    }
                    BendHelper helper = new BendHelper();
                    if (bending.Direction.Equals(EnumDir.Edge_UP))
                    {
                        helper = BendUp(face, line, bending);
                    }
                    else
                    {
                        helper = BendDown(face, line, bending);
                    }
                    ElementId id   = new ElementId(bending.Index);
                    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
                    node.SetId(id);
                    sceneMgr.AddNode(node);
                    face = helper.EdFace;
                    line = helper.EdLine;
                }
            }
            #endregion
            #region  四个方向分别折弯
            //var groupEdge1 = from m in bends.Bendings
            //                 where m.Orientation == 0
            //                 orderby m.Index
            //                 select m ;
            //var groupEdge2 = from m in bends.Bendings
            //                 where m.Orientation == 1
            //                 orderby m.Index
            //                 select m;
            //var groupEdge3 = from m in bends.Bendings
            //                 where m.Orientation == 2
            //                 orderby m.Index
            //                 select m;
            //var groupEdge4 = from m in bends.Bendings
            //                 where m.Orientation == 3
            //                 orderby m.Index
            //                 select m;

            ////TopoShape line = baseEdge1;
            ////TopoShape face = baseShape;
            //foreach (var bending in groupEdge1)
            //{
            //    if (face == null || line == null)
            //    {
            //        return;
            //    }
            //    if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }
            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            //face = baseShape;
            //line = baseEdge2;
            //foreach (var bending in groupEdge2)
            //{
            //    if (face == null)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }

            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            //face = baseShape;
            //line = baseEdge3;
            //foreach (var bending in groupEdge3)
            //{
            //    if (face == null)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }

            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            //face = baseShape;
            //line = baseEdge4;
            //foreach (var bending in groupEdge4)
            //{
            //    if (face == null)
            //    {
            //        break;
            //    }
            //    BendHelper helper = new BendHelper();
            //    if (bending.Direction.Equals(EnumDir.Edge_UP))
            //    {
            //        helper = BendUp(face, line, bending);
            //    }
            //    else
            //    {
            //        helper = BendDown(face, line, bending);
            //    }

            //    ElementId id = new ElementId(bending.Index);
            //    SceneNode node = GlobalInstance.TopoShapeConvert.ToSceneNode(helper.Sweep, 0.1f);
            //    node.SetId(id);
            //    sceneMgr.AddNode(node);
            //    face = helper.EdFace;
            //    line = helper.EdLine;
            //}
            #endregion

            renderViewDraw.FitAll();
            renderViewDraw.RequestDraw(EnumRenderHint.RH_LoadScene);
        }
 private void OpenFileDialog_FileOk(object sender, CancelEventArgs e)
 {
     bendings = ExportXml.ReadXml(openFileDialog1.FileName);
     DrawBendingGroup(bendings);
 }