예제 #1
0
파일: pipeline.cpp 프로젝트: Tyilo/tpie
void pipeline_base::order_before(pipeline_base & other) {
	if (get_node_map()->find_authority()
		== other.get_node_map()->find_authority()) {

		tpie::log_debug()
			<< "Ignoring pipeline ordering hint since node maps are already shared"
			<< std::endl;
		return;
	}
	runtime rt1(get_node_map()->find_authority());
	runtime rt2(other.get_node_map()->find_authority());

	std::vector<node *> mySinks;
	std::vector<node *> otherSources;

	rt1.get_item_sinks(mySinks);
	rt2.get_item_sources(otherSources);

	if (mySinks.size() == 0) {
		throw tpie::exception("pipeline::order_before: mySinks is empty");
	}
	if (otherSources.size() == 0) {
		throw tpie::exception("pipeline::order_before: otherSources is empty");
	}

	for (size_t i = 0; i < otherSources.size(); ++i) {
		for (size_t j = 0; j < mySinks.size(); ++j) {
			otherSources[i]->add_dependency(*mySinks[j]);
		}
	}
}
예제 #2
0
 void ScanWiew::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
 {

     QColor cred(255,0,0);
     QColor cgreen(0,100,0);
      QColor cgreen2(0,150,0);
     QColor cblue(0,0,255);

     QPen pred(cred);
     QPen pgreen(cgreen);
     QPen pgreen2(cgreen2);
     QPen pblue(cblue);

     painter->setPen(pgreen);

     //QFont fcnew("Coruier new", 10, QFont::Normal);
     QFontMetrics fm(painter->font());

     int pixelsHeight = fm.height();
     int lineCnt = laserRangeInMeter/arcDistanceInMeter;

     for(int i = 1; i <= lineCnt; i++)
     {

         QRectF rectangle(-(i*arcDistanceInPixels), -(i*arcDistanceInPixels), i*2*arcDistanceInPixels,i*2*arcDistanceInPixels);
         int spanAngle = endAngle - startAngle+5;

         painter->drawArc(rectangle, ((int)startAngle+90-5)*16, (spanAngle+5)*16);

         int x = -::sin((startAngle-5)*TwoPi/360)*(i*arcDistanceInPixels);
         int y = -::cos((startAngle-5)*TwoPi/360)*(i*arcDistanceInPixels);


         char str[100];
         sprintf(str,"%d",i*(int)arcDistanceInMeter);
         int pixelsWide = fm.width(str);
         QPoint ptl(x-pixelsWide,y);
         QPoint pbr(x,y+pixelsHeight);
         QRect rt(ptl,pbr);

         painter->drawText(rt, Qt::AlignCenter, (QString)(str));

         x = -::sin((endAngle+5)*TwoPi/360)*(i*arcDistanceInPixels);
         y = -::cos((endAngle+5)*TwoPi/360)*(i*arcDistanceInPixels);


         QPoint ptl1(x,y);
         QPoint pbr1(x+pixelsWide,y+pixelsHeight);
         QRect rt1(ptl1,pbr1);
         painter->drawText(rt1, Qt::AlignCenter, (QString)(str));

     }


     lineCnt = (endAngle - startAngle)/angleDelta;
     double ang = startAngle;

     int distance = (laserRangeInMeter/arcDistanceInMeter)*arcDistanceInPixels;

     for(int i = 0; i <= lineCnt ; i++)
     {
         painter->setPen(pgreen);
         int x = -::sin(ang*TwoPi/360)*(distance+5);
         int y = -::cos(ang*TwoPi/360)*(distance+5);
         painter->drawLine(0,0,x,y);

         char str[100];
         sprintf(str,"%d",(int)ang);
         int pixelsWide = fm.width(str);


         x = -::sin(ang*TwoPi/360)*(distance+20);
         y = -::cos(ang*TwoPi/360)*(distance+20);

         QPoint ptl(x-pixelsWide/2,y - pixelsHeight/2);
         QPoint pbr(x+pixelsWide/2,y+pixelsHeight/2);
         QRect rt(ptl,pbr);
         painter->drawText(rt, Qt::AlignCenter, (QString)(str));

         ang += angleDelta;
     }

     double olcek =  arcDistanceInPixels/arcDistanceInMeter;
     //printf("olcek: %f\n",olcek);
     pgreen.setWidth(pgreen.width()+2);
     painter->setPen(pgreen2);
     for(int i = 0; i < pointCnt; i++)
     {
         painter->drawLine(0,0,-plist[i].y*olcek,-plist[i].x*olcek);
     }

      painter->setPen(pred);
     plinel_t *root = g_line_map.first;

     while(root != NULL)
     {
        if(root->line.length > 0.05 && root->point_cnt > 3 )//MIN_LENGTH_LINE_TO_SEND)
        {
           painter->drawLine(-root->line.sp.y*olcek,-root->line.sp.x*olcek,-root->line.ep.y*olcek,-root->line.ep.x*olcek);
        }
        root = root->next;
     }
 }