mirror of https://github.com/KLayout/klayout.git
WIP: scale factor editing, pan mode done.
This commit is contained in:
parent
4a3e694b9b
commit
5afd48b12f
|
|
@ -51,6 +51,8 @@ D25View::D25View (QWidget *parent)
|
|||
connect (mp_ui->fit_bottom, SIGNAL (clicked ()), this, SLOT (fit_button_clicked ()));
|
||||
connect (mp_ui->zoom_slider, SIGNAL (valueChanged (int)), this, SLOT (scale_slider_changed (int)));
|
||||
connect (mp_ui->vzoom_slider, SIGNAL (valueChanged (int)), this, SLOT (vscale_slider_changed (int)));
|
||||
connect (mp_ui->zoom_factor, SIGNAL (editingFinished ()), this, SLOT (scale_value_edited ()));
|
||||
connect (mp_ui->vzoom_factor, SIGNAL (editingFinished ()), this, SLOT (vscale_value_edited ()));
|
||||
connect (mp_ui->d25_view, SIGNAL (scale_factor_changed (double)), this, SLOT (scale_factor_changed (double)));
|
||||
connect (mp_ui->d25_view, SIGNAL (vscale_factor_changed (double)), this, SLOT (vscale_factor_changed (double)));
|
||||
connect (mp_ui->d25_view, SIGNAL (init_failed ()), this, SLOT (init_failed ()));
|
||||
|
|
@ -80,6 +82,34 @@ D25View::init_failed ()
|
|||
mp_ui->gl_stack->setCurrentIndex (1);
|
||||
}
|
||||
|
||||
void
|
||||
D25View::scale_value_edited ()
|
||||
{
|
||||
double f = mp_ui->d25_view->scale_factor ();
|
||||
try {
|
||||
tl::from_string (tl::to_string (mp_ui->zoom_factor->text ()), f);
|
||||
f = std::min (1e6, std::max (1e-6, f));
|
||||
} catch (...) {
|
||||
// ignore exceptions
|
||||
}
|
||||
mp_ui->d25_view->set_scale_factor (f);
|
||||
scale_factor_changed (f);
|
||||
}
|
||||
|
||||
void
|
||||
D25View::vscale_value_edited ()
|
||||
{
|
||||
double f = mp_ui->d25_view->vscale_factor ();
|
||||
try {
|
||||
tl::from_string (tl::to_string (mp_ui->vzoom_factor->text ()), f);
|
||||
f = std::min (1e6, std::max (1e-6, f));
|
||||
} catch (...) {
|
||||
// ignore exceptions
|
||||
}
|
||||
mp_ui->d25_view->set_vscale_factor (f);
|
||||
vscale_factor_changed (f);
|
||||
}
|
||||
|
||||
void
|
||||
D25View::scale_slider_changed (int value)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -58,8 +58,10 @@ private slots:
|
|||
void fit_button_clicked ();
|
||||
void scale_factor_changed (double f);
|
||||
void scale_slider_changed (int value);
|
||||
void scale_value_edited ();
|
||||
void vscale_factor_changed (double f);
|
||||
void vscale_slider_changed (int value);
|
||||
void vscale_value_edited ();
|
||||
void init_failed ();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -117,15 +117,11 @@ hit_point_with_cuboid (const QVector3D &line, const QVector3D &line_dir, const Q
|
|||
|
||||
double min_dist = 0.0;
|
||||
int min_dist_index = -1;
|
||||
QVector3D ld_norm = line_dir.normalized ();
|
||||
|
||||
for (std::vector<std::pair<bool, QVector3D> >::const_iterator i = cutpoints.begin (); i != cutpoints.end (); ++i) {
|
||||
if (i->first) {
|
||||
double dist = QVector3D::dotProduct (i->second - line, ld_norm);
|
||||
if (min_dist_index < 0) {
|
||||
min_dist = dist;
|
||||
min_dist_index = int (i - cutpoints.begin ());
|
||||
} else if (dist < min_dist) {
|
||||
double dist = QVector3D::dotProduct (i->second - line, line_dir);
|
||||
if (min_dist_index < 0 || dist < min_dist) {
|
||||
min_dist = dist;
|
||||
min_dist_index = int (i - cutpoints.begin ());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ public:
|
|||
QVector3D yv (-re * xv.z (), cos (view ()->cam_elevation () * M_PI / 180.0), re * xv.x ());
|
||||
QVector3D drag = xv * dx + yv * dy;
|
||||
|
||||
view ()->set_displacement (m_start_displacement + drag / view ()->scale_factor ());
|
||||
view ()->set_displacement (m_start_displacement + drag / view ()->scale_factors ());
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
@ -366,8 +366,8 @@ D25ViewWidget::hit_point_with_scene (const QVector3D &line_dir)
|
|||
{
|
||||
double min_focus_dist = 0.5;
|
||||
|
||||
QVector3D corner = (QVector3D (m_bbox.left (), m_zmin, -(m_bbox.bottom () + m_bbox.height ())) + m_displacement) * m_scale_factor;
|
||||
QVector3D dim = QVector3D (m_bbox.width (), m_zmax - m_zmin, m_bbox.height ()) * m_scale_factor;
|
||||
QVector3D corner = (QVector3D (m_bbox.left (), m_zmin, -(m_bbox.bottom () + m_bbox.height ())) + m_displacement) * scale_factors ();
|
||||
QVector3D dim = QVector3D (m_bbox.width (), m_zmax - m_zmin, m_bbox.height ()) * scale_factors ();
|
||||
QVector3D line = cam_position ();
|
||||
|
||||
std::pair<bool, QVector3D> hp = lay::hit_point_with_cuboid (line, line_dir, corner, dim);
|
||||
|
|
|
|||
|
|
@ -96,6 +96,11 @@ public:
|
|||
refresh ();
|
||||
}
|
||||
|
||||
QVector3D scale_factors () const
|
||||
{
|
||||
return QVector3D (scale_factor (), scale_factor () * vscale_factor (), scale_factor ());
|
||||
}
|
||||
|
||||
double scale_factor () const { return m_scale_factor; }
|
||||
|
||||
void set_scale_factor (double f)
|
||||
|
|
|
|||
Loading…
Reference in New Issue