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"); }
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"); }