public override bool Run(FeatureContext context) { context.RenderView.SetDisplayMode((int)(EnumDisplayStyle.DS_ShadeEdge | EnumDisplayStyle.DS_Vertex)); // construct a wire; TopoShape TS = GlobalInstance.BrepTools.MakeEllipse(Vector3.ZERO, 100D, 50D, Vector3.UNIT_Z); context.ShowGeometry(TS); TopoShape line = GlobalInstance.BrepTools.MakeLine(new Vector3(0, -200, 0), new Vector3(200, 200, 0)); context.ShowGeometry(line); IntersectionLineCurve intersector = new IntersectionLineCurve(); TopoExplor tp = new TopoExplor(); TopoShapeGroup tg = tp.ExplorEdges(TS); intersector.SetCurve(tg.GetAt(0)); if (intersector.Perform(line)) { int nCount = intersector.GetPointCount(); List <Vector3> LV = new List <Vector3>(); for (int ii = 0; ii < nCount; ++ii) { Vector3 pt = intersector.GetPoint(ii + 1); LV.Add(pt); context.ShowGeometry(GlobalInstance.BrepTools.MakePoint(pt)); } MessageBox.Show(String.Format("{0}", nCount)); } return(true); }
private void curveIntersectionToolStripMenuItem_Click(object sender, EventArgs e) { TopoShape ellipseArc = GlobalInstance.BrepTools.MakeEllipseArc(Vector3.ZERO, 100, 50, 0, 90, Vector3.UNIT_Z); TopoShape circle = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 60, Vector3.UNIT_Z); IntersectionLineCurve intersector = new IntersectionLineCurve(); intersector.SetCurve(ellipseArc); if (intersector.Perform(circle)) { PointStyle ps = new PointStyle(); ps.SetMarker("plus"); ps.SetPointSize(10); int nCount = intersector.GetPointCount(); for (int ii = 1; ii <= nCount; ++ii) { if (intersector.GetSquareDistance(ii) < 0.001) { Vector3 pt = intersector.GetPoint(ii); PointNode pn = new PointNode(); pn.SetPoint(pt); pn.SetPointStyle(ps); renderView.ShowSceneNode(pn); } } } renderView.ShowGeometry(ellipseArc, ++shapeId); renderView.ShowGeometry(circle, ++shapeId); renderView.RequestDraw(); }