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 void OnButtonDownEvent(InputEvent evt) { Renderer renderer = GetRenderer(); m_Step += 1; if (m_Step == EditStep.ES_Finish) { LineNode lineNode = new LineNode(); // Screen position to world position Vector3 endPos = ToWorldPoint(evt.GetMousePosition()); if (OnAddLineEvent != null) { OnAddLineEvent(m_StartPos, endPos); } // Start the next line m_Step = EditStep.ES_Drawing; m_StartPos = endPos; lineNode.Set(m_StartPos, endPos); renderer.RequestDraw(1); return; } if (evt.IsLButtonDown()) { m_StartPos = ToWorldPoint(evt.GetMousePosition()); tempLineNode.SetVisible(true); renderer.RequestDraw(1); } }
public override void OnButtonDownEvent(InputEvent evt) { Renderer renderer = GetRenderer(); m_Step += 1; if (m_Step == (int)EditStep.ES_Finish) { m_Step = (int)EditStep.ES_Init; LineNode lineNode = new LineNode(); lineNode.Set(m_StartPos, ToWorldPoint(evt.GetMousePosition())); renderer.GetSceneManager().AddNode(lineNode); tempLineNode.SetVisible(false); renderer.RequestDraw(1); return; } if (evt.IsLButtonDown()) { m_StartPos = ToWorldPoint(evt.GetMousePosition()); tempLineNode.SetVisible(true); renderer.RequestDraw(1); } }
public override void OnButtonDownEvent(InputEvent evt) { Vector3 pt = GetSelectedShape((int)evt.GetMousePosition().X, (int)evt.GetMousePosition().Y); if (pt == null) { return; } Renderer renderer = GetRenderer(); m_Step += 1; if (m_Step == (int)EditStep.ES_Finish) { m_Step = (int)EditStep.ES_Init; LineNode lineNode = new LineNode(); lineNode.SetShowText(true); lineNode.Set(m_Pt1, pt); renderer.GetSceneManager().AddNode(lineNode); renderer.RequestDraw(1); return; } if (evt.IsLButtonDown()) { m_Pt1 = pt; } }
public override void OnMouseMoveEvent(InputEvent evt) { if (m_Step == (int)EditStep.ES_Drawing) { Renderer renderer = GetRenderer(); tempLineNode.Set(m_StartPos, ToWorldPoint(evt.GetMousePosition())); renderer.RequestDraw(1); } }
public override void OnButtonDownEvent(InputEvent evt) { if (evt.IsRButtonDown()) { this.Exit(1); return; } this.RemoveAllTempNodes(); Renderer rv = GetRenderer(); PickHelper pickHelper = new PickHelper(); pickHelper.Initialize(rv); if (!pickHelper.Pick(evt.GetMousePosition())) { return; } TopoShape shape = pickHelper.GetGeometry(); GeomSurface surface = new GeomSurface(); if (!surface.Initialize(shape)) { return; } IntersectionLineSurface intersector = new IntersectionLineSurface(); intersector.SetSurface(shape); if (!intersector.Perform(rv.ComputeScreenRay(evt.GetMousePosition()))) { return; } int nCount = intersector.GetPointCount(); if (nCount < 1) { return; } double u = intersector.GetParameterU(1); double v = intersector.GetParameterV(1); Vector3 pt = surface.Value(u, v); Vector3 normal = surface.GetNormal(u, v); LineNode lineNode = new LineNode(); lineNode.Set(pt, pt + normal); this.ShowTempNode(lineNode); rv.RequestDraw(1); }
public override bool Run(FeatureContext context) { TopoShape oCircle1 = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 20, Vector3.UNIT_Z); TopoShape Pipe01_Surf = GlobalInstance.BrepTools.Extrude(oCircle1, 100, Vector3.UNIT_Z); context.ShowGeometry(Pipe01_Surf); TopoShape oCircle2 = GlobalInstance.BrepTools.MakeCircle(new Vector3(0.0f, 0.0f, 50.0f), 10, Vector3.UNIT_Y); TopoShape Pipe02_Surf = GlobalInstance.BrepTools.Extrude(oCircle2, 80, Vector3.UNIT_Y); { SceneNode node2 = context.ShowGeometry(Pipe02_Surf); FaceStyle fs = new FaceStyle(); fs.SetColor(new ColorValue(0.5f, 0.5f, 0.5f, 0.5f)); fs.SetTransparent(true); node2.SetFaceStyle(fs); } // Compute the intersection curve TopoShape Inters1 = GlobalInstance.BrepTools.SurfaceSection(Pipe01_Surf, Pipe02_Surf); if (Inters1 != null) { SceneNode node = context.ShowGeometry(Inters1); LineStyle ls = new LineStyle(); ls.SetLineWidth(3); ls.SetColor(ColorValue.RED); node.SetLineStyle(ls); // Get the curve parameters GeomCurve curve = new GeomCurve(); if (curve.Initialize(Inters1)) { LineStyle ls2 = new LineStyle(); ls2.SetColor(ColorValue.GREEN); double start = curve.FirstParameter(); double end = curve.LastParameter(); for (double ii = start; ii <= end; ii += 0.1) { List <Vector3> rt = curve.D1(ii); LineNode ln = new LineNode(); ln.SetLineStyle(ls2); ln.Set(rt[0], rt[0] + rt[1]); context.ShowSceneNode(ln); } } } return(true); }
public override void OnButtonDownEvent(InputEvent evt) { if (evt.IsRButtonDown()) { this.Exit(1); return; } this.RemoveAllTempNodes(); Renderer rv = GetRenderer(); PickHelper pickHelper = new PickHelper(); pickHelper.Initialize(rv); if (!pickHelper.Pick(evt.GetMousePosition())) return; TopoShape shape = pickHelper.GetGeometry(); GeomSurface surface = new GeomSurface(); if (!surface.Initialize(shape)) return; IntersectionLineSurface intersector = new IntersectionLineSurface(); intersector.SetSurface(shape); if (!intersector.Perform(rv.ComputeScreenRay(evt.GetMousePosition()))) { return; } int nCount = intersector.GetPointCount(); if(nCount < 1) return; float u = intersector.GetParameterU(1); float v = intersector.GetParameterV(1); Vector3 pt = surface.Value(u, v); Vector3 normal = surface.GetNormal(u, v); LineNode lineNode = new LineNode(); lineNode.Set(pt, pt + normal); this.ShowTempNode(lineNode); rv.RequestDraw(1); }
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 planeAngleToolStripMenuItem_Click(object sender, EventArgs e) { // plane Vector3 planeDir = Vector3.UNIT_Z; TopoShape plane1 = GlobalInstance.BrepTools.MakePlaneFace(Vector3.ZERO, planeDir, -100, 100, -100, 100); { GeomSurface gs = new GeomSurface(); gs.Initialize(plane1); List<Vector3> rst = gs.D1(gs.FirstUParameter(), gs.FirstVParameter()); Vector3 dir2 = rst[1].CrossProduct(rst[2]); MessageBox.Show(dir2.ToString()); } Vector3 normal = new Vector3(0,1,1); normal.Normalize(); TopoShape plane2 = GlobalInstance.BrepTools.MakePlaneFace(Vector3.ZERO, normal, -100, 100, -100, 100); renderView.ShowGeometry(plane1, ++shapeId); renderView.ShowGeometry(plane2, ++shapeId); LineStyle style = new LineStyle(); style.SetColor(ColorValue.GREEN); // witness Vector3 end1 = new Vector3(0, 0, 100); LineNode line1 = new LineNode(); line1.Set(Vector3.ZERO, end1); line1.SetLineStyle(style); renderView.ShowSceneNode(line1); Vector3 end2 = normal * 100; LineNode line2 = new LineNode(); line2.Set(Vector3.ZERO, end2); line2.SetLineStyle(style); renderView.ShowSceneNode(line2); // angle float angle = normal.AngleBetween(planeDir); Vector3 dir = normal.CrossProduct(planeDir); dir.Normalize(); TopoShape arc = GlobalInstance.BrepTools.MakeArc(end2, end1, Vector3.ZERO, dir); SceneNode arcNode = renderView.ShowGeometry(arc, ++shapeId); arcNode.SetLineStyle(style); // text TextNode text = new TextNode(); text.SetText(angle.ToString()); Vector3 pos = end2 + end1; pos = pos * 0.5f; text.SetPosition(pos); renderView.ShowSceneNode(text); renderView.RequestDraw(); }
private void surfaceSectionToolStripMenuItem_Click(object sender, EventArgs e) { TopoShape oCircle1 = GlobalInstance.BrepTools.MakeCircle(Vector3.ZERO, 20, Vector3.UNIT_Z); TopoShape Pipe01_Surf = GlobalInstance.BrepTools.Extrude(oCircle1, 100, Vector3.UNIT_Z); renderView.ShowGeometry(Pipe01_Surf, ++shapeId); TopoShape oCircle2 = GlobalInstance.BrepTools.MakeCircle(new Vector3(0.0f, 0.0f, 50.0f), 10, Vector3.UNIT_Y); TopoShape Pipe02_Surf = GlobalInstance.BrepTools.Extrude(oCircle2, 80, Vector3.UNIT_Y); renderView.ShowGeometry(Pipe02_Surf, ++shapeId); TopoShape Inters1 = GlobalInstance.BrepTools.SurfaceSection(Pipe01_Surf, Pipe02_Surf); if (Inters1 != null) { SceneNode node = renderView.ShowGeometry(Inters1, ++shapeId); LineStyle ls = new LineStyle(); ls.SetLineWidth(3); ls.SetColor(ColorValue.RED); node.SetLineStyle(ls); GeomCurve curve = new GeomCurve(); if (curve.Initialize(Inters1)) { LineStyle ls2 = new LineStyle(); ls2.SetColor(ColorValue.GREEN); float start = curve.FirstParameter(); float end = curve.LastParameter(); for (float ii = start; ii <= end; ii += 0.1f) { List<Vector3> rt = curve.D1(ii); LineNode ln = new LineNode(); ln.SetLineStyle(ls2); ln.Set(rt[0], rt[0] + rt[1]); renderView.ShowSceneNode(ln); } } } renderView.RequestDraw(); }
private void customGridToolStripMenuItem_Click(object sender, EventArgs e) { WorkingPlane wp = renderView.Renderer.GetWorkingPlane(); GridNode gridNode = new GridNode(); Vector3 modelSize = renderView.SceneManager.GetBBox().Size(); Vector2 cellSize = gridNode.GetCellSize(); int nCountX = (int)(modelSize.X / cellSize.X + 0.5f) + 1; int nCountY = (int)(modelSize.Y / cellSize.Y + 0.5f) + 1; if (nCountX < 2) nCountX = 2; if (nCountY < 2) nCountY = 2; gridNode.SetCellCount(nCountX, nCountY); LineStyle lineStyle = new LineStyle(); lineStyle.SetColor(new ColorValue(1.0f, 1.0f, 1.0f)); lineStyle.SetPatternStyle((int)EnumLinePattern.LP_DotLine); { //Z LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(0, 0, -1000), new Vector3(0, 0, 1000)); lineNode.SetLineStyle(lineStyle); gridNode.AddNode(lineNode); } { //X LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(-1000, 0, 0), new Vector3(1000, 0, 0)); lineNode.SetLineStyle(lineStyle); gridNode.AddNode(lineNode); } { //Y LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(0, -1000, 0), new Vector3(0, 1000, 0)); lineNode.SetLineStyle(lineStyle); gridNode.AddNode(lineNode); } lineStyle = new LineStyle(); lineStyle.SetColor(new ColorValue(0.9f, 0.9f, 0.9f)); gridNode.SetLineStyle(lineStyle); for (int ii = -1; ii <= nCountX; ++ii) { if (ii == 0) continue; LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(ii * cellSize.X, cellSize.Y, 0), new Vector3(ii * cellSize.X, -nCountY * cellSize.Y, 0)); gridNode.AddNode(lineNode); } for (int ii = -1; ii <= nCountY; ++ii) { if (ii == 0) continue; LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(-cellSize.X, -ii * cellSize.Y, 0), new Vector3(nCountX * cellSize.X, -ii * cellSize.Y, 0)); gridNode.AddNode(lineNode); } gridNode.Update(); wp.SetGridNode(gridNode); { AxesWidget xwh = new AxesWidget(); xwh.EnableLeftHandCS(); xwh.SetArrowText((int)EnumAxesDirection.Axes_Y, "w"); xwh.SetArrowText((int)EnumAxesDirection.Axes_Z, "h"); ScreenWidget coordWidget = new ScreenWidget(); coordWidget.SetNode(xwh); coordWidget.SetWidgetPosition((int)EnumWidgetPosition.WP_BottomLeft); renderView.Renderer.AddWidgetNode(coordWidget); } { AxesWidget yz = new AxesWidget(); yz.ShowArrow((int)EnumAxesDirection.Axes_X, false); ScreenWidget coordWidget = new ScreenWidget(); coordWidget.SetNode(yz); coordWidget.SetWidgetPosition((int)EnumWidgetPosition.WP_BottomRight); renderView.Renderer.AddWidgetNode(coordWidget); } renderView.ShowCoordinateAxis(false); renderView.RequestDraw(); }
public void UpdateWorkingGrid() { m_RenderView.SceneManager.ComputeBBox(); WorkingPlane wp = m_RenderView.Renderer.GetWorkingPlane(); GridNode gridNode = new GridNode(); Vector3 modelSize = m_RenderView.SceneManager.GetBBox().Size(); Vector2 cellSize = gridNode.GetCellSize(); int nCountX = (int)(modelSize.X / cellSize.X + 0.5f) + 1; int nCountY = (int)(modelSize.Y / cellSize.Y + 0.5f) + 1; if (nCountX < 2) { nCountX = 2; } if (nCountY < 2) { nCountY = 2; } gridNode.SetCellCount(nCountX, nCountY); LineStyle lineStyle = new LineStyle(); lineStyle.SetColor(new ColorValue(1.0f, 1.0f, 1.0f)); lineStyle.SetPatternStyle((int)EnumLinePattern.LP_DotLine); { //Z LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(0, 0, -1000), new Vector3(0, 0, 1000)); lineNode.SetLineStyle(lineStyle); gridNode.AddNode(lineNode); } { //X LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(-1000, 0, 0), new Vector3(1000, 0, 0)); lineNode.SetLineStyle(lineStyle); gridNode.AddNode(lineNode); } { //Y LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(0, -1000, 0), new Vector3(0, 1000, 0)); lineNode.SetLineStyle(lineStyle); gridNode.AddNode(lineNode); } lineStyle = new LineStyle(); lineStyle.SetColor(new ColorValue(0.9f, 0.9f, 0.9f)); gridNode.SetLineStyle(lineStyle); for (int ii = -1; ii <= nCountX; ++ii) { if (ii == 0) { continue; } LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(ii * cellSize.X, cellSize.Y, 0), new Vector3(ii * cellSize.X, -nCountY * cellSize.Y, 0)); gridNode.AddNode(lineNode); } for (int ii = -1; ii <= nCountY; ++ii) { if (ii == 0) { continue; } LineNode lineNode = new LineNode(); lineNode.Set(new Vector3(-cellSize.X, -ii * cellSize.Y, 0), new Vector3(nCountX * cellSize.X, -ii * cellSize.Y, 0)); gridNode.AddNode(lineNode); } gridNode.Update(); wp.SetGridNode(gridNode); m_RenderView.ShowWorkingGrid(true); }