Example #1
0
        public override bool Execute()
        {
            var         axis          = Dependency[1].ReferedShape;
            var         angle         = Dependency[2].Real / 180.0 * Math.PI;
            var         revolvedNode  = Dependency[0].ReferenceBuilder.Node;
            TopoDSShape originalShape = Dependency[0].ReferedShape;
            var         sketchShapes  = new List <Node>();
            var         nodesOnSketch = new List <Node>();
            var         sketchNode    = NodeBuilderUtils.FindSketchNode(revolvedNode);
            var         document      = sketchNode.Root.Get <DocumentContextInterpreter>().Document;

            nodesOnSketch.AddRange(NodeUtils.GetSketchNodes(sketchNode, document, true));
            if (revolvedNode.Get <FunctionInterpreter>().Name == FunctionNames.Sketch)
            {
                var face = revolvedNode.Children[2].Get <MeshTopoShapeInterpreter>().Shape;
                originalShape = AutoGroupLogic.RebuildFaces(face);
            }
            else
            {
                foreach (var node in nodesOnSketch)
                {
                    if (node.Get <FunctionInterpreter>().Name != FunctionNames.Point && node.Index != Dependency[1].ReferenceBuilder.Node.Index)
                    {
                        sketchShapes.Add(node);
                    }
                }
            }

            if (sketchShapes.Count > 0)
            {
                var shapes = new List <TopoDSShape>();
                foreach (var node in sketchShapes)
                {
                    var nb        = new NodeBuilder(node);
                    var tempShape = MakeRevolve(axis, nb.Shape, angle);
                    if (tempShape != null)
                    {
                        shapes.Add(tempShape);
                    }
                }

                TopoDSShape finalShape = null;
                if (shapes.Count > 0)
                {
                    finalShape = shapes[0];
                    for (int i = 1; i < shapes.Count; i++)
                    {
                        if (shapes[i] == null)
                        {
                            continue;
                        }
                        var sew = new BRepBuilderAPISewing(1.0e-06, true, true, true, false);
                        sew.Add(finalShape);
                        sew.Add(shapes[i]);
                        var messg = new MessageProgressIndicator();
                        sew.Perform(messg);

                        finalShape = sew.SewedShape;
                    }
                    Shape = finalShape;
                    foreach (var node in nodesOnSketch)
                    {
                        NodeUtils.Hide(node);
                    }
                    return(true);
                }
            }
            if (originalShape == null)
            {
                return(false);
            }

            Shape = MakeRevolve(axis, originalShape, angle);
            if (Shape == null)
            {
                return(false);
            }

            // Hide the referenece shape
            //NodeUtils.Hide(Dependency[0].Reference);
            foreach (var node in nodesOnSketch)
            {
                NodeUtils.Hide(node);
            }

            return(true);
        }