void SdfRenderer::point(QDomElement &element) { parsestyle(element); float x = x1_def(element); float y = y1_def(element); QPointF pointf(x,y); painter->drawLine(QPointF(pointf.x()-0.1, pointf.y()-0.1), QPointF(pointf.x()+0.1, pointf.y()+0.1)); defaultstyle(); }
void ImageEditor::mousePressEvent(QMouseEvent *event) { if (!_image_loaded||event->pos().x()>_real_size.width()-1||event->pos().y()>=_real_size.height()-1) return; float x=(float)(event->pos().x()+0.5)/(float)_real_size.width(); float y=(float)(event->pos().y()+0.5)/(float)_real_size.height(); if(_scissor) { if (event->button() == Qt::LeftButton) { //confirms seg QPointF pointf(x,y); if(_compute) for(int i=0;i<_segList.size();i++) _contourList[_contourList.size()-1].append(_segList[_segList.size()-1-i]); if (_contourList[_contourList.size()-1].size()>0) { QPoint pt0=QPoint(_contourList[_contourList.size()-1][0].x()*_real_size.width(),_contourList[_contourList.size()-1][0].y()*_real_size.height()); if (abs(pt0.x()-event->pos().x())<=3&&abs(pt0.y()-event->pos().y())<=3) { //new contour QList<QPointF> contour; _contourList.append(contour); _compute=false; return; } } _fixedSeedList.append(pointf); _compute=true; _segList.clear(); _costGraph->liveWireDP(y*_image.height(),x*_image.width()); emit sigUpdate(); } } else if(_flag_multilayer) { if (event->button() == Qt::LeftButton) { emit sigLayerReorder(_name,true,x,y); } else if (event->button() == Qt::RightButton) { emit sigLayerReorder(_name,false,x,y); } } else { if (event->button() == Qt::LeftButton) { //select bool flag=true; for (int i=0;i<parameters->ui_points.size();i++) { QPoint ConP; switch(_name){ case 'L': case 'l': ConP= QPoint(parameters->ui_points[i].lp.x*_real_size.width(),parameters->ui_points[i].lp.y*_real_size.height()); break; case 'R': case 'r': ConP= QPoint(parameters->ui_points[i].rp.x*_real_size.width(),parameters->ui_points[i].rp.y*_real_size.height()); break; } if (abs(ConP.x()-event->pos().x())<=3&&abs(ConP.y()-event->pos().y())<=3) { flag=false; parameters->ActIndex=i; break; } } //new point if(flag) { double2 pointf; pointf.x=x; pointf.y=y; ConstraintPoint elem; elem.lp=elem.rp=pointf; parameters->ui_points.push_back(elem); parameters->ActIndex=parameters->ui_points.size()-1; } } else if (event->button() == Qt::RightButton) { //select vector<ConstraintPoint>::iterator itr = parameters->ui_points.begin(); while (itr != parameters->ui_points.end()) { QPoint ConP; switch(_name){ case 'L': case 'l': ConP= QPoint(itr->lp.x*_real_size.width(),itr->lp.y*_real_size.height()); break; case 'R': case 'r': ConP= QPoint(itr->rp.x*_real_size.width(),itr->rp.y*_real_size.height()); break; } if (abs(ConP.x()-event->pos().x())<=3&&abs(ConP.y()-event->pos().y())<=3) { parameters->ui_points.erase(itr); parameters->ActIndex=-1; break; } itr++; } } emit sigUpdate(); } }
double gradient::normalized_gradual_value(double x, double y) const { return normalized_gradual_value(pointf(x, y)); }
bool CapsuleShape2DSW::intersect_segment(const Vector2& p_begin,const Vector2& p_end,Vector2 &r_point, Vector2 &r_normal) const { float d = 1e10; Vector2 n = (p_end-p_begin).normalized(); bool collided=false; //try spheres for(int i=0;i<2;i++) { Vector2 begin = p_begin; Vector2 end = p_end; float ofs = (i==0)?-height*0.5:height*0.5; begin.y+=ofs; end.y+=ofs; Vector2 line_vec = end - begin; real_t a, b, c; a = line_vec.dot(line_vec); b = 2 * begin.dot(line_vec); c = begin.dot(begin) - radius * radius; real_t sqrtterm = b*b - 4*a*c; if(sqrtterm < 0) continue; sqrtterm = Math::sqrt(sqrtterm); real_t res = ( -b - sqrtterm ) / (2 * a); if (res <0 || res >1+CMP_EPSILON) { continue; } Vector2 point = begin+line_vec*res; Vector2 pointf(point.x,point.y-ofs); real_t pd = n.dot(pointf); if (pd<d) { r_point=pointf; r_normal=point.normalized(); d=pd; collided=true; } } Vector2 rpos,rnorm; if (Rect2( Point2(-radius,-height*0.5), Size2(radius*2.0,height) ).intersects_segment(p_begin,p_end,&rpos,&rnorm)) { real_t pd = n.dot(rpos); if (pd<d) { r_point=rpos; r_normal=rnorm; d=pd; collided=true; } } //return get_aabb().intersects_segment(p_begin,p_end,&r_point,&r_normal); return collided; //todo }
void Blittable::setCentre(Centre c) { centre_ = c; centre_offset_ = pointf(); changed_ = true; }
int RappScanner::AddPolygonVertex(int polygonIndex, double x, double y) { if (polygons_.size() < (unsigned) (1+polygonIndex)) { polygons_.resize(1+polygonIndex); } polygons_.at(polygonIndex).push_back(pointf((float) x, (float) y)); return DEVICE_OK; }