Beispiel #1
0
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();

	}

}
Beispiel #3
0
double gradient::normalized_gradual_value(double x, double y) const
{
    return normalized_gradual_value(pointf(x, y));
}
Beispiel #4
0
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
}
Beispiel #5
0
	void Blittable::setCentre(Centre c)
	{
		centre_  = c;
		centre_offset_ = pointf();
		changed_ = true;
	}
Beispiel #6
-1
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;
}