Exemplo n.º 1
0
        private void SetTranslateValue(object data)
        {
            var nodeBuilder        = new NodeBuilder(Parent);
            var _3dShapesFunctions = new List <string>();

            _3dShapesFunctions.AddRange(new[] { FunctionNames.Sphere, FunctionNames.Box, FunctionNames.Cylinder,
                                                FunctionNames.Torus, FunctionNames.Cone, FunctionNames.Boolean });
            if (_3dShapesFunctions.Contains(nodeBuilder.FunctionName))
            {
                NodeUtils.TranslateSolids(nodeBuilder, (Point3D)data);
                return;
            }
            var sketchNode = NodeBuilderUtils.FindBaseSketchNode(Parent);

            var document = sketchNode.Root.Get <DocumentContextInterpreter>().Document;
            var newPoint = (Point3D)data;

            document.Transact();
            if (NodeUtils.NodeIsOnSketch(nodeBuilder))
            {
                NodeUtils.TranslateSketchNode(nodeBuilder, newPoint, sketchNode);
            }
            else
            {
                NodeUtils.Translate3DNode(nodeBuilder, document, newPoint);
            }
            document.Commit("Translated");
            EndVisualUpdate("Translate object");
        }
Exemplo n.º 2
0
        private void SetRotateValue(object data)
        {
            BeginUpdate();

            var nodeBuilder   = new NodeBuilder(Parent);
            var mouseRotation = TransformationInterpreter.GetRotateTrsf((Point3D)data);
            var sketchNode    = NodeBuilderUtils.FindBaseSketchNode(Parent);

            var document = sketchNode.Root.Get <DocumentContextInterpreter>().Document;

            if (!NodeUtils.NodeIsOnSketch(nodeBuilder))
            {
                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 shapeNodeBuilder = new NodeBuilder(node);
                    if (FunctionNames.GetSolids().Contains(nodeBuilder.FunctionName))
                    {
                        continue;
                    }

                    var affectedSketchNode = shapeNodeBuilder.Dependency[0].ReferenceBuilder.Node;

                    if (affectedSketchNode != null)
                    {
                        var nb1 = new NodeBuilder(affectedSketchNode);
                        if (nb1.Dependency[2].Reference == null)
                        {
                            sketchNodes.Add(affectedSketchNode);
                        }
                    }
                }

                document.Transact();
                foreach (var solid in sketchNodes)
                {
                    var nb          = new NodeBuilder(solid);
                    var trsfCurrent = nb.Node.Get <TransformationInterpreter>().CurrTransform;
                    trsfCurrent = trsfCurrent.Multiplied(mouseRotation);
                    // we need to invert the transformation to make it positive for the x-axis
                    trsfCurrent = trsfCurrent.Inverted;

                    var transformationInfo = new TransformationInfo
                    {
                        SketchIndex    = solid.Index,
                        Transformation = mouseRotation,
                        TrsfIndex      = TransformationInfo.maxTrsfIndex,
                        RefSketchIndex = -2
                    };
                    TransformationInfo.maxTrsfIndex++;
                    TransformationInterpreter.Transformations.Add(transformationInfo);
                    nb.Node.Set <TransformationInterpreter>().CurrTransform = trsfCurrent;
                    nb.ExecuteFunction();
                }
                document.Commit("Rotated");
            }
            EndVisualUpdate("Rotate object");
        }