Exemple #1
0
        public void CutDeleteBaseTest2()
        {
            var document = TestUtils.DefaultsSetup();

            var sketchCreator = new SketchCreator(document, false);
            var sketchNode    = sketchCreator.BuildSketchNode();

            document.Transact();

            var circleBuilder = TestUtils.Circle(document, sketchNode, new Point3D(0, 0, 0), 10);

            TestUtils.Circle(document, sketchNode, new Point3D(20, 20, 0), 10);
            Assert.AreEqual(circleBuilder.LastExecute, true);
            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
            var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude);

            extrudeBuilder[0].Reference = sketchNode;
            extrudeBuilder[1].Integer   = 0;
            extrudeBuilder[2].Real      = 10;
            extrudeBuilder.ExecuteFunction();
            Assert.AreEqual(extrudeBuilder.LastExecute, true);
            document.Commit("Extrude created");
            document.Transact();
            var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape);

            Assert.AreEqual(volume, 2 * Math.PI * 1000);
            Assert.AreEqual(document.Root.Children.Count, 6);

            var sketchNode2 = sketchCreator.BuildSketchNode();

            document.Commit("Second sketch created");
            document.Transact();
            TestUtils.Circle(document, sketchNode2, new Point3D(0, 0, 0), 5);
            sketchNode2.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode2, document);

            var cutBuilder = new NodeBuilder(document, FunctionNames.Cut);

            cutBuilder[0].Reference = sketchNode2;
            cutBuilder[2].Integer   = (int)ExtrusionTypes.MidPlane;
            cutBuilder[1].Real      = 10000;
            cutBuilder.ExecuteFunction();
            Assert.AreEqual(cutBuilder.LastExecute, true);
            volume = GeomUtils.GetSolidVolume(cutBuilder.Shape);
            Assert.AreEqual(volume, 2 * Math.PI * 1000 - Math.PI * 250);
            Assert.AreEqual(document.Root.Children.Count, 10);

            var nodeToDelete = document.Root[2];

            NodeBuilderUtils.DeleteNode(nodeToDelete, document);
            document.Commit("Deleted");
            document.Transact();
            NodeUtils.RebuildAllSketchFaces(document);
            extrudeBuilder.ExecuteFunction();
            cutBuilder.ExecuteFunction();
            document.Commit("Finished");
            Assert.IsTrue(cutBuilder.LastExecute);
            volume = GeomUtils.GetSolidVolume(cutBuilder.Shape);
            Assert.AreEqual(8, document.Root.Children.Count, "Circle is not deleted");
            Assert.AreEqual(volume, Math.PI * 1000);
        }
Exemple #2
0
        public void ExtrudeSketchTest()
        {
            var document = TestUtils.DefaultsSetup();

            var sketchCreator = new SketchCreator(document, false);
            var sketchNode    = sketchCreator.BuildSketchNode();

            document.Transact();

            var circleBuilder = TestUtils.Circle(document, sketchNode, new Point3D(0, 0, 0), 10);

            TestUtils.Circle(document, sketchNode, new Point3D(20, 20, 0), 10);
            Assert.AreEqual(circleBuilder.LastExecute, true);
            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
            var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude);

            extrudeBuilder[0].Reference = sketchNode;
            extrudeBuilder[1].Integer   = 0;
            extrudeBuilder[2].Real      = 10;
            extrudeBuilder.ExecuteFunction();
            Assert.AreEqual(extrudeBuilder.LastExecute, true);
            document.Commit("Extrude created");
            document.Transact();
            var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape);

            Assert.AreEqual(volume, 2 * Math.PI * 1000);
            Assert.AreEqual(document.Root.Children.Count, 6);
        }
Exemple #3
0
        public void TranslateExtrudedSketchTest()
        {
            var document = TestUtils.DefaultsSetup();

            var sketchCreator = new SketchCreator(document, false);
            var sketchNode    = sketchCreator.BuildSketchNode();

            document.Transact();
            TestUtils.BuildRectangle(document, sketchNode, new Point3D(1, 1, 0), new Point3D(10, 1, 0), new Point3D(10, 13, 0), new Point3D(1, 13, 0));

            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
            var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude);

            extrudeBuilder[0].Reference = sketchNode;
            extrudeBuilder[1].Integer   = 0;
            extrudeBuilder[2].Real      = 10;
            extrudeBuilder.ExecuteFunction();
            Assert.AreEqual(extrudeBuilder.LastExecute, true);
            document.Commit("Extrude created");
            document.Transact();
            var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape);

            Assert.AreEqual(volume, 1080);
            Assert.AreEqual(document.Root.Children.Count, 10);
            var sketchNodeBuilder = new NodeBuilder(document, FunctionNames.Sketch);

            sketchNodeBuilder[0].Axis3D    = new Axis(new Point3D(0, 0, 0), new Point3D(0, 0, 1));
            sketchNodeBuilder[2].Reference = extrudeBuilder.Node;
            sketchNodeBuilder[3].Integer   = 3;
            sketchNodeBuilder.ExecuteFunction();
            Assert.AreEqual(sketchNodeBuilder.LastExecute, true);
            Assert.AreEqual(document.Root.Children.Count, 11);

            //var circleBuilder = TestUtils.Circle(document, sketchNodeBuilder.Node, new Point3D(2, 13, 8), 5);
            //circleBuilder.ExecuteFunction();
            var pointBuilder = new NodeBuilder(document, FunctionNames.Point);

            pointBuilder[0].Reference          = sketchNode;
            pointBuilder[1].TransformedPoint3D = new Point3D(2, 13, 8);
            pointBuilder.ExecuteFunction();
            var circle = new NodeBuilder(document, FunctionNames.Circle);

            circle[0].Reference = pointBuilder.Node;
            circle[1].Real      = 5;
            circle.ExecuteFunction();
            Assert.AreEqual(document.Root.Children.Count, 13);
            document.Commit("Circle drawn");
            document.Transact();
            NodeUtils.Translate3DNode(extrudeBuilder, document, new Point3D(11, 1, 0));//, new Point3D(1,1,0));

            document.Commit("Translated");
            Assert.AreEqual(pointBuilder[1].TransformedPoint3D, new Point3D(12, 13, 8));
            document.Transact();
            NodeUtils.Translate3DNode(extrudeBuilder, document, new Point3D(11, 11, 0));//, new Point3D(1, 1, 0));

            Assert.AreEqual(pointBuilder[1].TransformedPoint3D, new Point3D(12, 23, 8));
        }
Exemple #4
0
 public static void RebuildDocumentFaces(Document document)
 {
     for (int i = 0; i < document.Root.Children.Count; i++)
     {
         var node = document.Root[i];
         var nb   = new NodeBuilder(node);
         if (nb.FunctionName != FunctionNames.Sketch)
         {
             continue;
         }
         node.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(node, document);
     }
 }
Exemple #5
0
        public int CutThroughAll(int sketchId)
        {
            if (!Document.Root.Children.ContainsKey(sketchId))
            {
                return(-1);
            }
            var sketchNode = Document.Root[sketchId];

            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document);
            var node = TreeUtils.Cut(Document, sketchNode, 100, CutTypes.ThroughAll);

            NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden);
            sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden;
            return(node.Index);
        }
Exemple #6
0
        public int Revolve(int shapeId, int lineId, double angle)
        {
            var sketchNode = Document.Root[shapeId];

            if (sketchNode.Get <FunctionInterpreter>().Name == FunctionNames.Sketch)
            {
                sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape =
                    AutoGroupLogic.RebuildSketchFace(sketchNode, Document);
            }
            var builder = new NodeBuilder(Document, FunctionNames.Revolve);

            builder[0].Reference = sketchNode;
            builder[1].Reference = Document.Root[lineId];
            builder[2].Real      = angle;
            builder.ExecuteFunction();
            return(builder.Node.Index);
        }
Exemple #7
0
        private int BuildExtrude(int sketchId, double height, ExtrusionTypes type)
        {
            if (!Document.Root.Children.ContainsKey(sketchId))
            {
                return(-1);
            }
            var sketchNode = Document.Root[sketchId];

            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document);
            var extrudeBuilder = new NodeBuilder(Document, FunctionNames.Extrude);
            var sse            = new SceneSelectedEntity(sketchNode);
            var nb             = TreeUtils.Extrude(Document, sse, height, type);

            NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden);
            sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden;
            return(nb.Node.Index);
        }
        public static NodeBuilder ExtrudeToDepth(Document document, int sketchId, double extrusionHeight)
        {
            if (!document.Root.Children.ContainsKey(sketchId))
            {
                return(null);
            }
            var sketchNode = document.Root[sketchId];

            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
            var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude);

            extrudeBuilder[0].Reference = sketchNode;
            extrudeBuilder[1].Integer   = 0;
            extrudeBuilder[2].Real      = extrusionHeight;
            extrudeBuilder.ExecuteFunction();
            NodeUtils.SetSketchTransparency(document, sketchNode, ObjectVisibility.Hidden);
            sketchNode.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.Hidden;
            return(extrudeBuilder);
        }
Exemple #9
0
        public static void RebuildAllSketchFaces(Document document)
        {
            int shapeIndex     = 0;
            var nodesToRebuild = new List <Node>();

            foreach (var node in document.Root.Children)
            {
                if (node.Value.Get <FunctionInterpreter>().Name == FunctionNames.Sketch)
                {
                    if (SketchHas3DApplied(document, node.Value, out shapeIndex))
                    {
                        nodesToRebuild.Add(node.Value);
                    }
                }
            }
            foreach (var node in nodesToRebuild)
            {
                node.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(node, document);
            }
        }
        private void PerformRotate(NodeBuilder nodeBuilder, double value)
        {
            if (!NodeUtils.NodeIsOnSketch(nodeBuilder))
            {
                var existingFaces = NodeUtils.GetDocumentFaces(Document);
                var list          = NodeBuilderUtils.GetAllContained3DNodesIndexes(nodeBuilder.Node).Distinct().ToList();
                var sketchNodes   = new List <Node>();
                foreach (var nodeIndex in list)
                {
                    var node = Document.Root[nodeIndex.Key];
                    var affectedSketchNode = NodeUtils.RotateNode(new NodeBuilder(node), Document,
                                                                  _axis, value);
                    if (affectedSketchNode != null)
                    {
                        sketchNodes.Add(affectedSketchNode);
                    }
                }

                foreach (var sketchNode in sketchNodes)
                {
                    sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, Document);
                    if (sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape != null)
                    {
                        if (nodeBuilder.Visibility == ObjectVisibility.Hidden)
                        {
                            nodeBuilder.Visibility = ObjectVisibility.ToBeDisplayed;
                        }
                    }
                }

                var newFaces = NodeUtils.GetDocumentFaces(Document);
                foreach (int face in newFaces.Except(existingFaces))
                {
                    Document.Root.Remove(face);
                }
            }
            else
            {
                NodeUtils.RotateSketchNode(nodeBuilder, _axis, value);
            }
        }
        public static void AddArrayPatternNodes(Document document, int axis, int columnAxis, int shape, int rows, int columns, int rowDistance, int colDistance)
        {
            var indexColomns   = 1;
            var node           = document.Root[shape];
            var axisNode       = document.Root[axis];
            var _axis          = GeomUtils.ExtractAxis(new NodeBuilder(axisNode).Shape);
            var columnAxisNode = document.Root[columnAxis];
            var _ColumnAxis    = GeomUtils.ExtractAxis(new NodeBuilder(columnAxisNode).Shape);
            var reverseRows    = 1;
            var reverseColumns = 1;

            for (var indexRows = 0; indexRows < rows; indexRows++)
            {
                for (; indexColomns < columns; indexColomns++)
                {
                    var sourceCopyBuilder = new NodeBuilder(Document.CopyPaste(node));
                    sourceCopyBuilder.ShapeName = "Patterned" +
                                                  sourceCopyBuilder.ShapeName.Substring(0, sourceCopyBuilder.ShapeName.
                                                                                        Length - 1) +
                                                  (indexRows * columns + indexColomns);
                    sourceCopyBuilder.Node.Set <DrawingAttributesInterpreter>().Visibility = ObjectVisibility.ToBeDisplayed;
                    var transformInterpreter = sourceCopyBuilder.Node.Get <TransformationInterpreter>();
                    transformInterpreter.ApplyGeneralArrayPattern(_axis, _ColumnAxis, indexRows * rowDistance * reverseRows,
                                                                  indexColomns * colDistance * reverseColumns);
                }
                indexColomns = 0;
            }

            var slectedNode = node;
            var sketchNode  = AutoGroupLogic.FindSketchNode(slectedNode);

            NodeUtils.SetSketchTransparency(document, sketchNode, 0);

            var face = AutoGroupLogic.RebuildSketchFace(sketchNode, document);

            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = face;
            sketchNode.Set <DrawingAttributesInterpreter>().Transparency  = 1;
            sketchNode.Set <DrawingAttributesInterpreter>().Visibility    = ObjectVisibility.Hidden;
            NodeUtils.SetSketchTransparency(document, sketchNode, 0);
        }
        protected override bool ApplyFunction()
        {
            var  builder    = new NodeBuilder(Document, FunctionNames.Revolve);
            var  sketchNode = AutoGroupLogic.FindSketchNode(FirstShape);
            Node node       = FirstShape;

            if (sketchNode != null)
            {
                if (sketchNode.Children[2].Get <MeshTopoShapeInterpreter>() == null)
                {
                    var tempFace = AutoGroupLogic.RebuildSketchFace(sketchNode, Document);
                    if (tempFace != null)
                    {
                        sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = tempFace;
                        NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden);
                        sketchNode.Set <DrawingAttributesInterpreter>().Transparency = 1;
                        sketchNode.Set <DrawingAttributesInterpreter>().Visibility   = ObjectVisibility.Hidden;
                        Document.Commit("Sketch face generated");
                        node = sketchNode;
                    }
                }
                else
                {
                    node = sketchNode;
                }
            }
            builder[0].Reference = node;
            builder[1].Reference = SecondShape;
            builder[2].Real      = 360.0;
            if (builder.ExecuteFunction())
            {
                AddNodeToTree(builder.Node);
                if (node == sketchNode)
                {
                    NodeUtils.SetSketchTransparency(Document, sketchNode, ObjectVisibility.Hidden);
                }
                return(true);
            }
            return(false);
        }
Exemple #13
0
        public override bool Execute()
        {
            var nodes = NodeBuilderUtils.CopyPaste(Dependency[0].ReferenceBuilder.Node);

            var nb          = new NodeBuilder(Dependency[1].ReferenceBuilder.Node);
            var sketchNodes = new List <Node>();

            foreach (var point in nodes)
            {
                var transformation = point.Set <TransformationInterpreter>();
                transformation.CurrTransform.SetMirror(nb.Dependency[1].TransformedPoint3D.GpPnt);
                var node = NodeBuilderUtils.FindSketchNode(point);
                if (node != null)
                {
                    sketchNodes.Add(node);
                }
                var nb1 = new NodeBuilder(point);
                nb1.ExecuteFunction();
            }

            if (sketchNodes.Count > 0)
            {
                var document = sketchNodes[0].Root.Get <DocumentContextInterpreter>().Document;
                foreach (var sketchNode in sketchNodes)
                {
                    int shapeIndex = 0;
                    if (NodeUtils.SketchHas3DApplied(document, sketchNode, out shapeIndex))
                    {
                        sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
                    }
                }
            }

            return(true);
        }
        private void MakeCircularPattern(int number, double angle, double heigth, int reverse, bool previewMode)
        {
            var sketchNodes = new List <Node>();

            for (var index = 1; index < number; index++)
            {
                var affectedPoints = NodeBuilderUtils.CopyPaste(_selectedNodes[0]);

                foreach (var child in affectedPoints)
                {
                    var node = NodeBuilderUtils.FindSketchNode(child);

                    var transformInterpreter = child.Get <TransformationInterpreter>();
                    transformInterpreter.ApplyGeneralCircularPattern(_axis, index * angle, index * heigth * reverse);
                    if (node != null)
                    {
                        sketchNodes.Add(node);
                    }
                    var nb = new NodeBuilder(child);
                    nb.ExecuteFunction();
                }
            }
            if (sketchNodes.Count > 0)
            {
                var document   = sketchNodes[0].Root.Get <DocumentContextInterpreter>().Document;
                int shapeIndex = 0;
                foreach (var sketchNode in sketchNodes)
                {
                    if (NodeUtils.SketchHas3DApplied(document, sketchNode, out shapeIndex))
                    {
                        sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
                    }
                }
            }
            if (!previewMode)
            {
                CommitFinal("Apply Circular Pattern");
                UpdateView();
                RebuildTreeView();
            }
        }
Exemple #15
0
        // Draw two parallel lines and delete one of the lines -> constraint should be deleted, as well
        public void CutThroughAllTest()
        {
            var document = TestUtils.DefaultsSetup();
            var sh       = new ShapeGraph();

            sh.SetDocument(document);
            var sketchCreator = new SketchCreator(document, false);
            var sketchNode    = sketchCreator.BuildSketchNode();

            document.Transact();

            var circleBuilder = TestUtils.Circle(document, sketchNode, new Point3D(0, 0, 0), 10);

            TestUtils.Circle(document, sketchNode, new Point3D(20, 20, 0), 10);
            Assert.AreEqual(circleBuilder.LastExecute, true);
            sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
            var extrudeBuilder = new NodeBuilder(document, FunctionNames.Extrude);

            extrudeBuilder[0].Reference = sketchNode;
            extrudeBuilder[1].Integer   = 0;
            extrudeBuilder[2].Real      = 10;
            extrudeBuilder.ExecuteFunction();
            Assert.AreEqual(extrudeBuilder.LastExecute, true);
            document.Commit("Extrude created");
            document.Transact();
            var volume = GeomUtils.GetSolidVolume(extrudeBuilder.Shape);

            Assert.AreEqual(volume, 2 * Math.PI * 1000);
            Assert.AreEqual(document.Root.Children.Count, 6);

            var sketchNode2 = sketchCreator.BuildSketchNode();

            document.Commit("Added second sketch");
            document.Transact();
            TestUtils.Circle(document, sketchNode2, new Point3D(0, 0, 0), 5);
            sketchNode2.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode2, document);
            document.Commit("Added circle node");
            document.Transact();
            var cutBuilder = new NodeBuilder(document, FunctionNames.Cut);

            cutBuilder[0].Reference = sketchNode2;
            cutBuilder[2].Integer   = (int)ExtrusionTypes.MidPlane;
            cutBuilder[1].Real      = 10000;
            cutBuilder.ExecuteFunction();
            Assert.AreEqual(cutBuilder.LastExecute, true);
            volume = GeomUtils.GetSolidVolume(cutBuilder.Shape);
            Assert.AreEqual(volume, 2 * Math.PI * 1000 - Math.PI * 250);
            Assert.AreEqual(document.Root.Children.Count, 10);
            document.Commit("Added cut");

            var expectedReferringTo = new SortedDictionary <int, List <int> >
            {
                { 1, new List <int> {
                      0
                  } },
                { 2, new List <int> {
                      1
                  } },
                { 3, new List <int> {
                      0
                  } },
                { 4, new List <int> {
                      3
                  } },
                { 5, new List <int> {
                      0
                  } },
                { 7, new List <int> {
                      6
                  } },
                { 8, new List <int> {
                      7
                  } },
                { 9, new List <int> {
                      6, 5
                  } }
            };

            foreach (var key in expectedReferringTo.Keys)
            {
                CollectionAssert.AreEquivalent(expectedReferringTo[key], sh.ReferringTo[key]);
            }
            var expectedReferrencedBy = new SortedDictionary <int, List <int> >
            {
                { 0, new List <int> {
                      1, 3, 5
                  } },
                { 1, new List <int> {
                      2
                  } },
                { 3, new List <int> {
                      4
                  } },
                { 6, new List <int> {
                      7, 9
                  } },
                { 7, new List <int> {
                      8
                  } }
            };

            foreach (var key in expectedReferrencedBy.Keys)
            {
                CollectionAssert.AreEquivalent(expectedReferrencedBy[key], sh.ReferrencedBy[key]);
            }
        }
        protected override void OnMouseUpAction(Mouse3DPosition mouseData)
        {
            base.OnMouseUpAction(mouseData);

            if (_extrudeStages == ExtrudeStages.SelectSketch)
            {
                var entities = Inputs[InputNames.SelectionContainerPipe].GetData(NotificationNames.GetEntities).Get
                               <List <SceneSelectedEntity> >();
                if (entities.Count <= 0)
                {
                    return;
                }

                _sketchNode = AutoGroupLogic.FindSketchNode(entities[0].Node);
                if (_sketchNode == null)
                {
                    return;
                }
                if (_sketchNode.Children[2].Get <MeshTopoShapeInterpreter>() == null)
                {
                    // the sketch shape was not generated - this is the case when we open a file and perform extrude without any edits
                    var tempFace = AutoGroupLogic.RebuildSketchFace(_sketchNode, Document);
                    if (tempFace == null)
                    {
                        return;
                    }
                    _sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = tempFace;
                    NodeUtils.SetSketchTransparency(Document, _sketchNode, ObjectVisibility.Hidden);
                    _sketchNode.Set <DrawingAttributesInterpreter>().Transparency = 1;
                    _sketchNode.Set <DrawingAttributesInterpreter>().Visibility   = ObjectVisibility.Hidden;
                    Document.Commit("Sketch face generated");
                }

                var face = _sketchNode.Children[2].Get <MeshTopoShapeInterpreter>().Shape;

                _shapePlane = GeomUtils.ExtractPlane(face);
                PreviewExtrude(false, mouseData);
                ResetWorkingPlane();
                Inputs[InputNames.SelectionContainerPipe].Send(NotificationNames.Disable);
                _extrudeStages = ExtrudeStages.ExtrudeAnimation;
            }
            else if (_extrudeStages == ExtrudeStages.ExtrudeAnimation)
            {
                var sketchBuilder = new NodeBuilder(_sketchNode);
                var extrudeHeight = sketchBuilder[0].Axis3D.Location.Distance(mouseData.Point);
                if (extrudeHeight < 1e-12)
                {
                    return;
                }
                PreviewExtrude(false, mouseData);
                NodeUtils.SetSketchTransparency(Document, _sketchNode, ObjectVisibility.Hidden);
                CommitFinal("Extrudes build");
                Inputs[InputNames.FacePickerPlane].Send(NotificationNames.Resume);

                //Inputs[InputNames.SelectionContainerPipe].Send(NotificationNames.SwitchSelectionMode,
                //                                                TopAbsShapeEnum.TopAbs_SOLID);
                RebuildTreeView();
                UpdateView();
                BackToNeutralModifier();
            }
        }
        private void MakeArrayPattern(int rows, int columns, double rowDistance, double colomnsDistance, int reverseRows,
                                      int reverseColomns, bool previewMode)
        {
            var      indexColomns = 1;
            Document document     = null;
            var      sketchNodes  = new List <Node>();

            for (var indexRows = 0; indexRows < rows; indexRows++)
            {
                for (; indexColomns < columns; indexColomns++)
                {
                    var affectedPoints = NodeBuilderUtils.CopyPaste(_selectedNodes[0]);
                    foreach (var child in affectedPoints)
                    {
                        var node = NodeBuilderUtils.FindSketchNode(child);
                        var transformInterpreter = child.Set <TransformationInterpreter>();
                        transformInterpreter.ApplyGeneralArrayPattern(_axis, _ColumnAxis,
                                                                      indexRows * rowDistance * reverseRows,
                                                                      indexColomns * colomnsDistance * reverseColomns);
                        if (node != null)
                        {
                            sketchNodes.Add(node);
                        }
                        var nb = new NodeBuilder(child);
                        nb.ExecuteFunction();
                    }
                }
                indexColomns = 0;
            }
            if (sketchNodes.Count > 0)
            {
                document = sketchNodes[0].Root.Get <DocumentContextInterpreter>().Document;
                int shapeIndex = 0;
                foreach (var sketchNode in sketchNodes)
                {
                    if (NodeUtils.SketchHas3DApplied(document, sketchNode, out shapeIndex))
                    {
                        sketchNode.Children[2].Set <MeshTopoShapeInterpreter>().Shape = AutoGroupLogic.RebuildSketchFace(sketchNode, document);
                    }
                }
            }
            if (!previewMode)
            {
                CommitFinal("Apply Array Pattern");
                UpdateView();
                RebuildTreeView();
            }
        }