//-------------------------------------------------------------------------------------------------- /// Make the object a constant pixel size //-------------------------------------------------------------------------------------------------- void FixedSizeTransform::updateWorldTransform(const cvf::Camera* camera) { Transform::updateWorldTransform(camera); if (m_fixedPixelSizeModelUnits > 0.0) { cvf::Vec3d objectCenter(0,0,0); objectCenter.transformPoint(m_worldMatrix); double eyeDist = (objectCenter - camera->position())*camera->direction(); if (eyeDist > 0) { double scaleFactor = 1.0; if (camera->projection() == Camera::PERSPECTIVE) { double nearPlane = camera->nearPlane(); double frontPlanePixelHeigth = camera->frontPlanePixelHeight(); scaleFactor = (fixedPixelSizeModelUnits()*frontPlanePixelHeigth*eyeDist)/nearPlane; } else { scaleFactor = camera->frontPlanePixelHeight(); } Mat4d scaleMatrix = Mat4d::fromScaling(Vec3d(scaleFactor, scaleFactor, scaleFactor)); m_worldMatrix = m_worldMatrix*scaleMatrix; } } }
QPointF EllipseObject::objectQuadrant270() const { qreal halfH = objectHeight()/2.0; qreal rot = radians(rotation()+270.0); qreal x = halfH*qCos(rot); qreal y = halfH*qSin(rot); return objectCenter() + QPointF(x,y); }
QPointF EllipseObject::objectQuadrant180() const { qreal halfW = objectWidth()/2.0; qreal rot = radians(rotation()+180.0); qreal x = halfW*qCos(rot); qreal y = halfW*qSin(rot); return objectCenter() + QPointF(x,y); }
// Returns the closest snap point to the mouse point QPointF EllipseObject::mouseSnapPoint(const QPointF& mousePoint) { QPointF center = objectCenter(); QPointF quad0 = objectQuadrant0(); QPointF quad90 = objectQuadrant90(); QPointF quad180 = objectQuadrant180(); QPointF quad270 = objectQuadrant270(); qreal cntrDist = QLineF(mousePoint, center).length(); qreal q0Dist = QLineF(mousePoint, quad0).length(); qreal q90Dist = QLineF(mousePoint, quad90).length(); qreal q180Dist = QLineF(mousePoint, quad180).length(); qreal q270Dist = QLineF(mousePoint, quad270).length(); qreal minDist = qMin(qMin(qMin(q0Dist, q90Dist), qMin(q180Dist, q270Dist)), cntrDist); if (minDist == cntrDist) return center; else if(minDist == q0Dist) return quad0; else if(minDist == q90Dist) return quad90; else if(minDist == q180Dist) return quad180; else if(minDist == q270Dist) return quad270; return scenePos(); }
QList<QPointF> EllipseObject::allGripPoints() { QList<QPointF> gripPoints; gripPoints << objectCenter() << objectQuadrant0() << objectQuadrant90() << objectQuadrant180() << objectQuadrant270(); return gripPoints; }
int main(int argc, char ** argv) { std::cout.imbue(std::locale("")); char path[10], *method; method = argv[1]; if(argc != 2) { usage(argv[0]); } if ( (strlen(method) != 1) || (method[0] != 't') && (method[0] != 'm') && (method[0] != 'c') ) { usage(argv[0]); } //configuration file Config conf("config.cfg"); cv::namedWindow("calculator", CV_WINDOW_AUTOSIZE); //template pattern templ = cv::imread("./circulo.png"); if(!templ.data ) { std::cout << "Could not open or find pattern" << std::endl ; return -1; } cv::Size size(90,90); cv::resize(templ,templ, size); try { cv::VideoCapture video(0); video.set(CV_CAP_PROP_FRAME_WIDTH, FRAME_WIDTH); video.set(CV_CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT); KeyManager * manager = new KeyManager(conf, FRAME_WIDTH, FRAME_HEIGHT); for(;;) { cv::Mat mirrow, frame, edge; cv::Point objectCenter(0,0); video >> mirrow; cv::flip(mirrow, frame, 1); int currentTime = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count(); if(method[0]=='m') { cv::setMouseCallback("calculator", mousePosition, NULL); } else if(method[0]=='t') { std::vector<cv::Mat> refs, tpls, results; tplMatch(frame); } else if(method[0]=='c') { findWithContours(frame); } manager->update(currentTime, centerMouse); manager->draw(frame); bool quit = manager->getOutActive(); cv::imshow("calculator", frame); if(cv::waitKey(30) >= 0 || quit) break; } } catch (cv::Exception e) { std::cout << "An exception has accurred: \n"; } return(0); }
void CircleObject::gripEdit(const QPointF& before, const QPointF& after) { if(before == objectCenter()) { QPointF delta = after-before; moveBy(delta.x(), delta.y()); } else { setObjectRadius(QLineF(objectCenter(), after).length()); } }
void CircleObject::updateRubber(QPainter* painter) { int rubberMode = objectRubberMode(); if(rubberMode == OBJ_RUBBER_CIRCLE_1P_RAD) { QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_RADIUS"); QPointF itemCenterPoint = mapFromScene(sceneCenterPoint); QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint); QLineF itemLine(itemCenterPoint, itemQSnapPoint); setObjectCenter(sceneCenterPoint); QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint); qreal radius = sceneLine.length(); setObjectRadius(radius); if(painter) drawRubberLine(itemLine, painter, VIEW_COLOR_CROSSHAIR); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_1P_DIA) { QPointF sceneCenterPoint = objectRubberPoint("CIRCLE_CENTER"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_DIAMETER"); QPointF itemCenterPoint = mapFromScene(sceneCenterPoint); QPointF itemQSnapPoint = mapFromScene(sceneQSnapPoint); QLineF itemLine(itemCenterPoint, itemQSnapPoint); setObjectCenter(sceneCenterPoint); QLineF sceneLine(sceneCenterPoint, sceneQSnapPoint); qreal diameter = sceneLine.length(); setObjectDiameter(diameter); if(painter) drawRubberLine(itemLine, painter, VIEW_COLOR_CROSSHAIR); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_2P) { QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1"); QPointF sceneQSnapPoint = objectRubberPoint("CIRCLE_TAN2"); QLineF sceneLine(sceneTan1Point, sceneQSnapPoint); setObjectCenter(sceneLine.pointAt(0.5)); qreal diameter = sceneLine.length(); setObjectDiameter(diameter); updatePath(); } else if(rubberMode == OBJ_RUBBER_CIRCLE_3P) { QPointF sceneTan1Point = objectRubberPoint("CIRCLE_TAN1"); QPointF sceneTan2Point = objectRubberPoint("CIRCLE_TAN2"); QPointF sceneTan3Point = objectRubberPoint("CIRCLE_TAN3"); double sceneCenterX; double sceneCenterY; getArcCenter(sceneTan1Point.x(), sceneTan1Point.y(), sceneTan2Point.x(), sceneTan2Point.y(), sceneTan3Point.x(), sceneTan3Point.y(), &sceneCenterX, &sceneCenterY); QPointF sceneCenterPoint(sceneCenterX, sceneCenterY); QLineF sceneLine(sceneCenterPoint, sceneTan3Point); setObjectCenter(sceneCenterPoint); qreal radius = sceneLine.length(); setObjectRadius(radius); updatePath(); } else if(rubberMode == OBJ_RUBBER_GRIP) { if(painter) { QPointF gripPoint = objectRubberPoint("GRIP_POINT"); if(gripPoint == objectCenter()) { painter->drawEllipse(rect().translated(mapFromScene(objectRubberPoint(QString()))-mapFromScene(gripPoint))); } else { qreal gripRadius = QLineF(objectCenter(), objectRubberPoint(QString())).length(); painter->drawEllipse(QPointF(), gripRadius, gripRadius); } QLineF rubLine(mapFromScene(gripPoint), mapFromScene(objectRubberPoint(QString()))); drawRubberLine(rubLine, painter, VIEW_COLOR_CROSSHAIR); } } }