本文整理汇总了C++中MapLine::copy方法的典型用法代码示例。如果您正苦于以下问题:C++ MapLine::copy方法的具体用法?C++ MapLine::copy怎么用?C++ MapLine::copy使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MapLine
的用法示例。
在下文中一共展示了MapLine::copy方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addLines
/* MapArchClipboardItem::addLines
* Copies [lines] and all related map structures
*******************************************************************/
void MapArchClipboardItem::addLines(vector<MapLine*> lines)
{
// Get sectors and sides to copy
vector<MapSector*> copy_sectors;
vector<MapSide*> copy_sides;
for (unsigned a = 0; a < lines.size(); a++)
{
MapSide* s1 = lines[a]->s1();
MapSide* s2 = lines[a]->s2();
// Front side
if (s1)
{
copy_sides.push_back(s1);
if (std::find(copy_sectors.begin(), copy_sectors.end(), s1->getSector()) == copy_sectors.end())
copy_sectors.push_back(s1->getSector());
}
// Back side
if (s2)
{
copy_sides.push_back(s2);
if (std::find(copy_sectors.begin(), copy_sectors.end(), s2->getSector()) == copy_sectors.end())
copy_sectors.push_back(s2->getSector());
}
}
// Copy sectors
for (unsigned a = 0; a < copy_sectors.size(); a++)
{
MapSector* copy = new MapSector(NULL);
copy->copy(copy_sectors[a]);
sectors.push_back(copy);
}
// Copy sides
for (unsigned a = 0; a < copy_sides.size(); a++)
{
MapSide* copy = new MapSide();
copy->copy(copy_sides[a]);
// Set relative sector
for (unsigned b = 0; b < copy_sectors.size(); b++)
{
if (copy_sides[a]->getSector() == copy_sectors[b])
{
copy->setSector(sectors[b]);
break;
}
}
sides.push_back(copy);
}
// Get vertices to copy (and determine midpoint)
double min_x = 9999999;
double max_x = -9999999;
double min_y = 9999999;
double max_y = -9999999;
vector<MapVertex*> copy_verts;
for (unsigned a = 0; a < lines.size(); a++)
{
MapVertex* v1 = lines[a]->v1();
MapVertex* v2 = lines[a]->v2();
// Add vertices to copy list
if (std::find(copy_verts.begin(), copy_verts.end(), v1) == copy_verts.end())
copy_verts.push_back(v1);
if (std::find(copy_verts.begin(), copy_verts.end(), v2) == copy_verts.end())
copy_verts.push_back(v2);
// Update min/max
if (v1->xPos() < min_x) min_x = v1->xPos();
if (v1->xPos() > max_x) max_x = v1->xPos();
if (v1->yPos() < min_y) min_y = v1->yPos();
if (v1->yPos() > max_y) max_y = v1->yPos();
if (v2->xPos() < min_x) min_x = v2->xPos();
if (v2->xPos() > max_x) max_x = v2->xPos();
if (v2->yPos() < min_y) min_y = v2->yPos();
if (v2->yPos() > max_y) max_y = v2->yPos();
}
// Determine midpoint
double mid_x = min_x + ((max_x - min_x) * 0.5);
double mid_y = min_y + ((max_y - min_y) * 0.5);
this->midpoint.set(mid_x, mid_y);
// Copy vertices
for (unsigned a = 0; a < copy_verts.size(); a++)
{
MapVertex* copy = new MapVertex(copy_verts[a]->xPos() - mid_x, copy_verts[a]->yPos() - mid_y);
copy->copy(copy_verts[a]);
vertices.push_back(copy);
}
// Copy lines
for (unsigned a = 0; a < lines.size(); a++)
//.........这里部分代码省略.........
示例2: findInMap
/* MapArchClipboardItem::pasteToMap
* Pastes copied architecture to [map] at [position]
*******************************************************************/
vector<MapVertex*> MapArchClipboardItem::pasteToMap(SLADEMap* map, fpoint2_t position)
{
std::map<MapVertex*, MapVertex*> vertMap;
std::map<MapSector*, MapSector*> sectMap;
std::map<MapSide*, MapSide*> sideMap;
// Not used yet...
// std::map<MapLine*, MapLine*> lineMap;
// Add vertices
vector<MapVertex*> new_verts;
for (unsigned a = 0; a < vertices.size(); a++)
{
new_verts.push_back(map->createVertex(position.x + vertices[a]->xPos(), position.y + vertices[a]->yPos()));
new_verts.back()->copy(vertices[a]);
vertMap[vertices[a]] = new_verts.back();
}
// Add sectors
for (unsigned a = 0; a < sectors.size(); a++)
{
MapSector* new_sector = map->createSector();
new_sector->copy(sectors[a]);
sectMap[sectors[a]] = new_sector;
}
// Add sides
int first_new_side = map->nSides();
for (unsigned a = 0; a < sides.size(); a++)
{
// Get relative sector
MapSector* sector = findInMap(sectMap, sides[a]->getSector());
MapSide* new_side = map->createSide(sector);
new_side->copy(sides[a]);
sideMap[sides[a]] = new_side;
}
// Add lines
int first_new_line = map->nLines();
for (unsigned a = 0; a < lines.size(); a++)
{
// Get relative vertices
MapVertex* v1 = findInMap(vertMap, lines[a]->v1());
MapVertex* v2 = findInMap(vertMap, lines[a]->v2());
if (!v1)
{
wxLogMessage("no v1");
continue;
}
if (!v2)
{
wxLogMessage("no v2");
}
MapLine* newline = map->createLine(v1, v2, true);
newline->copy(lines[a]);
// lineMap[lines[a]] = newline;
// Set relative sides
bool s1 = false;
bool s2 = !(lines[a]->s2());
MapSide* newS1 = findInMap(sideMap, lines[a]->s1());
MapSide* newS2 = findInMap(sideMap, lines[a]->s2());
if(newS1)
newline->setS1(newS1);
if(newS2)
newline->setS2(newS2);
// Set important flags (needed when copying from Doom/Hexen format to UDMF)
// Won't be needed when proper map format conversion stuff is implemented
theGameConfiguration->setLineBasicFlag(
"twosided",
newline,
map->currentFormat(),
(newS1 && newS2)
);
theGameConfiguration->setLineBasicFlag(
"blocking",
newline,
map->currentFormat(),
!newS2
);
}
// TODO:
// - Split lines
// - Merge lines
//// Fix sector references
//// TODO: figure out what lines are 'outside' on copy, only fix said lines
//for (unsigned a = first_new_line; a < map->nLines(); a++)
//{
// MapLine* line = map->getLine(a);
// MapSector* sec1 = map->getLineSideSector(line, true);
// MapSector* sec2 = map->getLineSideSector(line, false);
// int i1 = -1;
//.........这里部分代码省略.........
示例3: findInMap
/* MapArchClipboardItem::pasteToMap
* Pastes copied architecture to [map] at [position]
*******************************************************************/
vector<MapVertex*> MapArchClipboardItem::pasteToMap(SLADEMap* map, fpoint2_t position)
{
std::map<MapVertex*, MapVertex*> vertMap;
std::map<MapSector*, MapSector*> sectMap;
std::map<MapSide*, MapSide*> sideMap;
// Not used yet...
// std::map<MapLine*, MapLine*> lineMap;
// Add vertices
vector<MapVertex*> new_verts;
for (unsigned a = 0; a < vertices.size(); a++)
{
new_verts.push_back(map->createVertex(position.x + vertices[a]->xPos(), position.y + vertices[a]->yPos()));
new_verts.back()->copy(vertices[a]);
vertMap[vertices[a]] = new_verts.back();
}
// Add sectors
for (unsigned a = 0; a < sectors.size(); a++)
{
MapSector* new_sector = map->createSector();
new_sector->copy(sectors[a]);
sectMap[sectors[a]] = new_sector;
}
// Add sides
int first_new_side = map->nSides();
for (unsigned a = 0; a < sides.size(); a++)
{
// Get relative sector
MapSector* sector = findInMap(sectMap, sides[a]->getSector());
MapSide* new_side = map->createSide(sector);
new_side->copy(sides[a]);
sideMap[sides[a]] = new_side;
}
// Add lines
int first_new_line = map->nLines();
for (unsigned a = 0; a < lines.size(); a++)
{
// Get relative vertices
MapVertex* v1 = findInMap(vertMap, lines[a]->v1());
MapVertex* v2 = findInMap(vertMap, lines[a]->v2());
if (!v1)
{
wxLogMessage("no v1");
continue;
}
if (!v2)
{
wxLogMessage("no v2");
}
MapLine* newline = map->createLine(v1, v2, true);
newline->copy(lines[a]);
// lineMap[lines[a]] = newline;
// Set relative sides
bool s1 = false;
bool s2 = !(lines[a]->s2());
MapSide* newS1 = findInMap(sideMap, lines[a]->s1());
MapSide* newS2 = findInMap(sideMap, lines[a]->s2());
if(newS1)
newline->setS1(newS1);
if(newS2)
newline->setS2(newS2);
}
// TODO:
// - Split lines
// - Merge lines
// Fix sector references
// TODO: figure out what lines are 'outside' on copy, only fix said lines
for (unsigned a = first_new_line; a < map->nLines(); a++)
{
MapLine* line = map->getLine(a);
MapSector* sec1 = map->getLineSideSector(line, true);
MapSector* sec2 = map->getLineSideSector(line, false);
int i1 = -1;
int i2 = -2;
if (sec1) i1 = sec1->getIndex();
if (sec2) i2 = sec2->getIndex();
map->setLineSector(a, i1, true);
map->setLineSector(a, i2, false);
}
return new_verts;
}