本文整理汇总了C++中VRTransformPtr::addChild方法的典型用法代码示例。如果您正苦于以下问题:C++ VRTransformPtr::addChild方法的具体用法?C++ VRTransformPtr::addChild怎么用?C++ VRTransformPtr::addChild使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VRTransformPtr
的用法示例。
在下文中一共展示了VRTransformPtr::addChild方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: loadXYZ
void OSG::loadXYZ(string path, VRTransformPtr res) {
cout << "load xyz pointcloud " << path << endl;
res->setName(path);
try {
VRGeoData data;
vector<float> vertex = vector<float>(6);
int i=0;
ifstream file(path);
while (file >> vertex[i]) {
i++;
if (i >= 6) {
i = 0;
data.pushVert(Pnt3d(vertex[0], vertex[1], vertex[2]), Vec3d(0,1,0), Color3f(vertex[3]/255.0, vertex[4]/255.0, vertex[5]/255.0));
data.pushPoint();
}
}
if (data.size()) {
cout << " assemble geometry.. " << endl;
auto geo = data.asGeometry("points");
res->addChild(geo);
}
}
catch (std::exception& ex) { cerr << "Got an std::exception, what=" << ex.what() << endl; return; }
catch (...) { cerr << "Got an unknown exception" << endl; return; }
}
示例2: loadVtk
//.........这里部分代码省略.........
auto getCellPIDs = [](vtkCell* c) {
vector<int> res;
auto ids = c->GetPointIds();
for (int k=0; k<ids->GetNumberOfIds(); k++) {
res.push_back( ids->GetId(k) );
}
return res;
};
for (int i=0; i<ncells; i++) {
vtkCell* c = dataset->GetCell(i);
//int d = c->GetCellDimension();
//int t = c->GetCellType();
string type = c->GetClassName();
cout << "cell type " << type << endl;
if (type == "vtkQuad") {
auto j = getCellPIDs(c);
geo.pushQuad(j[0], j[1], j[2], j[3]);
}
}
//vtkCellData* cells = dataset->GetCellData();
vtkPointData* points = dataset->GetPointData();
cout << "POINT_DATA:\n";
if (points) {
std::cout << " contains point data with " << points->GetNumberOfArrays() << " arrays." << std::endl;
for (int i = 0; i < points->GetNumberOfArrays(); i++) {
std::cout << "\tArray " << i << " is named " << (points->GetArrayName(i) ? points->GetArrayName(i) : "NULL") << std::endl;
}
for(int i=0; vtkDataArray* a = points->GetArray(i); i++ ) {
int size = a->GetNumberOfTuples();
int comp = a->GetNumberOfComponents();
cout << " data array " << size << " " << comp << endl;
for (int j=0; j<size; j++) {
cout << "pnt:";
for (int k=0; k<comp; k++) cout << " " << a->GetComponent(j, k);
cout << endl;
}
}
}
cout << "FIELD_DATA:\n";
if (dataset->GetFieldData()) {
std::cout << " contains field data with "
<< dataset->GetFieldData()->GetNumberOfArrays()
<< " arrays." << std::endl;
for (int i = 0; i < dataset->GetFieldData()->GetNumberOfArrays(); i++)
{
std::cout << "\tArray " << i
<< " is named " << dataset->GetFieldData()->GetArray(i)->GetName()
<< std::endl;
}
}
cout << "CELL_DATA:\n";
vtkCellData *cd = dataset->GetCellData();
if (cd)
{
std::cout << " contains cell data with "
<< cd->GetNumberOfArrays()
<< " arrays." << std::endl;
for (int i = 0; i < cd->GetNumberOfArrays(); i++)
{
std::cout << "\tArray " << i
<< " is named "
<< (cd->GetArrayName(i) ? cd->GetArrayName(i) : "NULL")
<< std::endl;
}
}
/*if (cells) {
for(int i=0; vtkDataArray* a = points->GetArray(i); i++ ) {
int size = a->GetNumberOfTuples();
int comp = a->GetNumberOfComponents();
for (int j=0; j<size; j++) {
cout << "cell:";
for (int k=0; k<comp; k++) cout << " " << a->GetComponent(j, k);
cout << endl;
}
}
}*/
string name = "vtk";
auto m = VRMaterial::create(name + "_mat");
m->setLit(0);
m->setDiffuse(Color3f(0.3,0.7,1.0));
VRGeometryPtr g = geo.asGeometry(name);
g->setMaterial(m);
//g->updateNormals();
res->addChild( g );
}
示例3: loadVtk_old
void loadVtk_old(string path, VRTransformPtr res) {
cout << "load VTK file " << path << endl;
ifstream file(path.c_str());
string line;
auto next = [&]() -> string& {
getline(file, line);
return line;
};
VTKProject project;
project.version = splitString( next() )[4];
project.title = next();
project.format = next();
project.dataset = splitString( next() )[1];
VRGeoData geo; // build geometry
if (project.dataset == "STRUCTURED_POINTS") {
auto r = splitString( next() ); Vec3i dims = toValue<Vec3i>( r[1] + " " + r[2] + " " + r[3] );
r = splitString( next() ); Vec3d p0 = toValue<Vec3d>( r[1] + " " + r[2] + " " + r[3] );
r = splitString( next() ); Vec3d d = toValue<Vec3d>( r[1] + " " + r[2] + " " + r[3] );
for (int k=0; k<dims[2]; k++) {
for (int j=0; j<dims[1]; j++) {
for (int i=0; i<dims[0]; i++) {
geo.pushVert(p0 + Vec3d(d[0]*i, d[1]*j, d[2]*k) );
geo.pushPoint();
}
}
}
}
if (project.dataset == "STRUCTURED_GRID") {
auto r = splitString( next() ); Vec3i dims = toValue<Vec3i>( r[1] + " " + r[2] + " " + r[3] );
r = splitString( next() ); int N = toInt(r[1]); string type = r[2]; // points
vector<Vec3d> points;
for (int i=0; i<N; i++) {
Vec3d p = toValue<Vec3d>( next() );
points.push_back(p);
geo.pushVert(p);
geo.pushPoint();
}
}
if (project.dataset == "RECTILINEAR_GRID") {
;
}
if (project.dataset == "UNSTRUCTURED_GRID") {
;
}
if (project.dataset == "POLYDATA") {
auto r = splitString( next() ); int N = toInt(r[1]); string type = r[2]; // points
for (int i=0; i<N; i++) geo.pushVert( toValue<Vec3d>( next() ) );
while (next() != "") {
r = splitString( line );
string type = r[0];
N = toInt(r[1]);
//int size = toInt(r[2]);
for (int i=0; i<N; i++) { // for each primitive
r = splitString( next() );
int Ni = toInt(r[0]); // length of primitive
cout << line << " " << Ni << endl;
//if (Ni == 2) geo.pushLine(toInt(r[1]), toInt(r[2]));
if (Ni == 3) geo.pushTri(toInt(r[1]), toInt(r[2]), toInt(r[3]));
if (Ni == 4) geo.pushQuad(toInt(r[1]), toInt(r[2]), toInt(r[3]), toInt(r[4]));
}
}
}
if (project.dataset == "FIELD") {
;
}
// parsing finished
cout << project.toString() << endl;
file.close();
auto m = VRMaterial::create(project.title + "_mat");
m->setLit(0);
m->setDiffuse(Color3f(0.3,0.7,1.0));
VRGeometryPtr g = geo.asGeometry(project.title);
g->setMaterial(m);
//g->updateNormals();
res->addChild( g );
}
示例4: imf
void OSG::loadE57(string path, VRTransformPtr res) {
cout << "load e57 pointcloud " << path << endl;
res->setName(path);
try {
ImageFile imf(path, "r"); // Read file from disk
StructureNode root = imf.root();
if (!root.isDefined("/data3D")) { cout << "File doesn't contain 3D images" << endl; return; }
e57::Node n = root.get("/data3D");
if (n.type() != E57_VECTOR) { cout << "bad file" << endl; return; }
VectorNode data3D(n);
int64_t scanCount = data3D.childCount(); // number of scans in file
cout << " file read succefully, it contains " << scanCount << " scans" << endl;
for (int i = 0; i < scanCount; i++) {
StructureNode scan(data3D.get(i));
string sname = scan.pathName();
CompressedVectorNode points( scan.get("points") );
string pname = points.pathName();
auto cN = points.childCount();
cout << " scan " << i << " contains " << cN << " points\n";
StructureNode proto(points.prototype());
bool hasPos = (proto.isDefined("cartesianX") && proto.isDefined("cartesianY") && proto.isDefined("cartesianZ"));
bool hasCol = (proto.isDefined("colorRed") && proto.isDefined("colorGreen") && proto.isDefined("colorBlue"));
if (!hasPos) continue;
if (hasCol) cout << " scan has colors\n";
else cout << " scan has no colors\n";
for (int i=0; i<proto.childCount(); i++) {
auto child = proto.get(i);
cout << " scan data: " << child.pathName() << endl;
}
vector<SourceDestBuffer> destBuffers;
const int N = 4;
double x[N]; destBuffers.push_back(SourceDestBuffer(imf, "cartesianX", x, N, true));
double y[N]; destBuffers.push_back(SourceDestBuffer(imf, "cartesianY", y, N, true));
double z[N]; destBuffers.push_back(SourceDestBuffer(imf, "cartesianZ", z, N, true));
double r[N];
double g[N];
double b[N];
if (hasCol) {
destBuffers.push_back(SourceDestBuffer(imf, "colorRed", r, N, true));
destBuffers.push_back(SourceDestBuffer(imf, "colorGreen", g, N, true));
destBuffers.push_back(SourceDestBuffer(imf, "colorBlue", b, N, true));
}
int Nchunk = 1e6; // separate in chunks because of tcmalloc large alloc issues
VRGeoData data;
unsigned int gotCount = 0;
CompressedVectorReader reader = points.reader(destBuffers);
do {
if (data.size() > Nchunk) {
cout << " assemble geometry.. " << endl;
auto geo = data.asGeometry(pname);
res->addChild(geo);
data = VRGeoData();
}
gotCount = reader.read();
for (unsigned j=0; j < gotCount; j++) {
int v;
if (hasCol) v = data.pushVert(Pnt3d(x[j], y[j], z[j]), Vec3d(0,1,0), Color3f(r[j]/255.0, g[j]/255.0, b[j]/255.0));
else v = data.pushVert(Pnt3d(x[j], y[j], z[j]), Vec3d(0,1,0));
data.pushPoint(v);
}
} while(gotCount);
reader.close();
if (data.size()) {
cout << " assemble geometry.. " << endl;
auto geo = data.asGeometry(pname);
res->addChild(geo);
}
}
imf.close();
}
catch (E57Exception& ex) { ex.report(__FILE__, __LINE__, __FUNCTION__); return; }
catch (std::exception& ex) { cerr << "Got an std::exception, what=" << ex.what() << endl; return; }
catch (...) { cerr << "Got an unknown exception" << endl; return; }
}
示例5: loadVRML
//.........这里部分代码省略.........
string line;
while ( getline(file, line) ) {
prog.update( line.size() );
li++;
for (auto d : states) {
//if ( line[d.second.size()-1] != ' ') continue; // optimization
if ( line.compare(0, d.second.size(), d.second) == 0) {
//if (state != d.first) cout << "got on line " << li << ": " << states[d.first] << " instead of: " << states[state] << endl;
switch (d.first) {
case 0: break;
case 1:
new_obj = true;
if (line.size() > 12) color = toVec3f( line.substr(12) );
if (mats.count(color) == 0) {
mats[color] = VRMaterial::create("fmat");
mats[color]->setDiffuse(color);
}
if (color != last_col) {
new_color = true;
last_col = color;
}
break;
case 2:
geo.updateN();
break;
case 3: break;
case 4: break;
case 5: break;
}
state = d.first+1;
if (state == 7) state = 0;
break;
}
}
if (line[0] != ' ') continue;
if (state == 6) continue; // skip color indices
stringstream ss(line);
switch (state) {
case 3:
while(ss >> v[0] && ss >> v[1] && ss >> v[2] && ss.get()) {
if (!new_color && new_obj) new_obj = !geo.inBB(v); // strange artifacts!!
geo.updateBB(v);
if (new_obj) {
new_obj = false;
new_color = false;
geo.init(geos, mats[color]);
}
geo.pos->addValue(v);
}
break;
case 4:
while(ss >> n[0] && ss >> n[1] && ss >> n[2] && ss.get()) geo.norms->addValue( n );
break;
case 5:
while(ss >> i && ss.get()) if (i >= 0) geo.inds_p->addValue( geo.Np + i );
break;
case 0:
while(ss >> i && ss.get()) if (i >= 0) geo.inds_n->addValue( geo.Nn + i );
break;
}
}
file.close();
cout << "\nloaded " << geos.size() << " geometries" << endl;
VRTransformPtr res = VRTransform::create("factory");
res->setPersistency(0);
for (auto g : geos) {
//Vec3f d = g.vmax - g.vmin;
//if (d.length() < 0.1) continue; // skip very small objects
if (g.inds_n->size() != g.inds_p->size()) { // not happening
cout << " wrong indices lengths: " << g.inds_p->size() << " " << g.inds_n->size() << endl;
continue;
}
if (g.inds_p->size() == 0) { // not happening
cout << " empty geo: " << g.inds_p->size() << " " << g.inds_n->size() << endl;
continue;
}
res->addChild(g.geo);
GeoUInt32PropertyRecPtr Length = GeoUInt32Property::create();
Length->addValue(g.geo->getMesh()->getIndices()->size());
g.geo->setLengths(Length);
}
cout << "\nloaded2 " << res->getChildrenCount() << " geometries" << endl;
return res;
}