PSQt/src/DragCircle.cpp

Go to the documentation of this file.
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 

Generated on 19 Dec 2016 for PSANAmodules by  doxygen 1.4.7