Compartilhar via


Método ShapeElement.DoFoldToShape

Calcula o ponto onde um conector atraia o perímetro de uma forma.Substitua esta opção se você definir uma forma não retangular.

Namespace:  Microsoft.VisualStudio.Modeling.Diagrams
Assembly:  Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0 (em Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0.dll)

Sintaxe

'Declaração
Public Overridable Function DoFoldToShape ( _
    potentialPoint As PointD, _
    vectorEndpoint As PointD _
) As PointD
public virtual PointD DoFoldToShape(
    PointD potentialPoint,
    PointD vectorEndpoint
)

Parâmetros

  • vectorEndpoint
    Tipo: Microsoft.VisualStudio.Modeling.Diagrams.PointD
    A direção do conector.Outro ponto na linha, relativa para o potentialPoint.Para um conector horizontal, a coordenada y será sempre 0, e para um conector vertical x coordenada é sempre 0.A coordenada outra tem um valor arbitrário cujo sinal indica a direção do centro da forma do potentialPoint.Para uma linha reta, a proporção de x e y dá a inclinação da linha e seus valores são arbitrários.

Valor de retorno

Tipo: Microsoft.VisualStudio.Modeling.Diagrams.PointD
O ponto em que o conector deve ser encerrado.

Comentários

Este método é chamado para determinar o ponto no limite de uma forma em que um conector deve ser encerrado.Por padrão em uma forma retangular, o ponto será na caixa delimitadora da forma.Mas, se você definir uma classe de forma que tem uma geometria incomuns, por exemplo uma forma de ícone no qual o ícone não seja retangular, em seguida, esse comportamento padrão pode deixar uma lacuna entre o conector e a borda real da sua forma.Você pode substituir esse método para calcular o ponto real na borda da forma em que o conector deve ser encerrado.

Dobre a forma

Exemplos

Neste exemplo, o autor tenha especificado uma forma de ícone na definição de DSL e fornece um ícone no qual a imagem tem um contorno elíptico.Por padrão, conectores de encerrar a caixa delimitadora, mas isso parece insatisfatório quando os pontos de terminação não estão no meio de um lado.DoFoldToShape, portanto, deve calcular onde o conector irá cruzar a elipse.Felizmente, há uma função de utilitário que realiza esta tarefa em um círculo: não precisamos encontrar nossos livros de geometria do ensino médio.Podemos pode adaptar a função do utilitário para se trabalhar uma elipse, multiplicando as entradas por um fator e dividindo a saída pelo mesmo fator.

public partial class MyEllipticalIconShape
{
  public override PointD DoFoldToShape(PointD potentialPoint, PointD vectorEndpoint)
  {
    double width = this.Bounds.Width;
    double height = this.Bounds.Height;
    double k = width / height; // transform from ellipse to circle
    // This utility method folds to a circle. But we have an ellipse, so
    // we adjust the Y values of the inputs:
    PointD result = ShapeGeometry.SnapToCircle(
        new PointD(width / 2, width / 2), // center, relative to shape
        width / 2, // radius of circle
        new PointD(vectorEndpoint.X, vectorEndpoint.Y * k),
        new PointD(potentialPoint.X, potentialPoint.Y * k));
    // Transform the circular result back to the ellipse:
    return new PointD(result.X, result.Y / k); 
 }
}

Segurança do .NET Framework

Consulte também

Referência

ShapeElement Classe

Namespace Microsoft.VisualStudio.Modeling.Diagrams