feat/vtk-3d-view #7

Merged
gaozheng merged 301 commits from feat/vtk-3d-view into main 2026-06-27 18:43:52 +08:00
3 changed files with 11 additions and 1 deletions
Showing only changes of commit c06f9ea0f8 - Show all commits

View File

@ -88,7 +88,8 @@ void VtkSceneView::addCurtain(const geopro::core::Grid& grid, const geopro::core
la0 = std::min(la0, grid.lat[i]); la1 = std::max(la1, grid.lat[i]); la0 = std::min(la0, grid.lat[i]); la1 = std::max(la1, grid.lat[i]);
lo0 = std::min(lo0, grid.lon[i]); lo1 = std::max(lo1, grid.lon[i]); lo0 = std::min(lo0, grid.lon[i]); lo1 = std::max(lo1, grid.lon[i]);
} }
frame_ = std::make_shared<geopro::core::GeoLocalFrame>((la0 + la1) / 2.0, (lo0 + lo1) / 2.0); // 就地重锚共享 frame不换对象→ 同持此 frame 的底图层等随即一致对齐。
frame_->reanchor((la0 + la1) / 2.0, (lo0 + lo1) / 2.0);
frameAnchoredToData_ = true; frameAnchoredToData_ = true;
} }
auto curtain = geopro::render::buildCurtain(grid, cs, *frame_); auto curtain = geopro::render::buildCurtain(grid, cs, *frame_);

View File

@ -17,6 +17,13 @@ GeoLocalFrame::GeoLocalFrame(double lat0, double lon0)
mPerDegLon_(kMetersPerDegLonEquator * std::cos(lat0 * kPi / 180.0)), mPerDegLon_(kMetersPerDegLonEquator * std::cos(lat0 * kPi / 180.0)),
mPerDegLat_(kMetersPerDegLat) {} mPerDegLat_(kMetersPerDegLat) {}
void GeoLocalFrame::reanchor(double lat0, double lon0) {
lat0_ = lat0;
lon0_ = lon0;
mPerDegLon_ = kMetersPerDegLonEquator * std::cos(lat0 * kPi / 180.0);
// mPerDegLat_ 为常数,无需更新。
}
LocalXY GeoLocalFrame::toLocal(double lat, double lon) const { LocalXY GeoLocalFrame::toLocal(double lat, double lon) const {
return LocalXY{(lon - lon0_) * mPerDegLon_, (lat - lat0_) * mPerDegLat_}; return LocalXY{(lon - lon0_) * mPerDegLon_, (lat - lat0_) * mPerDegLat_};
} }

View File

@ -9,6 +9,8 @@ struct LatLon { double lat, lon; };
class GeoLocalFrame { class GeoLocalFrame {
public: public:
GeoLocalFrame(double lat0, double lon0); GeoLocalFrame(double lat0, double lon0);
// 就地改原点(不换对象):所有持有此共享 frame 的渲染层(帘面/底图/坐标轴)随即一致重定位。
void reanchor(double lat0, double lon0);
LocalXY toLocal(double lat, double lon) const; // -> (x East m, y North m) LocalXY toLocal(double lat, double lon) const; // -> (x East m, y North m)
// toLocal 的反算:局部米 (x East, y North) -> 经纬度。 // toLocal 的反算:局部米 (x East, y North) -> 经纬度。
// lon = lon0 + x/mPerDegLonlat = lat0 + y/mPerDegLat坐标轴经纬度刻度用 // lon = lon0 + x/mPerDegLonlat = lat0 + y/mPerDegLat坐标轴经纬度刻度用