00001 //--------------------------------------------------------------------- 00002 // File and Version Information: 00003 // $Id: DragCircle.cpp 9841 2015-03-26 18:35:44Z dubrovin@SLAC.STANFORD.EDU $ 00004 // 00005 // Author: Mikhail S. Dubrovin 00006 //--------------------------------------------------------------------- 00007 00008 //-------------------------- 00009 00010 #include "PSQt/DragCircle.h" 00011 #include "PSQt/WdgImageFigs.h" 00012 00013 namespace PSQt { 00014 00015 //-------------------------- 00016 00017 DragCircle::DragCircle(WdgImage* wimg, const QPointF* points) 00018 : DragBase(wimg, points, 2) 00019 { 00020 //std::cout << "DragCircle() c-tor\n"; 00021 m_rad_raw = points[1] - points[0]; 00022 } 00023 00024 //-------------------------- 00025 00026 const QPointF& 00027 DragCircle::getCenter() 00028 { 00029 return ((WdgImageFigs*)m_wimg)->getCenter(); 00030 } 00031 00032 //-------------------------- 00033 void 00034 DragCircle::draw(const DRAGMODE& mode) 00035 { 00036 //std::cout << "DragCircle::draw()\n"; 00037 00038 m_points_raw[0] = this->getCenter(); 00039 m_points_raw[1] = m_points_raw[0] + m_rad_raw; 00040 00041 setImagePointsFromRaw(); 00042 00043 QPointF pc = m_points_img[0]; 00044 QPointF dr = m_points_img[1] - m_points_img[0]; 00045 00046 //QPointF dp = pr-pc; 00047 //float rad = sqrt(dp.x()*dp.x() + dp.y()*dp.y()); 00048 00049 QPainter* painter = m_wimg->getPainter(); 00050 if (mode == MOVE) painter->setPen(m_pen_move); 00051 else painter->setPen(m_pen_draw); 00052 00053 painter->drawEllipse(pc, dr.x(), dr.y()); 00054 } 00055 00056 //-------------------------- 00057 void 00058 DragCircle::create() 00059 { 00060 std::cout << "DragCircle::create()\n"; 00061 } 00062 00063 //-------------------------- 00064 bool 00065 DragCircle::contains(const QPointF& p) 00066 { 00067 QPointF dp = m_wimg->pointInRaw(p) - m_points_raw[0]; 00068 float r_click = sqrt(dp.x()*dp.x() + dp.y()*dp.y()); 00069 00070 if ( fabs(r_click-m_rad_raw.x()) < m_rpick ) { 00071 //std::cout << "DragCircle::contains()\n"; 00072 return true; 00073 } 00074 return false; 00075 } 00076 00077 //-------------------------- 00078 void 00079 DragCircle::move(const QPointF& p) 00080 { 00081 //std::cout << "DragCircle::move()\n"; 00082 QPointF dp = m_wimg->pointInRaw(p) - m_points_raw[0]; 00083 float r_click = sqrt(dp.x()*dp.x() + dp.y()*dp.y()); 00084 m_rad_raw = QPointF(r_click,r_click); 00085 } 00086 00087 //-------------------------- 00088 void 00089 DragCircle::moveIsCompleted(const QPointF& p) 00090 { 00091 this->move(p); // last move 00092 00093 stringstream ss; ss << "Radius: " << fixed << std::setprecision(1) << m_rad_raw.x(); 00094 MsgInLog(_name_(), INFO, ss.str() ); 00095 } 00096 00097 //-------------------------- 00098 void 00099 DragCircle::print() 00100 { 00101 stringstream ss; ss << strTimeStamp() << " DragCircle::print():"; 00102 std::cout << ss.str() << '\n'; 00103 } 00104 00105 //-------------------------- 00106 00107 } // namespace PSQt 00108 00109 //-------------------------- 00110 00111