Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
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. */
}
Ejemplo n.º 5
0
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());
}