public override bool OnBeiginComplexShape(TopoShape shape) { ++nShapeCount; String type = "Shape"; var st = shape.GetShapeType(); if (st == EnumTopoShapeType.Topo_COMPOUND) { type = "Compound"; } else if (st == EnumTopoShapeType.Topo_COMPSOLID) { type = "CompSolid"; } else if (st == EnumTopoShapeType.Topo_SOLID) { type = "Solid"; } else if (st == EnumTopoShapeType.Topo_SHELL) { type = "Shell"; } nodeStack.Push(nodeStack.Peek().Nodes.Add(String.Format("{0}", nShapeCount), type)); //SceneNode node = renderView.ShowGeometry(shape, nShapeCount); //node.SetFaceStyle(faceStyle); return(true); }
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. * } * */ ////////////////////////////////////////////////////////////////////////// }
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()); //... } }