Exemplo n.º 1
0
        public static TileSetJson GetRootTileSet(BoundingBox3D rootBounds, List <double> geometricErrors, string refine)
        {
            var extent_x = rootBounds.ExtentX();
            var extent_y = rootBounds.ExtentY();
            var extent_z = 100;

            var tileset = new TileSetJson
            {
                asset = new Asset()
                {
                    version = "1.0", generator = "i3dm.export"
                }
            };

            var box = new double[] { 0, 0, 0, extent_x / 2, 0.0, 0.0, 0.0, extent_y / 2, 0.0, 0.0, 0.0, extent_z };

            var boundingVolume = new Boundingvolume
            {
                box = box
            };

            var root = new Root
            {
                geometricError = geometricErrors[0],
                refine         = refine,
                transform      = DoubleArrayRounder.Round(GetRootTransform(rootBounds), 8),
                boundingVolume = boundingVolume
            };

            tileset.root = root;
            return(tileset);
        }
Exemplo n.º 2
0
        private static TileSetJson GetTileSet(BoundingBox3D rootBounds, List <TileInfo> tiles, List <double> geometricErrors)
        {
            var extent_x = rootBounds.ExtentX();
            var extent_y = rootBounds.ExtentY();
            var extent_z = 100;

            var tileset = new TileSetJson
            {
                asset = new Asset()
                {
                    version = "1.0", generator = "i3dm.export"
                }
            };

            var box = new double[] { 0, 0, 0, extent_x / 2, 0.0, 0.0, 0.0, extent_y / 2, 0.0, 0.0, 0.0, extent_z };

            var boundingVolume = new Boundingvolume
            {
                box = box
            };

            var root = new Root
            {
                geometricError = geometricErrors[0],
                refine         = "REPLACE",
                transform      = MathUtils.Round(GetRootTransform(rootBounds), 8),
                boundingVolume = boundingVolume
            };

            var centroid = rootBounds.GetCenter();
            var children = new List <Child>();

            foreach (var tile in tiles)
            {
                var child = new Child();
                child.geometricError = geometricErrors[1];
                child.content        = new Content()
                {
                    uri = tile.Filename
                };
                var tileTransform = tile.GetTransform(centroid);
                child.transform = MathUtils.Round(tileTransform, 8);
                var tileBounds = tile.Bounds;
                var bbChild    = new Boundingvolume();
                bbChild.box          = new double[] { 0, 0, 0, tileBounds.ExtentX() / 2, 0.0, 0.0, 0.0, tileBounds.ExtentY() / 2, 0.0, 0.0, 0.0, tileBounds.ExtentZ() / 2 };
                child.boundingVolume = bbChild;
                children.Add(child);
            }

            root.children = children;
            tileset.root  = root;
            return(tileset);
        }
        private double[] GetVolumeBox(double[] actualTilesetBox, double[] actualTransform)
        {
            var transform       = new double[] { actualTransform[12], actualTransform[13], actualTransform[14] };
            var bb              = new BoundingBox3D(actualTilesetBox);
            var transformback   = bb.TransformZToY();
            var from            = BoundingBoxCalculator.RotateXTranslate(transformback.FromPoint(), transform, Math.PI * -1 / 2);
            var to              = BoundingBoxCalculator.RotateXTranslate(transformback.ToPoint(), transform, Math.PI * -1 / 2);
            var bbox3d          = new BoundingBox3D((double)from.X, (double)from.Y, (double)from.Z, (double)to.X, (double)to.Y, (double)to.Z);
            var center          = bbox3d.GetCenter();
            var actualVolumeBox = new double[] { (double)center.X, (double)center.Y, (double)center.Z, (bbox3d.ExtentX() / 2), 0, 0, 0, bbox3d.ExtentY() / 2, 0, 0, 0, bbox3d.ExtentZ() / 2 };

            return(actualVolumeBox);
        }
        public void CalculcateBoundingBoxAllFeaturesFromBoundingVolumeBoxAndTransform()
        {
            var bbox3d            = new BoundingBox3D(1231256.4091099831, -4800453.896456448, 4000024.663498499, 1244883.5968566877, -4791281.918551793, 4012180.059993551);
            var center            = bbox3d.GetCenter();
            var expectedVolumeBox = new double[] { (double)center.X, (double)center.Y, (double)center.Z, (bbox3d.ExtentX() / 2), 0, 0, 0, bbox3d.ExtentY() / 2, 0, 0, 0, bbox3d.ExtentZ() / 2 };
            // expectedvolumebox: 1238070.0029833354,-4795867.907504121,4006102.3617460253,6813.593873352278,0,0,0,4585.98895232752,0,0,0,6077.698247526074

            var actualTransform  = new double[] { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1238070.0029833354, -4795867.9075041208, 4006102.3617460253, 1 };
            var actualTilesetBox = new double[] { 0.0, 0.0, 0.0, 6813.594, 0.0, 0.0, 0.0, 4585.989, 0.0, 0.0, 0.0, 6077.698 };

            var actualVolumeBox = GetVolumeBox(actualTilesetBox, actualTransform);

            Assert.IsTrue(actualVolumeBox.Length == expectedVolumeBox.Length);
            for (var i = 0; i < actualVolumeBox.Length; i++)
            {
                Assert.IsTrue(Math.Round(actualVolumeBox[i], 2).Equals(Math.Round(expectedVolumeBox[i], 2)));
            }
        }