Exemplo n.º 1
0
int WinEDA_BasePcbFrame::ReadGeneralDescrPcb(wxDC * DC, FILE * File, int * LineNum)
/**********************************************************************************/
{
char Line[1024], *data;
BASE_SCREEN * screen = m_CurrentScreen;

	while(  GetLine(File, Line, LineNum ) != NULL )
	{
		data = strtok(Line," =\n\r");
		if(strnicmp(data,"$EndGENERAL",10) == 0) break;

		if( strncmp(data, "Ly", 2) == 0 )	// Old format for Layer count
		{
			int Masque_Layer = 1, ii;
			data = strtok(NULL," =\n\r");
			sscanf(data,"%X",&Masque_Layer);
			// Setup layer count
			m_Pcb->m_BoardSettings->m_CopperLayerCount = 0;
			for ( ii = 0; ii < NB_COPPER_LAYERS; ii++ )
			{
				if ( Masque_Layer & 1 ) m_Pcb->m_BoardSettings->m_CopperLayerCount++;
				Masque_Layer >>= 1;
			}
			continue;
		}

		if(strnicmp(data, "Links", 5) == 0)
		{
			data = strtok(NULL," =\n\r");
			m_Pcb->m_NbLinks = atoi(data);
			continue;
		}

		if(strnicmp(data, "NoConn", 6) == 0)
		{
			data = strtok(NULL," =\n\r");
			m_Pcb->m_NbNoconnect = atoi(data);
			continue;
		}

		if(strnicmp(data, "Di", 2) == 0)
		{
			int ii, jj, bestzoom;
			wxSize pcbsize, screensize;
			data = strtok(NULL," =\n\r");
			m_Pcb->m_BoundaryBox.SetX(atoi(data));
			data = strtok(NULL," =\n\r");
			m_Pcb->m_BoundaryBox.SetY(atoi(data));
			data = strtok(NULL," =\n\r");
			m_Pcb->m_BoundaryBox.SetWidth(atoi(data) - m_Pcb->m_BoundaryBox.GetX());
			data = strtok(NULL," =\n\r");
			m_Pcb->m_BoundaryBox.SetHeight(atoi(data) - m_Pcb->m_BoundaryBox.GetY());

			/* calcul du zoom optimal */
			pcbsize = m_Pcb->m_BoundaryBox.GetSize();
			screensize = DrawPanel->GetClientSize();
			ii = pcbsize.x/screensize.x;
			jj = pcbsize.y/screensize.y;
			bestzoom = max(ii, jj);
			screen->m_Curseur = m_Pcb->m_BoundaryBox.Centre();

			screen->SetZoom(bestzoom);
			// la position des tracés a changé: mise a jour dans le DC courant
			wxPoint org;
			DrawPanel->GetViewStart(&org.x, &org.y);
			DrawPanel->GetScrollPixelsPerUnit(&ii, &jj);
			org.x *= ii; org.y *= jj;
#ifdef WX_ZOOM
			DC->SetUserScale(1.0/(double)screen->GetZoom(), 1.0/screen->GetZoom());
			org.x *= screen->GetZoom(); org.y *= screen->GetZoom();
			DC->SetDeviceOrigin(-org.x, -org.y);
#endif
			DrawPanel->SetBoundaryBox();
			Recadre_Trace(TRUE);
			continue;
		}

			/* Lecture du nombre de segments type DRAW , TRACT, ZONE */
		if(stricmp(data, "Ndraw") == 0)
		{
			data = strtok(NULL," =\n\r");
			NbDraw = atoi(data);;
			continue;
		}

		if(stricmp(data, "Ntrack") == 0)
		{
			data = strtok(NULL," =\n\r");
			NbTrack = atoi(data);
			continue;
		}

		if(stricmp(data, "Nzone") == 0)
		{
			data = strtok(NULL," =\n\r");
			NbZone = atoi(data);
			continue;
		}

		if(stricmp(data, "Nmodule") == 0)
		{
			data = strtok(NULL," =\n\r");
			NbMod = atoi(data);
			continue;
		}

		if(stricmp(data, "Nnets") == 0)
		{
			data = strtok(NULL," =\n\r");
			NbNets = atoi(data);
			continue;
		}

	}