void CQXYValsCanvas:: mouseReleaseEvent(QMouseEvent *me) { pressed_ = false; releasePos_ = me->pos(); double x1 = pressPos_ .x(); double y1 = pressPos_ .y(); double x2 = releasePos_.x(); double y2 = releasePos_.y(); //--- std::vector<double> x { x1, x2, x2, x1}; std::vector<double> y { y1, y1, y2, y2}; CXYVals::Polygon poly(x, y); valueData_.ipolygons .push_back(poly); valueData_.iqpolygons.push_back(toQPolygon(poly)); //--- updatePolygons(); update(); }
vector<PCPolygonPtr> PCPolyhedron::mergePolygons(vector<PCPolygonPtr>& toMerge) { vector<PCPolygonPtr> aAgregar; vector<PCPolygonPtr> aProcesar; int remainingIters = 10; do { for (int i = 0; i < toMerge.size(); i++) { PCPolygonPtr removed; bool wasRemoved = false; bool fitted = findBestFit(toMerge[i], removed, wasRemoved); if (wasRemoved) { aProcesar.push_back(removed); } if (!fitted) { aAgregar.push_back(toMerge[i]); } } toMerge = aProcesar; aProcesar.clear(); remainingIters--; } while (toMerge.size() > 0 && remainingIters > 0); vector<PCPolygonPtr> keep; vector<PCPolygonPtr> adjust; for (vector<PCPolygonPtr>::iterator iter = pcpolygons.begin(); iter != pcpolygons.end(); iter++) { if ((*iter)->hasMatching()) keep.push_back(*iter); else adjust.push_back(*iter); } vector<PCPolygonPtr> missing = updatePolygons(); vector<PCPolygonPtr> polygonsInBox(discardPolygonsOutOfBox(aAgregar, keep)); // Setea el nombre de los poligonos nuevos, con el poligono más cercano for (int i = 0; i < polygonsInBox.size(); i++) { if (indexOf(pcpolygons, polygonsInBox[i]) < 0) { PCPolygonPtr closer = findCloserPolygon(polygonsInBox[i],missing); polygonsInBox[i]->getPolygonModelObject()->setName(closer->getPolygonModelObject()->getName()); polygonsInBox[i]->setEstimated(false); keep.push_back(polygonsInBox[i]); } } polygonsInBox.clear(); return keep; }
void CSystemControlModel::PlaceChildren() { CRect newRect; int currentTop = rect.Top() + 5; for (int i = 0; i < children.size(); ++i) { CRect oldRect = children[i]->GetRect(); newRect.Top() = currentTop; currentTop += oldRect.GetHeight() + 5; newRect.Bottom() = newRect.Top() + oldRect.GetHeight(); newRect.Left() = rect.Left() + 15; newRect.Right() = newRect.Left() + oldRect.GetWidth(); children[i]->SetRect(newRect); } updatePolygons(); }
void CFracControlModel::PlaceChildren() { CRect newRect; int middle = (rect.Right() + rect.Left()) / 2; CRect oldRect = firstChild->GetRect( ); newRect.Top() = rect.Top(); newRect.Bottom() = rect.Top() + oldRect.GetHeight(); newRect.Left() = middle - oldRect.GetWidth() / 2; newRect.Right() = middle + oldRect.GetWidth() / 2; firstChild->SetRect( newRect ); oldRect = secondChild->GetRect( ); newRect.Bottom() = rect.Bottom(); newRect.Top() = rect.Bottom() - oldRect.GetHeight(); newRect.Left() = middle - oldRect.GetWidth() / 2; newRect.Right() = middle + oldRect.GetWidth() / 2; secondChild->SetRect( newRect ); updatePolygons(); }
void CSystemControlModel::MoveBy( int dx, int dy ) { rect.MoveBy( dx, dy ); updatePolygons(); }
void CSystemControlModel::SetRect( const CRect& rect ) { this->rect = rect; updatePolygons(); }
void CQXYValsCanvas:: keyPressEvent(QKeyEvent *ke) { if (ke->key() == Qt::Key_Delete) { // clear grid valueData_.ipolygons .clear(); valueData_.iqpolygons.clear(); updatePolygons(); update(); } else if (ke->key() == Qt::Key_C) { valueData1_ = valueData_; // combine connected cells valueData_.xyvals.combineInside(); valueData_.xyvals.setPolygonInsideValues(); getPolygons(); update(); } else if (ke->key() == Qt::Key_F) { valueData1_ = valueData_; // fill valueData_.xyvals.fill(); getPolygons(); update(); } else if (ke->key() == Qt::Key_H) { valueData1_ = valueData_; // fill disconnected rows valueData_.xyvals.fillDisconnectedRows(); valueData_.xyvals.setPolygonInsideValues(); getPolygons(); update(); } else if (ke->key() == Qt::Key_V) { valueData1_ = valueData_; // fill disconnected columns valueData_.xyvals.fillDisconnectedColumns(); valueData_.xyvals.setPolygonInsideValues(); getPolygons(); update(); } else if (ke->key() == Qt::Key_S) { // display smallest CXYValsInside::InsideValue i = valueData_.xyvals.findSmallest(); std::cerr << i << "(" << valueData_.xyvals.valueArea(i) << ")" << std::endl; } else if (ke->key() == Qt::Key_P) { // print valueData_.xyvals.print(std::cerr); std::cerr << std::endl; } else if (ke->key() == Qt::Key_R) { // replace input polygons with extracted polygons valueData_.ipolygons = valueData_.opolygons; valueData_.iqpolygons = valueData_.oqpolygons; updatePolygons(); update(); } else if (ke->key() == Qt::Key_U) { valueData_ = valueData1_; update(); } }