private NodeBuilder BuildArcInDocument(Document document) { var firstPointBuilder = GetSketchProjectedNode(document, Points[0]); var secondPointBuilder = GetSketchProjectedNode(document, Points[1]); var thirdPointBuilder = GetSketchProjectedNode(document, Points[2]); var gceCirc = new gceMakeCirc(firstPointBuilder[1].TransformedPoint3D.GpPnt, secondPointBuilder[1].TransformedPoint3D.GpPnt, thirdPointBuilder[1].TransformedPoint3D.GpPnt); var circle = gceCirc.Value; var circleCenterBuilder = GetSketchProjectedNode(document, new Point3D(circle.Axis.Location)); var arc = GeomUtils.BuildArc(circle.Axis, Points[0], Points[1], true); var reversedArc = true; if (arc != null) { var firstU = arc.FirstParameter; var lastU = arc.LastParameter; var arcEdge = new BRepBuilderAPIMakeEdge(arc).Edge; var arcAdaptor = new BRepAdaptorCurve(arcEdge); var thirdPointU = GeomUtils.UParameter(arcAdaptor, arcEdge.Location(), Points[3]); if ((firstU <= thirdPointU) && (thirdPointU <= lastU)) { reversedArc = false; } } var builder = new NodeBuilder(document, FunctionNames.Arc); builder[0].Reference = circleCenterBuilder.Node; builder[1].Reference = reversedArc ? secondPointBuilder.Node : firstPointBuilder.Node; builder[2].Reference = reversedArc ? firstPointBuilder.Node : secondPointBuilder.Node; builder.ExecuteFunction(); return(builder); }
public static TopoDSShape CreateArcShape(Point3D point1, Point3D point2, Point3D point3) { if (point1.IsEqual(point2) || point1.IsEqual(point3) || point2.IsEqual(point3)) { return(null); } var line = new gpLin(point1.GpPnt, new gpDir(new gpVec(point1.GpPnt, point2.GpPnt))); if (line.Distance(point3.GpPnt) < Precision.Confusion) { return(null); } var gceCirc = new gceMakeCirc(point1.GpPnt, point2.GpPnt, point3.GpPnt); var circle = gceCirc.Value; var arc = new GCMakeArcOfCircle(circle, point2.GpPnt, point1.GpPnt, true); var curve = arc.Value; var edge = new BRepBuilderAPIMakeEdge(curve).Edge; var circleWire = new BRepBuilderAPIMakeWire(edge).Wire; return(circleWire); }
public List <NodeBuilder> GetTrimResult(Document document, List <SceneSelectedEntity> trimmedEntities, Point3D mouseData) { var sketchCreator = new SketchCreator(document); var trimmingEntities = new List <SceneSelectedEntity>(); foreach (var node in document.Root.Children) { if (node.Value != trimmedEntities[0].Node && IsTrimmingWire(node.Value))// && !SameArc(node.Value, trimmedEntities[0].Node)) { var sse = new SceneSelectedEntity(node.Value) { ShapeType = TopAbsShapeEnum.TopAbs_WIRE }; trimmingEntities.Add(sse); } } trimmedEntities[0].ShapeType = TopAbsShapeEnum.TopAbs_WIRE; var newNodes = new List <NodeBuilder>(); if (trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.LineTwoPoints) { var intervals = ExecuteTrim(trimmedEntities[0], trimmingEntities, mouseData.GpPnt); if (intervals == null) { return(newNodes); } if (intervals.Count == 0) { NodeBuilderUtils.DeleteNode(trimmedEntities[0].Node, Document); return(newNodes); } else { if (intervals.Count % 2 == 0) { for (int i = 0; i < intervals.Count; i += 2) { var builder = new NodeBuilder(document, FunctionNames.LineTwoPoints); builder[0].Reference = sketchCreator.GetPoint(intervals[i]).Node; builder[1].Reference = sketchCreator.GetPoint(intervals[i + 1]).Node; builder.ExecuteFunction(); newNodes.Add(builder); } } } } else if (trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.Circle || trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.Arc) { var centre = new NodeBuilder(trimmedEntities[0].Node.Children[1].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D; var intervals = ExecuteTrim(trimmedEntities[0], trimmingEntities, mouseData.GpPnt); if (intervals != null && intervals.Count % 2 == 0) { for (int i = 0; i < intervals.Count; i += 2) { newNodes.Add(BuildArc(document, centre, intervals[i], intervals[i + 1])); } } } else if (trimmedEntities[0].Node.Get <ShapeFunctionsInterface.Functions.FunctionInterpreter>().Name == FunctionNames.Arc3P) { var point1 = new NodeBuilder(trimmedEntities[0].Node.Children[1].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D; var point2 = new NodeBuilder(trimmedEntities[0].Node.Children[2].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D; var point3 = new NodeBuilder(trimmedEntities[0].Node.Children[3].Get <ReferenceInterpreter>().Node)[1].TransformedPoint3D; var gceCirc = new gceMakeCirc(point1.GpPnt, point2.GpPnt, point3.GpPnt); var centre = new Point3D(gceCirc.Value.Axis.Location); var intervals = ExecuteTrim(trimmedEntities[0], trimmingEntities, mouseData.GpPnt); if (intervals != null && intervals.Count % 2 == 0) { for (int i = 0; i < intervals.Count; i += 2) { newNodes.Add(BuildArc(document, centre, intervals[i], intervals[i + 1])); } } } else { var builder = new NodeBuilder(document, FunctionNames.Trim); builder[0].ReferenceList = trimmingEntities; builder[1].ReferenceData = trimmedEntities[0]; var point = sketchCreator.GetPoint(mouseData).Node; builder[2].Reference = point; if (builder.ExecuteFunction()) { newNodes.Add(builder); } //NodeBuilderUtils.DeleteNode(point, document); point.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden; } return(newNodes); }