Пример #1
0
void			Graph::newTree()
{
  std::vector<Entity*> tmp;

  std::cout << "New tree." << std::endl;
  tmp.push_back(new Entity(NULL));
  _entities.push_back(tmp);
  (*tmp.begin())->setPos(sf::Vector2<float>(100, 100));
  replaceEntity();
}
Пример #2
0
void			Graph::loadTree(char *filename)
{
  int x;
  int y;
  void *tmpaddr;
  void *tmpfather;
  std::map<void *, Entity *> readdr;
  std::ifstream file(filename, std::ifstream::in);

  readdr[NULL] = NULL;
  if (!file.good())
    {
      newTree();
      return;
    }
  std::cout << "Load tree." << std::endl;
  file >> x;
  if (x <= 0)
    {
      std::cout << "Fail." << std::endl;
      newTree();
      return;
    }
  _entities.resize(x);
  x = -1;
  while (++x < _entities.size())
    {
      file >> y;
      _entities[x].resize(y);
      y = -1;
      while (++y < _entities[x].size())
	{
	  file >> tmpaddr;
	  file >> tmpfather;
	  _entities[x][y] = readdr[tmpaddr] = new Entity(readdr[tmpfather]);
	  _entities[x][y]->deserialize(file);
	}
    }
  replaceEntity();
}
Пример #3
0
void			Graph::saveToImage()
{
  std::ostringstream oss;
  time_t timer = time(NULL);
  oss << timer;
  std::string str("shots/shot-");
  str = str + oss.str();
  std::replace(str.begin(), str.end(), ' ', '-');
  str.erase (str.end()-1);
  sf::RenderTexture	texture;
  int height;
  int width;

  replaceEntity();
  height = width = 0;
  for(std::vector<std::vector<Entity*> >::iterator i = _entities.begin(); i != _entities.end();++i)
    {
      for(std::vector<Entity*>::iterator j = (*i).begin(); j != (*i).end();++j)
	{
	  sf::Vector2<float> vect;

	  vect = (*j)->getBotRight();
	  if (height < vect.y)
	    height = vect.y;
	  if (width < vect.x)
	    width = vect.x;
	}
    }
  texture.create(width, height);
  texture.clear(sf::Color::White);
  for(std::vector<std::vector<Entity*> >::iterator i = _entities.begin(); i != _entities.end();++i)
    {
      for(std::vector<Entity*>::iterator j = (*i).begin(); j != (*i).end();++j)
	{
	  (*j)->draw(texture);
	}
    }
  texture.display();
  texture.getTexture().copyToImage().saveToFile(str + ".jpg");
}
Пример #4
0
static Acad::ErrorStatus 
flattenPoly(AcDb3dSolid* solid,AcDbEntity*& ent,const AcGePoint2d& savedCenter, const AcGePoint2d& savedStartPoint,
int savedNumSides,const AcGeVector3d& savedNormal,const char* savedName, double savedElevation)
{
    Acad::ErrorStatus es = Acad::eOk;
    
    AsdkPoly* poly = new AsdkPoly;
    if (poly==NULL)
        return Acad::eOutOfMemory;

    if ((es=poly->set(savedCenter, savedStartPoint, savedNumSides, savedNormal, savedName, savedElevation))!=Acad::eOk){
        delete poly;
        return es;
    }
    
    // Change the entity to be the poly. 
    
    if ((es = poly->setPropertiesFrom(solid)) != Acad::eOk) {
        delete poly;
        return es;
    }
    ent = solid;
    if ((es = ent->upgradeOpen()) != Acad::eOk) {
        delete poly;
        return es;
    }
    es = replaceEntity(ent, poly);
    if((es != Acad::eOk) && (es != Acad::eObjectToBeDeleted)) {
        ent->downgradeOpen();
        delete poly; 
        return es;
    }
    if ((es = ent->downgradeOpen()) != Acad::eOk) {
        return es;
    }
    
    return es;
}
Пример #5
0
void GameBoard::clearEntity( int x, int y )
{
  replaceEntity( x, y, ZZTEntity::createEntity( ZZTEntity::EmptySpace, 0x07 ) );
}
Пример #6
0
void			Graph::gestEvent(sf::RenderWindow &window, sf::Time time)
{
  sf::Event event;
  sf::View view;

  view = window.getView();
  view.move((-sf::Keyboard::isKeyPressed(sf::Keyboard::Left) + sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) * time.asSeconds() * 1000, (-sf::Keyboard::isKeyPressed(sf::Keyboard::Up) + sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) * time.asSeconds() * 1000);
  window.setView(view);
  while (window.pollEvent(event))
    {
      if (event.type == sf::Event::Resized)
	{
	  sf::View view;

	  view = window.getView();
	  view.setSize(event.size.width, event.size.height);
	  window.setView(view);
	}
      if (event.type == sf::Event::Closed)
	window.close();
      if (event.type == sf::Event::TextEntered)
      	{
	  if (_target != NULL)
	    _target->write(event.text.unicode);
	  replaceEntity();
      	}

      if (event.type == sf::Event::KeyPressed)
	{
	  if (event.key.code == sf::Keyboard::Escape)
	    window.close();
	  if (event.key.code == sf::Keyboard::F1)
	    saveToFile();
	  if (event.key.code == sf::Keyboard::F2)
	    saveToImage();
	}
      if (event.type == sf::Event::MouseButtonPressed)
	{
	  if (event.mouseButton.button == sf::Mouse::Left)
	    {
	      bool inside = false;

	      for(std::vector<std::vector<Entity*> >::iterator i = _entities.begin(); !inside && i != _entities.end();++i)
		{
		  for(std::vector<Entity*>::iterator j = (*i).begin(); !inside && j != (*i).end();++j)
		    {
		      State state;

		      state = (*j)->inside(window.mapPixelToCoords(sf::Vector2<int>(event.mouseButton.x, event.mouseButton.y)));
		      if (state == INSIDE)
			{
			  inside = true;
			  _target = *j;
			}
		      else if (state == KILLME)
			{
			  inside = true;
			  delete (*j);
			  (*i).erase(j);
			  if ((*i).empty())
			    _entities.erase(i);
			}
		    }
		}
	      if (!inside)
		_target = NULL;
	    }
	  replaceEntity();
	}
    }
}
Пример #7
0
static Acad::ErrorStatus 
thickenPoly(AsdkPoly* poly,AcDbEntity*& ent, AcGePoint2d&  savedCenter,AcGePoint2d&   savedStartPoint,
int& savedNumSides,AcGeVector3d&  savedNormal,char*    savedName, double& savedElevation)
{
    Acad::ErrorStatus es = Acad::eOk;
    int i;
    AcDbVoidPtrArray lines;
    AcDbVoidPtrArray regions;
    
    // Explode to a set of lines
    //
    if ((es = poly->explode(lines)) != Acad::eOk) {
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    
    // Create a region from the set of lines.
    //
    if ((es = AcDbRegion::createFromCurves(lines, regions)) != Acad::eOk) {
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    assert(regions.length() == 1);
    AcDbRegion* region = AcDbRegion::cast((AcRxObject*)regions[0]);
    assert(region != NULL);
    
    // Extrude the region to create a solid.
    //
    double height;
    if ((es = poly->getDistAtParam(6.28318530717958647692, height))
        != Acad::eOk)
    {
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    height *= 0.25;
    
    AcDb3dSolid* solid = new AcDb3dSolid;
    assert(solid != NULL);
    if ((es = solid->extrude(region, height, 0.0)) != Acad::eOk) {
        delete solid;
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    
    // Save up the data to flatten the solid.
    //
    savedCenter     = poly->center();
    savedStartPoint = poly->startPoint();
    savedNumSides   = poly->numSides();
    savedNormal     = poly->normal();
    savedElevation  = poly->elevation();
    // Copy the poly name
    //
    strcpy(savedName, poly->name());
    
    // Now we have a solid. Change the entity to be this solid
    
    if ((es = solid->setPropertiesFrom(poly)) != Acad::eOk) {
        delete solid;
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    ent = poly;
    if ((es = ent->upgradeOpen()) != Acad::eOk) {
        delete solid;
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    es = replaceEntity(ent, solid);
    if ((es != Acad::eOk) && (es != Acad::eObjectToBeDeleted)) {
        ent->downgradeOpen();
        delete solid; 
        for (i = 0; i < lines.length(); i++) {
            delete (AcRxObject*)lines[i];
        }
        for (i = 0; i < regions.length(); i++) {
            delete (AcRxObject*)regions[i];
        }
        return es;
    }
    es = ent->downgradeOpen();
    
    for (i = 0; i < lines.length(); i++) {
        delete (AcRxObject*)lines[i];
    }
    for (i = 0; i < regions.length(); i++) {
        delete (AcRxObject*)regions[i];
    }
    return es;
}