本文整理汇总了C++中Paths::size方法的典型用法代码示例。如果您正苦于以下问题:C++ Paths::size方法的具体用法?C++ Paths::size怎么用?C++ Paths::size使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Paths
的用法示例。
在下文中一共展示了Paths::size方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SaveToConsole
void SaveToConsole(const string name, const Paths &pp, double scale = 1.0)
{
cout << '\n' << name << ":\n"
<< pp.size() << '\n';
for (unsigned i = 0; i < pp.size(); ++i)
{
cout << pp[i].size() << '\n';
for (unsigned j = 0; j < pp[i].size(); ++j)
cout << pp[i][j].X /scale << ", " << pp[i][j].Y /scale << ",\n";
}
cout << "\n";
}
示例2: equalStacks
bool equalStacks(Paths<DiGraph>::VertexStack lhs, Paths<DiGraph>::VertexStack rhs)
{
if (lhs.size() != rhs.size())
return false;
while (!lhs.empty())
{
if (lhs.top() != rhs.top())
return false;
lhs.pop();
rhs.pop();
}
return true;
}
示例3:
vector<ofVec3f> ofApp::offsetCell(list<int> & crv, float amt) {
float scaling = 10;
ClipperOffset co;
Path P;
Paths offsetP;
float offset = amt;
for (auto index : crv) {
ofVec3f v = linesMesh.getVertex(index);
P.push_back(IntPoint(v.x*scaling, v.y*scaling));
}
co.AddPath(P, jtRound, etClosedPolygon);
co.Execute(offsetP, -offset*scaling);
vector<ofVec3f> offsetPts;
if (offsetP.size() > 0) {
//visual offset for etching
CleanPolygons(offsetP);
if (doEtchOffset) {
co.Clear();
co.AddPaths(offsetP, jtRound, etClosedPolygon);
co.Execute(offsetP, -etchOffset*scaling);
}
Path & oP = offsetP[0];
for (int i = 0; i < oP.size(); i++) {
ofVec3f pt3D(oP[i].X / scaling, oP[i].Y / scaling);
offsetPts.push_back(pt3D);
}
}
return offsetPts;
}
示例4: populateMesh
void TerraGenerator::populateMesh(Paths& paths, const RegionContext& regionContext)
{
ClipperLib::SimplifyPolygons(paths);
ClipperLib::CleanPolygons(paths);
bool hasHeightOffset = std::abs(regionContext.options.heightOffset) > 1E-8;
// calculate approximate size of overall points
std::size_t size = 0;
for (auto i = 0; i < paths.size(); ++i)
size += static_cast<std::size_t>(paths[i].size() * 1.5);
Polygon polygon(size);
for (const Path& path : paths) {
double area = ClipperLib::Area(path);
bool isHole = area < 0;
if (std::abs(area) < AreaTolerance)
continue;
backGroundClipper_.AddPath(path, ptClip, true);
Points points = restorePoints(path);
if (isHole)
polygon.addHole(points);
else
polygon.addContour(points);
if (hasHeightOffset)
processHeightOffset(points, regionContext);
}
if (!polygon.points.empty())
fillMesh(polygon, regionContext);
}
示例5: popPathFrom
Paths* popPathFrom(string c) {
Paths* ps = getPathFrom(c);
for(int i=0;i<ps->size();i++) {
this->remove(ps->at(i));
}
return ps;
}
示例6: GetSpringlobbyInfo
//FIXME: merge with basicly duplicate in slpaths.cpp
std::string GetSpringlobbyInfo()
{
static const std::string nl = std::string("\n");
std::string res;
res = getSpringlobbyAgent() + nl;
const bool configwriteable = wxFileName::IsFileWritable(TowxString(SlPaths::GetConfigPath()));
res += stdprintf("SpringLobby config file: %s (%swritable)\n",
SlPaths::GetConfigPath().c_str(),
BtS(configwriteable, "", "not ").c_str());
Paths paths;
getWritePaths(paths);
for (size_t i = 0; i < paths.size(); ++i) {
std::string path = paths[i].m_path;
#if defined(__WIN32__) || defined(_MSC_VER)
path = Utf8ToLocalEncoding(path.c_str());
#endif
res += stdprintf("%s (%s)\n", paths[i].m_desc.c_str(), path.c_str());
const bool wx = wxFileName::IsDirWritable(path);
const bool posix = access(path.c_str(), WRITABLE) == 0;
bool tried = false;
try {
std::ofstream of;
wxString dummy_fn = paths[i].m_path;
if (!wxEndsWithPathSeparator(dummy_fn)) {
dummy_fn += wxFileName::GetPathSeparator();
}
dummy_fn += _T("dummy.txt");
std::string dummyFileString = dummy_fn.ToStdString();
#if defined(__WIN32__) || defined(_MSC_VER)
dummyFileString = Utf8ToLocalEncoding(dummyFileString.c_str());
#endif
of.open(dummyFileString);
if (of.is_open()) {
of << "fhreuohgeiuhguie";
of.flush();
of.close();
tried = wxRemoveFile(dummyFileString);
}
} catch (...) {
}
if (paths[i].m_requireswrite && (!wx || !posix || !tried)) {
wxLogError("%s is not writeable!", path.c_str());
}
res += stdprintf(("\tWX: %s POSIX: %s TRY: %s\n"), BtS(wx).c_str(), BtS(posix).c_str(), BtS(tried).c_str());
}
res += stdprintf("Current unitsync: %s\n", SlPaths::GetUnitSync().c_str());
res += stdprintf("Current spring executable: %s\n", SlPaths::GetSpringBinary().c_str());
res += stdprintf("Portable mode: %s\n", BtS(SlPaths::IsPortableMode()).c_str());
res += stdprintf(("Compiled with wxWidgets %d.%d.%d.%d"), wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER, wxSUBRELEASE_NUMBER) + nl;
res += "Started with: \n";
for (int i = 0; i < wxTheApp->argc; ++i)
res += STD_STRING(wxTheApp->argv[i]) + std::string(" ");
return res;
}
示例7: wxDialog
InfoDialog::InfoDialog(wxWindow* parent)
: wxDialog(parent, wxID_ANY, _("Paths"), wxDefaultPosition, wxSize(620, 400), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX | wxCLOSE_BOX)
{
m_main_sizer = new wxBoxSizer(wxVERTICAL);
typedef std::vector<std::pair<std::string, wxString> > Paths;
Paths paths;
paths.push_back(std::make_pair(SlPaths::GetLobbyWriteDir(), _T("LobbyWriteDir")));
paths.push_back(std::make_pair(SlPaths::GetCachePath(), _T("CachePath")));
paths.push_back(std::make_pair(SlPaths::GetExecutableFolder(), _T("ExecutableFolder")));
paths.push_back(std::make_pair(SlPaths::GetDownloadDir(), _T("DownloadDir")));
paths.push_back(std::make_pair(SlPaths::GetDataDir(), _T("Current SpringData:")));
wxTextCtrl* out = new wxTextCtrl(this, wxNewId(), wxEmptyString, wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_AUTO_URL);
*out << TowxString(getSpringlobbyAgent()) + _T("\n");
*out << wxString::Format(_T("SpringLobby config file: %s (%s writable)\n"),
TowxString(SlPaths::GetConfigPath()).c_str(),
BtS(wxFileName::IsFileWritable(TowxString(SlPaths::GetConfigPath())), "", "not").c_str());
for (size_t i = 0; i < paths.size(); ++i) {
const wxString path = TowxString(paths[i].first);
*out << wxString::Format(_T("%s (%s)\n"), paths[i].second.c_str(), path.c_str());
const bool wx = wxFileName::IsDirWritable(path);
const bool posix = access(STD_STRING(path).c_str(), WRITABLE) == 0;
bool tried = false;
try {
std::ofstream of;
const wxString dummy_fn = path + wxFileName::GetPathSeparator() + _T("dummy.txt");
of.open(STD_STRING(dummy_fn).c_str());
if (of.is_open()) {
of << "fhreuohgeiuhguie";
of.flush();
of.close();
tried = wxRemoveFile(dummy_fn);
}
} catch (...) {
}
*out << wxString::Format(_T("\tWX: %s POSIX: %s TRY: %s\n"), BtS(wx).c_str(), BtS(posix).c_str(), BtS(tried).c_str());
}
*out << wxString::Format(_T("Current unitsync: %s\n"), TowxString(SlPaths::GetUnitSync()).c_str());
*out << wxString::Format(_T("Current spring executable: %s\n"), TowxString(SlPaths::GetSpringBinary()).c_str());
*out << wxString::Format(_T("Current uikeys.txt: %s\n"), TowxString(SlPaths::GetUikeys()).c_str());
*out << wxString::Format(_T("Portable mode: %s\n"), BtS(SlPaths::IsPortableMode()).c_str());
*out << wxString::Format(_T("Compiled with wxWidgets %d.%d.%d.%d"), wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER, wxSUBRELEASE_NUMBER) + _T("\n");
*out << _T("Started with: \n");
for (int i = 0; i < wxTheApp->argc; ++i)
*out << wxTheApp->argv[i] << _T(" ");
m_main_sizer->Add(out, 1, wxALL | wxEXPAND | wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL, 0);
SetSizer(m_main_sizer);
Layout();
}
示例8: wxSize
InfoDialog::InfoDialog(wxWindow* parent )
:wxDialog(parent,wxID_ANY, _("path shit"), wxDefaultPosition, wxSize(620,400), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX)
{
wxBoxSizer* main_sizer = new wxBoxSizer( wxVERTICAL );
typedef std::vector< std::pair< wxString,wxString > >
Paths;
Paths paths;
paths.push_back( std::make_pair( sett().GetLobbyWriteDir(), _T("LobbyWriteDir") ) );
paths.push_back( std::make_pair( sett().GetTempStorage(), _T("TempStorage")) );
paths.push_back( std::make_pair( sett().GetCachePath(), _T("CachePath")) );
paths.push_back( std::make_pair( sett().GetCurrentUsedDataDir(), _T("CurrentUsedDataDir")) );
paths.push_back( std::make_pair( GetExecutableFolder() , _T("ExecutableFolder")));
wxTextCtrl* out = new wxTextCtrl( this, wxNewId(), _T( "" ), wxDefaultPosition, wxDefaultSize,
wxTE_MULTILINE | wxTE_READONLY | wxTE_RICH | wxTE_AUTO_URL );
for ( size_t i =0; i < paths.size(); ++i )
{
*out << wxString::Format( _T("%s (%s)\n"), paths[i].second.c_str(), paths[i].first.c_str());
wxString path = paths[i].first;
wxString dummy_fn = path + wxFileName::GetPathSeparator() + _T("dummy.txt");
const bool wx = wxFileName::IsDirWritable( path );
const bool posix = access(STD_STRING(path).c_str(), WRITABLE) == 0;
bool tried = false;
try{
std::ofstream of;
of.open( STD_STRING(dummy_fn).c_str() );
if ( of.is_open() )
{
of << "fhreuohgeiuhguie";
of.flush();
of.close();
tried = wxRemoveFile(dummy_fn);
}
}
catch (...){}
*out << wxString::Format( _T("\tWX: %s POSIX: %s TRY: %s\n"), BtS(wx).c_str(), BtS(posix).c_str(), BtS(tried).c_str() );
}
*out << wxString::Format( _T("Global config: %s (%s %s )\n"),
sett().GlobalConfigPath().c_str(),
BtS(wxFileName::FileExists(sett().GlobalConfigPath()), "exists", "missing").c_str(),
BtS(wxFileName::IsFileWritable(sett().GlobalConfigPath()), "writable", "").c_str() );
*out << wxString::Format( _T("Local config: %s (%s writable)\n"),
sett().FinalConfigPath().c_str(),
BtS(wxFileName::IsFileWritable(sett().FinalConfigPath()), "", "not" ).c_str() );
*out << wxString::Format( _T("Portable mode: %s\n"), BtS(sett().IsPortableMode()).c_str() );
*out << _T( "Version " ) + GetSpringLobbyVersion()
<< wxString( wxVERSION_STRING ) + _T(" on ") + wxPlatformInfo::Get().GetOperatingSystemIdName() + _T( "\ncl: " ) ;
for ( int i = 0; i < wxTheApp->argc; ++i )
*out << wxTheApp->argv[i] << _T(" ");
main_sizer->Add( out, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0);
SetSizer( main_sizer );
Layout();
}
示例9: SaveToFile
void SaveToFile(char *filename, Paths &pp, double scale = 1)
{
FILE *f = fopen(filename, "w");
if (!f) return;
fprintf(f, "%d\n", pp.size());
for (unsigned i = 0; i < pp.size(); ++i)
{
fprintf(f, "%d\n", pp[i].size());
if (scale > 1.01 || scale < 0.99) {
for (unsigned j = 0; j < pp[i].size(); ++j)
fprintf(f, "%.6lf, %.6lf,\n",
(double)pp[i][j].X /scale, (double)pp[i][j].Y /scale);
}
else
{
for (unsigned j = 0; j < pp[i].size(); ++j)
fprintf(f, "%lld, %lld,\n", pp[i][j].X, pp[i][j].Y );
}
}
fclose(f);
}
示例10: switch
Vector<Vector<Point2> > Geometry::_polypaths_do_operation(PolyBooleanOperation p_op, const Vector<Point2> &p_polypath_a, const Vector<Point2> &p_polypath_b, bool is_a_open) {
using namespace ClipperLib;
ClipType op = ctUnion;
switch (p_op) {
case OPERATION_UNION: op = ctUnion; break;
case OPERATION_DIFFERENCE: op = ctDifference; break;
case OPERATION_INTERSECTION: op = ctIntersection; break;
case OPERATION_XOR: op = ctXor; break;
}
Path path_a, path_b;
// Need to scale points (Clipper's requirement for robust computation)
for (int i = 0; i != p_polypath_a.size(); ++i) {
path_a << IntPoint(p_polypath_a[i].x * SCALE_FACTOR, p_polypath_a[i].y * SCALE_FACTOR);
}
for (int i = 0; i != p_polypath_b.size(); ++i) {
path_b << IntPoint(p_polypath_b[i].x * SCALE_FACTOR, p_polypath_b[i].y * SCALE_FACTOR);
}
Clipper clp;
clp.AddPath(path_a, ptSubject, !is_a_open); // forward compatible with Clipper 10.0.0
clp.AddPath(path_b, ptClip, true); // polylines cannot be set as clip
Paths paths;
if (is_a_open) {
PolyTree tree; // needed to populate polylines
clp.Execute(op, tree);
OpenPathsFromPolyTree(tree, paths);
} else {
clp.Execute(op, paths); // works on closed polygons only
}
// Have to scale points down now
Vector<Vector<Point2> > polypaths;
for (Paths::size_type i = 0; i < paths.size(); ++i) {
Vector<Vector2> polypath;
const Path &scaled_path = paths[i];
for (Paths::size_type j = 0; j < scaled_path.size(); ++j) {
polypath.push_back(Point2(
static_cast<real_t>(scaled_path[j].X) / SCALE_FACTOR,
static_cast<real_t>(scaled_path[j].Y) / SCALE_FACTOR));
}
polypaths.push_back(polypath);
}
return polypaths;
}
示例11: from_polygons
static GB_ARRAY from_polygons(Paths &polygons, bool closed)
{
GB_ARRAY a;
CPOLYGON *p;
uint i;
GB.Array.New(&a, GB.FindClass("Polygon"), polygons.size());
for (i = 0; i < polygons.size(); i++)
{
if (polygons[i].size() == 0)
continue;
set_polygon_closed(polygons[i], closed);
p = (CPOLYGON *)GB.New(GB.FindClass("Polygon"), NULL, NULL);
*(p->poly) = polygons[i];
*(GB_ARRAY *)GB.Array.Get(a, i) = p;
GB.Ref(p);
}
return a;
}
示例12: assembleOverlappingPaths
/** Assemble overlapping paths. */
static void assembleOverlappingPaths(Graph& g,
Paths& paths, vector<string>& pathIDs)
{
if (paths.empty())
return;
// Find overlapping paths.
Overlaps overlaps = findOverlaps(g, paths);
addPathOverlapEdges(g, paths, pathIDs, overlaps);
// Create a property map of path overlaps.
OverlapMap overlapMap;
for (Overlaps::const_iterator it = overlaps.begin();
it != overlaps.end(); ++it)
overlapMap.insert(OverlapMap::value_type(
OverlapMap::key_type(
it->source.descriptor(),
it->target.descriptor()),
it->overlap));
// Assemble unambiguously overlapping paths.
Paths merges;
assemble_if(g, back_inserter(merges),
IsPathOverlap(g, overlapMap, IsPositive<Graph>(g)));
// Merge overlapping paths.
g_contigNames.unlock();
assert(!pathIDs.empty());
setNextContigName(pathIDs.back());
for (Paths::const_iterator it = merges.begin();
it != merges.end(); ++it) {
string name = createContigName();
if (opt::verbose > 0)
cerr << name << '\t' << *it << '\n';
Vertex u(paths.size(), false);
put(vertex_name, g, u.descriptor(), name);
pathIDs.push_back(name);
paths.push_back(mergePaths(paths, overlapMap, *it));
// Remove the merged paths.
for (ContigPath::const_iterator it2 = it->begin();
it2 != it->end(); ++it2) {
if (isPath(*it2))
paths[it2->id() - Vertex::s_offset].clear();
}
}
g_contigNames.lock();
}
示例13: ComputeOffset
bool ComputeOffset(const Paths &paths, double amount, Paths *result) {
// Previous operations can leave small artifacts (e.g. self-intersecting
// polygons) which ClipperOffset cannot handle. CleanPolygons fixes at least
// some of these cases.
Paths cleaned(paths.size()); // CleanPolygons does not resize 'cleaned'.
CleanPolygons(paths, cleaned);
Paths tmp_paths;
if (!CopyAndForceOrientation(cleaned, true, &tmp_paths))
return false;
ClipperOffset co;
co.ArcTolerance = kQuantaPerInch / 1000;
co.AddPaths(tmp_paths, jtRound, etClosedPolygon);
co.Execute(*result, InchesToQuanta(amount));
return true;
}
示例14: main
int main() {
n=8;
create();
//GP();
Paths res;
Path p;
unsigned long c=0;
for(int i=2; i<=2*n; ++i) {
if(i%2==0) {
res=all(1,i,p,1);
c+=res.size();
PSP(res);
}
}
printf("%lu",c);
}
示例15: trimOverlaps
/** Find the largest overlap for each contig and remove it. */
static void trimOverlaps(Paths& paths, const Overlaps& overlaps)
{
vector<unsigned> removed[2];
removed[0].resize(paths.size());
removed[1].resize(paths.size());
for (Overlaps::const_iterator it = overlaps.begin();
it != overlaps.end(); ++it) {
unsigned& a = removed[!it->source.sense][it->source.id];
unsigned& b = removed[it->target.sense][it->target.id];
a = max(a, it->overlap);
b = max(b, it->overlap);
}
for (Paths::iterator it = paths.begin(); it != paths.end(); ++it)
removeContigs(*it, removed[0][it - paths.begin()],
it->size() - removed[1][it - paths.begin()]);
}