int AODataSource::Open(IWorkspace* pWorkspace, const char * pszNewName, int bUpdate ) { CPLAssert( m_nLayers == 0 ); if (bUpdate) { // Start Editing? } m_pszName = CPLStrdup( pszNewName ); m_ipWorkspace = pWorkspace; HRESULT hr; // Anything will be fetched IEnumDatasetPtr ipEnumDataset; if (FAILED(hr = m_ipWorkspace->get_Datasets(esriDTAny, &ipEnumDataset))) { return AOErr(hr, "Failed Opening Workspace Layers"); } return LoadLayers(ipEnumDataset); }
bool AODataSource::LoadLayers(IEnumDataset* pEnumDataset) { HRESULT hr; pEnumDataset->Reset(); IDatasetPtr ipDataset; bool errEncountered = false; while ((S_OK == pEnumDataset->Next(&ipDataset)) && !(ipDataset == NULL)) { IFeatureDatasetPtr ipFD = ipDataset; if (!(ipFD == NULL)) { //We are dealing with a FeatureDataset, need to get IEnumDatasetPtr ipEnumDatasetSubset; if (FAILED(hr = ipFD->get_Subsets(&ipEnumDatasetSubset))) { AOErr(hr, "Failed getting dataset subsets"); errEncountered = true; continue; //skipping } if (LoadLayers(ipEnumDatasetSubset) == false) errEncountered = true; continue; } IFeatureClassPtr ipFC = ipDataset; if (ipFC == NULL) continue; //skip AOLayer* pLayer = new AOLayer; ITablePtr ipTable = ipFC; if (!pLayer->Initialize(ipTable)) { errEncountered = true; continue; } m_layers.push_back(pLayer); } if (errEncountered && m_layers.size() == 0) return false; //all of the ones we tried had errors else return true; //at least one worked }
void aui_Control::InitializeImageLayers(ldl_datablock *theBlock) { bool initializeFlags = (m_layerRenderFlags == NULL); if(!AllocateImageLayers(theBlock)) return; if(initializeFlags) InitializeFlagLayers(theBlock); LoadLayers(theBlock); ResizeLayers(theBlock); BaseResetCurrentRenderFlags(); }
bool WinEDA_SchematicFrame::LoadOneEEFile(BASE_SCREEN *screen, const wxString & FullFileName) /**************************************************************************************/ /* Routine to load an EESchema file. Returns TRUE if file has been loaded (at list partially.) */ { char Line[1024], * SLine; char Name1[256], Name2[256]; int ii, layer, orient, size; wxPoint pos; bool Failed = FALSE; EDA_BaseStruct *Phead, *Pnext; DrawJunctionStruct *ConnectionStruct; DrawPolylineStruct *PolylineStruct; EDA_DrawLineStruct * SegmentStruct; DrawBusEntryStruct * RaccordStruct; DrawMarkerStruct * MarkerStruct; DrawNoConnectStruct * NoConnectStruct; FILE *f; if ( screen == NULL ) return FALSE; if( FullFileName.IsEmpty() ) return FALSE; screen->m_CurrentItem = NULL; LineCount = 1; if ((f = wxFopen(FullFileName, wxT("rt")) ) == NULL) { MsgDiag = _("Failed to open ") + FullFileName; DisplayError(this, MsgDiag); return FALSE; } MsgDiag = _("Loading ") + FullFileName; PrintMsg(MsgDiag); if (fgets(Line, 1024 - 1, f) == NULL || strncmp(Line+9, SCHEMATIC_HEAD_STRING, sizeof(SCHEMATIC_HEAD_STRING) - 1) != 0) { MsgDiag = FullFileName + _(" is NOT EESchema file"); DisplayError(this, MsgDiag); fclose(f); return FALSE; } LineCount++; if(fgets(Line, 1024 - 1, f) == NULL || strncmp(Line, "LIBS:", 5) != 0) { MsgDiag = FullFileName + _(" is NOT EESchema file"); DisplayError(this, MsgDiag); fclose(f); return FALSE; } LoadLayers(f, &LineCount); while (!feof(f) && GetLine(f, Line, &LineCount, sizeof(Line)) != NULL) { SLine = Line; while( (*SLine != ' ' ) && *SLine ) SLine++; switch(Line[0]) { case '$': /* identification de bloc */ if(Line[1] == 'C') { Failed = ReadPartDescr(this, Line, f, screen); } else if(Line[1] == 'S') { Failed = ReadSheetDescr(this, Line, f, screen); } else if(Line[1] == 'D') { Failed = ReadSchemaDescr(this, Line, f, screen); } break; case 'L': /* Its a library item. */ Failed = ReadPartDescr(this, Line, f, screen); break; /* Fin lecture 1 composant */ case 'W': /* Its a Segment (WIRE or BUS) item. */ if( sscanf(SLine, "%s %s", Name1, Name2) != 2 ) { MsgDiag.Printf( wxT("EESchema file Segment struct error at line %d, aborted"), LineCount); Failed = TRUE; break; } layer = LAYER_NOTES; if( Name1[0] == 'W' ) layer = LAYER_WIRE; if( Name1[0] == 'B' ) layer = LAYER_BUS; SegmentStruct = new EDA_DrawLineStruct(wxPoint(0,0),layer); LineCount++; if (fgets(Line, 256 - 1, f) == NULL || sscanf(Line, "%d %d %d %d ", &SegmentStruct->m_Start.x,&SegmentStruct->m_Start.y, &SegmentStruct->m_End.x,&SegmentStruct->m_End.y) != 4 ) { MsgDiag.Printf( wxT("EESchema file Segment struct error at line %d, aborted"), LineCount); Failed = TRUE; delete SegmentStruct; break; } if (!Failed) { SegmentStruct->Pnext = screen->EEDrawList; screen->EEDrawList = (EDA_BaseStruct *) SegmentStruct; } break; case 'E': /* Its a Raccord (WIRE or BUS) item. */ if( sscanf(SLine, "%s %s", Name1, Name2) != 2 ) { MsgDiag.Printf( wxT("EESchema file Raccord struct error at line %d, aborted"), LineCount); Failed = TRUE; break; } ii = WIRE_TO_BUS; if( Name1[0] == 'B' ) ii = BUS_TO_BUS; RaccordStruct = new DrawBusEntryStruct(wxPoint(0,0), '\\', ii); LineCount++; if (fgets(Line, 256 - 1, f) == NULL || sscanf(Line, "%d %d %d %d ", &RaccordStruct->m_Pos.x,&RaccordStruct->m_Pos.y, &RaccordStruct->m_Size.x,&RaccordStruct->m_Size.y) != 4 ) { MsgDiag.Printf( wxT("EESchema file Raccord struct error at line %d, aborted"), LineCount); Failed = TRUE; delete RaccordStruct; break; } if (!Failed) { RaccordStruct->m_Size.x -= RaccordStruct->m_Pos.x; RaccordStruct->m_Size.y -= RaccordStruct->m_Pos.y; RaccordStruct->Pnext = screen->EEDrawList; screen->EEDrawList = RaccordStruct; } break; case 'P': /* Its a polyline item. */ if (sscanf(SLine, "%s %s %d", Name1, Name2, &ii) != 3 ) { MsgDiag.Printf( wxT("EESchema file polyline struct error at line %d, aborted"), LineCount); Failed = TRUE; break; } layer = LAYER_NOTES; if( Name2[0] == 'W' ) layer = LAYER_WIRE; if( Name2[0] == 'B' ) layer = LAYER_BUS; PolylineStruct = new DrawPolylineStruct(layer); PolylineStruct->m_NumOfPoints = ii; PolylineStruct->m_Points = (int *) MyZMalloc(sizeof(int) * 2 * PolylineStruct->m_NumOfPoints); for (ii = 0; ii < PolylineStruct->m_NumOfPoints; ii++) { LineCount++; if (fgets(Line, 256 - 1, f) == NULL || sscanf(Line, "%d %d", &PolylineStruct->m_Points[ii*2], &PolylineStruct->m_Points[ii*2+1]) != 2) { MsgDiag.Printf( wxT("EESchema file polyline struct error at line %d, aborted"), LineCount); Failed = TRUE; delete PolylineStruct; break; } } if (!Failed) { PolylineStruct->Pnext = screen->EEDrawList; screen->EEDrawList = (EDA_BaseStruct *) PolylineStruct; } break; case 'C': /* Its a connection item. */ ConnectionStruct = new DrawJunctionStruct(wxPoint(0,0)); if (sscanf(SLine, "%s %d %d", Name1, &ConnectionStruct->m_Pos.x, &ConnectionStruct->m_Pos.y) != 3) { MsgDiag.Printf( wxT("EESchema file connection struct error at line %d, aborted"), LineCount); Failed = TRUE; delete ConnectionStruct; } else { ConnectionStruct->Pnext = screen->EEDrawList; screen->EEDrawList = ConnectionStruct; } break; case 'N': /* Its a NoConnect item. */ if (sscanf(SLine, "%s %d %d", Name1, &pos.x, &pos.y) != 3) { MsgDiag.Printf( wxT("EESchema file NoConnect struct error at line %d, aborted"), LineCount); Failed = TRUE; } else { NoConnectStruct = new DrawNoConnectStruct(pos); NoConnectStruct->Pnext = screen->EEDrawList; screen->EEDrawList = NoConnectStruct; } break; case 'K': /* Its a MarKer item. */ if (sscanf(SLine, "%s %d %d", Name1, &pos.x, &pos.y) != 3) { MsgDiag.Printf( wxT("EESchema file marker struct error line %d, aborted"), LineCount); Failed = TRUE; } else { char * text; char BufLine[1024]; MarkerStruct = new DrawMarkerStruct(pos,wxEmptyString); ii = ReadDelimitedText(BufLine, Line, 256 ); MarkerStruct->m_Type = (TypeMarker)((Name1[0] & 255) - 'A'); if( MarkerStruct->m_Type < 0 ) MarkerStruct->m_Type = MARQ_UNSPEC; if ( ii ) MarkerStruct->m_Comment = CONV_FROM_UTF8(BufLine); text = strstr(Line," F="); if (text) { sscanf(text+3, "%X", &ii); MarkerStruct->m_MarkFlags = ii; } MarkerStruct->Pnext = screen->EEDrawList; screen->EEDrawList = MarkerStruct; } break; case 'T': /* Its a text item. */ { EDA_BaseStruct * Struct = NULL; *Name1 = *Name2 = 0; ii = sscanf(SLine, "%s %d %d %d %d %s", Name1, &pos.x, &pos.y, &orient, &size, Name2); if( ii < 4 ) { MsgDiag.Printf( wxT("EESchema file text struct error line %d, aborted"), LineCount); Failed = TRUE; } else if( fgets(Line, 256 - 1, f) == NULL ) { LineCount++; MsgDiag.Printf( wxT("EESchema file text struct error line %d (No text), aborted"), LineCount); Failed = TRUE; } else { LineCount++; if( size == 0 ) size = DEFAULT_SIZE_TEXT; char * text = strtok(Line, "\n\r"); if ( text == NULL ) break; if( Name1[0] == 'L' ) { DrawLabelStruct * TextStruct = new DrawLabelStruct(pos, CONV_FROM_UTF8(text)); TextStruct->m_Size.x = TextStruct->m_Size.y = size; TextStruct->m_Orient = orient; Struct = (EDA_BaseStruct*)TextStruct; } else if( Name1[0] == 'G' ) { DrawGlobalLabelStruct * TextStruct = new DrawGlobalLabelStruct(pos, CONV_FROM_UTF8(text)); Struct = (EDA_BaseStruct*)TextStruct; TextStruct->m_Size.x = TextStruct->m_Size.y = size; TextStruct->m_Orient = orient; if( stricmp(Name2,SheetLabelType[NET_OUTPUT]) == 0 ) TextStruct->m_Shape = NET_OUTPUT; if( stricmp(Name2,SheetLabelType[NET_BIDI]) == 0 ) TextStruct->m_Shape = NET_BIDI; if( stricmp(Name2,SheetLabelType[NET_TRISTATE]) == 0 ) TextStruct->m_Shape = NET_TRISTATE; if( stricmp(Name2,SheetLabelType[NET_UNSPECIFIED]) == 0 ) TextStruct->m_Shape = NET_UNSPECIFIED; } else { DrawTextStruct * TextStruct = new DrawTextStruct(pos, CONV_FROM_UTF8(text)); TextStruct->m_Size.x = TextStruct->m_Size.y = size; TextStruct->m_Orient = orient; Struct = (EDA_BaseStruct*)TextStruct; } if (Struct ) { Struct->Pnext = screen->EEDrawList; screen->EEDrawList = Struct; } } break; } default: Failed = FALSE; MsgDiag.Printf( wxT("EESchema file undef structdef at line %d, aborted"), LineCount); break; } if (Failed) { DisplayError(this, MsgDiag); break; } } /* EEDrawList was constructed in reverse order - reverse it back: */ Phead = NULL; while (screen->EEDrawList) { Pnext = screen->EEDrawList; screen->EEDrawList = screen->EEDrawList->Pnext; Pnext->Pnext = Phead; Phead = Pnext; } screen->EEDrawList = Phead; fclose(f); TestDanglingEnds(screen->EEDrawList, NULL); return TRUE; /* Although it may be that file is only partially loaded. */ }
void FileIO::Load(const char* filename, LibraryPanel* library, StagePanel* stage, ee::GroupTreePanel* grouptree) { // ee::SymbolMgr::Instance()->Clear(); Json::Value value; Json::Reader reader; std::locale::global(std::locale("")); std::ifstream fin(filename); std::locale::global(std::locale("C")); reader.parse(fin, value); fin.close(); SettingCfg* cfg = SettingCfg::Instance(); std::string dir = ee::FileHelper::GetFileDir(filename); // settings if (!value["settings"].isNull()) { cfg->m_terrain2d_anim = value["settings"]["terrain2d"].asBool(); } // size cfg->m_map_width = value["size"]["width"].asInt(); cfg->m_map_height = value["size"]["height"].asInt(); if (value["size"]["view width"].isNull()) { cfg->m_view_width = cfg->m_map_width; cfg->m_view_height = cfg->m_map_height; } else { cfg->m_view_dx = value["size"]["view offset x"].asInt(); cfg->m_view_dy = value["size"]["view offset y"].asInt(); cfg->m_view_width = value["size"]["view width"].asInt(); cfg->m_view_height = value["size"]["view height"].asInt(); } stage->BuildGrids(cfg->m_map_width, cfg->m_map_height); // camera auto canvas = std::dynamic_pointer_cast<ee::CameraCanvas>(stage->GetCanvas()); if (canvas->GetCamera()->Type() == s2::CAM_ORTHO2D) { auto cam = std::dynamic_pointer_cast<s2::OrthoCamera>(canvas->GetCamera()); float s = value["camera"]["scale"].asDouble(); float x = value["camera"]["x"].asDouble(), y = value["camera"]["y"].asDouble(); cam->Set(sm::vec2(x, y), s); } // screen if (!value["screen"]["multi_col"].isNull()) { std::string str = value["screen"]["multi_col"].asString(); stage->GetScreenMultiColor() = gum::str2color(str, s2s::RGBA); } if (!value["screen"]["add_col"].isNull()) { std::string str = value["screen"]["add_col"].asString(); pt2::Color col = gum::str2color(str, s2s::RGBA); col.a = 0; stage->GetScreenAddColor() = col; } if (!value["screen"]["post effect"].isNull()) { std::string filepath = value["screen"]["post effect"].asString(); filepath = ee::FileHelper::GetAbsolutePath(dir, filepath); sl::ColGradingProg* prog = NULL; sl::ShaderMgr* mgr = sl::ShaderMgr::Instance(); sl::FilterShader* shader = static_cast<sl::FilterShader*>(mgr->GetShader(sl::FILTER)); if (shader) { prog = static_cast<sl::ColGradingProg*>(shader->GetProgram(sl::FM_COL_GRADING)); } if (prog) { gum::Config* cfg = gum::Config::Instance(); bool ori_alpha_cfg = cfg->GetPreMulAlpha(); cfg->SetPreMulAlpha(false); auto img = ee::ImageMgr::Instance()->GetItem(filepath); cfg->SetPreMulAlpha(ori_alpha_cfg); if (img) { SettingCfg::Instance()->m_post_effect_file = filepath; prog->SetLUTTex(img->GetTexID()); std::dynamic_pointer_cast<StageCanvas>(stage->GetCanvas())->EnableColGrading(true); } } } // layers stage->SetResDir(dir); LoadLayers(value["layer"], stage, library, dir); // libraries if (value["library"].isNull()) { library->LoadSymbolFromLayer(); } else { library->LoadFromFile(value["library"], dir); } library->Refresh(); Layer* layer = static_cast<LibraryPage*>(library->GetCurrPage())->GetLayer(); ee::ChangeLayerMgrSJ::Instance()->Change(layer->GetLayerMgr()); }