diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25View.cc b/src/plugins/tools/view_25d/lay_plugin/layD25View.cc index 7e9a79b1a..dbd204051 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25View.cc +++ b/src/plugins/tools/view_25d/lay_plugin/layD25View.cc @@ -38,7 +38,8 @@ const double initial_elevation = 15.0; D25View::D25View (lay::Dispatcher *root, lay::LayoutView *view) : lay::Browser (root, view, "d25_view"), - dm_rerun_macro (this, &D25View::rerun_macro) + dm_rerun_macro (this, &D25View::rerun_macro), + dm_fit (this, &D25View::fit) { mp_ui = new Ui::D25View (); mp_ui->setupUi (this); @@ -207,13 +208,20 @@ D25View::finish () mp_ui->d25_view->reset (); mp_ui->d25_view->set_cam_azimuth (0.0); mp_ui->d25_view->set_cam_elevation (-initial_elevation); - mp_ui->d25_view->fit (); + // NOTE: needs to be delayed to allow the geometry to be updated before (initial call) + dm_fit (); mp_ui->gl_stack->setCurrentIndex (0); } } +void +D25View::fit () +{ + mp_ui->d25_view->fit (); +} + static QString scale_factor_to_string (double f) { return QString (QString::fromUtf8 ("%1")).arg (f, 0, 'g', 3); diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25View.h b/src/plugins/tools/view_25d/lay_plugin/layD25View.h index 5495925f9..9979114f0 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25View.h +++ b/src/plugins/tools/view_25d/lay_plugin/layD25View.h @@ -88,11 +88,13 @@ private slots: private: Ui::D25View *mp_ui; tl::DeferredMethod dm_rerun_macro; + tl::DeferredMethod dm_fit; std::string m_generator; void cellviews_changed (); void layer_properties_changed (int); void rerun_macro (); + void fit (); }; } diff --git a/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc b/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc index 523788074..b911edca5 100644 --- a/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc +++ b/src/plugins/tools/view_25d/lay_plugin/layD25ViewWidget.cc @@ -592,6 +592,15 @@ D25ViewWidget::entry (const db::Region &data, double dbu, double zstart, double { tl_assert (m_display_open); + if (! m_zset) { + m_zmin = std::min (zstart, zstop); + m_zmax = std::max (zstart, zstop); + m_zset = true; + } else { + m_zmin = std::min (m_zmin, std::min (zstart, zstop)); + m_zmax = std::min (m_zmax, std::max (zstart, zstop)); + } + // try to establish a default color from the region's origin if required const db::OriginalLayerRegion *original_region = dynamic_cast (data.delegate ()); if (mp_view && m_layers.back ().fill_color [3] == 0.0 && m_layers.back ().frame_color [3] == 0.0) {