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
- potentialPoint
Tipo: Microsoft.VisualStudio.Modeling.Diagrams.PointD
O ponto onde o conector cruza na caixa delimitadora, relativo à parte superior esquerda da caixa delimitadora.
- 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.
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
- Confiança total para o chamador imediato. O membro não pode ser usado por código parcialmente confiável. Para obter mais informações, consulte Usando bibliotecas de código parcialmente confiáveis.