本文整理汇总了C#中Rect.Intersection方法的典型用法代码示例。如果您正苦于以下问题:C# Rect.Intersection方法的具体用法?C# Rect.Intersection怎么用?C# Rect.Intersection使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Rect
的用法示例。
在下文中一共展示了Rect.Intersection方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: PickRenderersIn
/// <summary>
/// Picks all <see cref="Duality.ICmpRenderer">ICmpRenderers</see> contained within the specified
/// rectangular area.
/// </summary>
/// <param name="x">x-Coordinate of the Rect.</param>
/// <param name="y">y-Coordinate of the Rect.</param>
/// <param name="w">Width of the Rect.</param>
/// <param name="h">Height of the Rect.</param>
/// <returns>A set of all <see cref="Duality.ICmpRenderer">ICmpRenderers</see> that have been picked.</returns>
public HashSet<ICmpRenderer> PickRenderersIn(int x, int y, int w, int h)
{
Rect dstRect = new Rect(x, y, w, h);
Rect srcRect = new Rect(DualityApp.TargetResolution);
if (!dstRect.Intersects(srcRect)) return new HashSet<ICmpRenderer>();
dstRect = dstRect.Intersection(srcRect);
this.RenderPickingMap();
x = Math.Max((int)dstRect.X, 0);
y = Math.Max((int)dstRect.Y, 0);
w = Math.Min((int)dstRect.W, this.pickingTex.PixelWidth - x);
h = Math.Min((int)dstRect.H, this.pickingTex.PixelHeight - y);
HashSet<ICmpRenderer> result = new HashSet<ICmpRenderer>();
int rendererIdLast = 0;
for (int j = 0; j < h; ++j)
{
int offset = 4 * (x + (y + j) * this.pickingTex.PixelWidth);
for (int i = 0; i < w; ++i)
{
int rendererId = (this.pickingBuffer[offset] << 16) |
(this.pickingBuffer[offset + 1] << 8) |
(this.pickingBuffer[offset + 2] << 0);
if (rendererId != rendererIdLast)
{
if (rendererId - 1 > this.pickingMap.Count)
Log.Core.WriteWarning("Unexpected picking result: {0}", ColorRgba.FromIntArgb(rendererId));
else if (rendererId != 0 && !(this.pickingMap[rendererId - 1] as Component).Disposed)
result.Add(this.pickingMap[rendererId - 1]);
rendererIdLast = rendererId;
}
offset += 4;
}
}
return result;
}
示例2: Intersection
public static Rect Intersection(Rect rect1, Rect rect2)
{
return rect1.Intersection(rect2);
}
示例3: PickRenderersIn
/// <summary>
/// Picks all <see cref="Duality.ICmpRenderer">ICmpRenderers</see> contained within the specified
/// rectangular area.
/// The resulting information is only accurate if <see cref="RenderPickingMap"/> has been called this frame.
/// </summary>
/// <param name="x">x-Coordinate of the Rect.</param>
/// <param name="y">y-Coordinate of the Rect.</param>
/// <param name="w">Width of the Rect.</param>
/// <param name="h">Height of the Rect.</param>
/// <returns>A set of all <see cref="Duality.ICmpRenderer">ICmpRenderers</see> that have been picked.</returns>
public IEnumerable<ICmpRenderer> PickRenderersIn(int x, int y, int w, int h)
{
if (this.pickingBuffer == null)
return Enumerable.Empty<ICmpRenderer>();
if ((x + w) + (y + h) * this.pickingTex.PixelWidth >= this.pickingBuffer.Length)
return Enumerable.Empty<ICmpRenderer>();
Rect dstRect = new Rect(x, y, w, h);
Rect availRect = new Rect(this.pickingTex.PixelWidth, this.pickingTex.PixelHeight);
if (!dstRect.Intersects(availRect)) return Enumerable.Empty<ICmpRenderer>();
dstRect = dstRect.Intersection(availRect);
x = Math.Max((int)dstRect.X, 0);
y = Math.Max((int)dstRect.Y, 0);
w = Math.Min((int)dstRect.W, this.pickingTex.PixelWidth - x);
h = Math.Min((int)dstRect.H, this.pickingTex.PixelHeight - y);
HashSet<ICmpRenderer> result = new HashSet<ICmpRenderer>();
int rendererIdLast = 0;
for (int j = 0; j < h; ++j)
{
int offset = 4 * (x + (y + j) * this.pickingTex.PixelWidth);
for (int i = 0; i < w; ++i)
{
int rendererId =
(this.pickingBuffer[offset] << 16) |
(this.pickingBuffer[offset + 1] << 8) |
(this.pickingBuffer[offset + 2] << 0);
if (rendererId != rendererIdLast)
{
if (rendererId - 1 > this.pickingMap.Count)
Log.Core.WriteWarning("Unexpected picking result: {0}", ColorRgba.FromIntArgb(rendererId));
else if (rendererId != 0 && !(this.pickingMap[rendererId - 1] as Component).Disposed)
result.Add(this.pickingMap[rendererId - 1]);
rendererIdLast = rendererId;
}
offset += 4;
}
}
return result;
}
示例4: IntersectionRect
public void IntersectionRect(int x, int y, int w, int h)
{
Rect rect = new Rect(x, y, w, h);
Rect norm = rect.Normalize();
// Intersection with self and offset-variants
Assert.AreEqual(norm, rect.Intersection(rect));
Assert.AreEqual(new Rect(norm.X + 1, norm.Y , norm.W - 1, norm.H ), rect.Intersection(rect.Offset(1, 0)));
Assert.AreEqual(new Rect(norm.X , norm.Y , norm.W - 1, norm.H ), rect.Intersection(rect.Offset(-1, 0)));
Assert.AreEqual(new Rect(norm.X , norm.Y + 1, norm.W , norm.H - 1), rect.Intersection(rect.Offset(0, 1)));
Assert.AreEqual(new Rect(norm.X , norm.Y , norm.W , norm.H - 1), rect.Intersection(rect.Offset(0, -1)));
// Intersection with corners
Assert.AreEqual(new Rect(rect.TopLeft.X , rect.TopLeft.Y , 1, 1), rect.Intersection(rect.TopLeft.X - 1 , rect.TopLeft.Y - 1 , 2, 2));
Assert.AreEqual(new Rect(rect.TopRight.X - 1 , rect.TopRight.Y , 1, 1), rect.Intersection(rect.TopRight.X - 1 , rect.TopRight.Y - 1 , 2, 2));
Assert.AreEqual(new Rect(rect.BottomLeft.X , rect.BottomLeft.Y - 1 , 1, 1), rect.Intersection(rect.BottomLeft.X - 1 , rect.BottomLeft.Y - 1 , 2, 2));
Assert.AreEqual(new Rect(rect.BottomRight.X - 1, rect.BottomRight.Y - 1, 1, 1), rect.Intersection(rect.BottomRight.X - 1, rect.BottomRight.Y - 1, 2, 2));
// Non-intersection
Assert.AreEqual(0, rect.Intersection(rect.Offset(MathF.Abs(rect.W), 0)).Area);
Assert.AreEqual(0, rect.Intersection(rect.Offset(-MathF.Abs(rect.W), 0)).Area);
Assert.AreEqual(0, rect.Intersection(rect.Offset(0, MathF.Abs(rect.H))).Area);
Assert.AreEqual(0, rect.Intersection(rect.Offset(0, -MathF.Abs(rect.H))).Area);
}