private void SetLength(object data) { if (Builder[0].ReferenceBuilder.FunctionName == FunctionNames.Circle) { BeginUpdate(); var nb = new NodeBuilder(Builder[0].ReferenceBuilder.Node); nb[1].Real = (double)data / 2; nb.ExecuteFunction(); EndVisualUpdate("Updated radius"); } if (Builder[0].ReferenceBuilder.FunctionName != FunctionNames.LineTwoPoints) { return; } BeginUpdate(); TreeUtils.SetLineLength(Builder[0].ReferenceBuilder.Node, (double)data); var document = _viewInfo.Document; var constraint = NodeBuilderUtils.ShapeHasConstraint(Builder[0].ReferenceBuilder.Node, Constraint2DNames.LineLengthFunction, document); if (constraint != -1) { var nb = new NodeBuilder(document.Root[constraint]); nb.Dependency[2].Real = (double)data; nb.ExecuteFunction(); } CallSolverForLineChanges(Builder[0].ReferenceBuilder.Node); EndVisualUpdate("Updated Length"); }
protected void UpdateLineLock() { BeginUpdate(); var constraint = NodeBuilderUtils.ShapeHasConstraint(Parent, Constraint2DNames.LineLengthFunction, _viewInfo.Document); if (constraint != -1) { _viewInfo.Document.Root.Remove(constraint); // remove dimension var dimensionNodeIndex = 0; foreach (var child in _viewInfo.Document.Root.Children) { if (child.Value.Get <FunctionInterpreter>().Name == FunctionNames.Dimension) { if (child.Value.Children[1].Get <ReferenceInterpreter>().Node.Index == Parent.Index) { dimensionNodeIndex = child.Value.Index; break; } } } if (dimensionNodeIndex != 0) { _viewInfo.Document.Root.Remove(dimensionNodeIndex); } } else { NodeBuilderUtils.AddLengthAndDimensionConstraint(_viewInfo.Document, Parent, true); } EndVisualUpdate("Update constraint"); }
protected void UpdateLock(bool islocked, string functionName, double value) { BeginUpdate(); var constraint = NodeBuilderUtils.ShapeHasConstraint(Parent, functionName, _viewInfo.Document); if (constraint != -1) { _viewInfo.Document.Root.Remove(constraint); } else { AddConstraintToOneField(functionName, value); } EndVisualUpdate("Update constraint"); }
protected void UpdateCircleLock() { BeginUpdate(); var constraint = NodeBuilderUtils.ShapeHasConstraint(Parent, Constraint2DNames.CircleRadiusFunction, _viewInfo.Document); if (constraint != -1) { _viewInfo.Document.Root.Remove(constraint); } else { NodeBuilderUtils.AddRadiusConstraint(_viewInfo.Document, Parent);//, value); } EndVisualUpdate("Update constraint"); }
public override void UpdatePointPosition(int index, Mouse3DPosition vertex) { var radiusConstraint = NodeBuilderUtils.ShapeHasConstraint(Node, Constraint2DNames.CircleRadiusFunction, Dependency[0].Node.Root.Get <DocumentContextInterpreter>().Document); // allow edits only if we don't have a radius constraint if (radiusConstraint == -1) { var transform = Node.Get <TransformationInterpreter>(); switch (index) { case 0: case 1: case 2: case 3: // The radius is the distance between the center and the new point var dependency = TreeUtils.GetFunctionDependency(Node); if (Dependency[0].Name == FunctionNames.Point || Dependency[0].Name == InterpreterNames.Reference) { dependency[1].Real = vertex.Point.GpPnt.Distance( Dependency[0].RefTransformedPoint3D.GpPnt.Transformed(transform.CurrTransform)); } if (Dependency[0].Name == FunctionNames.AxisHandle) { dependency[1].Real = vertex.Point.GpPnt.Distance( Dependency[0].TransformedAxis3D.Location.Transformed(transform.CurrTransform)); } break; } if (Dependency[0].Name == FunctionNames.Point || Dependency[0].Name == InterpreterNames.Reference) { var document = Dependency[0].Node.Root.Get <DocumentContextInterpreter>().Document; var sketchNode = Dependency[0].ReferenceBuilder[0].ReferenceBuilder[0].Node; var constraintMapper = new ConstraintDocumentHelper(document, sketchNode); constraintMapper.SetMousePosition(Dependency[0].Reference.Index); var error = constraintMapper.ImpactAndSolve(Dependency[0].Node.Parent); } } }