void InventorLoader::checkForRedundancy( osg::NodePtr OSGGroup ) { return; // TODO: Check the type of the node and return, if it's not a node // that should be discarded (discardable: group, not discardable: geometry) // If the group node has no children, then let's kick it ! if( OSGGroup->getNChildren() == 0 ) { if(OSGGroup->getParent() != NullFC) { OSGGroup->getParent()->subChild(OSGGroup); } else { subRefCP(OSGGroup); } } // If there's only one child, then add it to the parent of the group, // copy the name and remove the group else if ( OSGGroup->getNChildren() == 1 ) { // Get parent and child osg::NodePtr _Child = OSGGroup->getChild(0); osg::NodePtr _Parent = OSGGroup->getParent(); // Copy the name const char* _Name = getName(OSGGroup); if( _Name ) setName( _Child, _Name ); // Add the child to the parent _Parent->addChild( _Child ); // Remove the group node _Parent->subChild( OSGGroup ); } }
NodeBase NodeIterator::next(void) { while(!_stack.empty()) { OSG::NodePtr act = _stack.back(); _stack.pop_back(); for(OSG::UInt32 i = 0; i < act->getNChildren(); ++i) _stack.push_back(act->getChild(i)); if(act->getCore()->getType().isDerivedFrom(*_type)) { return NodeBase(act); } } PyErr_SetString(PyExc_StopIteration, "Out of Nodes"); boost::python::throw_error_already_set(); }
int main(int argc, char *argv[]) {/* int j = 0; // Allocate Sotrage std::vector<std::vector<cv::Point3f> > object_points; std::vector<std::vector<cv::Point2f> > image_points; int numBoards = 20; int numCornersHor = 9; int numCornersVer = 6; int numSquares = numCornersHor * numCornersVer; cv::Size board_sz = cv::Size(numCornersVer, numCornersHor); vector<cv::Point2f> corners; int successes=0; cv::Mat init_Image; vector<cv::Point3f> obj; for(int y(0); y < numCornersHor; ++y) { double tmp (y * 60.0); for(int x(0); x < numCornersVer; ++x){ obj.push_back(cv::Point3f(x * 60.0, tmp, 0)); cout << "::" << x * 60.0 << " - " << tmp << endl; } } //cv::VideoCapture capture = cv::VideoCapture(0); //while(successes < numBoards){ for(int i = 1 ; i< 518 ; i++){ // every 10 pictures if(j != 1){ j++; continue; } else { j=0; } stringstream stream; stream << "pics/init/"; stream << i; stream << ".bmp"; cout << "#### PICTURE NO. "<<i<<"####" << stream.str().c_str() <<endl; init_Image = cvLoadImage(stream.str().c_str()); cv::Mat grayImage; //capture >> init_Image; cv::cvtColor(init_Image, grayImage, CV_BGR2GRAY); bool found = cv::findChessboardCorners(grayImage, board_sz, corners, cv::CALIB_CB_ADAPTIVE_THRESH + cv::CALIB_CB_NORMALIZE_IMAGE); if(found) { cv::cornerSubPix(grayImage, corners, cv::Size(11, 11), cv::Size(-1, -1), cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 30, 0.1)); cv::drawChessboardCorners(grayImage, board_sz, corners, found); image_points.push_back(corners); object_points.push_back(obj); cout << "Snap stored!" << endl; successes++; if(successes>=numBoards) break; } cv::imshow("Calib1",init_Image); cv::imshow("Calib2",grayImage); int key = cv::waitKey(1); } cout << "image point size : " << image_points.size() << endl; cout << "object point size : " << object_points.size() << endl; cv::Mat distCoeffs; vector<cv::Mat> rvecs; vector<cv::Mat> tvecs; cv::Mat intrinsic; cv::calibrateCamera(object_points, image_points, init_Image.size(), intrinsic, distCoeffs, rvecs, tvecs); cout << "##INTRINSIC##" <<endl; cout << intrinsic.ptr<double>(0)[0] << " " <<intrinsic.ptr<double>(0)[1]<<" " <<intrinsic.ptr<double>(0)[2]<< endl; cout << intrinsic.ptr<double>(1)[0] << " " <<intrinsic.ptr<double>(1)[1]<< " " <<intrinsic.ptr<double>(1)[2] << endl; cout << intrinsic.ptr<double>(2)[0] << " " <<intrinsic.ptr<double>(2)[1]<< " " <<intrinsic.ptr<double>(2)[2] << endl; cout << "##DISTORTION##" <<endl; cout << distCoeffs.ptr<double>(0)[0] << " " << distCoeffs.ptr<double>(0)[1] << " " << distCoeffs.ptr<double>(0)[2] << " " << distCoeffs.ptr<double>(0)[3] << " " << distCoeffs.ptr<double>(0)[4] << " " << distCoeffs.ptr<double>(0)[5] << " " <<endl; for(int i = 1 ; i< 300 ; i++){ stringstream stream,s2; stream << "pics/"; stream << i; stream << ".bmp"; cout << "#### PICTURE NO. "<<i<<"####" << stream.str().c_str() <<endl; cv:: Mat image = cvLoadImage(stream.str().c_str()); cv::Mat newI; cv::undistort(image,newI,intrinsic,distCoeffs); s2 << "pics/undist/"; s2 << i; s2 << ".bmp"; cv::imwrite(s2.str().c_str(),newI); } exit(0);*/ // AR _BEGIN_ /* const char *cparam_name = "pics/camera_para.dat"; ARParam cparam; ARParam wparam; // opencv-test char *patt_name = "davit.patt"; std::cout << QDir::currentPath().toStdString() << endl; cv::Mat m,n; cv::namedWindow("looky looky"); ARUint8 *dataPtr; int patt_id; if( (patt_id=arLoadPatt(patt_name)) < 0 ) { cout << "Pattern load error" <<endl; } else { cout << "Pattern loaded... "<<endl; } // set the initial camera parameters if( arParamLoad(cparam_name, 1, &wparam) < 0 ) { cout << "Camera parameter load error !!"<<endl; exit(0); } else { cout << "Loaded Camera Parameter !! "<<endl; } //wparam.xsize = 1280; //wparam.ysize = 1024; //wparam.mat[0][0] = 1598.0; //wparam.mat[1][1] = 1596.15; //wparam.mat[0][2] = 555.006; //wparam.mat[1][2] = 525.028; //wparam.dist_factor[0] = -0.477959; //wparam.dist_factor[1] = 1.83017; //wparam.dist_factor[2] = -0.0036001; //wparam.dist_factor[3] = -0.0001997; //cout <<"RESET..."<<endl; arParamChangeSize( &wparam, 1280, 1024, &cparam ); arInitCparam( &cparam ); cout << "*** Camera Parameter ***"<<endl; arParamDisp( &cparam ); //open file fstream file; file.open("1280x1024Data.dat",ios::out); cv::Mat RGB; int v = 0; for(int u=1;u<=200;++u){ file<<"#FRAME_"<<u<<endl; //cout << "in loop..."<<endl; stringstream stream; stream << "pics/undist/"; stream << u; stream << ".bmp"; RGB = cv::imread(stream.str().c_str()); cv::flip(RGB,RGB,0); cv::Mat matAR(RGB.rows,RGB.cols,CV_8UC4); cv::cvtColor(RGB,matAR,CV_BGR2BGRA); cv::Mat newAR(RGB.rows,RGB.cols,CV_8UC4); cv::Mat in[] = {matAR}; cv::Mat out[] = {newAR}; int from[] = {3,0,0,3,1,2,2,1}; cv::mixChannels(in,1,out,1,from,4); dataPtr = (ARUint8*)newAR.data; ARMarkerInfo *marker_info; int marker_num; if( dataPtr == NULL ) { arUtilSleep(2); cout << "No Image data found..."; return 2; } cout << "try detecting... " << u <<endl; if( arDetectMarker(dataPtr, 45, &marker_info, &marker_num) < 0 ) { cout << "No Markers found... :("; //cleanup(); //exit(0); return 4; } int j,k; k = -1; for( j = 0; j < marker_num; j++ ) { if( patt_id == marker_info[j].id ) { if( k == -1 ) k = j; else if( marker_info[k].cf < marker_info[j].cf ) k = j; } } //cout << "k: " << k << endl; double patt_width = 225.0; double patt_center[2] = {0.0,0.0}; double patt_trans[3][4]; double quat[4]; double pos[3]; if(marker_num > 0 && k == 0){ //cout << "Marker found : " << marker_num << " " << v++ << " - k: " << k <<endl; arGetTransMat(&marker_info[k],patt_center,patt_width,patt_trans); if(arUtilMat2QuatPos(patt_trans,quat,pos) == 0){ cout << "quat worked" <<endl; cout << "quat: " << quat[0] << " " << quat[1] << " " << quat[2] << " " << quat[3] << endl; cout << "pos: " << pos[0] << " " << pos[1] << " " << pos[2] << endl; cout <<endl; } file << patt_trans[0][0] << " " << patt_trans[0][1] << " " << patt_trans[0][2] << " " << patt_trans[0][3] << " "<<endl; file << patt_trans[1][0] << " " << patt_trans[1][1] << " " << patt_trans[1][2] << " " << patt_trans[1][3] << " "<<endl; file << patt_trans[2][0] << " " << patt_trans[2][1] << " " << patt_trans[2][2] << " " << patt_trans[2][3] << " "<<endl; //file << patt_center[0] << " " << patt_center[1] <<endl; //cout << "patt width: " << patt_width <<endl; file << marker_info[k].pos[0] << " " << marker_info[k].pos[1] <<endl; cout << "p1: " << marker_info[k].vertex[0][0] << " " << marker_info[k].vertex[0][1]<< endl; cout << "p2: " << marker_info[k].vertex[1][0] << " " << marker_info[k].vertex[1][1]<< endl; cout << "p3: " << marker_info[k].vertex[2][0] << " " << marker_info[k].vertex[2][1]<< endl; cout << "p4: " << marker_info[k].vertex[3][0] << " " << marker_info[k].vertex[3][1]<< endl; cv::line(newAR,cv::Point(marker_info[k].vertex[0][0],marker_info[k].vertex[0][1]),cv::Point(marker_info[k].vertex[1][0],marker_info[k].vertex[1][1]),CV_RGB(255,0,0)); cv::line(newAR,cv::Point(marker_info[k].vertex[1][0],marker_info[k].vertex[1][1]),cv::Point(marker_info[k].vertex[2][0],marker_info[k].vertex[2][1]),CV_RGB(255,0,0)); cv::line(newAR,cv::Point(marker_info[k].vertex[2][0],marker_info[k].vertex[2][1]),cv::Point(marker_info[k].vertex[3][0],marker_info[k].vertex[3][1]),CV_RGB(255,0,0)); cv::line(newAR,cv::Point(marker_info[k].vertex[3][0],marker_info[k].vertex[3][1]),cv::Point(marker_info[k].vertex[0][0],marker_info[k].vertex[0][1]),CV_RGB(255,0,0)); cv::line(newAR,cv::Point(marker_info[k].vertex[0][0],marker_info[k].vertex[0][1]),cv::Point(marker_info[k].vertex[2][0],marker_info[k].vertex[2][1]),CV_RGB(255,0,0)); cv::line(newAR,cv::Point(marker_info[k].vertex[1][0],marker_info[k].vertex[1][1]),cv::Point(marker_info[k].vertex[3][0],marker_info[k].vertex[3][1]),CV_RGB(255,0,0)); cv::line(RGB,cv::Point(marker_info[k].vertex[0][0],marker_info[k].vertex[0][1]),cv::Point(marker_info[k].vertex[1][0],marker_info[k].vertex[1][1]),CV_RGB(255,0,0)); cv::line(RGB,cv::Point(marker_info[k].vertex[1][0],marker_info[k].vertex[1][1]),cv::Point(marker_info[k].vertex[2][0],marker_info[k].vertex[2][1]),CV_RGB(255,0,0)); cv::line(RGB,cv::Point(marker_info[k].vertex[2][0],marker_info[k].vertex[2][1]),cv::Point(marker_info[k].vertex[3][0],marker_info[k].vertex[3][1]),CV_RGB(255,0,0)); cv::line(RGB,cv::Point(marker_info[k].vertex[3][0],marker_info[k].vertex[3][1]),cv::Point(marker_info[k].vertex[0][0],marker_info[k].vertex[0][1]),CV_RGB(255,0,0)); cv::line(RGB,cv::Point(marker_info[k].vertex[0][0],marker_info[k].vertex[0][1]),cv::Point(marker_info[k].vertex[2][0],marker_info[k].vertex[2][1]),CV_RGB(255,0,0)); cv::line(RGB,cv::Point(marker_info[k].vertex[1][0],marker_info[k].vertex[1][1]),cv::Point(marker_info[k].vertex[3][0],marker_info[k].vertex[3][1]),CV_RGB(255,0,0)); cv::waitKey(1); } stringstream stream2; stream2 << "pics/new/"; stream2 << u; stream2 << ".bmp"; //cv::imwrite(stream2.str().c_str(),RGB); file<< "##"<<endl; cv::imshow("looky looky",RGB); cv::waitKey(1); } file.close(); */ // AR _ENDE_ !! //} // QCoreApplication a(argc, argv); OSG::osgInit(argc,argv); cout << "argc " << argc <<endl; for(int ar(0);ar<argc;++ar) cout << argv[ar] << " "; cout << endl; int winid = setupGLUT(&argc,argv); //GLUTWindowPtr gwin = GLUTWindow::create(); //gwin->setGlutId(winid); //gwin->init(); OSG::NodePtr scene = SceneFileHandler::the().read("data/test__1.obj"); //OSG::NodePtr scene = SceneFileHandler::the().read("data/test3_4.obj"); //GroupPtr scene = GroupPtr::dcast(scene); cout << "type: " << scene.getCore()->getTypeName()<< endl; cout << "children in scene: " << scene->getNChildren()<<endl; GeometryPtr geo = GeometryPtr::dcast(scene->getCore()); GeoPTypesPtr type = GeoPTypesUI8::create(); type->addValue(GL_LINE); LineIterator lit; int lines(0); TEST = geo; for(lit = geo->beginLines();lit != geo->endLines();++lit){ lines++; } cout << "lines: " << lines <<endl; SimpleMaterialPtr mat = SimpleMaterial::create(); geo->setMaterial(mat); // Create and setup our little friend - the SSM mgr = new SimpleSceneManager; //mgr->setWindow(gwin); //mgr->setRoot(scene); //mgr->showAll(); //glutCreateWindow("test"); glutMainLoop(); return 0; }