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(); }
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(); }
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"); }
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; }
void GameBoard::clearEntity( int x, int y ) { replaceEntity( x, y, ZZTEntity::createEntity( ZZTEntity::EmptySpace, 0x07 ) ); }
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(); } } }
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; }