Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
	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;
	}
Exemplo n.º 3
0
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();
}
Exemplo n.º 4
0
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();
}
Exemplo n.º 5
0
void CSystemControlModel::MoveBy( int dx, int dy ) 
{
	rect.MoveBy( dx, dy );
	updatePolygons();
}
Exemplo n.º 6
0
void CSystemControlModel::SetRect( const CRect& rect ) 
{
	this->rect = rect;
	updatePolygons();
}
Exemplo n.º 7
0
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();
  }
}