本文整理汇总了C++中wfmath::Polygon::addCorner方法的典型用法代码示例。如果您正苦于以下问题:C++ Polygon::addCorner方法的具体用法?C++ Polygon::addCorner怎么用?C++ Polygon::addCorner使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类wfmath::Polygon
的用法示例。
在下文中一共展示了Polygon::addCorner方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createNewPolygon
void PolygonAdapter::createNewPolygon(WFMath::Polygon<2>* existingPoly)
{
delete mPolygon;
mPolygon = 0;
Ogre::SceneNode* entitySceneNode = getEntitySceneNode();
if (entitySceneNode) {
mPolygon = new Authoring::Polygon(entitySceneNode, mPositionProvider);
WFMath::Polygon<2> poly;
if (existingPoly) {
poly = *existingPoly;
} else {
poly.addCorner(0, WFMath::Point<2>(-1, -1));
poly.addCorner(1, WFMath::Point<2>(-1, 1));
poly.addCorner(2, WFMath::Point<2>(1, 1));
poly.addCorner(3, WFMath::Point<2>(1, -1));
}
mPolygon->loadFromShape(poly);
if (!mPickListener) {
mPickListener = new Authoring::PolygonPointPickListener(*mPolygon);
mPickListener->EventPickedPoint.connect(sigc::mem_fun(*this, &PolygonAdapter::pickListener_PickedPoint));
EmberOgre::getSingleton().getWorld()->getMainCamera().pushWorldPickListener(mPickListener);
}
}
}
示例2:
WFMath::Polygon<2> AreaAdapter::getDefaultPolygon() const
{
WFMath::Polygon<2> poly;
poly.addCorner(0, WFMath::Point<2>(-1, -1));
poly.addCorner(1, WFMath::Point<2>(-1, 1));
poly.addCorner(2, WFMath::Point<2>(1, 1));
poly.addCorner(3, WFMath::Point<2>(1, -1));
return poly;
}
示例3: sutherlandHodgmanKernel
WFMath::Polygon<2> sutherlandHodgmanKernel(const WFMath::Polygon<2>& inpoly, Clip clipper)
{
WFMath::Polygon<2> outpoly;
if (!inpoly.isValid()) return inpoly;
std::size_t points = inpoly.numCorners();
if (points < 3) return outpoly; // i.e an invalid result
Point2 lastPt = inpoly.getCorner(points - 1);
bool lastInside = clipper.inside(lastPt);
for (std::size_t p = 0; p < points; ++p) {
Point2 curPt = inpoly.getCorner(p);
bool inside = clipper.inside(curPt);
if (lastInside) {
if (inside) {
// emit curPt
outpoly.addCorner(outpoly.numCorners(), curPt);
} else {
// emit intersection of edge with clip line
outpoly.addCorner(outpoly.numCorners(), clipper.clip(lastPt, curPt));
}
} else {
if (inside) {
// emit both
outpoly.addCorner(outpoly.numCorners(), clipper.clip(lastPt, curPt));
outpoly.addCorner(outpoly.numCorners(), curPt);
} else {
// don't emit anything
}
} // last was outside
lastPt = curPt;
lastInside = inside;
}
return outpoly;
}
示例4: testAreaShader
void testAreaShader()
{
Mercator::Area* a1 = new Mercator::Area(1, false);
WFMath::Polygon<2> p;
p.addCorner(p.numCorners(), Point2(3, 4));
p.addCorner(p.numCorners(), Point2(10, 10));
p.addCorner(p.numCorners(), Point2(14, 6));
p.addCorner(p.numCorners(), Point2(18, 4));
p.addCorner(p.numCorners(), Point2(17, 19));
p.addCorner(p.numCorners(), Point2(6, 20));
p.addCorner(p.numCorners(), Point2(-1, 18));
p.addCorner(p.numCorners(), Point2(-8, 11));
a1->setShape(p);
Mercator::Terrain terrain(Mercator::Terrain::SHADED, 16);
Mercator::AreaShader* ashade = new Mercator::AreaShader(1);
terrain.addShader(ashade, 0);
terrain.setBasePoint(0, 0, -1);
terrain.setBasePoint(0, 1, 8);
terrain.setBasePoint(1, 0, 2);
terrain.setBasePoint(1, 1, 11);
terrain.addArea(a1);
Mercator::Segment* seg = terrain.getSegment(0,0);
assert(a1->checkIntersects(*seg));
seg->populateSurfaces();
}
示例5: testAddToSegment
void testAddToSegment()
{
Mercator::Area* a1 = new Mercator::Area(1, false);
WFMath::Polygon<2> p;
p.addCorner(p.numCorners(), Point2(1, 1));
p.addCorner(p.numCorners(), Point2(6, 1));
p.addCorner(p.numCorners(), Point2(6, 6));
p.addCorner(p.numCorners(), Point2(1, 6));
a1->setShape(p);
Mercator::Segment * seg1 = new Mercator::Segment(0,0,seg_size);
int success = a1->addToSegment(*seg1);
assert(success == 0);
Mercator::Segment * seg2 = new Mercator::Segment(1 * seg_size,0,seg_size);
success = a1->addToSegment(*seg2);
assert(success != 0);
}
示例6: testAreaShader
void testAreaShader()
{
Mercator::Area* a1 = new Mercator::Area(1, false);
WFMath::Polygon<2> p;
p.addCorner(p.numCorners(), Point2(3, 4));
p.addCorner(p.numCorners(), Point2(10, 10));
p.addCorner(p.numCorners(), Point2(14, 6));
p.addCorner(p.numCorners(), Point2(18, 4));
p.addCorner(p.numCorners(), Point2(17, 19));
p.addCorner(p.numCorners(), Point2(6, 20));
p.addCorner(p.numCorners(), Point2(-1, 18));
p.addCorner(p.numCorners(), Point2(-8, 11));
a1->setShape(p);
Mercator::Area* a2 = new Mercator::Area(1, false);
WFMath::Polygon<2> p2;
p2.addCorner(p2.numCorners(), Point2(25, 18));
p2.addCorner(p2.numCorners(), Point2(72, 22));
p2.addCorner(p2.numCorners(), Point2(60, 30));
p2.addCorner(p2.numCorners(), Point2(27, 28));
p2.addCorner(p2.numCorners(), Point2(25, 45));
p2.addCorner(p2.numCorners(), Point2(3, 41));
p2.addCorner(p2.numCorners(), Point2(-2, 20));
a2->setShape(p2);
Mercator::Terrain terrain(Mercator::Terrain::SHADED, 16);
Mercator::Shader * base_shader =
new Mercator::FillShader(Mercator::Shader::Parameters());
terrain.addShader(base_shader, 0);
Mercator::AreaShader* ashade = new Mercator::AreaShader(1);
terrain.addShader(ashade, 1);
terrain.setBasePoint(0, 0, -1);
terrain.setBasePoint(0, 1, 8);
terrain.setBasePoint(1, 0, 2);
terrain.setBasePoint(1, 1, 11);
terrain.setBasePoint(2, 0, 2);
terrain.setBasePoint(2, 1, 11);
terrain.addArea(a1);
// terrain.addArea(a2);
Mercator::Segment* seg = terrain.getSegment(0,0);
assert(a1->checkIntersects(*seg));
seg->populateSurfaces();
writePGMForSurface("test1.pgm", seg->getSize(), seg->getSurfaces()[1]);
seg = terrain.getSegment(1,0);
seg->populateSurfaces();
writePGMForSurface("test2.pgm", seg->getSize(), seg->getSurfaces()[1]);
}
示例7: main
int main()
{
Mercator::Terrain t;
// Add a null test shader to the terrain
Mercator::Shader * shader = new TestShader;
t.addShader(shader, 0);
// Create a test area with a shape which intersects
// the Segment at 0,0
Mercator::Area* a1 = new Mercator::Area(0, false);
WFMath::Polygon<2> p;
p.addCorner(p.numCorners(), WFMath::Point<2>(3, 4));
p.addCorner(p.numCorners(), WFMath::Point<2>(10, 10));
p.addCorner(p.numCorners(), WFMath::Point<2>(14, 6));
p.addCorner(p.numCorners(), WFMath::Point<2>(18, 4));
p.addCorner(p.numCorners(), WFMath::Point<2>(17, 19));
p.addCorner(p.numCorners(), WFMath::Point<2>(6, 20));
p.addCorner(p.numCorners(), WFMath::Point<2>(-1, 18));
p.addCorner(p.numCorners(), WFMath::Point<2>(-8, 11));
a1->setShape(p);
// Add enough base points to force the creation of the Segment at 0,0
t.setBasePoint(0, 0, -1);
t.setBasePoint(0, 1, 8);
t.setBasePoint(1, 0, 2);
t.setBasePoint(1, 1, 11);
// Get the Segment at 0,0
Mercator::Segment * seg = t.getSegmentAtIndex(0,0);
assert(seg != 0);
// Get the surfaces, and add one corresponding to the shader we added.
// We need to do this as the functions that would normally make it happen
// have been stubbed out.
Mercator::Segment::Surfacestore & sss = seg->getSurfaces();
Mercator::Surface * sfce = new Mercator::Surface(*seg, *shader);
// Force allocation of the surface buffer so we can check later that it
// gets destroyed when the area is added to the terrain.
sfce->allocate();
assert(sfce->isValid());
// Add the surface to the store for this segment
sss[0] = sfce;
// Add the area which should cause relevant surface date to be invalidated
t.addArea(a1);
// We assert this to ensure that the buffer has been de-allocated
// by a call to Surface::invalidate caused by adding the Area.
assert(!sfce->isValid());
// force the surface to re-allocate
sfce->allocate();
assert(sfce->isValid());
// Modify the areas shape
p.addCorner(p.numCorners(), WFMath::Point<2>(-9, 12));
a1->setShape(p);
// and cause an area update
t.updateArea(a1);
// Check the surface has been invalidated again
assert(!sfce->isValid());
// force the surface to re-allocate
sfce->allocate();
assert(sfce->isValid());
t.removeArea(a1);
// Check the surface has been invalidated again
assert(!sfce->isValid());
}
示例8: main
int main(int argc, char* argv[])
{
Mercator::Area* a1 = new Mercator::Area(1, false);
WFMath::Polygon<2> p;
p.addCorner(p.numCorners(), Point2(3, 4));
p.addCorner(p.numCorners(), Point2(10, 10));
p.addCorner(p.numCorners(), Point2(-1, 18));
p.addCorner(p.numCorners(), Point2(-8, 11));
a1->setShape(p);
Mercator::Terrain terrain(Mercator::Terrain::SHADED, seg_size);
Mercator::AreaShader* ashade = new Mercator::AreaShader(1);
terrain.addShader(ashade, 0);
terrain.setBasePoint(-2, -1, 5);
terrain.setBasePoint(-2, 0, 2);
terrain.setBasePoint(-2, 1, 19);
terrain.setBasePoint(-1, -1, 4);
terrain.setBasePoint(-1, 0, 6);
terrain.setBasePoint(-1, 1, 10);
terrain.setBasePoint(0, -1, 2);
terrain.setBasePoint(0, 0, -1);
terrain.setBasePoint(0, 1, 8);
terrain.setBasePoint(0, 2, 11);
terrain.setBasePoint(1, -1, 7);
terrain.setBasePoint(1, 0, 2);
terrain.setBasePoint(1, 1, 11);
terrain.setBasePoint(1, 2, 9);
terrain.setBasePoint(2, -1, 3);
terrain.setBasePoint(2, 0, 8);
terrain.setBasePoint(2, 1, 2);
terrain.setBasePoint(3, -1, 6);
terrain.setBasePoint(3, 0, 7);
terrain.setBasePoint(3, 1, 9);
terrain.addArea(a1);
Mercator::Segment* seg = terrain.getSegment(0,0);
assert(seg->getAreas().size() == 1);
assert(seg->getAreas().count(1) == 1);
assert(a1->checkIntersects(*seg));
seg = terrain.getSegment(1,0);
assert(seg->getAreas().size() == 0);
assert(seg->getAreas().count(1) == 0);
assert(a1->checkIntersects(*seg) == false);
WFMath::Polygon<2> clipped = a1->clipToSegment(*seg);
assert(clipped.isValid());
seg = terrain.getSegment(-1,0);
assert(seg->getAreas().size() == 1);
assert(seg->getAreas().count(1) == 1);
assert(a1->checkIntersects(*seg));
clipped = a1->clipToSegment(*seg);
assert(clipped.isValid());
seg = terrain.getSegment(0,1);
assert(seg->getAreas().size() == 1);
assert(seg->getAreas().count(1) == 1);
assert(a1->checkIntersects(*seg));
clipped = a1->clipToSegment(*seg);
assert(clipped.isValid());
seg = terrain.getSegment(2,0);
assert(seg->getAreas().size() == 0);
assert(seg->getAreas().count(1) == 0);
assert(a1->checkIntersects(*seg) == false);
p.clear();
p.addCorner(p.numCorners(), Point2(3 + seg_size, 4));
p.addCorner(p.numCorners(), Point2(10 + seg_size, 10));
p.addCorner(p.numCorners(), Point2(-1 + seg_size, 18));
p.addCorner(p.numCorners(), Point2(-8 + seg_size, 11));
a1->setShape(p);
terrain.updateArea(a1);
seg = terrain.getSegment(0,0);
assert(seg->getAreas().size() == 1);
assert(seg->getAreas().count(1) == 1);
assert(a1->checkIntersects(*seg));
seg = terrain.getSegment(1,0);
assert(seg->getAreas().size() == 1);
assert(seg->getAreas().count(1) == 1);
assert(a1->checkIntersects(*seg));
clipped = a1->clipToSegment(*seg);
//.........这里部分代码省略.........
示例9: main
int main()
{
// Test constructor
{
Mercator::Forest mf;
}
// Test constructor
{
Mercator::Forest mf(23);
}
// Test getArea()
{
Mercator::Forest mf;
Mercator::Area * a = mf.getArea();
assert(a == 0);
}
// Test species()
{
Mercator::Forest mf;
Mercator::Forest::PlantSpecies & mps = mf.species();
assert(mps.empty());
}
{
Mercator::Forest forest(4249162ul);
Mercator::Forest::PlantSpecies & species = forest.species();
const Mercator::Forest::PlantStore & plants = forest.getPlants();
// Forest is not yet populated
assert(plants.empty());
assert(species.empty());
forest.populate();
// Forest has zero area, so even when populated it is empty
assert(plants.empty());
assert(species.empty());
Mercator::Area* ar = new Mercator::Area(1, false);
WFMath::Polygon<2> p;
p.addCorner(p.numCorners(), Point2(5, 8));
p.addCorner(p.numCorners(), Point2(40, -1));
p.addCorner(p.numCorners(), Point2(45, 16));
p.addCorner(p.numCorners(), Point2(30, 28));
p.addCorner(p.numCorners(), Point2(-2, 26));
p.addCorner(p.numCorners(), Point2(1, 5));
ar->setShape(p);
forest.setArea(ar);
forest.populate();
// Forest has no species, so even when populated it is empty
assert(plants.empty());
assert(species.empty());
{
Mercator::Species pine;
pine.m_probability = 0.04;
pine.m_deviation = 1.f;
species.push_back(pine);
}
forest.populate();
// Forest should now contain some plants
assert(!plants.empty());
dumpPlants(plants);
int plant_count = countPlants(plants);
{
Mercator::Species oak;
oak.m_probability = 0.02;
oak.m_deviation = 1.f;
species.push_back(oak);
}
forest.populate();
// Forest should now contain some plants
assert(!plants.empty());
assert(countPlants(plants) > plant_count);
dumpPlants(plants);
std::cout << countPlants(plants) << "," << plant_count
<< std::endl << std::flush;
}
}