ShapeElement.DoFoldToShape 方法
计算将与一个形状的周边接触的连接线的点。 如果您定义非矩形形状,则重写此形状。
命名空间: Microsoft.VisualStudio.Modeling.Diagrams
程序集: Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0(在 Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0.dll 中)
语法
声明
Public Overridable Function DoFoldToShape ( _
potentialPoint As PointD, _
vectorEndpoint As PointD _
) As PointD
public virtual PointD DoFoldToShape(
PointD potentialPoint,
PointD vectorEndpoint
)
参数
- potentialPoint
类型:Microsoft.VisualStudio.Modeling.Diagrams.PointD
连接器与边界框相交的点,相对于边界框的左上角。
- vectorEndpoint
类型:Microsoft.VisualStudio.Modeling.Diagrams.PointD
连接线的方向。位于行上的另一个点,相对于 potentialPoint。对于水平连接器,Y 坐标总是为 0,对于垂直连接器,X 坐标总是为 0。另一个坐标具有任意值,该值的符号表示了来自 potentialPoint的形状的中心的方向。对于直线连接器,X 和 Y 之比给出连接线的范围,它们的值是任意的。
返回值
类型:Microsoft.VisualStudio.Modeling.Diagrams.PointD
连接器应终止的点。
备注
此方法调用确定在连接应停止形状的边界的点。 默认情况下为矩形,将在形状的边界框。 但是,如果您定义了异常的几何形状的选件类,如图标不是矩形的图标形状,然后此默认值行为可能将留空在连接和您的形状之间实际边缘。 可以重写此方法计算实际点在连接应停止的形状边缘。
示例
在此示例中,作者在 DSL 定义指定的图标形状,并提供图片有一个椭圆轮廓的图标。 默认情况下,连接停止在边界框,但是,这看起来令人不满,在终结点不是在端过程中。 因此 DoFoldToShape 应计算连接将与椭圆的位置。 幸运的是,将执行圆形的此任务的实用程序函数:我们不需要查找我们的高中几何图形书籍。 我们可适应实用程序函数椭圆的工作都乘以输入以因素并将输出由同一个因素。
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);
}
}
.NET Framework 安全性
- 对直接调用方的完全信任。此成员不能由部分信任的代码使用。有关详细信息,请参阅通过部分受信任的代码使用库。