コード例 #1
0
        private WriteableBitmap ReadCroppedImage()
        {
            string pathForCrop = this.GetPathForCrop();

            using (IsolatedStorageFile storeForApplication = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream storageFileStream1 = storeForApplication.OpenFile(pathForCrop, (FileMode)3, (FileAccess)1))
                {
                    int num1 = 0;
                    int num2 = 0;
                    if (this._currentEffects.CropRect != null)
                    {
                        num1 = this._currentEffects.CropRect.Width;
                        num2 = this._currentEffects.CropRect.Height;
                    }
                    BitmapImage bitmapImage = new BitmapImage();
                    Rect        fit         = RectangleUtils.ResizeToFit(new Rect(new Point(), this.ViewportSize), new Size((double)num1, (double)num2));
                    // ISSUE: explicit reference operation
                    int height = (int)((Rect)@fit).Height;
                    bitmapImage.DecodePixelHeight = height;
                    IsolatedStorageFileStream storageFileStream2 = storageFileStream1;
                    ((BitmapSource)bitmapImage).SetSource((Stream)storageFileStream2);
                    return(new WriteableBitmap((BitmapSource)bitmapImage));
                }
            }
        }
コード例 #2
0
        public void PutNextRectangle_ShouldPlaceRectanglesTightly_WhenManyRectanglesWithDifferentSize(
            int rectanglesCount)
        {
            var sizes = new List <Size>();
            var rnd   = new Random();

            for (var i = 0; i < rectanglesCount; i++)
            {
                var width  = rnd.Next(10);
                var height = rnd.Next(10);
                sizes.Add(new Size(width, height));
            }

            rectangles = sizes.Select(s => layouter.PutNextRectangle(s)).ToList();

            foreach (var rectangle in rectangles)
            {
                foreach (var closerRectangle in RectangleUtils.GetRectanglesThatCloserToPoint(
                             config.Center, rectangle, 1))
                {
                    rectangles
                    .Where(r => r != rectangle)
                    .Select(r => RectangleUtils.RectanglesAreIntersected(r, closerRectangle))
                    .Should()
                    .Contain(true);
                }
            }
        }
コード例 #3
0
        public float Sample(Vector2 uv)
        {
            var subUv    = RectangleUtils.CalculateSubPosition(_intensityFieldFigureWithUv.Uv, uv);
            var toReturn = _intensityFieldFigureWithUv.FieldFigure.GetPixelWithUv(subUv);

            return(toReturn);
        }
コード例 #4
0
        private GameObject CreateShapeObject(Mesh mesh, HeightPyramidSegmentShapeTemplate shapeTemplate, string name)
        {
            var go           = new GameObject(name);
            var flatStartPos = shapeTemplate.FlatPosition;

            go.transform.localPosition = new Vector3(flatStartPos.x, 0, flatStartPos.y);
            var flatSize = shapeTemplate.FlatSize;

            go.transform.localScale = new Vector3(flatSize.x, 1, flatSize.y);
            var renderer = go.AddComponent <MeshRenderer>();

            var segmentUvs = RectangleUtils.CalculateSubelementUv(_perLevelConfiguration.FloorTextureZeroCenteredWorldArea,
                                                                  new MyRectangle(flatStartPos.x, flatStartPos.y, flatSize.x, flatSize.y));

            renderer.material = new Material(Shader.Find("Custom/ETerrain/Ground"));
            renderer.material.SetVector("_SegmentCoords", segmentUvs.ToVector4());

            var segmentLevelUvs = RectangleUtils.CalculateSubelementUv(_perLevelConfiguration.FloorTextureZeroCenteredWorldArea.SubRectangle(new MyRectangle(1 / 6.0f, 1 / 6.0f, 4 / 6.0f, 4 / 6.0f)),
                                                                       new MyRectangle(flatStartPos.x, flatStartPos.y, flatSize.x, flatSize.y));

            renderer.material.SetVector("_SegmentLevelCoords", segmentLevelUvs.ToVector4());

            var mf = go.AddComponent <MeshFilter>();

            mf.sharedMesh = mesh;
            return(go);
        }
コード例 #5
0
        private Vector2 CalculateFollowerMarginUv(WeldSideSource biggerTerrain, WeldSideSource smallerTerrain)
        {
            var biggerSideRange = new Vector2(0, 0);

            if (biggerTerrain.SideType.GetOrientation() == WeldOrientation.Horizontal)
            {
                biggerSideRange = RectangleUtils.CalculateSubPosition(biggerTerrain.Terrain.DetailGlobalArea,
                                                                      biggerTerrain.Terrain.UvCoordsPositions2D).XRange;
            }
            else
            {
                biggerSideRange = RectangleUtils.CalculateSubPosition(biggerTerrain.Terrain.DetailGlobalArea,
                                                                      biggerTerrain.Terrain.UvCoordsPositions2D).YRange;
            }

            var smallerSideRange = new Vector2(0, 0);

            if (smallerTerrain.SideType.GetOrientation() == WeldOrientation.Horizontal)
            {
                smallerSideRange = RectangleUtils.CalculateSubPosition(smallerTerrain.Terrain.DetailGlobalArea,
                                                                       smallerTerrain.Terrain.UvCoordsPositions2D).XRange;
            }
            else
            {
                smallerSideRange = RectangleUtils.CalculateSubPosition(smallerTerrain.Terrain.DetailGlobalArea,
                                                                       smallerTerrain.Terrain.UvCoordsPositions2D).YRange;
            }

            var uv = VectorUtils.CalculateSubelementUv(biggerSideRange, smallerSideRange);

            Preconditions.Assert(uv.IsNormalized(),
                                 $"E76 Margin uv is not normalized: {uv}, biggerSideRange:{biggerSideRange}, smallerSideRange {smallerSideRange}");
            return(uv);
        }
コード例 #6
0
        private async Task <double?> VerticalLabelPriceSearch(RecognitionResult recognitionResult, Metadata imageMetadata, string[] patterns)
        {
            Dictionary <string, string> rawExpenses = new Dictionary <string, string>();

            List <TextRectangle> rectangles = recognitionResult.Lines
                                              .Select((line) => RectangleUtils.FromPointsArray(line))
                                              .ToList();

            // Zone 0
            var map        = new RectanglesZoneMap(rectangles, imageMetadata);
            var priceRegex = new Regex(@"^\s*(\W\D){0,1}\s*[\d,]+\.[\d]{2}\s*$", RegexOptions.IgnoreCase);

            bool found     = false;
            int  startingX = -1;
            int  startingY = -1;

            for (int i = 0; i < map.VerticalZoneCount; i++)
            {
                for (int k = 0; k < map.HorizontalZoneCount; k++)
                {
                    if (TestForPriceLabel(map.MapMatrix[i, k], patterns))
                    {
                        found     = true;
                        startingX = k;
                        startingY = i;
                        break;
                    }
                }
            }

            if (found)
            {
                int offsetX = startingX + 4;
                if (offsetX >= map.HorizontalZoneCount)
                {
                    offsetX = map.HorizontalZoneCount - 1;
                }

                for (int cY = startingY; cY < map.VerticalZoneCount; cY++)
                {
                    for (int cX = startingX; cX < offsetX; cX++)
                    {
                        var cleanStr = map.MapMatrix[cY, cX].Trim().Replace(" ", "");
                        if (priceRegex.IsMatch(cleanStr))
                        {
                            try {
                                var value = double.Parse(cleanStr, System.Globalization.NumberStyles.Currency, CultureInfo.GetCultureInfo("si-LK"));
                                return(value);
                            } catch (Exception e) {
                                Debug.Print(e.StackTrace);
                                break;
                            }
                        }
                    }
                }
            }

            return(null);
        }
コード例 #7
0
        private async Task <DateTime?> VerticalLabelDateSearch(RecognitionResult recognitionResult, Metadata imageMetadata, string[] patterns)
        {
            Dictionary <string, string> rawExpenses = new Dictionary <string, string>();

            List <TextRectangle> rectangles = recognitionResult.Lines
                                              .Select((line) => RectangleUtils.FromPointsArray(line))
                                              .ToList();

            // Zone 0
            var map       = new RectanglesZoneMap(rectangles, imageMetadata);
            var dateRegex = new Regex(@"^\s*\d{2}\/\d{2}\/\d{4}\s*$", RegexOptions.IgnoreCase);

            bool found     = false;
            int  startingX = -1;
            int  startingY = -1;

            for (int i = 0; i < map.VerticalZoneCount; i++)
            {
                for (int k = 0; k < map.HorizontalZoneCount; k++)
                {
                    if (TestForPriceLabel(map.MapMatrix[i, k], patterns))
                    {
                        found     = true;
                        startingX = k;
                        startingY = i;
                        break;
                    }
                }
            }

            if (found)
            {
                int offsetX = startingX + 4;
                if (offsetX >= map.HorizontalZoneCount)
                {
                    offsetX = map.HorizontalZoneCount - 1;
                }

                for (int cY = startingY; cY < map.VerticalZoneCount; cY++)
                {
                    for (int cX = startingX; cX < offsetX; cX++)
                    {
                        var cleanStr = map.MapMatrix[cY, cX].Trim().Replace(" ", "");
                        if (dateRegex.IsMatch(cleanStr))
                        {
                            try {
                                var value = Convert.ToDateTime(cleanStr);
                                return(value);
                            } catch (Exception e) {
                                Debug.Print(e.StackTrace);
                                break;
                            }
                        }
                    }
                }
            }

            return(null);
        }
コード例 #8
0
        public static BitmapImage CreateSizedBitmap(FrameworkElement container, Uri uri, bool backgroundCreation = true)
        {
            Dictionary <string, string> queryString = UriExtensions.ParseQueryString(uri);
            double result1 = 0.0;
            double result2 = 0.0;

            if (queryString.ContainsKey("wh"))
            {
                string[] strArray = queryString["wh"].Split((char[])new char[1] {
                    '_'
                });
                if (strArray.Length >= 2)
                {
                    double.TryParse(strArray[0], out result1);
                    double.TryParse(strArray[1], out result2);
                }
            }
            BitmapImage bitmapImage1;

            if (backgroundCreation)
            {
                BitmapImage bitmapImage2 = new BitmapImage();
                int         num1         = 18;
                bitmapImage2.CreateOptions = ((BitmapCreateOptions)num1);
                int num2 = 1;
                bitmapImage2.DecodePixelType = ((DecodePixelType)num2);
                bitmapImage1 = bitmapImage2;
            }
            else
            {
                BitmapImage bitmapImage2 = new BitmapImage();
                int         num1         = 2;
                bitmapImage2.CreateOptions = ((BitmapCreateOptions)num1);
                int num2 = 1;
                bitmapImage2.DecodePixelType = ((DecodePixelType)num2);
                bitmapImage1 = bitmapImage2;
            }
            if (container.Height > 0.0 && container.Width > 0.0)
            {
                if (result1 == 0.0 || result2 == 0.0)
                {
                    bitmapImage1.DecodePixelHeight = ((int)container.Height);
                }
                else
                {
                    Rect fill = RectangleUtils.ResizeToFill(new Rect(0.0, 0.0, container.Width, container.Height), new Size(result1, result2));
                    // ISSUE: explicit reference operation
                    bitmapImage1.DecodePixelWidth = ((int)((Rect)@fill).Width);
                    // ISSUE: explicit reference operation
                    bitmapImage1.DecodePixelHeight = ((int)((Rect)@fill).Height);
                }
            }
            else
            {
                bitmapImage1.DecodePixelHeight = 300;
            }
            return(bitmapImage1);
        }
コード例 #9
0
        public void GetRectanglesThatCloserToPoint_ShouldBeEmpty_WhenPointOnRectangleSide()
        {
            var point     = new Point(2, 0);
            var rectangle = new Rectangle(new Point(0, 0), new Size(3, 2));

            var result = RectangleUtils.GetRectanglesThatCloserToPoint(point, rectangle, 1);

            result.Should().BeEmpty();
        }
コード例 #10
0
        public void GetRectangleDiagonal_ShouldReturnDiagonal_OnRectangle(
            int width, int height, double expectedResult)
        {
            var rectangle = new Rectangle(new Point(0, 0), new Size(width, height));

            var diagonal = RectangleUtils.GetRectangleDiagonal(rectangle);

            diagonal.Should().BeApproximately(expectedResult, 1e-5);
        }
コード例 #11
0
        public List <Vector2> Generate(MyRectangle generationArea, float generationCount,
                                       float exclusionRadius, int maxTries, int maxPerGridCount, IIntensitySamplingProvider intensityProvider)
        {
            var random = new UnsafeRandomProvider(); //todo!
            var offsetGenerationArea = new MyRectangle(0, 0, generationArea.Width, generationArea.Height);

            float cellSize = exclusionRadius;

            var width  = generationArea.Width;
            var height = generationArea.Height;

            var grid = new CountingGenerationGrid(
                cellSize,
                new IntVector2(Mathf.CeilToInt(width / cellSize), Mathf.CeilToInt(height / cellSize))
                );

            var processList    = new GenerationRandomQueue <Vector2>();
            var acceptedPoints = new List <Vector2>(1000);

            var firstPoint = new Vector2(random.Next(0, width), random.Next(0, height));

            processList.Add(firstPoint);
            acceptedPoints.Add(firstPoint);
            grid.Increment(firstPoint);


            int tryCount = 0;

            while (!processList.Empty)
            {
                var point = processList.RandomPop();
                for (int i = 0; i < generationCount; i++)
                {
                    Vector2 newPoint = GenerateRandomPointAround(point, exclusionRadius, random);

                    if (offsetGenerationArea.Contains(newPoint))
                    {
                        var maxPointsInGrid =
                            intensityProvider.Sample(
                                RectangleUtils.CalculateSubelementUv(offsetGenerationArea, newPoint)) *
                            maxPerGridCount;
                        if (grid.Retrive(newPoint) < maxPointsInGrid)
                        {
                            processList.Add(newPoint);
                            acceptedPoints.Add(newPoint);
                            grid.Increment(newPoint);
                        }
                    }
                    tryCount++;
                }
                if (tryCount > maxTries)
                {
                    break;
                }
            }
            return(acceptedPoints.Select(c => c + generationArea.DownLeftPoint).ToList());
        }
コード例 #12
0
        public void RectanglesAreIntersected_ShouldReturnFalse_WhenRectanglesAreNotIntersected()
        {
            var firstRectangle  = new Rectangle(new Point(3, 3), new Size(3, 2));
            var secondRectangle = new Rectangle(new Point(0, 0), new Size(3, 2));

            RectangleUtils
            .RectanglesAreIntersected(firstRectangle, secondRectangle)
            .Should()
            .BeFalse();
        }
コード例 #13
0
        public void RectanglesAreIntersected_ShouldReturnTrue_WhenTheyPlacedAsACross()
        {
            var firstRectangle  = new Rectangle(new Point(1, 0), new Size(1, 3));
            var secondRectangle = new Rectangle(new Point(0, 1), new Size(3, 1));

            RectangleUtils
            .RectanglesAreIntersected(firstRectangle, secondRectangle)
            .Should()
            .BeTrue();
        }
コード例 #14
0
        public void RectanglesAreIntersected_ShouldReturnTrue_WhenOneInsideTheOther()
        {
            var firstRectangle  = new Rectangle(new Point(1, 1), new Size(1, 1));
            var secondRectangle = new Rectangle(new Point(0, 0), new Size(3, 3));

            RectangleUtils
            .RectanglesAreIntersected(firstRectangle, secondRectangle)
            .Should()
            .BeTrue();
        }
コード例 #15
0
        public void RectanglesAreIntersected_ShouldReturnTrue_WhenRectanglesAreIntersectedInTheCorner()
        {
            var firstRectangle  = new Rectangle(new Point(1, 1), new Size(3, 2));
            var secondRectangle = new Rectangle(new Point(0, 0), new Size(3, 2));

            RectangleUtils
            .RectanglesAreIntersected(firstRectangle, secondRectangle)
            .Should()
            .BeTrue();
        }
コード例 #16
0
        public void GetRectanglesThatCloserToPoint_ShouldNotReturnTheSameRectangle_WhenIntersectsPointCoordinate()
        {
            var point             = new Point(0, 0);
            var size              = new Size(2, 1);
            var rectangle         = new Rectangle(new Point(0, 2), size);
            var expectedRectangle = new Rectangle(new Point(0, 1), size);

            var result = RectangleUtils.GetRectanglesThatCloserToPoint(point, rectangle, 1);

            result.Should().OnlyContain(r => r == expectedRectangle);
        }
コード例 #17
0
        public void Start()
        {
            var msw = new MyStopWatch();

            msw.StartSegment("Loading");
            var loader = new HabitatMapOsmLoader();
            var fields = loader.Load(@"C:\inz\osm\map.osm");

            msw.StartSegment("Translating");
            var translator = new HabitatFieldPositionTranslator(GeoCoordsToUnityTranslator.DefaultTranslator);

            fields = fields.Select(c => translator.Translate(c)).ToList();

            msw.StartSegment("MapCreating");
            var map = HabitatMap.Create(
                new MyRectangle(62 * 720, 67 * 720, 8 * 720, 8 * 720),
                new Vector2(90 * 8, 90 * 8),
                fields,
                HabitatType.NotSpecified,
                HabitatTypePriorityResolver.Default);


            GeoCoordsToUnityTranslator translator2 = GeoCoordsToUnityTranslator.DefaultTranslator;
            var         geoPos1  = new GeoCoordinate(49.600f, 19.543f);
            var         lifePos1 = translator2.TranslateToUnity(geoPos1);
            var         geoPos2  = new GeoCoordinate(49.610f, 19.552f);
            var         lifePos2 = translator2.TranslateToUnity(geoPos2);
            MyRectangle territoryUsedToCreateStainTexture =
                new MyRectangle(lifePos1.x, lifePos1.y, lifePos2.x - lifePos1.x, lifePos2.y - lifePos1.y);

            territoryUsedToCreateStainTexture = RectangleUtils.CalculateSubPosition(territoryUsedToCreateStainTexture,
                                                                                    new MyRectangle(0.65f, 0.65f, 0.1f, 0.1f));

            var treeX         = map.QueryMap(territoryUsedToCreateStainTexture);
            var parentObjectX = new GameObject($"MAGA");

            treeX.QueryAll()
            .ForEach(c => HabitatMapOsmLoaderDebugObject.CreateDebugHabitatField(c.Field, 0.01f, parentObjectX));

            msw.StartSegment("MapQuerying");
            for (int x = 0; x < 8; x++)
            {
                for (int y = 0; y < 8; y++)
                {
                    var tree = map.QueryMap(
                        new MyRectangle(62 * 720 + x * 720, 67 * 720 + y * 720, 720, 720));
                    var parentObject = new GameObject($"x:{x} y:{y}");
                    tree.QueryAll()
                    .ForEach(c => HabitatMapOsmLoaderDebugObject.CreateDebugHabitatField(c.Field, 0.01f,
                                                                                         parentObject));
                }
            }
            Debug.Log("T64: " + msw.CollectResults());
        }
コード例 #18
0
        public void GetClosestRectangleThatDoesNotIntersectWithOthers_ShouldReturnClosestPossibleRectangle()
        {
            var possibleLocation = new Point(-5, 5);
            var size             = new Size(3, 2);
            var center           = new Point(0, 0);
            var expectedResult   = new Rectangle(new Point(-3, 0), size);

            var result = RectangleUtils.GetClosestRectangleThatDoesNotIntersectWithOthers(
                possibleLocation, size, center, new List <Rectangle>());

            result.Should().Be(expectedResult);
        }
コード例 #19
0
ファイル: GeometryUtilsTests.cs プロジェクト: shemloft/di
        public void BuildConvexHull_ShouldReturnRectangleCorners_OnOneRectangle()
        {
            var rectangle  = new Rectangle(new Point(1, 1), new Size(3, 1));
            var rectangles = new List <Rectangle> {
                rectangle
            };
            var expectedPoints = RectangleUtils.GetRectangleCorners(rectangle);

            var result = GeometryUtils.BuildConvexHull(rectangles);

            result.Should().BeEquivalentTo(expectedPoints);
        }
コード例 #20
0
        public static BitmapImage CreateSizedBitmap(FrameworkElement container, Uri uri, bool backgroundCreation = true)
        {
            Dictionary <string, string> queryString = uri.ParseQueryString();
            double result1 = 0.0;
            double result2 = 0.0;

            if (queryString.ContainsKey("wh"))
            {
                string[] strArray = queryString["wh"].Split('_');
                if (strArray.Length >= 2)
                {
                    double.TryParse(strArray[0], out result1);
                    double.TryParse(strArray[1], out result2);
                }
            }
            BitmapImage bitmapImage;

            if (backgroundCreation)
            {
                bitmapImage = new BitmapImage()
                {
                    CreateOptions   = BitmapCreateOptions.DelayCreation | BitmapCreateOptions.BackgroundCreation,
                    DecodePixelType = DecodePixelType.Logical
                }
            }
            ;
            else
            {
                bitmapImage = new BitmapImage()
                {
                    CreateOptions   = BitmapCreateOptions.DelayCreation,
                    DecodePixelType = DecodePixelType.Logical
                }
            };
            if (container.Height > 0.0 && container.Width > 0.0)
            {
                if (result1 == 0.0 || result2 == 0.0)
                {
                    bitmapImage.DecodePixelHeight = (int)container.Height;
                }
                else
                {
                    Rect fill = RectangleUtils.ResizeToFill(new Rect(0.0, 0.0, container.Width, container.Height), new Size(result1, result2));
                    bitmapImage.DecodePixelWidth  = (int)fill.Width;
                    bitmapImage.DecodePixelHeight = (int)fill.Height;
                }
            }
            else
            {
                bitmapImage.DecodePixelHeight = 300;
            }
            return(bitmapImage);
        }
コード例 #21
0
        private MyRectangle GetAlignedUv(MyRectangle queryArea,
                                         TerrainCardinalResolution resolution)
        {
            float alignLength = TerrainDescriptionConstants.DetailCellSizesPerResolution[resolution];
            var   alignedBox  = new MyRectangle(
                Mathf.FloorToInt(queryArea.X / alignLength) * alignLength,
                Mathf.FloorToInt(queryArea.Y / alignLength) * alignLength,
                alignLength,
                alignLength
                );

            return(RectangleUtils.CalculateSubelementUv(alignedBox, queryArea));
        }
コード例 #22
0
        public void GetRectangleSides_ShouldReturnCorrectSegments_OnRectangle()
        {
            var rectangle = new Rectangle(new Point(0, 0), new Size(4, 3));
            var sides     = new List <Segment>
            {
                new Segment(new Point(0, 0), new Point(4, 0)),
                new Segment(new Point(0, 0), new Point(0, 3)),
                new Segment(new Point(4, 0), new Point(4, 3)),
                new Segment(new Point(0, 3), new Point(4, 3)),
            };

            var result = RectangleUtils.GetRectangleSides(rectangle);

            result.Should().BeEquivalentTo(sides);
        }
コード例 #23
0
        public List <Vector2> Generate(MyRectangle generationArea, int generationCount, float maxTries,
                                       float exclusionRadius, bool collisionsAreChecked, IIntensitySamplingProvider intensitySamplingProvider)
        {
            var random = new UnsafeRandomProvider(); //todo!
            var offsetGenerationArea = new MyRectangle(0, 0, generationArea.Width, generationArea.Height);

            float cellSize = exclusionRadius / Mathf.Sqrt(2);

            var width  = generationArea.Width;
            var height = generationArea.Height;

            var grid = new SingleElementGenerationGrid(
                cellSize,
                Mathf.CeilToInt(width / cellSize), Mathf.CeilToInt(height / cellSize),
                exclusionRadius
                );

            var acceptedPoints = new List <Vector2>(generationCount);

            int generatedPointsCount = 0;
            int triesCount           = 0;

            while (generatedPointsCount < generationCount && triesCount < maxTries)
            {
                var randomPoint = new Vector2(random.Next(0, width), random.Next(0, height));

                var randomPointValue = random.NextValue;
                var intensity        =
                    intensitySamplingProvider.Sample(
                        RectangleUtils.CalculateSubelementUv(offsetGenerationArea, randomPoint));
                if (intensity >= randomPointValue)
                {
                    if (!collisionsAreChecked || !grid.Collides(randomPoint))
                    {
                        if (collisionsAreChecked)
                        {
                            grid.Set(randomPoint);
                        }

                        acceptedPoints.Add(randomPoint);
                        generatedPointsCount++;
                    }
                }

                triesCount++;
            }
            return(acceptedPoints.Select(c => c + generationArea.DownLeftPoint).ToList());
        }
コード例 #24
0
        public void GetPossibleRectangles_ShouldReturnRectanglesWithFourDifferentStartPoints_OnPointAndSize()
        {
            var point = new Point(0, 0);
            var size  = new Size(2, 1);
            var possibleRectangles = new[]
            {
                new Rectangle(point, size),
                new Rectangle(new Point(-2, 0), size),
                new Rectangle(new Point(-2, -1), size),
                new Rectangle(new Point(0, -1), size),
            };

            var result = RectangleUtils.GetPossibleRectangles(point, size);

            result.Should().BeEquivalentTo(possibleRectangles);
        }
コード例 #25
0
        public void PutNextRectangle_RectanglesShouldNotIntersect_WhenTwoRectangles()
        {
            var firstSize  = new Size(2, 1);
            var secondSize = new Size(3, 4);

            var firstRectangle  = layouter.PutNextRectangle(firstSize);
            var secondRectangle = layouter.PutNextRectangle(secondSize);

            rectangles = new List <Rectangle> {
                firstRectangle, secondRectangle
            };

            RectangleUtils.RectanglesAreIntersected(firstRectangle, secondRectangle)
            .Should()
            .BeFalse();
        }
コード例 #26
0
        public Task <TerrainDescriptionOutput> Query(TerrainDescriptionQuery query)
        {
            var outDict = new Dictionary <TerrainDescriptionElementTypeEnum, TerrainDetailElementOutput>();

            foreach (var requestedDetail in query.RequestedElementDetails)
            {
                var requestedType = requestedDetail.Type;
                var alignedArea   = RetriveAlignedArea(query.QueryArea.DownLeftPoint, requestedDetail.Resolution);
                var uv            = RectangleUtils.CalculateSubelementUv(alignedArea, query.QueryArea);
                if (requestedType == TerrainDescriptionElementTypeEnum.HEIGHT_ARRAY)
                {
                    outDict.Add(requestedType, new TerrainDetailElementOutput()
                    {
                        TokenizedElement = new TokenizedTerrainDetailElement()
                        {
                            DetailElement = new TerrainDetailElement()
                            {
                                DetailArea = alignedArea,
                                Resolution = requestedDetail.Resolution,
                                Texture    = _heightTexture
                            },
                            Token = new TerrainDetailElementToken(alignedArea, requestedDetail.Resolution, requestedType, CornersMergeStatus.NOT_MERGED)
                        },
                        UvBase = uv.ToRectangle()
                    });
                }
                else
                {
                    outDict.Add(requestedType, new TerrainDetailElementOutput()
                    {
                        TokenizedElement = new TokenizedTerrainDetailElement()
                        {
                            DetailElement = new TerrainDetailElement()
                            {
                                DetailArea = alignedArea,
                                Resolution = requestedDetail.Resolution,
                                Texture    = _normalTexture
                            },
                            Token = new TerrainDetailElementToken(alignedArea, requestedDetail.Resolution, requestedType, CornersMergeStatus.NOT_MERGED)
                        },
                        UvBase = uv.ToRectangle()
                    });
                }
            }

            return(TaskUtils.MyFromResult(new TerrainDescriptionOutput(outDict)));
        }
コード例 #27
0
        public void GetRectanglesThatCloserToPoint_ShouldReturnCloserRectangles_OnRectangle(
            int x, int y, int dx, int dy)
        {
            var point              = new Point(0, 0);
            var size               = new Size(3, 2);
            var rectangle          = new Rectangle(new Point(x, y), size);
            var expectedRectangles = new[]
            {
                new Rectangle(new Point(dx, y), size),
                new Rectangle(new Point(x, dy), size),
                new Rectangle(new Point(dx, dy), size),
            };

            var result = RectangleUtils.GetRectanglesThatCloserToPoint(point, rectangle, 1);

            result.Should().BeEquivalentTo(expectedRectangles);
        }
コード例 #28
0
        public static void ResizeToFit(this Image image, Size photoSize, Size containerSize)
        {
            if (photoSize.Width <= 0.0 || photoSize.Height <= 0.0)
            {
                return;
            }
            Rect fill = RectangleUtils.ResizeToFill(containerSize, photoSize);
            Rect rect = new Rect(-fill.X, -fill.Y, containerSize.Width, containerSize.Height);

            image.Width  = fill.Width;
            image.Height = fill.Height;
            image.Margin = new Thickness(fill.X, fill.Y, 0.0, 0.0);
            image.Clip   = (Geometry) new RectangleGeometry()
            {
                Rect = rect
            };
        }
コード例 #29
0
        public void GetClosestRectangleThatDoesNotIntersectWithOthers_ShouldBeNull_WhenAllPossibleRectanglesIntersected()
        {
            var possibleLocation = new Point(0, 1);
            var size             = new Size(3, 2);
            var center           = new Point(0, 0);
            var rectangles       = new List <Rectangle>
            {
                new Rectangle(new Point(0, -1), new Size(7, 1)),
                new Rectangle(new Point(-6, 1), new Size(5, 3)),
                new Rectangle(new Point(-4, -2), new Size(3, 2)),
                new Rectangle(new Point(1, 1), new Size(3, 1))
            };

            var result = RectangleUtils.GetClosestRectangleThatDoesNotIntersectWithOthers(
                possibleLocation, size, center, rectangles);

            result.Should().BeNull();
        }
コード例 #30
0
        private SegmentInTexturePlacement CalculateSegmentPlacement(IntVector2 newSegmentPositionInGrid)
        {
            var uvs = RectangleUtils.CalculateSubelementUv(
                new MyRectangle(0, 0, _floorSlotsCount.X, _floorSlotsCount.Y),
                new MyRectangle(newSegmentPositionInGrid.X, newSegmentPositionInGrid.Y, 1, 1));

            var segmentPixels = new IntRectangle(
                Mathf.RoundToInt(uvs.X * _floorTextureSize.X),
                Mathf.RoundToInt(uvs.Y * _floorTextureSize.Y),
                Mathf.RoundToInt(uvs.Width * _floorTextureSize.X),
                Mathf.RoundToInt(uvs.Height * _floorTextureSize.Y)
                );

            return(new SegmentInTexturePlacement()
            {
                Pixels = segmentPixels,
                Uvs = uvs
            });
        }