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); }
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); }
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); }