Compartir a través de


ShapeElement.DoFoldToShape (Método)

Calcula el punto en un conector donde tocará el perímetro de una forma. Reemplácelo si define una forma no rectangular.

Espacio de nombres:  Microsoft.VisualStudio.Modeling.Diagrams
Ensamblado:  Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0 (en Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0.dll)

Sintaxis

'Declaración
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
    Dirección del conector.Otro punto de la línea, en relación con potentialPoint.Para un conector horizontal, la coordenada Y siempre será 0, y para un conector vertical la coordenada X es siempre 0.La otra coordenada tiene un valor arbitrario cuyo signo indica la dirección del centro de la forma desde potentialPoint.Para un conector recto, la relación de X e Y proporciona la pendiente de la línea, y los valores son arbitrarios.

Valor devuelto

Tipo: Microsoft.VisualStudio.Modeling.Diagrams.PointD
El punto donde el conector debe finalizar.

Comentarios

Se llama a este método para determinar el punto en el límite de una forma en que un conector debe ser finalizado. De forma predeterminada para una forma rectangular, seleccione estará en el cuadro delimitador de la forma. Pero si define una clase de forma que tenga una geometría inusual, como una forma de iconos en la que el icono no es rectangular, este comportamiento predeterminado podría dejar un intervalo entre el conector y el borde real de la forma. Puede invalidar este método para calcular el punto real al borde de su forma en que el conector debe finalizar.

Intersección con la forma

Ejemplos

En este ejemplo, el autor ha especificado una forma de iconos en la definición ADSL, y proporciona un icono en el que la imagen tiene un contorno elíptico. De forma predeterminada, los conectores finalizan en el cuadro delimitador, pero esto es insatisfactorio cuando los puntos de finalización no están en medio de un lado. DoFoldToShape debe por consiguiente calcular donde el conector cruzará la elipse. Afortunadamente, existe una función de utilidad que realiza esta tarea en un círculo: no necesitamos encontrar los libros de geometría de la High School secundaria. Podemos según la función de utilidad a trabajar para una elipse multiplicando las entradas en un factor y dividir la salida por el mismo factor.

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

Seguridad de .NET Framework

Vea también

Referencia

ShapeElement Clase

Microsoft.VisualStudio.Modeling.Diagrams (Espacio de nombres)