A tiled facade run is made of many tiles, so a caller reloading one should not have to recompute each tile's frame by hand. This module derives site_origin and jobs from the run's saved AreaSchedule, using the same computation run_area used to anchor each tile when it submitted it, so a schedule-derived tile_origin cannot drift from the one the live submission used.

tile_origin_of

Python
tile_origin_of(schedule: 'AreaSchedule', job_id: str) -> Tuple[float, float]

Return the (lon, lat) of a job's tile south-west corner.

This is the same computation run_area used to anchor that tile when it submitted it.

Parameters:

NameTypeDescriptionDefault
scheduleAreaScheduleThe saved schedule of a tiled run.required
job_idstrA job id from schedule.jobs.required

Returns:

TypeDescription
tuple of float(lon, lat) of the tile's south-west corner.

Raises:

TypeDescription
ValueErrorIf job_id is not one of the values of schedule.jobs, or if schedule.polygon has no usable origin.

jobs_from_schedule

Python
jobs_from_schedule(
schedule: "AreaSchedule",
) -> Tuple[Tuple[float, float], List["FacadeLayoutJobSpec"]]

Return (site_origin, jobs) for every job a saved tiled run submitted.

Each job's building ids come from schedule.batch_membership. It is None on an untiled or non-facade schedule, and each job's active_ids is then None too, which synthesize_facade_layout reads as "every building". Jobs follow the sorted order of the schedule's keys, so the jobs list is deterministic.

Parameters:

NameTypeDescriptionDefault
scheduleAreaScheduleThe saved schedule of a tiled run.required

Returns:

TypeDescription
tuplesite_origin as (lon, lat), and the list of FacadeLayoutJobSpec, one per scheduled job.

Raises:

TypeDescription
ValueErrorIf schedule.polygon has no usable origin.

apply_site_frame_shift

Python
apply_site_frame_shift(
layout: "FacadeLayout", schedule: "AreaSchedule"
) -> None

Move a schedule-derived rebuild from its tile frames into the site frame.

A rebuild made with schedule= comes back with each job's frames in that tile's own local frame. The merged SurfaceColumns of the live run is in the site frame, so this adds each job's tile south-west offset to its coordinates. Without this step attach_values refuses every tiled surface.

frame.origin, job.points and job.cell_tris are shifted. Axes and normals are directions and are unaffected by a translation.

Parameters:

NameTypeDescriptionDefault
layoutFacadeLayoutThe rebuilt layout. Its jobs are modified in place.required
scheduleAreaScheduleThe saved schedule of the tiled run the layout was rebuilt from.required

Raises:

TypeDescription
ValueErrorIf a job of layout is not in schedule.