public override void OnButtonDownEvent(InputEvent evt) { TopoShape shape = GetSelectedShape((int)evt.GetMousePosition().X, (int)evt.GetMousePosition().Y); if(shape == null) return; Renderer renderer = GetRenderer(); m_Step += 1; if (m_Step == (int)EditStep.ES_Finish) { m_Step = (int)EditStep.ES_Init; MeasureTools mt = new MeasureTools(); MeasureResult rt = mt.ComputeMinDistance(m_Shape1, shape); LineNode lineNode = new LineNode(); lineNode.SetShowText(true); lineNode.Set(rt.GetPointOnShape1(), rt.GetPointOnShape2()); renderer.GetSceneManager().AddNode(lineNode); renderer.RequestDraw(1); return; } if (evt.IsLButtonDown()) { m_Shape1 = shape; } }
public override bool OnBeiginComplexShape(TopoShape shape) { nodeStack.Push(nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), "Shape")); ++nShapeCount; SceneNode node = renderView.ShowGeometry(shape, nShapeCount); node.SetFaceStyle(faceStyle); return false; }
public override void OnCompound(TopoShape shape) { }
public override void OnEdge(TopoShape shape) { ShapeGroup.Add(shape); }
public override bool OnBeiginComplexShape(TopoShape shape) { return true; }
public override void OnEdge(TopoShape shape) { ShowGeometry(shape); }
public override void OnWire(TopoShape shape) { ShapeGroup.Add(shape); }
private void sphereToolStripMenuItem_Click(object sender, EventArgs e) { TopoShape sphere = renderView.ShapeMaker.MakeSphere(new Vector3(0, 0, 0), 40); renderView.ShowGeometry(sphere, ++shapeId); }
private void BtnDown_Click(object sender, EventArgs e) { //Get selected shape SelectedShapeQuery context = new SelectedShapeQuery(); renderViewDraw.QuerySelection(context); var face = context.GetGeometry(); var line = context.GetSubGeometry(); if (face == null || line == null) { return; } if (face.GetShapeType() != EnumTopoShapeType.Topo_FACE || line.GetShapeType() != EnumTopoShapeType.Topo_EDGE) { return; } //记录输入参数 Bending bending = new Bending() { Direction = EnumDir.Edge_DOWN, Angle = Convert.ToDouble(txtAngle.Text), Radius = Convert.ToDouble(txtRadius.Text), Length = Convert.ToDouble(txtLength.Text) }; GeomCurve curve = new GeomCurve(); curve.Initialize(line); Vector3 dirL = curve.DN(curve.FirstParameter(), 1); if (dirL.Y >= 0) { bending.Orientation = Math.Round(dirL.AngleBetween(Vector3.UNIT_X), 3); } else { bending.Orientation = Math.Round(360 - dirL.AngleBetween(Vector3.UNIT_X), 3); } //if (dirL.X == 1) //{ // bending.Orientation = EnumEdge.Edge_1; //} //else if (dirL.Y == 1) //{ // bending.Orientation = EnumEdge.Edge_2; //} //else if (dirL.X == -1) //{ // bending.Orientation = EnumEdge.Edge_3; //} //else //{ // bending.Orientation = EnumEdge.Edge_4; //} TopoShape sweep = BendDown(face, line, bending).Sweep; bendings.Add(bending); #region 渲染 ElementId faceId = new ElementId(bending.Index + shapeId); ElementId edgeId = new ElementId(bending.Index); SceneManager sceneMgr = renderViewDraw.SceneManager; SceneNode rootNode = GlobalInstance.TopoShapeConvert.ToSceneNode(sweep, 0.1f); SceneNode faceNode = GlobalInstance.TopoShapeConvert.ToSceneNode(face, 0.1f); SceneNode edgeNode = GlobalInstance.TopoShapeConvert.ToSceneNode(line, 0.1f); faceNode.SetId(faceId); faceNode.SetVisible(false); edgeNode.SetId(edgeId); edgeNode.SetVisible(false); if (rootNode != null) { sceneMgr.AddNode(rootNode); sceneMgr.AddNode(faceNode); sceneMgr.AddNode(edgeNode); } renderViewDraw.FitAll(); renderViewDraw.RequestDraw(EnumRenderHint.RH_LoadScene); #endregion }
private void TransOnSelectBtn_Click(object sender, EventArgs e) { //Get selected shape SelectedShapeQuery context = new SelectedShapeQuery(); renderView.QuerySelection(context); var shape = context.GetGeometry(); var face = context.GetSubGeometry(); if (shape == null) { return; } var center = shape.GetBBox().GetCenter(); #region 计算法向量 GeomSurface surface = new GeomSurface(); surface.Initialize(face); //参数域UV范围 double uFirst = surface.FirstUParameter(); double uLast = surface.LastUParameter(); double vFirst = surface.FirstVParameter(); double vLast = surface.LastVParameter(); //取中点 double umid = uFirst + (uLast - uFirst) * 0.5f; double vmid = vFirst + (vLast - vFirst) * 0.5f; //计算法向量 var data = surface.D1(umid, vmid); Vector3 dirU = data[1]; Vector3 dirV = data[2]; Vector3 dir = dirV.CrossProduct(dirU); dir.Normalize(); Console.WriteLine("\tDir {0}", dir); #endregion #region 坐标变换 Vector3 dirN = new Vector3(); if (face.GetOrientation() == EnumShapeOrientation.ShapeOrientation_REVERSED) { dirN = dir * -1; } else { dirN = dir; } //Translation shape = GlobalInstance.BrepTools.Translate(shape, -center); //Rotation Vector3 dirZ = new Vector3(0, 0, -1); shape = GlobalInstance.BrepTools.Rotation(shape, dirN.CrossProduct(dirZ), dirN.AngleBetween(dirZ)); #endregion #region Render if (shape != null) { topoShape = shape; renderView.ClearScene(); renderView.ShowGeometry(shape, shapeId); } renderView.FitAll(); renderView.RequestDraw(EnumRenderHint.RH_LoadScene); #endregion }
private void TransOnMax(TopoShape shape) { double areaM = 0; Vector3 dirN = new Vector3(); Vector3 pos = new Vector3(); TopoExplor topo = new TopoExplor(); TopoShapeGroup group2 = topo.ExplorFaces(shape); for (int i = 0; i < group2.Size(); i++) { TopoShape face = group2.GetTopoShape(i); #region 计算面积 TopoShapeProperty property = new TopoShapeProperty(); property.SetShape(face); Console.WriteLine("Face {0}:\n\tArea {1}\n\tOrientation {2}", i, property.SurfaceArea(), face.GetOrientation()); #endregion #region 计算法向量 GeomSurface surface = new GeomSurface(); surface.Initialize(face); //参数域UV范围 double uFirst = surface.FirstUParameter(); double uLast = surface.LastUParameter(); double vFirst = surface.FirstVParameter(); double vLast = surface.LastVParameter(); //取中点 double umid = uFirst + (uLast - uFirst) * 0.5f; double vmid = vFirst + (vLast - vFirst) * 0.5f; //计算法向量 var data = surface.D1(umid, vmid); Vector3 dirU = data[1]; Vector3 dirV = data[2]; Vector3 dir = dirV.CrossProduct(dirU); dir.Normalize(); Console.WriteLine("\tDir {0}", dir); #endregion #region 取最大的面 if (property.SurfaceArea() > areaM) { areaM = property.SurfaceArea(); pos = data[0]; Console.WriteLine(data[0]); if (face.GetOrientation() == EnumShapeOrientation.ShapeOrientation_REVERSED) { dirN = dir * -1; } else { dirN = dir; } } #endregion } #region 坐标变换 //Translation shape = GlobalInstance.BrepTools.Translate(shape, -pos); //Rotation Vector3 dirZ = new Vector3(0, 0, -1); shape = GlobalInstance.BrepTools.Rotation(shape, dirN.CrossProduct(dirZ), dirN.AngleBetween(dirZ)); #endregion if (shape != null) { topoShape = shape; renderView.ClearScene(); renderView.ShowGeometry(shape, shapeId); } renderView.FitAll(); renderView.RequestDraw(EnumRenderHint.RH_LoadScene); }
private void Button_Click(object sender, RoutedEventArgs e) { try { var dialog = new OpenFileDialog() { Title = "请选择一个stl文件", CheckFileExists = true, CheckPathExists = true, Filter = "STL (*.stl)|*.stl", InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) }; if (dialog.ShowDialog() == true) { convert.IsEnabled = false; convert.Background = Brushes.Gray; convert.Content = "正在转换"; fileName = dialog.FileName; stpFileName = STPName.Text; isSTPSelected = convertToSTP.IsChecked.GetValueOrDefault(); isIGSSelected = convertToIGES.IsChecked.GetValueOrDefault(); //string allText = File.ReadAllText(fileName); FileStream fs = new FileStream(fileName, FileMode.Open); BinaryReader br = new BinaryReader(fs); br.ReadBytes(80); Int32 numberOfFace = br.ReadInt32(); var info = new FileInfo(fileName); var lengthOfFile = 50 * numberOfFace + 84; if (info.Length != lengthOfFile) { br.Close(); fs.Close(); readACSIIFile(fileName); } else { property.Text = $"stl文件中的片体数量为:{numberOfFace.ToString()}"; Console.WriteLine("正在读取二进制文件"); readBinaryFile(br, numberOfFace); fs.Close(); } Task.Run(() => { TopoShapeGroup group = new TopoShapeGroup(); foreach (var face in faceData) { var line1 = GlobalInstance.BrepTools.MakeLine(new Vector3(face.Point1.X, face.Point1.Y, face.Point1.Z), new Vector3(face.Point2.X, face.Point2.Y, face.Point2.Z)); var line2 = GlobalInstance.BrepTools.MakeLine(new Vector3(face.Point1.X, face.Point1.Y, face.Point1.Z), new Vector3(face.Point3.X, face.Point3.Y, face.Point3.Z)); var line3 = GlobalInstance.BrepTools.MakeLine(new Vector3(face.Point2.X, face.Point2.Y, face.Point2.Z), new Vector3(face.Point3.X, face.Point3.Y, face.Point3.Z)); TopoShapeGroup wire = new TopoShapeGroup(); wire.Add(line1); wire.Add(line2); wire.Add(line3); TopoShape wireLine = GlobalInstance.BrepTools.MakeWire(wire); var boundedFace = GlobalInstance.BrepTools.MakeFace(wireLine); group.Add(boundedFace); } var shell = GlobalInstance.BrepTools.MakeShell(group); if (isSTPSelected) { GlobalInstance.BrepTools.SaveFile(shell, new AnyCAD.Platform.Path($"D:\\{stpFileName}.stp")); } else if (isIGSSelected) { GlobalInstance.BrepTools.SaveFile(shell, new AnyCAD.Platform.Path($"D:\\{stpFileName}.igs")); } faceData.Clear(); this.Dispatcher.BeginInvoke(new Action(() => { convert.Content = "转换完毕"; convert.Background = Brushes.Green; convert.IsEnabled = true; })); var timer = new DispatcherTimer(DispatcherPriority.Normal); timer.Interval = new TimeSpan(0, 0, 0, 1); timer.Tick += new EventHandler(restoreText); timer.Start(); }); } } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } }
public override void OnEdge(TopoShape shape) { Section.Add(shape); }
public override bool OnBeiginComplexShape(TopoShape shape) { return(true); }
public override void OnShell(TopoShape shape) { }
private BendHelper BendDown(TopoShape face, TopoShape line, Bending bending) { #region 计算平面法向量 GeomSurface surface = new GeomSurface(); surface.Initialize(face); //参数域UV范围 double uFirst = surface.FirstUParameter(); double uLast = surface.LastUParameter(); double vFirst = surface.FirstVParameter(); double vLast = surface.LastVParameter(); //取中点 double umid = uFirst + (uLast - uFirst) * 0.5f; double vmid = vFirst + (vLast - vFirst) * 0.5f; //计算法向量 var data = surface.D1(umid, vmid); Vector3 dirU = data[1]; Vector3 dirV = data[2]; Vector3 dirF = dirV.CrossProduct(dirU); dirF.Normalize(); #endregion #region 计算边线参数 GeomCurve curve = new GeomCurve(); curve.Initialize(line); Vector3 dirL = curve.DN(curve.FirstParameter(), 1); Vector3 stPt = curve.Value(curve.FirstParameter()); //起点 Vector3 edPt = curve.Value(curve.LastParameter()); //终点 #endregion #region 绘制草图 TopoShapeGroup lineGroup = new TopoShapeGroup(); Vector3 center = stPt + dirF * bending.Radius; //圆心 Vector3 radius = stPt - center; //半径 double theta = bending.Angle * (Math.PI / 180.0); Vector3 radius2 = radius * Math.Cos(theta) + dirL.CrossProduct(radius) * Math.Sin(theta); Vector3 edArc = center + radius2; //圆弧终点 TopoShape arc = GlobalInstance.BrepTools.MakeArc(stPt, edArc, center, dirL); //绘制圆弧 if (arc != null) { lineGroup.Add(arc); } Vector3 edLine = dirL.CrossProduct(radius2) * (bending.Length / bending.Radius) + edArc; arc = GlobalInstance.BrepTools.MakeLine(edArc, edLine); lineGroup.Add(arc); //扫描生成折弯 TopoShape wireSketch = GlobalInstance.BrepTools.MakeWire(lineGroup); TopoShape sweep; if (wireSketch != null) { sweep = GlobalInstance.BrepTools.Sweep(wireSketch, line, true); } else { sweep = GlobalInstance.BrepTools.Sweep(arc, line, true); } TopoShape oFace = GlobalInstance.BrepTools.Sweep(arc, line, true).GetSubShape(0, 1); TopoShape oEdge = GlobalInstance.BrepTools.MakeLine(edLine, edLine + edPt - stPt); #endregion BendHelper bend = new BendHelper() { Sweep = sweep, EdFace = oFace, EdLine = oEdge }; return(bend); }
private void queryToolStripMenuItem_Click(object sender, EventArgs e) { SelectedShapeQuery context = new SelectedShapeQuery(); renderView.QuerySelection(context); TopoShape subShape = context.GetSubGeometry(); SceneNode topoNode = context.GetSubNode(); if (subShape != null) { Console.WriteLine(subShape.GetShapeType()); } Matrix4 shapeTransform = topoNode.GetTransform(); //surface GeomSurface surface = new GeomSurface(); if (surface.Initialize(subShape)) { List <Vector3> ptVecList = new List <Vector3>(); List <Vector3> norVecList = new List <Vector3>(); Console.Write("surface"); //double firstU = surface.FirstUParameter(); //double lastU = surface.LastUParameter(); //double firstV = surface.FirstVParameter(); //double lastV = surface.LastVParameter(); double firstU = surface.FirstUParameter(); double lastU = surface.LastUParameter(); double firstV = surface.FirstVParameter(); double lastV = surface.LastVParameter(); double offSetU = lastU - firstU; double offSetV = lastV - firstV; double stepU = 0.10; double stepV = 10; int stepNoU = (int)(offSetU / stepU); int stepNoV = (int)(offSetV / stepV); for (int v_i = 3; v_i < stepNoV - 5; v_i++) { for (int u_i = 0; u_i < stepNoU; u_i++) { double tempV = firstV + stepV * v_i; double tempU = firstU + stepU * (v_i % 2 == 0 ? u_i : stepNoU - u_i); //double tempV = firstV + stepV * (u_i % 2 == 0 ? v_i : stepNoV - v_i); Vector3 ptVec_1 = surface.Value(tempU, tempV); Vector3 ptVec = shapeTransform.Transform(ptVec_1); Vector3 normalVec_1 = surface.GetNormal(tempU, tempV); //Vector3 normalVec =shapeTransform.Transform(normalVec_1);//matrix3 3*3 Vector3 normalVec = RotateDirVector(shapeTransform, normalVec_1); ptVecList.Add(ptVec); norVecList.Add(normalVec); pathPqList.Add(QuaternionFromTo(new Vector3(-1, 0, 0), normalVec, ptVec)); ShowStatusMessage("path pts No: " + pathPqList.Count); //LineNode tempLineNode = new LineNode(); //LineStyle lineStyle = new LineStyle(); //lineStyle.SetPatternStyle((int)EnumLinePattern.LP_DashedLine); //lineStyle.SetColor(100, 0, 100); //tempLineNode.SetLineStyle(lineStyle); //tempLineNode.Set(ptVec, ptVec + normalVec); //tempLineNode.SetVisible(true); //renderView.SceneManager.AddNode(tempLineNode); //renderView.RequestDraw(); } } //for (int u_i = 0; u_i < stepNoU; u_i++) //{ // for (int v_i = 0; v_i < stepNoV-0; v_i++) // { // double tempU = firstU + stepU * u_i; // double tempV = firstV + stepV * (u_i % 2 == 0 ? v_i : stepNoV - v_i); // Vector3 ptVec =shapeTransform.Transform(surface.Value(tempU,tempV )); // Vector3 normalVec = surface.GetNormal(tempU,tempV); // ptVecList.Add(ptVec); // norVecList.Add(normalVec); // pathPqList.Add(QuaternionFromTo(new Vector3(-1, 0, 0), normalVec, ptVec)); // } //} int a = 0; } //curve GeomCurve curve = new GeomCurve(); if (curve.Initialize(subShape)) { Vector3 startPt = shapeTransform.Transform(curve.D0(curve.FirstParameter())); //Vector3 startPt_ = shapeTransform.Transform(startPt); Vector3 pt1 = curve.GetStartPoint(); Vector3 endPt = shapeTransform.Transform(curve.D0(curve.LastParameter())); Vector3 pt2 = curve.GetEndPoint(); switch ((EnumCurveType)curve.GetCurveType()) { case EnumCurveType.CurveType_OtherCurve: Console.Write("other"); break; case EnumCurveType.CurveType_BSplineCurve: break; case EnumCurveType.CurveType_BezierCurve: break; case EnumCurveType.CurveType_Parabola: break; case EnumCurveType.CurveType_Hyperbola: break; case EnumCurveType.CurveType_Ellipse: break; case EnumCurveType.CurveType_Circle: Console.Write("Circle"); break; case EnumCurveType.CurveType_Line: Console.Write("Line"); //path double[] startPt_ = new double[3] { startPt.X, startPt.Y, startPt.Z }; double[] endPt_ = new double[3] { endPt.X, endPt.Y, endPt.Z }; Path_U.Interpolation(startPt_, endPt_, 0.01, ref pathPtList); //show pick result LineNode tempLineNode = new LineNode(); LineStyle lineStyle = new LineStyle(); lineStyle.SetPatternStyle((int)EnumLinePattern.LP_DashedLine); lineStyle.SetColor(100, 0, 100); tempLineNode.SetLineStyle(lineStyle); tempLineNode.Set(new Vector3(startPt.X + 0.1, startPt.Y + 10, startPt.Z + 0.1), endPt); tempLineNode.SetVisible(true); renderView.SceneManager.AddNode(tempLineNode); renderView.RequestDraw(); break; default: break; } ElementId id = context.GetNodeId(); MessageBox.Show(id.AsInt().ToString()); //... } }
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); }
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 OnBeiginComplexShape(TopoShape shape) { nodeStack.Push(nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), "Shape")); return(true); }
public override void OnFace(TopoShape shape) { ++nShapeCount; nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), "Face"); SceneNode node = renderView.ShowGeometry(shape, nShapeCount); node.SetFaceStyle(faceStyle); }
public override void OnFace(TopoShape shape) { }
public SceneNode ShowGeometry(TopoShape shape) { ++CurrentId; return(RenderView.ShowGeometry(shape, CurrentId)); }
public override void OnPoint(TopoShape shape) { }
public SceneNode ShowGeometry(TopoShape shape, ElementId id) { CurrentId = id; return(RenderView.ShowGeometry(shape, id)); }
private void ShowGeometry(TopoShape topoShape) { AnyCAD.Platform.SceneNode faceNode = AnyCAD.Platform.GlobalInstance.TopoShapeConvert.ToEntityNode(topoShape, 0.5f); faceNode.SetId(++nShapeCount); sceneManager.AddNode(faceNode); }
/// <summary> /// 加载AGV调度系统地图 /// </summary> public bool LoadAGVDispatchMap() { try { //将所有的地标抽离为3D物体 IList <LandMarkShap> LandShaps = AGVDAccess.AGVSimulationDAccess.LoadLandShaps(); if (LandShaps != null && LandShaps.Count > 0) { foreach (LandMarkShap landShap in LandShaps) { float X = (float)Math.Round(landShap.LandX, 1) * 40f + (0.05f * 40f); float Y = (float)Math.Round(landShap.LandY, 1) * 40f - (0.1f * 40f); TopoShape LandShap = shapeMaker.MakeCylinder(new Vector3(X, Y, 0f), new Vector3(0, 0, 1), 0.1f * 40f, GroudHeight + 0.3, 360); FaceStyle LandShapStyle = new FaceStyle(); LandShapStyle.SetColor(new ColorValue(0f, 0f, 0f, 1)); SceneNode sceneNodeLandShap = ShowTopoShape(LandShap); sceneNodeLandShap.SetFaceStyle(LandShapStyle); } } //将所有路径 IList <AllSegment> AllSegments = AGVDAccess.AGVClientDAccess.LoadAllSegment(); if (AllSegments != null && AllSegments.Count > 0) { foreach (AllSegment Segment in AllSegments) { LandMarkShap BeinLand = LandShaps.FirstOrDefault(p => p.LandmarkCode == Segment.BeginLandMakCode); LandMarkShap EndLand = LandShaps.FirstOrDefault(p => p.LandmarkCode == Segment.EndLandMarkCode); if (BeinLand != null && EndLand != null) { float BeginX = (float)Math.Round(BeinLand.LandX, 1) * 40f + (0.05f * 40f); float BeginY = (float)Math.Round(BeinLand.LandY, 1) * 40f - (0.1f * 40f); float EndX = (float)Math.Round(EndLand.LandX, 1) * 40f + (0.05f * 40f); float EndY = (float)Math.Round(EndLand.LandY, 1) * 40f - (0.1f * 40f); if (Segment.SegmentType == 0)//直线 { TopoShape RouteShap = shapeMaker.MakeRoad(new Vector3(BeginX, BeginY, 0), new Vector3(EndX, EndY, 0), 2, GroudHeight + 0.2, 0.2, false); FaceStyle RouteStyle = new FaceStyle(); RouteStyle.SetColor(new ColorValue(2.05f, 1.73f, 0f, 1)); SceneNode sceneNodeRouteShap = ShowTopoShape(RouteShap); sceneNodeRouteShap.SetFaceStyle(RouteStyle); } else if (Segment.SegmentType == 1)//圆弧线 { try { PointF p1 = new PointF(BeginX, BeginY); PointF p2 = new PointF(EndX, EndY); PointF p3 = new PointF((float)(Segment.Point3X * 40f), (float)(Segment.Point3Y * 40)); PointF p4 = new PointF((float)(Segment.Point4X * 40f), (float)(Segment.Point4Y * 40)); PointF[] pointList = new PointF[] { p1, p4, p3, p2 }; PointF[] list = draw_bezier_curves(pointList, pointList.Length, 0.001f * 40); PointF[] unitlist = list.Where(p => p.X != p3.X && p.Y != p3.Y && p.X != p4.X && p.Y != p4.Y).ToArray(); for (int i = 1; i < list.Length; i++) { TopoShape RouteShap = shapeMaker.MakeRoad(new Vector3(unitlist[i - 1].X, unitlist[i - 1].Y, 0), new Vector3(unitlist[i].X, unitlist[i].Y, 0), 2, GroudHeight + 0.2, 0.2, false); FaceStyle RouteStyle = new FaceStyle(); RouteStyle.SetColor(new ColorValue(2.05f, 1.73f, 0f, 1)); SceneNode sceneArc = ShowTopoShape(RouteShap); sceneArc.SetFaceStyle(RouteStyle); } } catch (Exception ex) { } } } } } return(true); } catch (Exception ex) { throw ex; } }
public override void OnSolid(TopoShape shape) { }
private void CreatCarModeByCarInfos() { try { //PointF CarP1 = new PointF(); //float BeginX = (float)Math.Round(BeinLand.LandX, 1) * 40f + (0.05f * 40f); //float BeginY = (float)Math.Round(BeinLand.LandY, 1) * 40f - (0.1f * 40f); //float EndX = (float)Math.Round(EndLand.LandX, 1) * 40f + (0.05f * 40f); //float EndY = (float)Math.Round(EndLand.LandY, 1) * 40f - (0.1f * 40f); //if (Segment.SegmentType == 0)//直线 //{ // TopoShape RouteShap = shapeMaker.MakeRoad(new Vector3(BeginX, BeginY, 0), new Vector3(EndX, EndY, 0), 2, GroudHeight + 0.2, 0.2, false); // FaceStyle RouteStyle = new FaceStyle(); // RouteStyle.SetColor(new ColorValue(2.05f, 1.73f, 0f, 1)); // SceneNode sceneNodeRouteShap = ShowTopoShape(RouteShap); // sceneNodeRouteShap.SetFaceStyle(RouteStyle); //} //IList<CarInfo> CarShaps = AGVDAccess.AGVSimulationDAccess.LoadCarShap(); //if (CarShaps != null && CarShaps.Count > 0) //{ // foreach (CarInfo car in CarShaps) // { // } //} //testCarShap double CarLenth = 25; double CarWidth = 10; double CarHeight = 4; PointF CarPoint = new PointF(80, -300); TopoShape FrmackBoxShap = shapeMaker.MakeBox(new Vector3(CarPoint.X, CarPoint.Y, 0), new Vector3(CarPoint.X + (float)CarLenth, CarPoint.Y, 0), CarWidth, CarHeight); FaceStyle FrmackBoxStyle = new FaceStyle(); FrmackBoxStyle.SetColor(new ColorValue(0.3f, 1.44f, 2.55f, 1)); SceneNode sceneFrmackBox = ShowTopoShape(FrmackBoxShap); sceneFrmackBox.SetFaceStyle(FrmackBoxStyle); TopoShape TrayBoxShap = shapeMaker.MakeBox(new Vector3(CarPoint.X + 1, CarPoint.Y, (float)CarHeight - 1), new Vector3(CarPoint.X + (float)CarLenth - 1, CarPoint.Y, (float)CarHeight - 1), CarWidth - 0.5, 1.2); FaceStyle TrayBoxStyle = new FaceStyle(); TrayBoxStyle.SetColor(new ColorValue(1.05f, 1.05f, 1.05f, 1)); SceneNode sceneTrayBox = ShowTopoShape(TrayBoxShap); sceneTrayBox.SetFaceStyle(TrayBoxStyle); TopoShape wheelShap1 = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f, CarPoint.Y - (float)CarWidth / 2f - 0.1f, (float)CarHeight / 3), new Vector3(0, 1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360); FaceStyle wheelStyle = new FaceStyle(); wheelStyle.SetColor(new ColorValue(0f, 0f, 0f, 1)); SceneNode scenewheel = ShowTopoShape(wheelShap1); scenewheel.SetFaceStyle(wheelStyle); TopoShape wheelShap2 = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f * 3, CarPoint.Y - (float)CarWidth / 2f - 0.1f, (float)CarHeight / 3), new Vector3(0, 1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360); FaceStyle wheelStyle2 = new FaceStyle(); wheelStyle2.SetColor(new ColorValue(2.55f, 0.48f, 0.48f, 1)); SceneNode scenewhee2 = ShowTopoShape(wheelShap2); scenewhee2.SetFaceStyle(wheelStyle2); TopoShape wheelShap3 = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f, CarPoint.Y + (float)CarWidth / 2f + 0.1f, (float)CarHeight / 3), new Vector3(0, -1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360); FaceStyle wheelStyle3 = new FaceStyle(); wheelStyle3.SetColor(new ColorValue(2.55f, 0.48f, 0.48f, 1)); SceneNode scenewheel3 = ShowTopoShape(wheelShap3); scenewheel3.SetFaceStyle(wheelStyle3); TopoShape wheelShap4 = shapeMaker.MakeCone(new Vector3(CarPoint.X + (float)CarLenth / 4f * 3, CarPoint.Y + (float)CarWidth / 2f + 0.1f, (float)CarHeight / 3), new Vector3(0, -1, 0), (float)CarHeight / 4 * 2, 0.5, 0, 360); FaceStyle wheelStyle4 = new FaceStyle(); wheelStyle4.SetColor(new ColorValue(2.55f, 0.48f, 0.48f, 1)); SceneNode scenewheel4 = ShowTopoShape(wheelShap4); scenewheel4.SetFaceStyle(wheelStyle4); } catch (Exception ex) { throw ex; } }
private void coneToolStripMenuItem_Click(object sender, EventArgs e) { TopoShape cylinder = renderView.ShapeMaker.MakeCone(new Vector3(120, 0, 0), new Vector3(0, 0, 1), 20, 100, 40, 315); renderView.ShowGeometry(cylinder, ++shapeId); }
private void curveToolStripMenuItem_Click(object sender, EventArgs e) { renderView.View3d.SetStandardView(3); LineStyle lineStyle = new LineStyle(); lineStyle.SetLineWidth(0.5f); lineStyle.SetColor(ColorValue.BLUE); LineStyle lineStyle2 = new LineStyle(); lineStyle2.SetLineWidth(0.5f); lineStyle2.SetColor(ColorValue.GREEN); TopoShape arc = GlobalInstance.BrepTools.MakeEllipseArc(Vector3.ZERO, 100, 50, 45, 270, Vector3.UNIT_Z); renderView.ShowGeometry(arc, ++shapeId); { GeomeCurve curve = new GeomeCurve(); curve.Initialize(arc); float paramStart = curve.FirstParameter(); float paramEnd = curve.LastParameter(); float step = (paramEnd - paramStart) * 0.1f; for (float uu = paramStart; uu <= paramEnd; uu += step) { Vector3 dir = curve.DN(uu, 1); Vector3 pos = curve.Value(uu); // 切线 { TopoShape line = GlobalInstance.BrepTools.MakeLine(pos, pos + dir); SceneNode node = renderView.ShowGeometry(line, ++shapeId); node.SetLineStyle(lineStyle); } // 法线 { Vector3 dirN = dir.CrossProduct(Vector3.UNIT_Z); TopoShape line = GlobalInstance.BrepTools.MakeLine(pos, pos + dirN); SceneNode node = renderView.ShowGeometry(line, ++shapeId); node.SetLineStyle(lineStyle2); } } } TopoShapeProperty property = new TopoShapeProperty(); property.SetShape(arc); float len = property.EdgeLength(); TextNode text = new TextNode(); text.SetText(String.Format("Arc Length: {0}", len)); text.SetPosition(new Vector3(100, 100, 0)); renderView.SceneManager.ClearNodes2d(); renderView.SceneManager.AddNode2d(text); renderView.RequestDraw(); }
public override bool OnBeiginComplexShape(TopoShape shape) { ShapeGroup.Add(shape); return(false); }