Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9a99638
reprojectGeom in TerrainDrapeTool
eringram Sep 30, 2025
bc6dfe1
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Oct 31, 2025
6581b54
test
eringram Nov 12, 2025
726f2da
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 13, 2025
38cbb7e
Debugging
eringram Nov 14, 2025
0466279
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 17, 2025
af24116
Use both tree.iModelTransform & tile.transformToRoot in loadGeometryF…
eringram Nov 17, 2025
cf341ee
Clean up
eringram Nov 18, 2025
f325a61
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 18, 2025
75beed2
Clean up
eringram Nov 18, 2025
266e355
extract-api
eringram Nov 18, 2025
94897a1
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 19, 2025
f24ff7e
Unit test WIP and use vitest mocking
eringram Nov 20, 2025
5e7bf53
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 20, 2025
2f324cf
Unit test WIP
eringram Nov 21, 2025
4c19670
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 21, 2025
6f960ca
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 24, 2025
5dccce9
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Nov 26, 2025
c514eba
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Dec 1, 2025
b8832cd
Add child tile in test WIP
eringram Dec 1, 2025
c5ab5b4
Undo test changes
eringram Dec 1, 2025
b38ee7e
Merge branch 'master' into eringram/reprojectgeometry-bugfix
eringram Dec 1, 2025
7a783e1
Rush change
eringram Dec 1, 2025
b238836
Merge branch 'eringram/reprojectgeometry-bugfix' of https://github.co…
eringram Dec 1, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion common/api/core-frontend.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -8430,7 +8430,7 @@ export class RealityTile extends Tile {
selectSecondaryTiles(_args: TileDrawArgs, _context: TraversalSelectionContext): void;
// @internal (undocumented)
setContent(content: RealityTileContent): void;
// @internal (undocumented)
// @internal
readonly transformToRoot?: Transform;
// @internal (undocumented)
readonly tree: RealityTileTree;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"changes": [
{
"packageName": "@itwin/core-frontend",
"comment": "",
"type": "none"
}
],
"packageName": "@itwin/core-frontend"
}
1 change: 1 addition & 0 deletions core/frontend/src/internal/tile/RealityModelTileTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,7 @@ class RealityModelTileLoader extends RealityTileLoader {
const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;
if (foundChild.transform) {
const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);
// Accumulate tile's transform to apply it to this tile's children
transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;
}

Expand Down
8 changes: 7 additions & 1 deletion core/frontend/src/internal/tile/RealityTileLoader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,13 @@ export abstract class RealityTileLoader {
if (reader)
reader.defaultWrapMode = GltfWrapMode.ClampToEdge;

const geom = reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform);
let transform = tile.tree.iModelTransform;
if (tile.transformToRoot) {
transform = transform.multiplyTransformTransform(tile.transformToRoot);
}

const geom = reader?.readGltfAndCreateGeometry(transform);
// See RealityTileTree.reprojectAndResolveChildren for how reprojectionTransform is calculated
const xForm = tile.reprojectionTransform;
if (tile.tree.reprojectGeometry && geom?.polyfaces && xForm) {
const polyfaces = geom.polyfaces.map((pf) => pf.cloneTransformed(xForm));
Expand Down
4 changes: 3 additions & 1 deletion core/frontend/src/tile/RealityTile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,9 @@ const scratchFrustum = new Frustum();
* @public
*/
export class RealityTile extends Tile {
/** @internal */
/** Transform to go from tile's local coordinate system to the root tile's corodinate system.
* @see [[RealityModelTileLoader.findTileInJson]] to see how the transformToRoot is calculated.
* @internal */
public readonly transformToRoot?: Transform;
/** @internal */
public readonly additiveRefinement?: boolean;
Expand Down
1 change: 1 addition & 0 deletions core/frontend/src/tile/RealityTileTree.ts
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,7 @@ export class RealityTileTree extends TileTree {

const reprojectedCoords = response.iModelCoords;
const dbToRoot = expectDefined(rootToDb.inverse());
// Interpolate between the original and reprojected points
const getReprojectedPoint = (original: Point3d, reprojectedXYZ: XYZProps) => {
scratchPoint.setFromJSON(reprojectedXYZ);
const cartesianDistance = this.cartesianRange.distanceToPoint(scratchPoint);
Expand Down
Loading