Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }