コード例 #1
0
ファイル: decorator.cpp プロジェクト: BlackFoks/opencaesar3
void PictureDecorator::draw( Picture& dstpic, const Rect& rectangle, Mode mode, bool useAlpha )
{
  switch( mode )
  {
  case whiteArea: drawArea( dstpic, rectangle, 348, 10, 12, useAlpha ); break;  
  case blackArea: drawArea( dstpic, rectangle, 487, 5, 7, useAlpha ); break;
  case greyPanel: drawPanel( dstpic, rectangle, 25, useAlpha ); break;
  case lightgreyPanel: drawPanel( dstpic, rectangle, 22, useAlpha ); break;
  case smallBrownPanel: drawPanel( dstpic, rectangle, 65, useAlpha ); break;
  case smallGreyPanel: drawPanel( dstpic, rectangle, 68, useAlpha ); break;
  case whiteBorder: drawBorder( dstpic, rectangle, 336, 468, 347, 358, 10, 12, 335, 467, 346, 478, useAlpha );  break;
  case blackBorder: drawBorder( dstpic, rectangle, 480, 522, 486, 492, 5, 7, 479, 521, 485, 527, useAlpha ); break;
  case brownBorder: drawBorder(dstpic, rectangle, 555, useAlpha ); break;
  case whiteBorderA: drawBorder( dstpic, rectangle, 547, useAlpha ); break;
  case whiteFrame:
    draw( dstpic, Rect( rectangle.UpperLeftCorner + Point( 16, 16 ), rectangle.LowerRightCorner - Point( 16, 16 ) ), whiteArea );    // draws the inside of the box
    draw( dstpic, rectangle, whiteBorder );    // draws borders
  break;

  case blackFrame:
    draw(dstpic, Rect( rectangle.UpperLeftCorner + Point( 16, 16 ), rectangle.LowerRightCorner - Point( 16, 16 ) ), blackArea );    // draws the inside of the box
    draw(dstpic, rectangle, blackBorder );    // draws borders
  break;

  case brownFrame: drawFrame(dstpic, rectangle, 28, useAlpha); break;
  case greyFrame: drawFrame(dstpic, rectangle, 37, useAlpha); break;
  }
}
コード例 #2
0
ファイル: nurbs_plugin.cpp プロジェクト: aaronzou/ddtt-dev
void nurbs_plugin::create()
{
	if(widget) return;

	if(mesh()->name == "empty"){
		document()->deleteModel(document()->getModel("empty"));
	}	

	drawArea()->setRenderer( mesh(), "Transparent");
	drawArea()->camera()->setType(qglviewer::Camera::PERSPECTIVE);

	entireMesh = (SurfaceMeshModel*)document()->selectedModel();
	entirePoints = entireMesh->vertex_property<Vector3>("v:point");

	for(int i = 0; i < 10; i++)
        randColors.push_back(starlab::qRandomColor());

	loadGroupsFromOBJ();

	m = mesh();
    points = m->vertex_property<Vector3>("v:point");

	graph = new Structure::Graph;

	ModePluginDockWidget * dockwidget = new ModePluginDockWidget("NURBS plugin", mainWindow());
	widget = new NURBSTools(this);
	dockwidget->setWidget(widget);
	dockwidget->setWindowTitle(widget->windowTitle());
	mainWindow()->addDockWidget(Qt::RightDockWidgetArea,dockwidget);
	widget->fillList();

	mainWindow()->showMaximized();

	//buildSamples();
}
コード例 #3
0
void symmetry::applyFilter(RichParameterSet *pars)
{
	SymmetryAnalysis sanalysis( mesh() );

	mainWindow()->setStatusBarMessage( sanalysis.description() );

    bool isVisualize = pars->getBool("Visualize");
    if( isVisualize )
    {
		if( sanalysis.isRotational )
		{
			starlab::SphereSoup * centerSphere = new starlab::SphereSoup;
			centerSphere->addSphere( starlab::QVector3(sanalysis.boundingVolume.center()), 0.1f );
			drawArea()->addRenderObject(centerSphere);
			drawArea()->drawSegment(sanalysis.boundingVolume.center(), sanalysis.boundingVolume.center() + sanalysis.axis);
		}

		if( sanalysis.isFitLine )
		{
			drawArea()->drawSegment( sanalysis.origin - sanalysis.axis, sanalysis.origin + sanalysis.axis, 10 );
		}

		if( sanalysis.isReflecitonal && !sanalysis.isFitLine )
		{
			drawArea()->drawSegment( sanalysis.origin - sanalysis.primaryAxis, sanalysis.origin + sanalysis.primaryAxis, 10, Qt::green );
			drawArea()->drawSegment( sanalysis.origin - sanalysis.secondaryAxis, sanalysis.origin + sanalysis.secondaryAxis, 10, Qt::blue );
		}
    }

    foreach(auto m, sanalysis.meshes)
		document()->addModel(m);
}
コード例 #4
0
void Health::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );

    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();

    int healthLevel = -1;
    if( _isVisibleObject( overlay->type() ) )
    {
      // Base set of visible objects
      needDrawAnimations = true;
    }
    else if( _flags.count( overlay->type() ) )
    {
      needDrawAnimations = true;
      //city::Helper helper( _city() );
      //drawArea( engine, helper.getArea( overlay ), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }
    else if( overlay->type() == object::house )
    {
      HousePtr house = ptr_cast<House>( overlay );
      healthLevel = _getLevelValue( house );

      needDrawAnimations = (house->spec().level() == 1) && (house->habitants().empty());

      if( !needDrawAnimations )
      {
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
      }
    }
    else  //other buildings
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( healthLevel > 0 )
    {
      drawColumn( engine, screenPos, healthLevel );
    }
  }

  tile.setWasDrawn();
}
コード例 #5
0
ファイル: layertax.cpp プロジェクト: KSLcom/caesaria-game
void Tax::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
    Point screenPos = tile.mappos() + offset;

    if( tile.overlay().isNull() )
    {
        //draw background
        engine.draw( tile.picture(), screenPos );
    }
    else
    {
        bool needDrawAnimations = false;
        TileOverlayPtr overlay = tile.overlay();

        int taxLevel = -1;
        if( _isVisibleObject( overlay->type() ) )
        {
            // Base set of visible objects
            needDrawAnimations = true;
        }
        else if( overlay->type() == objects::house )
        {
            HousePtr house = ptr_cast<House>( overlay );
            //taxLevel = house->getServiceValue( Service::forum );
            taxLevel = math::clamp<int>( house->taxesThisYear(), 0, 100 );
            needDrawAnimations = (house->spec().level() == 1) && (house->habitants().empty());

            if( needDrawAnimations  )
            {
                int taxAccess = house->hasServiceAccess( Service::forum );
                needDrawAnimations = (taxAccess < 25);
            }

            if( !needDrawAnimations )
            {
                city::Helper helper( _city() );
                drawArea( engine, helper.getArea( overlay ), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
            }
        }
        else
        {
            city::Helper helper( _city() );
            drawArea( engine, helper.getArea( overlay ), offset, ResourceGroup::foodOverlay, OverlayPic::base );
        }

        if( needDrawAnimations )
        {
            Layer::drawTile( engine, tile, offset );
            registerTileForRendering( tile );
        }
        else if( taxLevel > 0 )
        {
            _addColumn( screenPos, taxLevel );
            //drawColumn( engine, screenPos, taxLevel );
        }
    }

    tile.setWasDrawn();
}
コード例 #6
0
ファイル: unemployed.cpp プロジェクト: binakot/caesaria-game
void Unemployed::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );

    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();
    WorkingBuildingPtr workBuilding = overlay.as<WorkingBuilding>();
    int worklessPercent = 0;

    if( _isVisibleObject( overlay->type() ) )
    {
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      HousePtr house = overlay.as<House>();

      int worklessNumber = (int)house->getServiceValue( Service::recruter );
      int matureNumber = (int)house->habitants().mature_n();
      worklessPercent = math::percentage( worklessNumber, matureNumber );
      needDrawAnimations = (house->spec().level() == 1) && house->habitants().empty();

      if( !needDrawAnimations )
      {
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
      }
    }
    else if( workBuilding.isValid() )
    {
      worklessPercent = math::percentage( workBuilding->needWorkers(), workBuilding->maximumWorkers() );
      needDrawAnimations = workBuilding->needWorkers() > 0;
      if( !needDrawAnimations )
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( worklessPercent > 0 )
    {
      drawColumn( engine, screenPos, worklessPercent );
    }
  }

  tile.setWasDrawn();
}
コード例 #7
0
void Religion::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );
    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();

    int religionLevel = -1;
    if( _isVisibleObject( overlay->type() ) )
    {
      // Base set of visible objects
      needDrawAnimations = true;      
    }
    else if( overlay->type() == object::house )
    {
      HousePtr house = ptr_cast<House>( overlay );
      religionLevel = (int) house->getServiceValue(Service::religionMercury);
      religionLevel += house->getServiceValue(Service::religionVenus);
      religionLevel += house->getServiceValue(Service::religionMars);
      religionLevel += house->getServiceValue(Service::religionNeptune);
      religionLevel += house->getServiceValue(Service::religionCeres);
      religionLevel = math::clamp( religionLevel / (house->spec().minReligionLevel()+1), 0, 100 );
      needDrawAnimations = (house->spec().level() == 1) && house->habitants().empty();

      if( !needDrawAnimations )
      {
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
      }
    }
    else
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( religionLevel > 0 )
    {
      drawColumn( engine, screenPos, religionLevel );
    }
  }

  tile.setWasDrawn();
}
コード例 #8
0
void Tax::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );

    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();

    int taxLevel = -1;
    if( _isVisibleObject( overlay->type() ) )
    {
    // Base set of visible objects
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      auto house = overlay.as<House>();
      int taxAccess = house->getServiceValue( Service::forum );
      taxLevel = math::clamp<int>( house->taxesThisYear(), 0, 100 );
      needDrawAnimations = ((house->level() <= HouseLevel::hovel && house->habitants().empty())
                            || taxAccess < 25);

      if( !needDrawAnimations )
      {
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
      }
    }
    else
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( taxLevel > 0 )
    {
      drawColumn( engine, screenPos, taxLevel );
    }
  }

  tile.setRendered();
}
コード例 #9
0
ファイル: layerfire.cpp プロジェクト: b606/caesaria-game
void Fire::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );

    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();
    int fireLevel = 0;
    if( _isVisibleObject( overlay->type() ) )
    {
      // Base set of visible objects
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      HousePtr house = ptr_cast<House>( overlay );
      fireLevel = (int)house->state( pr::fire );
      needDrawAnimations = (house->spec().level() == 1) && house->habitants().empty();
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase  );
    }
    else //other buildings
    {
      ConstructionPtr constr = ptr_cast<Construction>( overlay );
      if( constr != 0 )
      {
        fireLevel = (int)constr->state( pr::fire );
      }

      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base  );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( fireLevel >= 0)
    {
      _addColumn( screenPos, fireLevel );
    }
  }

  tile.setWasDrawn();
}
コード例 #10
0
ファイル: sentiment.cpp プロジェクト: binakot/caesaria-game
void Sentiment::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );

    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();
    int sentimentLevel = 0;

    if( _isVisibleObject( overlay->type() ) )
    {
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      HousePtr house = overlay.as<House>();

      sentimentLevel = (int)house->state( pr::happiness );
      needDrawAnimations = (house->spec().level() == 1) && house->habitants().empty();

      if( !needDrawAnimations )
      {
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
      }
    }
    else
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( sentimentLevel > 0 )
    {
      drawColumn( engine, screenPos, 100 - sentimentLevel );
    }
  }

  tile.setWasDrawn();
}
コード例 #11
0
void Entertainment::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();

    int entertainmentLevel = -1;
    if( _isVisibleObject( overlay->type() ) )
    {
      // Base set of visible objects
      needDrawAnimations = true;
    }
    else if( _flags.count( overlay->type() ) > 0 )
    {
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      auto house = overlay.as<House>();
      entertainmentLevel = _getLevelValue( house );

      needDrawAnimations = (house->level() <= HouseLevel::hovel) && (house->habitants().empty());
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
    }
    else
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( entertainmentLevel > 0 )
    {
      drawColumn( engine, screenPos, entertainmentLevel );
    }
  }

  tile.setRendered();
}
コード例 #12
0
void MarketAccess::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();
    int accessLevel = 0;

    if( _isVisibleObject( overlay->type() ) )
    {
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      auto house = overlay.as<House>();
      accessLevel = (int)house->getServiceValue( Service::market );
      needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty();

      if( !needDrawAnimations )
      {
        drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
      }
    }
    else
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( accessLevel >= 0 )
    {
      drawColumn( engine, screenPos, accessLevel );
    }
  }

  tile.setRendered();
}
コード例 #13
0
bool PDCounter::delAreaByClick(Mat& frame) {
    ////////////Pending to write./////////////////
    Mat show_frame;
    Point choose;
    for (vector<PDDetector>::iterator it = Detectors.begin(); it != Detectors.end(); it++) {
        drawArea(show_frame, show_frame, (*it).getArea(), AREA_COLOR);

    }
    pic_manipulator painter(show_frame);
    painter.get_click_info();
    choose = painter.getPoint();
    for (vector<PDDetector>::iterator it = Detectors.begin(); it != Detectors.end(); it++) {
        if (choose.inside((*it).getArea())) {
            int ID = (*it).getID();
            (*it).boom();
            Detectors.erase(it);
//            if (it == Detectors.end()) {
//                break;
//            }
            lastLog.assign("Successfully delete the " + i_to_s(ID) + " zone.");
            return true;
        }
    }
    lastLog.assign("Where you click is no zones.");
    return false;
}
コード例 #14
0
bool surfacemesh_mode_arapdeform::endSelection(const QPoint &)
{
    glFlush();
    GLint nbHits = glRenderMode(GL_RENDER);

    QSet<int> selection;

    if (nbHits > 0)
        for (int i=0; i<nbHits; ++i)
            selection.insert((drawArea()->selectBuffer())[4*i+3]);

    foreach(int idx, selection){
        Face f(idx);

        switch(currentMode)
        {
            case CONTROL_FACES:
                if(selectMode == ADD){
                    controlFaces.insert(f);
                    anchorFaces.remove(f);
                }
                if(selectMode == REMOVE){
                    controlFaces.remove(f);
                }
                break;

            case ANCHOR_FACES:
                if(selectMode == ADD) {anchorFaces.insert(f); controlFaces.remove(f);  }
                if(selectMode == REMOVE) anchorFaces.remove(f);
                break;
            case DEFORM:
                break;
        }
    }
コード例 #15
0
/* @Core */
Mat PDCounter::detect(Mat& input) {
    string log1("Begin detecting...\n");
    Mat output = input.clone();
    for (vector<PDDetector>::iterator it = Detectors.begin(); it != Detectors.end(); it++) {
        (*it).detect(output, Trackers);// NO parallel
    }
    string log2("All areas are detected...\n");

    string lost = i_to_s(Trackers.tracking(output)); // NO parallel

    string log3("Tracking completed...\nThe trackers lost " + lost + " pedestrians in this frame.\n");

    if (showPedestrian) {
        drawFounds(output, Trackers.getCurrRects(), PEDESTRIAN_COLOR);
    }
    if (showArea) {
        for (vector<PDDetector>::iterator it = Detectors.begin(); it != Detectors.end(); it++) {
            drawArea(output, (*it).getArea(), AREA_COLOR);
        }
    }
    if (showTrajectory) {
        for (int i = 0; i < Trackers.getSize(); i++) {
            drawTrajectory(output, Trackers[i].getTrajectory(), Trajectory_COLOR);
        }
    }
    string log4("Drawing completed");
    lastLog = log1 + log2 + log3 + log4;
    return output;
}
コード例 #16
0
ファイル: dynamic_voxel.cpp プロジェクト: TzarIvan/topo-blend
void dynamic_voxel::create(){

    showMesh = false;
    showVoxels = false;

    drawArea()->updateGL();
}
コード例 #17
0
void Aborigens::drawTile(Engine& engine, Tile& tile, const Point& offset)
{
  Point screenPos = tile.mappos() + offset;

  if( tile.overlay().isNull() )
  {
    //draw background
    //engine.draw( tile.picture(), screenPos );
    drawPass( engine, tile, offset, Renderer::ground );
    drawPass( engine, tile, offset, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();
    int discontentLevel = 0;
    if( _isVisibleObject( overlay->type() ) )
    {
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::native_hut )
    {
      auto nativeHut = overlay.as<NativeHut>();
      discontentLevel = (int)nativeHut->discontent();
      needDrawAnimations = false;

      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::inHouseBase );
    }
    else
    {
      drawArea( engine, overlay->area(), offset, ResourceGroup::foodOverlay, OverlayPic::base );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( engine, tile, offset );
      registerTileForRendering( tile );
    }
    else if( discontentLevel >= 0 )
    {
      drawColumn( engine, screenPos, discontentLevel );
    }
  }

  tile.setRendered();
}
コード例 #18
0
ファイル: crime.cpp プロジェクト: dalerank/caesaria-game
void Crime::drawTile( const RenderInfo& rinfo, Tile& tile)
{
  if( tile.overlay().isNull() )
  {
    drawPass( rinfo, tile, Renderer::ground );
    drawPass( rinfo, tile, Renderer::groundAnimation );
  }
  else
  {
    bool needDrawAnimations = false;
    OverlayPtr overlay = tile.overlay();
    int crime = -1;

    if( _isVisibleObject( overlay->type() ) )
    {
      needDrawAnimations = true;
    }
    else if( overlay->type() == object::house )
    {
      auto house = overlay.as<House>();
      crime = (int)house->getServiceValue( Service::crime );
      needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty(); // In case of vacant terrain

      drawArea( rinfo, overlay->area(), config::layer.ground, config::tile.house  );
    }
    else
    {
      drawArea( rinfo, overlay->area(), config::layer.ground, config::tile.constr  );
    }

    if( needDrawAnimations )
    {
      Layer::drawTile( rinfo, tile );
      registerTileForRendering( tile );
    }
    else if( crime >= 0)
    {
      Point screenPos = tile.mappos() + rinfo.offset;
      drawColumn( rinfo, screenPos, crime );
    }
  }

  tile.setRendered();
}
コード例 #19
0
ファイル: itemdocument.cpp プロジェクト: zoltanp/ktechlab-0.3
void ItemDocument::print() {
	static KPrinter *printer = new KPrinter;

	if (! printer->setup(KTechlab::self()))
		return;

	// setup the printer.  with Qt, you always "print" to a
	// QPainter.. whether the output medium is a pixmap, a screen,
	// or paper
	QPainter p;
	p.begin(printer);

	// we let our view do the actual printing
	QPaintDeviceMetrics metrics(printer);

	// Round to 16 so that we cut in the middle of squares
	int w = metrics.width();
	w = (w & 0xFFFFFFF0) + ((w << 1) & 0x10);

	int h = metrics.height();
	h = (h & 0xFFFFFFF0) + ((h << 1) & 0x10);

	p.setClipping(true);
	p.setClipRect(0, 0, w, h, QPainter::CoordPainter);

	// Send off the painter for drawing
	m_canvas->setBackgroundPixmap(0);
	QRect bounding = canvasBoundingRect();

	unsigned int rows = (unsigned) std::ceil(double(bounding.height()) / double(h));
	unsigned int cols = (unsigned) std::ceil(double(bounding.width()) / double(w));

	int offset_x = bounding.x();
	int offset_y = bounding.y();

	for (unsigned row = 0; row < rows; ++row) {
		for (unsigned col = 0; col < cols; ++col) {
			if (row != 0 || col != 0)
				printer->newPage();

			QRect drawArea(offset_x + (col * w), offset_y + (row * h), w, h);

			m_canvas->drawArea(drawArea, & p);

			p.translate(-w, 0);
		}

		p.translate(w * cols, -h);
	}

	updateBackground();

	// and send the result to the printer
	p.end();
}
コード例 #20
0
void GameArea::initGame()
{
  init_map(_cur_map, _row, _col);
  init_map(_copy_map, _row, _col);
  _cur_block = nullptr;
  _next_block = nullptr;
  _is_first_item = true;
  _over = false;
  _full_row = 0;
  drawArea();
  _score = 0;
}
コード例 #21
0
ファイル: decorator.cpp プロジェクト: dalerank/caesaria-game
void Decorator::draw( Pictures& stack, const Rect& rectangle, Decorator::Mode mode, Rects* rects, bool negY )
{
  switch( mode )
  {
  case whiteArea: drawArea( stack, rectangle, 348, 10, 12 ); break;
  case blackArea: drawArea( stack, rectangle, 487, 5, 7 ); break;
  case greyPanel: drawPanel( stack, rectangle, 25, rects ); break;
  case lightgreyPanel: drawPanel( stack, rectangle, 22, rects ); break;
  case greyPanelBig: drawPanel( stack, rectangle, 631, rects ); break;
  case lightgreyPanelBig: drawPanel( stack, rectangle, 634, rects ); break;
  case greyPanelSmall: drawPanel( stack, rectangle, 68, rects ); break;
  case brownPanelSmall: drawPanel( stack, rectangle, 65, rects ); break;
  case greenPanelSmall: drawPanel( stack, rectangle, 62, rects ); break;
  case redPanelSmall: drawPanel( stack, rectangle, 1165, rects ); break;
  case whiteBorder: drawBorder( stack, rectangle, 336, 468, 347, 358, 10, 12, 335, 467, 346, 478 );  break;
  case blackBorder: drawBorder( stack, rectangle, 480, 522, 486, 492, 5, 7, 479, 521, 485, 527 ); break;
  case brownBorder: drawBorder(stack, rectangle, 555 ); break;
  case whiteBorderA: drawBorder( stack, rectangle, 547 ); break;
  case whiteFrame:
  {
    Point offset( 16, 16 );
    draw( stack, Rect( rectangle.lefttop() + offset, rectangle.rightbottom() - offset ), whiteArea );
    draw( stack, rectangle, whiteBorder );    // draws borders
  }
  break;

  case blackFrame:
    draw(stack, Rect( rectangle.lefttop(), rectangle.rightbottom() - Point( 16, 16 ) ), blackArea );    // draws the inside of the box
    draw(stack, rectangle, blackBorder );    // draws borders
  break;

  case brownFrame: drawFrame(stack, rectangle, 28); break;
  case greyFrame: drawFrame(stack, rectangle, 37); break;
  case pure: break;
  default: break;
  }

  if( !negY )
    reverseYoffset( stack );
}
コード例 #22
0
void filter::applyFilter(RichParameterSet* pars){
    /// Draw the input vertices if overlay was required
    if(pars->getBool(overlayInput)){
        Vector3VertexProperty points = mesh()->get_vertex_property<Vector3>(VPOINT);
        foreach(Vertex v, mesh()->vertices())
            drawArea()->drawPoint(points[v],1,Qt::red);
    }
            
    bool isEmbed = pars->getBool(embedVertices);

    // We need normals
    mesh()->update_face_normals();
    mesh()->update_vertex_normals();

    QElapsedTimer timer;
    timer.start();
        VoronoiHelper h(mesh(), drawArea());
        h.computeVoronoiDiagram();
        h.searchVoronoiPoles();
        h.getMedialSpokeAngleAndRadii();
        h.setToMedial(isEmbed);
    qDebug() << "[VOROMAT]" << timer.elapsed() << "ms";
            
    /// Colorize one of the exposed properties
    if( pars->getBool(colorizeRadii) || pars->getBool(colorizeAngle) ){
        drawArea()->setRenderer(mesh(),"Smooth");
        std::string propname;
        if( pars->getBool(colorizeRadii) ) propname = VRADII;
        if( pars->getBool(colorizeAngle) ) propname = VANGLE;
        ColorizeHelper(mesh(),unsignedColorMap).vscalar_to_vcolor(propname);
        // qDebug() << ScalarStatisticsHelper(mesh).statistics(propname);
    }

#if 0
    /// Test of lambda medial axis
	drawArea()->deleteAllRenderObjects();
	Vector3VertexProperty vpoles = mesh()->get_vertex_property<Vector3>(VPOLE);
	ScalarVertexProperty  vangles = mesh()->get_vertex_property<Scalar>(VANGLE);
	SurfaceMeshModel* model = new SurfaceMeshModel("", "cloud");
	qDebug() << StatisticsHelper<Scalar>(mesh()).statistics(VANGLE);
	document()->addModel(model);
	drawArea()->setRenderer(mesh(),"Transparent");
	drawArea()->setRenderer(model, "Vertices as Dots");
	foreach(Vertex v, mesh()->vertices()){
	    if(vangles[v] > 3.1415*.4)
	        drawArea()->drawPoint(vpoles[v]);
	}
#endif
}
コード例 #23
0
void GameArea::startGame()
{
  _start_x = _init_start_x;
  _start_y = _init_start_y;
  _full_row = 0;

  if (_is_first_item) {
    _cur_block = _block->genBlock();
    _is_first_item = false;
  } else {
    _cur_block = _next_block;
  }

  _next_block = _block->genBlock();
  cur_block_2_map();
  drawArea();
}
コード例 #24
0
bool ForestOrthoLayer::doCreateTile(int level, int tx, int ty, TileStorage::Slot *data)
{
    if (Logger::DEBUG_LOGGER != NULL) {
        ostringstream oss;
        oss << "OrthoForest tile " << getProducerId() << " " << level << " " << tx << " " << ty;
        Logger::DEBUG_LOGGER->log("ORTHO", oss.str());
    }
    if (level >= displayLevel) {
        ptr<FrameBuffer> fb  = SceneManager::getCurrentFrameBuffer();

        TileCache::Tile * t = graphProducer->findTile(level, tx, ty);
        assert(t != NULL);
        ObjectTileStorage::ObjectSlot *graphData = dynamic_cast<ObjectTileStorage::ObjectSlot*>(t->getData());
        GraphPtr g = graphData->data.cast<Graph>();
        if (g != NULL) {

            vec3d q = getTileCoords(level, tx, ty);
            float scale = 2.0f * (1.0f - getTileBorder() * 2.0f / getTileSize()) / q.z;
            vec3d tileOffset = vec3d(q.x + q.z / 2.0f, q.y + q.z / 2.0f, scale);
            //offsetU->set(vec3f(q.x + q.z / 2.0f, q.y + q.z / 2.0f, scale));
            offsetU->set(vec3f(0.0, 0.0, 1.0));
            colorU->set(vec4f(color.x, color.y, color.z, color.w));

            mesh->setMode(TRIANGLES);
            mesh->clear();
            ptr<Graph::AreaIterator> ai = g->getAreas();
            while (ai->hasNext()) {
                AreaPtr a = ai->next();
                tess->beginPolygon(mesh);
                drawArea(tileOffset, a, *tess);
                tess->endPolygon();
            }
            fb->draw(layerProgram, *mesh);
        } else {
            if (Logger::DEBUG_LOGGER != NULL) {
                ostringstream oss;
                oss << "NULL Graph : " << level << " " << tx << " " << ty;
                Logger::DEBUG_LOGGER->log("GRAPH", oss.str());
            }
        }
    }
    return true;
}
コード例 #25
0
ファイル: wmnmap.cpp プロジェクト: PavelVPV/mapgen
void WMNMap::startGenerate(int timeInterval)
{
    if (haveInputParams == false)
    {
        QMessageBox::critical(this, "Failed", "Input parameters not setted", QMessageBox::Close);
        return;
    }

    if (timeInterval < 1 || timeInterval > 8)
    {
        QMessageBox::critical(this, "Failed", "Unexpected time interval", QMessageBox::Close);
        return;
    }

    generateArea();

    generateTrafficFromTP(TrafficMap.at(timeInterval - 1));
    tryMinimize();

    drawArea();
    drawLinks();
}
コード例 #26
0
ファイル: syswindow.c プロジェクト: zhaoyuhang/THSS14-XV6
int sys_updatePartialWindow()
{
	int window_id;
	int x1, y1, x2, y2;
	color16* context;
	WindowLink pWindow;
	if (argint(0, &window_id) < 0)
		return -1;
	pWindow = getWindowById(window_id);
        cprintf("updatePartialWindow called: %d\n", pWindow);
	if (pWindow == 0) return -1;
	int size = ((pWindow->window_position).right_x - (pWindow->window_position).left_x) *
		((pWindow->window_position).right_y - (pWindow->window_position).left_y);
	//cprintf("window size: %d\n", size);
	if (size < 0) return -1;

	if (argptr(1, (void*)&context, sizeof(color16) * size) < 0)
		return -1;
	if (argint(2, &x1) < 0 || argint(3, &y1) < 0 || argint(4, &x2) < 0 || argint(5, &y2) < 0)
		return -1;
	drawArea(pWindow, context, x1, y1, x2, y2);
	return 0;
}
コード例 #27
0
ファイル: dynamic_voxel.cpp プロジェクト: TzarIvan/topo-blend
bool dynamic_voxel::keyPressEvent( QKeyEvent* event )
{
    bool used = false;

    if(event->key() == Qt::Key_V) {
        showVoxels = !showVoxels;

		Vector3d to(2,2,0);
		double radius = 0.5;

		vox.begin();

		QVector<Vector3d> points;
		points.push_back(Vector3d(-1,-1,0));
		points.push_back(Vector3d(0,-1,0));
		points.push_back(Vector3d(0,0,0));
		points.push_back(Vector3d(1,0,0));
		points.push_back(Vector3d(1,1,0));
		points.push_back(Vector3d(2,1,0));
		points.push_back(Vector3d(2,2,0));
		vox.addPolyLine(points, radius);

		vox.end();

        used = true;
    }

    if(event->key() == Qt::Key_M) {

        used = true;
    }

    drawArea()->updateGL();

    return used;
}
コード例 #28
0
ファイル: layerwater.cpp プロジェクト: dalerank/caesaria-game
void Water::drawTile( const RenderInfo& rinfo, Tile& tile)
{
  bool needDrawAnimations = false;
  Size areaSize = Size::square(1);

  if( tile.overlay().isNull() )
  {
    drawLandTile( rinfo, tile );
  }
  else
  {
    OverlayPtr overlay = tile.overlay();
    if( _isVisibleObject( overlay->type() ) )
    {
      // Base set of visible objects
      needDrawAnimations = true;
      areaSize = overlay->size();
    }
    else
    {
      int tileNumber = 0;
      bool haveWater = tile.param( Tile::pFountainWater ) > 0 || tile.param( Tile::pWellWater ) > 0;
      needDrawAnimations = false;

      if ( overlay->type() == object::house )
      {
        auto house = overlay.as<House>();
        needDrawAnimations = (house->level() <= HouseLevel::hovel) && house->habitants().empty();

        tileNumber = config::tile.house-1;
        haveWater = haveWater || house->hasServiceAccess(Service::fountain) || house->hasServiceAccess(Service::well);
      }

      if( !needDrawAnimations )
      {
        tileNumber += (haveWater ? config::layer.haveWater : 0);
        tileNumber += tile.param( Tile::pReservoirWater ) > 0 ? config::layer.reservoirRange : 0;

        drawArea( rinfo, overlay->area(), config::layer.water, config::tile.constr + tileNumber );

        areaSize = Size::zero;
      }
    }

    if ( needDrawAnimations )
    {
      Point screenPos = tile.mappos() + rinfo.offset;
      Layer::drawTile( rinfo, tile );

      if( _d->showWaterValue )
      {
        auto aqueduct = tile.overlay<Aqueduct>();
        if( aqueduct.isValid() )
        {
          Font f = Font::create( "FONT_2" ).withColor( ColorList::red );
          int df = aqueduct->water();
          f.draw( rinfo.engine.screen(), utils::format( 0xff, "%x", df), screenPos + Point( 20, -80 ), false );
        }

        int wellValue = tile.param( Tile::pWellWater );
        int fountainValue = tile.param( Tile::pFountainWater );
        int reservoirWater = tile.param( Tile::pReservoirWater );

        if( wellValue > 0 || fountainValue > 0 || reservoirWater > 0 )
        {
          std::string text = utils::format( 0xff, "%d/%d/%d", wellValue, fountainValue, reservoirWater );
          Font f = Font::create( "FONT_2" ).withColor( ColorList::red );
          f.draw( rinfo.engine.screen(), text, screenPos + Point( 20, -80 ), false );
        }
      }
      registerTileForRendering( tile );
    }
  }

  if( !needDrawAnimations && ( tile.isWalkable(true) || tile.getFlag( Tile::tlOverlay ) ) )
  {
    _drawLandTile( rinfo, tile, areaSize );
  }

  tile.setRendered();
}
コード例 #29
0
void GameArea::key_press(QKeyEvent* event)
{
  switch (event->key()) {

  case Qt::Key_Left: {
    _start_x -= _step;

    if (is_left_most()) {
      _start_x += _step;
    } else {
      cur_block_2_map();
      drawArea();
    }

    break;
  }

  case Qt::Key_Right: {
    _start_x += _step;

    if (is_right_most()) {
      _start_x -= _step;
    } else {
      cur_block_2_map();
      drawArea();
    }

    break;
  }

  case Qt::Key_Up: {
    rotate_block();
    cur_block_2_map();
    drawArea();

    break;
  }

  case Qt::Key_Down: {
    if (_is_straight_down) {
      _start_y += _step;

      if (isMoveFini()) {
        _start_y -= _step;
      } else {
        cur_block_2_map();
        drawArea();
      }
    } else {
      int i = 0;
      while (!this->isMoveFini()) {
        _start_y += _step;
        ++i;
      }
      _start_y -= _step;

      if (i > 0) {
        cur_block_2_map();
        drawArea();
      }
    }

    break;
  }

  default:
    QFrame::keyPressEvent(event);
  }
}
コード例 #30
0
void analyze::applyFilter(RichParameterSet* pars)
{
	starlab::LineSegments * bbox_lines = new starlab::LineSegments(1);
	std::vector<starlab::LineSegments*> dir_lines(3, new starlab::LineSegments(2));
	starlab::PolygonSoup * ps = new starlab::PolygonSoup;
	std::vector< std::vector<double> > colors = starlab::randomColors(12);

	mainWindow()->setStatusBarMessage("Finding connected pieces..");
	QApplication::processEvents();
	std::vector< SurfaceMesh::SurfaceMeshModel* > pieces = connectedPieces( mesh() );
	std::vector<Vector3> all_points;

	std::vector<MinOBB::OBB> obb( pieces.size() );

	mainWindow()->setStatusBarMessage("Finding OBBs..");
	QApplication::processEvents();
	QElapsedTimer timer; timer.start();

	if( pars->getBool("IsParallel") )
	{
		int N = pieces.size();

		#pragma omp parallel for
		for(int i = 0; i < N; i++)
		{
			Vector3VertexProperty points = pieces[i]->vertex_coordinates();
			std::vector<Vector3> all_points;
			for(auto v: pieces[i]->vertices()) all_points.push_back( points[v] );

			obb[i] = MinOBB::OBB( all_points, true );
		}
	}
	else
	{
		for(size_t pi = 0; pi < pieces.size(); pi++)
		{
			auto piece = pieces[pi];

			Vector3VertexProperty points = piece->vertex_coordinates();
			std::vector<Vector3> all_points;
			for(auto v: piece->vertices()) all_points.push_back( points[v] );

			bool isAddJitter = true;
			obb[pi] = MinOBB::OBB( all_points, isAddJitter );

			std::vector<Vector3> dir(3);
			for(int i = 0; i < 3; i++){
				dir[0][i] = obb[pi].bb.dir_1[i];
				dir[1][i] = obb[pi].bb.dir_2[i];
				dir[2][i] = obb[pi].bb.dir_3[i];
			}

			std::vector<Vector3> c = obb[pi].corners<Vector3>();

			bbox_lines->addLines( (QVector<Vector3>() << c[0] << c[1] << c[5] << c[4] << c[0]).toStdVector(), Qt::black );
			bbox_lines->addLines( (QVector<Vector3>() << c[0] << c[1] << c[3] << c[2] << c[0]).toStdVector(), Qt::black );
			bbox_lines->addLines( (QVector<Vector3>() << c[6] << c[7] << c[3] << c[2] << c[6]).toStdVector(), Qt::black );
			bbox_lines->addLines( (QVector<Vector3>() << c[6] << c[7] << c[5] << c[4] << c[6]).toStdVector(), Qt::black );

			Vector3 mean(0,0,0);
			for(auto p: c) mean += p;
			mean /= c.size();

			dir_lines[0]->addLine(mean, Vector3(mean + dir[0] * 0.5 * obb[pi].bb.length(0)), Qt::red);
			dir_lines[1]->addLine(mean, Vector3(mean + dir[1] * 0.5 * obb[pi].bb.length(1)), Qt::green);
			dir_lines[2]->addLine(mean, Vector3(mean + dir[2] * 0.5 * obb[pi].bb.length(2)), Qt::blue);

			if( pars->getBool("VisualizeBoxes") ){
				std::vector< std::vector<Vector3> > face = obb[pi].faces<Vector3>();
				for(size_t i = 0; i < face.size(); i++){
					ps->addPoly((QVector<starlab::QVector3>() << face[i][2] << face[i][1] << face[i][0]), QColor::fromRgbF(colors[i][0],colors[i][1],colors[i][2], 0.1));
				}
			}
		}
	}

	if( pars->getBool("Visualize") )
	{
		drawArea()->addRenderObject(bbox_lines);
		for(size_t i = 0; i < dir_lines.size(); i++) drawArea()->addRenderObject( dir_lines[i] );
		drawArea()->addRenderObject(ps);
	}

	mainWindow()->setStatusBarMessage( QString("Done finding OBBs. (%1 ms)").arg(timer.elapsed()));
	QApplication::processEvents();

	Structure::Graph * graph = new Structure::Graph();

	for(size_t bi = 0; bi < obb.size(); bi++)
	{
		MinOBB::OBB::OBBOX<Vector3> oi( obb[bi].bb );
		
		std::vector<Vector3> dir(3);
		for(int i = 0; i < 3; i++){
			dir[0][i] = obb[bi].bb.dir_1[i];
			dir[1][i] = obb[bi].bb.dir_2[i];
			dir[2][i] = obb[bi].bb.dir_3[i];
		}

		Vector3 delta = dir[2] * oi.HalfSize[2];

		Vector3 from = oi.Center + delta;
		Vector3 to = oi.Center - delta;

		NURBS::NURBSCurved curve = NURBS::NURBSCurved::createCurve(from, to);
		Structure::Curve * n = new Structure::Curve(curve, QString("node%1").arg(bi));

		graph->addNode( n );
	}

	mainWindow()->setStatusBarMessage("Now finding edges..");
	QApplication::processEvents();

	starlab::LineSegments * graphLines = new starlab::LineSegments(4);
	for(size_t i = 0; i < obb.size(); i++){
		MinOBB::OBB::OBBOX<Vector3> oi( obb[i].bb );
		for(size_t j = i + 1; j < obb.size(); j++){
			MinOBB::OBB::OBBOX<Vector3> oj( obb[j].bb );

			bool isIsect = MinOBB::OBB::testObbObb<Vector3>( oi, oj );
			if( isIsect ) 
			{
				graph->addEdge(QString("node%1").arg(i), QString("node%1").arg(j));

				if( pars->getBool("VisualizeGraph") )
					graphLines->addLine( oi.Center, oj.Center, Qt::magenta );
			}
		}
	}

	drawArea()->addRenderObject( graphLines );

	graph->saveToFile("graph.xml");
}