void SpecificWorker::getImages(const CameraList &cameras, ImageMap &images) { if( cameras.size() <= MAX_CAMERAS and ( cameraParamsMap.find(cameras.front()) != cameraParamsMap.end())) { //uint size = cameraParamsMap[cameras.front()].colorHeight * cameraParamsMap[cameras.front()].colorWidth * 3; RoboCompRGBDBus::Image img; img.camera = cameraParamsMap[cameras.front()]; QMutexLocker ml(mutex); img.colorImage.resize( readBuffer.size()); img.colorImage.swap( readBuffer ); images.insert( std::pair<std::string, RoboCompRGBDBus::Image>("default", img)); std::cout << "camera name " <<cameras.front() << " " << img.colorImage.size() << " " << images.empty() << std::endl; } }
int GetImageIndex(const wxString &fileName) { int imageInd = -1; wxString fileExt = fileName.AfterLast(wxChar('.')); #ifdef _WIN32 // Special case for windows executables, icon and cursor files. if (fileExt.CmpNoCase(wxT("exe")) == 0 || fileExt.CmpNoCase(wxT("ico")) == 0 || fileExt.CmpNoCase(wxT("cur")) == 0) { // Do we already have an icon for the file? ImageMap::iterator it = g_imageMap.find(fileName); if (it != g_imageMap.end()) { // Use exsiting icon. imageInd = it->second; } else { wxString fullname = fileName; if (fileExt.CmpNoCase(wxT("exe")) == 0) fullname += wxT(";0"); // Icon index. // Try to load 16x16 icon. Load any icon if fails. wxIcon icon; if (!icon.LoadFile(fullname, wxBITMAP_TYPE_ICO, 16, 16)) icon.LoadFile(fullname, wxBITMAP_TYPE_ICO); // Add the icon into the list. if (icon.Ok()) { if (fileExt.CmpNoCase(wxT("cur")) != 0) { // Convert to bitmap. It fixes the alpha problem. wxBitmap bmp(icon); if (bmp.Ok()) imageInd = g_imageList->Add(bmp); } else { // Can't convert cursor to bitmap. imageInd = g_imageList->Add(icon); } } if (imageInd >= 0) g_imageMap.insert(ImagePair(fileName, imageInd)); } } #endif // _WIN32 if (imageInd < 0 && fileExt.Length() > 0) { // Do we already have an icon for the file type? ImageMap::iterator it = g_imageMap.find(fileExt); if (it != g_imageMap.end()) { // Use exsiting icon. imageInd = it->second; } else { // Ask mime types manager for the file type. // TODO: For some types (sdf, sln) it returns wrong index for the icon. Fix it. // TODO: For some types (doc, html) it returns invalid file name for the icon. Fix it. wxFileType *fileType = wxTheMimeTypesManager->GetFileTypeFromExtension(fileExt); if (fileType != NULL) { // Get icon location. wxIconLocation iconLoc; if (fileType->GetIcon(&iconLoc)) { wxString fullname = iconLoc.GetFileName(); #ifdef _WIN32 if (iconLoc.GetIndex()) fullname << wxT(';') << iconLoc.GetIndex(); #endif // Try to load 16x16 icon. Load any icon if fails. wxIcon icon; if (!icon.LoadFile(fullname, wxBITMAP_TYPE_ICO, 16, 16)) icon.LoadFile(fullname, wxBITMAP_TYPE_ICO); // Add the icon into the list. if (icon.Ok()) { // Convert to bitmap. It fixes the alpha problem. wxBitmap bmp(icon); if (bmp.Ok()) imageInd = g_imageList->Add(bmp); } if (imageInd >= 0) g_imageMap.insert(ImagePair(fileExt, imageInd)); } delete fileType; } } } // If no image found. if (imageInd < 0) { // Set default image. g_imageMap.insert(ImagePair(fileExt, kUnknownFileImage)); imageInd = kUnknownFileImage; } return imageInd; }
/** * Load sprites from the disk. * @param filename Name of the RCD file to load. * @return Error message if load failed, else \c nullptr. * @todo Try to re-use already loaded blocks. * @todo Code will use last loaded surface as grass. */ const char *SpriteManager::Load(const char *filename) { RcdFileReader rcd_file(filename); if (!rcd_file.CheckFileHeader("RCDF", 2)) return "Bad header"; ImageMap sprites; // Sprites loaded from this file. TextMap texts; // Texts loaded from this file. TrackPiecesMap track_pieces; // Track pieces loaded from this file. /* Load blocks. */ for (uint blk_num = 1;; blk_num++) { if (!rcd_file.ReadBlockHeader()) return nullptr; // End reached. /* Skip meta blocks. */ if (strcmp(rcd_file.name, "INFO") == 0) { rcd_file.SkipBytes(rcd_file.size); continue; } if (strcmp(rcd_file.name, "8PXL") == 0 || strcmp(rcd_file.name, "32PX") == 0) { ImageData *imd = LoadImage(&rcd_file); if (imd == nullptr) { return "Image data loading failed"; } std::pair<uint, ImageData *> p(blk_num, imd); sprites.insert(p); continue; } if (strcmp(rcd_file.name, "SURF") == 0) { if (!this->LoadSURF(&rcd_file, sprites)) return "Surface block loading failed."; continue; } if (strcmp(rcd_file.name, "TSEL") == 0) { if (!this->LoadTSEL(&rcd_file, sprites)) return "Tile-selection block loading failed."; continue; } if (strcmp(rcd_file.name, "PATH") == 0) { if (!this->LoadPATH(&rcd_file, sprites)) return "Path-sprites block loading failed."; continue; } if (strcmp(rcd_file.name, "TCOR") == 0) { if (!this->LoadTCOR(&rcd_file, sprites)) return "Tile-corners block loading failed."; continue; } if (strcmp(rcd_file.name, "FUND") == 0) { if (!this->LoadFUND(&rcd_file, sprites)) return "Foundation block loading failed."; continue; } if (strcmp(rcd_file.name, "PLAT") == 0) { if (!this->LoadPLAT(&rcd_file, sprites)) return "Platform block loading failed."; continue; } if (strcmp(rcd_file.name, "SUPP") == 0) { if (!this->LoadSUPP(&rcd_file, sprites)) return "Support block loading failed."; continue; } if (strcmp(rcd_file.name, "BDIR") == 0) { if (!this->LoadBDIR(&rcd_file, sprites)) return "Build arrows block loading failed."; continue; } if (strcmp(rcd_file.name, "GCHK") == 0) { if (!_gui_sprites.LoadGCHK(&rcd_file, sprites)) return "Loading Checkable GUI sprites failed."; continue; } if (strcmp(rcd_file.name, "GBOR") == 0) { if (!_gui_sprites.LoadGBOR(&rcd_file, sprites)) return "Loading Border GUI sprites failed."; continue; } if (strcmp(rcd_file.name, "GSLI") == 0) { if (!_gui_sprites.LoadGSLI(&rcd_file, sprites)) return "Loading Slider bar GUI sprites failed."; continue; } if (strcmp(rcd_file.name, "GSCL") == 0) { if (!_gui_sprites.LoadGSCL(&rcd_file, sprites)) return "Loading Scrollbar GUI sprites failed."; continue; } if (strcmp(rcd_file.name, "GSLP") == 0) { if (!_gui_sprites.LoadGSLP(&rcd_file, sprites, texts)) return "Loading slope selection GUI sprites failed."; continue; } if (strcmp(rcd_file.name, "ANIM") == 0) { Animation *anim = new Animation; if (!anim->Load(&rcd_file)) { delete anim; return "Animation failed to load."; } if (anim->person_type == PERSON_INVALID || anim->anim_type == ANIM_INVALID) { delete anim; return "Unknown animation."; } this->AddBlock(anim); this->AddAnimation(anim); this->store.RemoveAnimations(anim->anim_type, (PersonType)anim->person_type); continue; } if (strcmp(rcd_file.name, "ANSP") == 0) { AnimationSprites *an_spr = new AnimationSprites; if (!an_spr->Load(&rcd_file, sprites)) { delete an_spr; return "Animation sprites failed to load."; } if (an_spr->person_type == PERSON_INVALID || an_spr->anim_type == ANIM_INVALID) { delete an_spr; return "Unknown animation."; } this->AddBlock(an_spr); this->store.AddAnimationSprites(an_spr); continue; } if (strcmp(rcd_file.name, "PRSG") == 0) { if (!LoadPRSG(&rcd_file)) return "Graphics Person type data failed to load."; continue; } if (strcmp(rcd_file.name, "TEXT") == 0) { TextData *txt = new TextData; if (!txt->Load(&rcd_file)) { delete txt; return "Text block failed to load."; } this->AddBlock(txt); std::pair<uint, TextData *> p(blk_num, txt); texts.insert(p); continue; } if (strcmp(rcd_file.name, "SHOP") == 0) { ShopType *shop_type = new ShopType; if (!shop_type->Load(&rcd_file, sprites, texts)) { delete shop_type; return "Shop type failed to load."; } _rides_manager.AddRideType(shop_type); continue; } if (strcmp(rcd_file.name, "TRCK") == 0) { auto tp = std::make_shared<TrackPiece>(); if (!tp->Load(&rcd_file, sprites)) { return "Track piece failed to load."; } track_pieces.insert({blk_num, tp}); continue; } if (strcmp(rcd_file.name, "RCST") == 0) { CoasterType *ct = new CoasterType; if (!ct->Load(&rcd_file, texts, track_pieces)) { delete ct; return "Coaster type failed to load."; } _rides_manager.AddRideType(ct); continue; } if (strcmp(rcd_file.name, "CSPL") == 0) { if (!LoadCoasterPlatform(&rcd_file, sprites)) return "Coaster platform failed to load."; continue; } if (strcmp(rcd_file.name, "CARS") == 0) { CarType *ct = GetNewCarType(); if (ct == nullptr) return "No room to store a car type."; if (!ct->Load(&rcd_file, sprites)) return "Car type failed to load."; continue; } /* Unknown block in the RCD file. Skip the block. */ fprintf(stderr, "Unknown RCD block '%s', version %i, ignoring it\n", rcd_file.name, rcd_file.version); rcd_file.SkipBytes(rcd_file.size); } }
void ZoneListWidget::_createImages(ImageMap& retlist) { retlist.clear(); Ogre::TexturePtr texture = Ogre::TextureManager::getSingleton().createManual( "EntityTex", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D, 256, 256, 0, Ogre::PF_A8R8G8B8 , Ogre::TU_RENDERTARGET ); Ogre::RenderTexture *rttTex = texture->getBuffer()->getRenderTarget(); Ogre::SceneManager *mSceneMgr = Ogre::Root::getSingletonPtr()->createSceneManager("OctreeSceneManager", "EntityTexMgr"); Ogre::Light *dirl = mSceneMgr->createLight("DisplayLight"); dirl->setDirection(-1,-1,-1); dirl->setDiffuseColour(1,1,1); dirl->setType(Ogre::Light::LT_DIRECTIONAL); Ogre::Camera* RTTCam = mSceneMgr->createCamera("EntityCam"); RTTCam->setNearClipDistance(0.01F); RTTCam->setFarClipDistance(0); RTTCam->setAspectRatio(1); RTTCam->setFOVy(Ogre::Degree(90)); RTTCam->setPosition(0,0,1); RTTCam->lookAt(0,0,0); Ogre::Viewport *v = rttTex->addViewport( RTTCam ); v->setClearEveryFrame( true ); v->setBackgroundColour(Ogre::ColourValue(0,0,0,0)); ModularZoneFactory* factory = dynamic_cast<ModularZoneFactory*>(OgitorsRoot::getSingletonPtr()->GetEditorObjectFactory("Modular Zone Object")); if(!factory)return; factory->loadZoneTemplates(); ZoneInfoMap zoneTemplates = factory->getZoneTemplateMap(); Ogre::Entity *mEntity; unsigned char dataptr[300 * 300 * 6]; unsigned char *dataptr2; Ogre::PixelBox pb(256,256,1,Ogre::PF_A8R8G8B8, dataptr); EntityMap entities; ZoneInfoMap::iterator zi; for(zi=zoneTemplates.begin();zi!=zoneTemplates.end();++zi) { Ogre::String addstr = (*zi).second.mMesh; if(entities.find((*zi).first) == entities.end()) entities.insert(EntityMap::value_type((*zi).first,addstr)); } EntityMap::const_iterator ite = entities.begin(); while(ite != entities.end()) { Ogre::String addstr = ite->second; mEntity = mSceneMgr->createEntity("MZP_Preview", addstr); mSceneMgr->getRootSceneNode()->attachObject(mEntity); //TODO: It would be nice to retrieve a Preview Camera Position from //the .zone file //TODO: also render portal outlines clearly so that the user can see //how the zone is laid out Ogre::Vector3 vSize = mEntity->getBoundingBox().getCorner(Ogre::AxisAlignedBox::NEAR_RIGHT_TOP);//.getHalfSize();//============ Ogre::Vector3 vCenter = mEntity->getBoundingBox().getCenter(); //FIXME ------ NICE PREVIEWS NEEDED - bigger vSize += Ogre::Vector3(vSize.z, vSize.z, vSize.z); float maxsize = std::max(std::max(vSize.x,vSize.y),vSize.z); //vSize = Ogre::Vector3(0, 0, maxsize * 1.1f) + vCenter; vSize = Ogre::Vector3(maxsize * 0.5f, vSize.y, maxsize * 0.5f) + vCenter; //vSize.x +=vSize.x/2;//Maybe test to see which is larger x/2 or z/2 and use that? //vSize.z +=vSize.x/2; //RTTCam->setProjectionType(Ogre::PT_ORTHOGRAPHIC); RTTCam->setPosition(vSize.x,vSize.y,vSize.z); RTTCam->lookAt(vCenter.x,vCenter.y,vCenter.z); rttTex->update(); rttTex->copyContentsToMemory(pb, Ogre::RenderTarget::FB_FRONT); dataptr2 = new unsigned char[96 * 96 * 4]; Ogre::PixelBox pb2(96,96,1,Ogre::PF_A8R8G8B8, dataptr2); Ogre::Image::scale(pb,pb2); addstr.erase(addstr.length() - 5, 5); retlist.insert(ImageMap::value_type((*ite).first, dataptr2)); mEntity->detachFromParent(); mSceneMgr->destroyEntity(mEntity); ite++; } rttTex->removeAllViewports(); Ogre::Root::getSingletonPtr()->destroySceneManager(mSceneMgr); Ogre::TextureManager::getSingletonPtr()->unload(texture->getName()); Ogre::TextureManager::getSingletonPtr()->remove(texture->getName()); }