private void OnSelectElement(SelectionChangeArgs args) { if (!args.IsHighlightMode()) { SelectedShapeQuery query = new SelectedShapeQuery(); renderView.QuerySelection(query); var ids = query.GetIds(); if (ids.Length > 0) { var shape = query.GetGeometry(); if (shape != null) { GeomCurve curve = new GeomCurve(); if (curve.Initialize(shape)) { TopoShapeProperty property = new TopoShapeProperty(); property.SetShape(shape); var str = String.Format("Length:{0}", property.EdgeLength()); toolStripStatusLabel2.Text = str; return; } } } else { toolStripStatusLabel2.Text = ""; } } }
private void queryMultiSelectionToolStripMenuItem_Click(object sender, EventArgs e) { TopoShapeGroup group = new TopoShapeGroup(); MultiShapeQuery query = new MultiShapeQuery(); m_RenderView.QuerySelection(query); int nCount = query.GetCount(); for (int ii = 0; ii < nCount; ++ii) { SelectedShapeQuery shapeQuery = query.GetSubContext(ii); TopoShape subShape = shapeQuery.GetSubGeometry(); if (subShape != null) { group.Add(subShape); } } // clear the scene and only keep the selected shapes if (group.Size() > 0) { m_RenderView.ClearScene(); for (int ii = 0; ii < group.Size(); ++ii) { m_RenderView.ShowGeometry(group.GetAt(ii), 100 + ii);; } } }
private void TransOnMaxBtn_Click(object sender, EventArgs e) { SelectedShapeQuery context = new SelectedShapeQuery(); renderView.QuerySelection(context); var shape = context.GetGeometry(); TransOnMax(shape); }
private void OnSelectElement(SelectionChangeArgs args) { if (!args.IsHighlightMode()) { SelectedShapeQuery query = new SelectedShapeQuery(); renderView.QuerySelection(query); var shape = query.GetGeometry(); if (shape != null) { GeomCurve curve = new GeomCurve(); if (curve.Initialize(shape)) { TopoShapeProperty property = new TopoShapeProperty(); property.SetShape(shape); Console.WriteLine("Edge Length {0}", property.EdgeLength()); } } } }
public override void OnButtonDownEvent(InputEvent evt) { Renderer renderer = GetRenderer(); if (m_Step == EditStep.ES_PickNode) { if (renderer.Select(true) > 0) { SelectedShapeQuery query = new SelectedShapeQuery(); renderer.QuerySelection(query); m_TargetNode = query.GetRootNode(); if (m_TargetNode != null) { m_Step = EditStep.ES_BeginMove; m_InitTrf = m_TargetNode.GetTransform(); } } } else { m_StartPos = ToWorldPoint(evt.GetMousePosition()); } }
private void circleToolStripMenuItem_Click(object sender, EventArgs e) { SelectedShapeQuery query = new SelectedShapeQuery(); renderView.QuerySelection(query); var shape = query.GetSubGeometry(); if (shape == null) { return; } GeomCurve curve = new GeomCurve(); if (!curve.Initialize(shape)) { return; } if (curve.GetCurveType() != EnumCurveType.CurveType_Circle) { var xx = curve.FirstParameter() + curve.LastParameter(); Vector3 pt1 = curve.Value(curve.FirstParameter()); Vector3 pt2 = curve.Value(xx * 0.3); Vector3 pt3 = curve.Value(xx * 0.6); var arc = GlobalInstance.BrepTools.MakeArc3Pts(pt1, pt3, pt2); if (arc != null) { GeomCircle circle = new GeomCircle(); circle.Initialize(arc); var center = circle.GetCenter(); MessageBox.Show(String.Format("Center: {0}, {1}, {2}", center.X, center.Y, center.Z)); } } }
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 querySelectionToolStripMenuItem_Click(object sender, EventArgs e) { SelectedShapeQuery context = new SelectedShapeQuery(); renderView.QuerySelection(context); TopoShape subShape = context.GetSubGeometry(); GeomCurve curve = new GeomCurve(); if (curve.Initialize(subShape)) { Vector3 startPt = curve.D0(curve.FirstParameter()); Vector3 endPt = curve.D0(curve.LastParameter()); //... } ElementId id = context.GetNodeId(); MessageBox.Show(id.AsInt().ToString()); }
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 }