当前位置: 首页>>代码示例>>C#>>正文


C# Rect.Intersection方法代码示例

本文整理汇总了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;
		}
开发者ID:swtrse,项目名称:duality,代码行数:47,代码来源:Camera.cs

示例2: Intersection

 public static Rect Intersection(Rect rect1, Rect rect2)
 {
     return rect1.Intersection(rect2);
 }
开发者ID:KonstantinKolesnik,项目名称:Typhoon,代码行数:4,代码来源:Rect.cs

示例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;
        }
开发者ID:priyanshus1,项目名称:duality,代码行数:54,代码来源:Camera.cs

示例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);
        }
开发者ID:gitMaxim,项目名称:duality,代码行数:24,代码来源:RectTest.cs


注:本文中的Rect.Intersection方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。