Partager via


ShapeElement.DoFoldToShape, méthode

Calcule le point où un connecteur touchera le périmètre d'une forme. Remplacez cette opération si vous définissez une forme non rectangulaire.

Espace de noms :  Microsoft.VisualStudio.Modeling.Diagrams
Assembly :  Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0 (dans Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0.dll)

Syntaxe

'Déclaration
Public Overridable Function DoFoldToShape ( _
    potentialPoint As PointD, _
    vectorEndpoint As PointD _
) As PointD
public virtual PointD DoFoldToShape(
    PointD potentialPoint,
    PointD vectorEndpoint
)

Paramètres

  • vectorEndpoint
    Type : Microsoft.VisualStudio.Modeling.Diagrams.PointD
    Sens du connecteur.Un autre point sur la ligne, relatif à potentialPoint.Pour un connecteur horizontal, la coordonnée Y est toujours 0 et pour un connecteur vertical X est toujours 0.L'autre coordonnée a une valeur arbitraire dont le signe indique la direction du centre de la forme à partir du potentialPoint.Pour un connecteur droit, le taux de X et Y donne la courbe de la ligne, et leurs valeurs sont arbitraires.

Valeur de retour

Type : Microsoft.VisualStudio.Modeling.Diagrams.PointD
Point au niveau duquel le connecteur doit se terminer.

Notes

Cette méthode est appelée pour déterminer le point sur la limite d'une forme à laquelle un connecteur doit être arrêté. Par défaut pour une forme rectangulaire, pointez sera du rectangle englobant de la forme. Mais si vous définissez une classe de la forme qui a une géométrie inhabituelle, par exemple une forme icône dans laquelle l'icône n'est pas rectangulaire, ce comportement par défaut peut permettre un écart entre le connecteur et le bord réel de votre forme. Vous pouvez substituer cette méthode pour calculer le point réel au bord de votre forme à laquelle le connecteur doit se terminer.

Revenir à la forme

Exemples

Dans cet exemple, l'auteur avez spécifié une forme d'icône dans la définition DSL, et fournit une icône dans laquelle l'image a un plan elliptique. Par défaut, les connecteurs se terminent à la zone englobante, mais cela a insatisfaisant lorsqu'ils ne sont pas au milieu d'un côté. DoFoldToShape devant donc calculer où le connecteur traversera l'ellipse. Heureusement, il existe une fonction de service qui exécute cette tâche pour un cercle : nous n'avons pas besoin de rechercher nos livres de la géométrie de lycée. Nous pouvons optimiser la fonction de service pour utiliser pour une ellipse en liant des multiplications les entrées par un facteur et de diviser la sortie par le même facteur.

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

Sécurité .NET Framework

Voir aussi

Référence

ShapeElement Classe

Microsoft.VisualStudio.Modeling.Diagrams, espace de noms