message: BF: Stack overflow generating 3d attachment tiles.
diff: @@ -217,7 +217,7 @@ export namespace Attachments {
  const QUERY_SHEET_TILE_PIXELS: number = 512;
  abstract class AttachmentTileLoader extends TileLoader {
  - public abstract get is3d(): boolean;
  + public abstract get is3dAttachment(): boolean;
  public tileRequiresLoading(_params: Tile.Params): boolean { return true; }
  public async getChildrenProps(_parent: Tile): Promise<TileProps[]> { assert(false); return Promise.resolve([]); }
  public async loadTileContents(_missing: MissingNodes): Promise<void> {
  @@ -239,7 +239,7 @@ export namespace Attachments {
  public get maxDepth() { return 1; }
  public get viewFlagOverrides() { return this._viewFlagOverrides; }
  - public get is3d(): boolean { return false; }
  + public get is3dAttachment(): boolean { return false; }
  }
  class TileLoader3d extends AttachmentTileLoader {
  @@ -256,7 +256,7 @@ export namespace Attachments {
  public get maxDepth() { return 32; }
  public get viewFlagOverrides() { return TileLoader3d._viewFlagOverrides; }
  - public get is3d(): boolean { return true; }
  + public get is3dAttachment(): boolean { return true; }
  }
  /** An extension of Tile specific to rendering 2d attachments. */
  @@ -567,7 +567,7 @@ export namespace Attachments {
  public constructor(loader: AttachmentTileLoader, iModel: IModelConnection, modelId: Id64) {
  // The root tile set here does not matter, as it will be overwritten by the Tree2d and Tree3d constructors
  - const is3d = loader.is3d;
  + const isLeaf = loader.is3dAttachment;
  super(new TileTree.Params(
  modelId.value,
  {
  @@ -577,10 +577,10 @@ export namespace Attachments {
  high: { x: 0, y: 0, z: 0 },
  },
  maximumSize: 512,
  - isLeaf: !is3d,
  + isLeaf,
  },
  iModel,
  - is3d,
  + false, // NB: The attachment is 3d. The attachment tiles are 2d.
  loader,
  Transform.createIdentity(),
  undefined,
  