private bool ApplyConstraint(FunctionDependency dependency, ref AISInteractiveObject interactive, Point3D destinationPoint, Point3D sourcePoint, Point3D distancePoint) { var transform = dependency[1].Reference.Set <TransformationInterpreter>(); var substractedDistance = destinationPoint.SubstractCoordinate(sourcePoint); if (dependency[0].Reference.Index != dependency[1].Reference.Index) { if (distancePoint.IsEqual(substractedDistance)) { interactive = UpdateInteractive(sourcePoint); return(true); } var translateVal = new Point3D(transform.Translate); transform.Translate = translateVal.AddCoordinate(distancePoint.SubstractCoordinate(substractedDistance)).GpPnt; } else { var origin = new Point3D(); var pointDistance = distancePoint.Distance(origin); var expectedDistance = substractedDistance.Distance(origin); if (Math.Abs(pointDistance - expectedDistance) < Precision.Confusion) { interactive = UpdateInteractive(sourcePoint); return(true); } transform.Scale = transform.Scale * pointDistance / expectedDistance; } return(false); }
private static void BuildPreviewRectangle(Document previewDocument, Point3D topLeftPoint, string textureName, double rectangleSize, double transparency) { var rectangle = new NodeBuilder(previewDocument, FunctionNames.ThreePointsRectangle); rectangle[0].TransformedPoint3D = topLeftPoint; rectangle[1].TransformedPoint3D = topLeftPoint.AddCoordinate(new Point3D(rectangleSize, 0, 0)); rectangle[2].TransformedPoint3D = topLeftPoint.AddCoordinate(new Point3D(rectangleSize, rectangleSize, 0)); rectangle.Visibility = ObjectVisibility.Hidden; rectangle.ExecuteFunction(); var textureBuilder = new NodeBuilder(previewDocument, FunctionNames.TexturedShape); textureBuilder[0].Reference = rectangle.Node; textureBuilder[1].Text = textureName; textureBuilder.Transparency = transparency; textureBuilder.ExecuteFunction(); }
private void PreviewConstraints(Document previewDocument, KeyValuePair <int, HinterShapeBase> shape, List <Node> referencesList, double rectangleSize) { var size = shape.Value.Size; var count = referencesList.Count; var midPoint = new Point3D(size.MiddleX, size.MiddleY, 0); var startPoint = new Point3D(size.MiddleX - rectangleSize * count / 2.0, midPoint.Y - rectangleSize / 2, 0); startPoint = startPoint.AddCoordinate(new Point3D(0, -rectangleSize * 1.5, 0)); var i = 0; foreach (var node in referencesList) { var builder = new NodeBuilder(node); var texture = _textureMapper[builder.FunctionName]; var topLeftPoint = startPoint.AddCoordinate(new Point3D(rectangleSize * i * 1.5, 0, 0)); BuildPreviewRectangle(previewDocument, topLeftPoint, texture, rectangleSize, 0.3); i++; } }