| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #include "lc_parabolapropertieseditingwidget.h" |
| |
|
| | #include <QStandardItemModel> |
| |
|
| | #include "lc_parabola.h" |
| | #include "rs_dialogfactory.h" |
| | #include "rs_dialogfactoryinterface.h" |
| | #include "ui_lc_parabolapropertieseditingwidget.h" |
| |
|
| | LC_ParabolaPropertiesEditingWidget::LC_ParabolaPropertiesEditingWidget(QWidget *parent) |
| | : LC_EntityPropertiesEditorWidget(parent) |
| | , ui(new Ui::LC_ParabolaPropertiesEditingWidget){ |
| | ui->setupUi(this); |
| | } |
| |
|
| | LC_ParabolaPropertiesEditingWidget::~LC_ParabolaPropertiesEditingWidget(){ |
| | delete ui; |
| | } |
| |
|
| | void LC_ParabolaPropertiesEditingWidget::setEntity(RS_Entity* entity) { |
| | m_entity = static_cast<LC_Parabola*>(entity); |
| | updatePoints(); |
| | } |
| |
|
| | void LC_ParabolaPropertiesEditingWidget::updatePoints(){ |
| | auto const& bData = m_entity->getData(); |
| | auto const& pts = bData.controlPoints; |
| | auto model = new QStandardItemModel(pts.size(), 2, this); |
| | model->setHorizontalHeaderLabels({"x", "y"}); |
| |
|
| | |
| | for (size_t row = 0; row < pts.size(); ++row) { |
| | auto const& vp = pts.at(row); |
| |
|
| | QString uiX, uiY; |
| | QPair<QString, QString> uiPoint = toUIStr(vp); |
| |
|
| | auto* x = new QStandardItem(uiPoint.first); |
| | model->setItem(row, 0, x); |
| | auto* y = new QStandardItem(uiPoint.second); |
| | model->setItem(row, 1, y); |
| | } |
| | model->setRowCount(pts.size()); |
| | ui->tvPoints->setModel(model); |
| | } |
| |
|
| | void LC_ParabolaPropertiesEditingWidget::updateEntityData() { |
| | |
| | auto model = static_cast<QStandardItemModel*>(ui->tvPoints->model()); |
| | model->setRowCount(3); |
| | |
| | std::array<RS_Vector, 3> vps; |
| | |
| | for (size_t i = 0; i < 3; ++i) { |
| | auto& vp = vps.at(i); |
| | auto const& vpx = model->item(i, 0)->text(); |
| | auto const& vpy = model->item(i, 1)->text(); |
| |
|
| | RS_Vector wcsPoint = toWCSVector(vpx, vpy, vp); |
| |
|
| | vp.x = wcsPoint.x; |
| | vp.y = wcsPoint.y; |
| | } |
| | |
| | if (std::abs(std::remainder(vps.front().angleTo(vps[1]) - vps.back().angleTo(vps[1]), M_PI)) < RS_TOLERANCE_ANGLE) { |
| | RS_DIALOGFACTORY->commandMessage(tr("Parabola control points cannot be collinear")); |
| | return; |
| | } |
| | auto& d = m_entity->getData(); |
| | d.controlPoints = vps; |
| | m_entity->update(); |
| | } |
| |
|