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); }
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))); } }