Exemplo n.º 1
0
BOOL CxString :: Teilen( CString& h, CString& r, const char* pat, BOOL trimmen )
{
	CxString	head = h;
	CxString	rest = r;
	BOOL		result = FALSE;

	ASSERT( AfxIsValidString( pat ));
	if ( *pat == '\0' )
	{
		head = *this;
		rest = "";

		if ( trimmen )
		{
			head.TrimAll();
			rest.TrimAll();
		}
		h = head;
		r = rest;
		return TRUE;
	}
	if ( *(pat + 1 ) == '\0' )
		return Teilen( h, r, *pat, trimmen );

	int			i = Find( pat );
	int			len = lstrlen( pat );

	if ( len >= GetLength())
		return FALSE;

	if ( i >= 0 )
	{	if ( i == 0 )	// pat steht am Anfang
		{
			head.Empty();
			rest = Mid( len );
		}
		else
		{
			head = Left( i );
			if (( i + len ) < GetLength())
				rest = Mid( i + len );
			else
				rest = "";
			result = TRUE;
	}	}
	else
	{	// pat nicht gefunden!
		head = *this;
		rest.Empty();
	}

	if ( trimmen )
	{	head.TrimAll();
		rest.TrimAll();
	}

	h = head;
	r = rest;
	return result;
}	// Teilen
Exemplo n.º 2
0
void CObjektPool::BesondInfo(
	const char *pID, const char *infoart, const char *objart,
	const char *text, double lH, double lR)
{	
CGeoObj *pGO = NULL;
CString key, newkey, strText, txt;
CxString strNewKey;

	m_omGeoObjekte.Lookup(pID, (CObject *&)pGO);
	if (!pGO)
		m_omGeoObjekte.SetAt(pID, pGO = new CGeoObj(pID));

	strText = text;
	if (!strText.IsEmpty() && (strText != "NNNN")) {	
		if (!g_pTriasInterface -> GetAlias(objart, infoart, newkey))
			newkey = infoart;

		pGO -> AddTextMerkmal(newkey, text);
		g_pTriasInterface -> NeuesMerkmal(newkey);

		key = infoart;
		key += ":";
		key += text;
		if (g_pTriasInterface -> GetAlias(objart, key, newkey))
		{
			if ( !newkey.IsEmpty())
			{
				strNewKey = newkey;
				strNewKey.Teilen(newkey, strText, '#');

				pGO -> AddTextMerkmal(newkey, strText);
				g_pTriasInterface -> NeuesMerkmal(newkey);
			}
		}
	}

	if (( lH != 0.0 ) && ( lR != 0.0 ))
		pGO -> SetzPunkt( lH, lR );

	if (pGO -> ObjektArt().IsEmpty())
		pGO -> ObjektArt() = objart;
	else if (pGO -> ObjektArt().Find(objart) < 0)
	{
		txt = objart;
		txt += ", ";
		txt += pGO -> ObjektArt();
		pGO -> ObjektArt() = txt;
	}
}	// BesondInfo
Exemplo n.º 3
0
CxString StripTrailing( const CxString &source, const char toStrip )
{
	size_t i = source.GetLength();
	const _TCHAR *pSrc = (LPCTSTR)source + i;

	--pSrc;

	while (i && *pSrc == toStrip)
	{
		--pSrc;
		--i;
	}

	return source.Mid(0, (int)i);
}
Exemplo n.º 4
0
CxString RelativePathToAbsolutePath( CxString strRelativePath )
{
	if ( strRelativePath.GetAt(0) == _T('\\') || strRelativePath.GetAt(0) == _T('/') )
	{
		return strRelativePath;
	}
	if ( strRelativePath.Find(_T(':'), 0) > 0 )	return strRelativePath;

	CxString strExePath = GetExecuteDirectory();

	CxString strAbsolutePathName;
	strAbsolutePathName.MakePathName(strExePath, strRelativePath);

	return strAbsolutePathName;
}
Exemplo n.º 5
0
void MakeDirectory( CxString strDir )
{
	if ( strDir.Right(1) == _T("\\") )
		strDir = strDir.Left(strDir.GetLength()-1); 
	if ( GetFileAttributes(strDir) != -1 )
		return;

	DWORD dwErr = GetLastError();
	if ( !((dwErr == ERROR_PATH_NOT_FOUND) || (dwErr == ERROR_FILE_NOT_FOUND)) )
		return;

	int nFound = strDir.ReverseFind( _T('\\') );
	MakeDirectory( strDir.Left(nFound) );
	::CreateDirectory( strDir, NULL );
}
Exemplo n.º 6
0
CxSimpleADO::IFieldPtr CxSimpleADO::IRecordSetPtr::GetField(int index)
{
    CxADOField* pField = NULL;
    try
    {
        CxADOField field = m_pRecordSet->GetField(index);
        pField = new CxADOField(field);
    }
    catch (_com_error& e)
    {
        CxString strError;
        strError.Format( _T("DB FIELD Error! Code: %08lx, Description: %s\n"), e.Error(), (LPCTSTR)(e.Description()) );
        XTRACE( strError );
    }
    return IFieldPtr(pField);
}
Exemplo n.º 7
0
CxString GetExecuteFile()
{
	TCHAR    chPath[_MAX_PATH];
	TCHAR    chDrive[_MAX_DRIVE];
	TCHAR    chDir[_MAX_DIR];
	TCHAR    chFName[_MAX_FNAME];
	TCHAR    chExt[_MAX_EXT];
	CxString strFile;

	::GetModuleFileName(NULL, chPath, MAX_PATH);
	_tsplitpath(chPath, chDrive, chDir, chFName, chExt);
	strFile.Format(_T("%s"), chFName);
	strFile.MakeUpper();

	return strFile;
}
Exemplo n.º 8
0
BOOL CAtkisSatz::HatObjekte( int i )
{
	CxString	txt;
	BOOL	result = FALSE;
	int		l;

	for ( l = 0; l < NumFktParam( i ); l++ )
	{
		txt = ObjektNummerRechts( i, l );
		txt.TrimAll();
		if ( txt.GetLength())	result = TRUE;

		txt = ObjektNummerLinks( i, l );
		txt.TrimAll();
		if ( txt.GetLength())	result = TRUE;
	}
	return result;
}	// HatObjekte
Exemplo n.º 9
0
//	InitExtension  ----------------------------------------------------
STDMETHODIMP_(BOOL) CEDBSExtension::InitExtension( short iMode )
{
	if (!CTriasExtension::InitExtension (iMode))
		return false;

	m_pImport = CImportEDBS::CreateInstance(m_pUnk ? m_pUnk : this);
	if (NULL == m_pImport)
		return FALSE;

	_ASSERTE(NULL != g_pTriasInterface);
	
CxString text;

	text.GetPrivateProfileString( "Report", "Level", "", 255, g_pTriasInterface->GetIniFileName());
	if ( text.IsEmpty())
		CreateIniFile();

	return TRUE;
}	// InitExtension
Exemplo n.º 10
0
BOOL CxString :: Teilen( CString& h, CString& r, char c, BOOL trimmen )
{	int			i = Find( c );
	CxString	head = h;
	CxString	rest = r;
	BOOL		result = FALSE;

	if( i > 0 ) {
		head = Left( i );
		rest = Mid( i + 1 );
		result = TRUE;
	}
	else if( i == 0 ) { // c ist erstes Zeichen
		head.Empty();
		rest = Mid( 1 );
	}
	else { // Zeichen nicht gefunden!
		head = *this;
		rest.Empty();
	}

	if ( trimmen )
	{	head.TrimAll();
		rest.TrimAll();
	}

	h = head;
	r = rest;
	return result;
}	// Teilen
Exemplo n.º 11
0
void CGeoObj :: ReDefType( const char *type )
{
	CTriasObjekt TO( this );
	CxString	 text;

	ASSERT( ObjNr() > 0L );
	TO.ONr() = ObjNr();
	TO.ObjTyp() = ObjTyp();
	if ( TO.Read()) {
		if ( ZeigeLeseFehler ) {
			text.printf( "Objekt gelesen: %s, (Punkte: %d, Linien: %d, ID: %ld)", (const char*)UniqueIdent(), TO.AnzahlPunkte(), TO.AnzahlKonturen(), TO.Ident());
			if ( AfxMessageBox( text, MB_OKCANCEL ) != IDOK )
				 ZeigeLeseFehler = FALSE;
		}
		TO.ObjTyp() = *type;
		TO.ONr()  = -1L;
		TO.Neu() = TRUE;
		TO.WriteBack();

		if ( ZeigeLeseFehler ) {
			text.printf( "Objekt gelesen und geschrieben: %s, (alt: %ld) (neu: %ld)", (const char*)UniqueIdent(), ObjNr(), TO.ONr());
			if ( AfxMessageBox( text, MB_OKCANCEL ) != IDOK )
				ZeigeLeseFehler = FALSE;
		}

		ASSERT( TO.ONr() > 0L );
//		DEX_DeleteObject( ObjNr());
		if ( TO.ONr() > 0L )	ObjNr() = TO.ONr();
	}
	else if ( ZeigeLeseFehler ) {
		text = "Objekt nicht gelesen: ";
		text += UniqueIdent();
		if ( AfxMessageBox( text, MB_OKCANCEL ) != IDOK )
			ZeigeLeseFehler = FALSE;
	}
}	// ReDefType
Exemplo n.º 12
0
void CAtkisSatz :: Lesen( long num_parser_calls, const char *txt )
{	short	i, n;
	CString		satz = txt;
	CxString		teil;

	// Initialisierung der Variablen
	n = m_Linien.GetSize();
	for ( i = 0; i < n; i++ )
		delete (CLinie*)m_Linien[i];
	m_Linien.RemoveAll();

	n = m_Objekte.GetSize();
	for ( i = 0; i < n; i++ )
		delete (CEDBSObjekt*)m_Objekte[i];
	m_Objekte.RemoveAll();

	n = m_Infos.GetSize();
	for ( i = 0; i < n; i++ )
		delete (CInfo*)m_Infos[i];
	m_Infos.RemoveAll();

	m_bObjektDaten = FALSE;
	m_bAttrSatz = FALSE;
	m_bGueltig = FALSE;

	// Gueltigkeit testen
	if ( satz.IsEmpty() || ( satz.GetLength() < 4 ))
		return;

	// Anfangskennung
	teil = satz.Left( 4 );

	if ( teil == "FEIN" )		m_eStart = FEIN;
	else if ( teil == "BSPE" )	m_eStart = BSPE;
	else if ( teil == "AKND" )	m_eStart = AKND;
	else if ( teil == "AEND" )	m_eStart = AEND;
	else if ( teil == "BKRT" )	m_eStart = BKRT;
	else if ( teil == "BINF" )	m_eStart = BINF;
	else if ( teil == "FAEN" )	m_eStart = FAEN;
	else if ( teil == "FLOE" )	m_eStart = FLOE;
	else if ( teil == "FALG" )	m_eStart = FALG;

	satz = satz.Mid( 4 );	// Kennung überlesen
	teil = satz.Left( 6 );
	m_lEDBSSatzNummer = teil.Long();
	m_lNumParserCalls = num_parser_calls;
	satz = satz.Mid( 6 );		// sechsstellige Satznummer überlesen
	if ( satz[0] == ' ' )			m_bKomplett = TRUE;
	else if ( satz[0] == 'E' )		m_bKomplett = TRUE;
	else							m_bKomplett = FALSE;

	// Fortsetzungskennung ausgewertet
	satz = satz.Mid( 2 );

	// Int4 wegschlucken
	satz = satz.Mid( 4 );
	teil = satz.Left( 8 );
	satz = satz.Mid( 8 );

	// Satztyp
	if      ( teil == "ULOBNN  " )	m_eTyp = ULOBNN;
	else if ( teil == "ULTANN  " )	m_eTyp = ULTANN;
	else if ( teil == "ULQA0000" )	m_eTyp = ULQA0000;
	else if ( teil == "IBENKRT " )	m_eTyp = IBENKRT;
	else if ( teil == "ULOTEX  " )	m_eTyp = ULOTEX;
	else if ( teil == "ULBENFOL" )	m_eTyp = ULBENFOL;
	else if ( teil == "ULBENGEO" )	m_eTyp = ULBENGEO;
	else if ( teil == "ULBENOBJ" )	m_eTyp = ULBENOBJ;
	else if ( teil == "ULPUNN  " )	m_eTyp = ULPUNN;
	else if (teil == "DLOB2005") m_eTyp = DLOB2005;
	else if ( teil.Left(3) == "ULO" )	m_eTyp = ULOALK;

	m_strBuffer += satz;

	if ( Komplett()) {
		switch ( Start()) {
		case AKND:
			AnfangsSatz( m_strBuffer );
			break;
		case AEND:
			EndeSatz( m_strBuffer );
			break;
		case FEIN:
		case BSPE:
			DatenSatz( m_strBuffer );
			break;

		case FLOE:
			LoeschSatz(m_strBuffer);		// #HK001106
			break;
		}

		m_strBuffer.Empty();
	}
}
Exemplo n.º 13
0
void CEditPage7::InitData()
{
	short			i, n;
	CWnd			*pWnd;
	CEigentuemer	*pSatz;
	CxString		text;

	for ( i = 0; i < 4; i++ )
	{
		m_lNenn[i]   = 1000;
		m_lZaehl[i]  = 1000;
		m_bHer[i]    = TRUE;
		m_strTeil[i] = "";
		m_strOrt[i]  = "";
		m_strPLZ[i]  = "";
		m_strStr[i]  = "";
		m_strName[i] = "";
	}

	m_iEigZahl = m_parrEigent -> GetSize();
	n = m_iEigZahl - m_iOffset;
	if ( n > 4 )	n = 4;
	for ( i = 0; i < n; i++ )
	{
		pSatz = (CEigentuemer*)m_parrEigent -> GetAt( i + m_iOffset );
		text.Empty();
		text.printf( "Eigentümer %d", int( i + m_iOffset + 1 ));
		m_strEig[i]  = text;
		m_strName[i] = pSatz -> m_NFP4_ENA;
		m_strStr[i]  = pSatz -> m_NFP4_EAN;
		m_strPLZ[i]  = pSatz -> m_NFP4_EPL;
		m_strOrt[i]  = pSatz -> m_NFP4_EOR;
		m_lNenn[i]   = pSatz -> m_NFP4_PN;
		m_lZaehl[i]  = pSatz -> m_NFP4_PZ;
		m_bHer[i]    = TestYES( pSatz -> m_NFP4_HER );
	}

	pWnd = GetDlgItem( IDC_BUTTON2 );
	ASSERT( pWnd );
	pWnd -> EnableWindow( m_iEigZahl > 0 );

	pWnd = GetDlgItem( IDC_BUTTON3 );
	ASSERT( pWnd );
	pWnd -> EnableWindow(( m_iEigZahl - m_iOffset ) > 4 );

	pWnd = GetDlgItem( IDC_BUTTON4 );
	ASSERT( pWnd );
	pWnd -> EnableWindow( m_iOffset > 0 );

	pWnd = GetDlgItem( IDC_RADIO1 );
	ASSERT( pWnd );
	if ( m_iEigZahl > 1 )
	{
		((CButton*)pWnd) -> SetCheck( m_bMiteigentum ? 1 : 0 );
		pWnd -> EnableWindow( TRUE );
	}
	else
	{
		((CButton*)pWnd) -> SetCheck( 0 );
		pWnd -> EnableWindow( FALSE );
	}

	pWnd = GetDlgItem( IDC_RADIO2 );
	ASSERT( pWnd );
	if ( m_iEigZahl > 1 )
	{
		((CButton*)pWnd) -> SetCheck( m_bMiteigentum ? 0 : 1 );
		pWnd -> EnableWindow( TRUE );
	}
	else
	{
		((CButton*)pWnd) -> SetCheck( 0 );
		pWnd -> EnableWindow( FALSE );
	}
}
Exemplo n.º 14
0
void CDlgSelPrint::OnSelectUmfang() 
{
	short		id = m_cbUmfang.GetCurSel();
	short		anla;
	CxString	text;

	anla = GetCheckedRadioButton( IDC_RADIO1, IDC_RADIO8 );
	if (( anla == IDC_RADIO8 ) && (( id == 0 ) ||	// Anlage - öff.Flächen - für ein GS
		( id == 4 ) || ( id == 5 )))				// bzw. für willkürliche Selektion
	{												// nicht definiert!
		m_cbUmfang.SetCurSel( 1 );
		MessageBeep( 0xFFFFFFFF );
		OnSelectUmfang();
		return;
	}

	switch ( id )
	{
		case 0:		// Einzelgrundstück
			m_strObjekt = m_strGrund;
			break;
		case 1:		// Straße
			m_strObjekt = m_strStr;
			if ( m_iA1 == 1 )
				text = "  ( 1 Grundstück)";
			else
				text.printf( "  ( %d Grundstücke)", m_iA1 );
			m_strObjekt += text;
			break;
		case 2:		// Ortslage
			m_strObjekt = m_strOrt;
			if ( m_iA2 == 1 )
				text = "  ( 1 Grundstück)";
			else
				text.printf( "  ( %d Grundstücke)", m_iA2 );
			m_strObjekt += text;
			break;
		case 3:		// Gesamt
			m_strObjekt = m_strOrte;
			if ( m_iA3 == 1 )
				text = "  ( 1 Grundstück)";
			else
				text.printf( "  ( %d Grundstücke)", m_iA3 );
			m_strObjekt += text;
			break;
		case 4:		// selektierte GS
			m_strObjekt = m_strSelected;
			if ( m_iA4 == 1 )	text.printf( " (%s)", m_strIDE );
			else				text.printf( " ( %d Grundstücke )", m_iA4 );
			m_strObjekt += text;
			break;
		case 5:		// markierte GS
			m_strObjekt = m_strMarked;
			if ( m_iA5 == 1 )	text.printf( " ( %s )", m_strIDE );
			else				text.printf( " ( %d Grundstücke )", m_iA5 );
			m_strObjekt += text;
			break;
	}

	UpdateData( FALSE );
}
Exemplo n.º 15
0
void CObjektPool :: BesondInfo( const short j, const short k, CAtkisSatz* pSatz )
{
	CCfg	*pConfiguration= &((CEDBSExtension*)g_pTE)->Configuration;
	CRule_Layer *pRule_Layer;
	CGeoObj		*pGOBI = NULL;
	CPunktFolge* pBIpoints1 = NULL;
	CPunktFolge* pBIpoints2 = NULL;
	CxString	strTemp;
	CxString	strText, txt;

	CRule_Info	*pRule_Info = NULL;

	CxString strRegeln("ALK-Regeln");
	CxString strRule;

	CxString strObjNum;
	CxString strAktualitaet;
	CxString strObjNumBI;
	CxString strInfoArt;
	CxString strArtBI;
	CxString strFolie, strObjArt, strObjArtBI;
	int iArtGeo;
	bool tText_erzeugt;
	
	try {

		strObjNum = pSatz->OF_Objektnummer( j );
		strAktualitaet = pSatz->OF_Aktuali( j );
	//	strObjNum.TrimAll();
		strFolie = pSatz -> OF_Folie(j);
		strFolie.TrimAll();
		
		pRule_Layer = g_pMetaData->GetRule_Layer( strFolie );
		if( NULL == pRule_Layer )
			return;

		if( 0 == pRule_Layer->ImportMode() ) 
			return;

		strObjArt = pSatz -> OF_Objektart( j );
		strObjArt.TrimAll();
		strObjArtBI = pSatz -> OF_BI_Objektart( j, k );
		strObjArtBI.TrimAll();
		strArtBI = pSatz -> OF_BI_Art( j, k );	
		strArtBI.TrimAll();
		strInfoArt = strArtBI;
		strInfoArt += "/";									//#FJE980805
		strInfoArt += strObjArtBI;
		
	/*
		if ( strArtBI == "44" ) {	// UNIX-Umlaute ausbauen
			strInfoArt = strText.Left( 2 );
			strText = strText.Mid( 2 );
			strText.Transform(2);
		}
	*/
	//	pGO = g_pObjektPool->GetGeoObj( strObjNum + "H" );
	//	pGO->Folie() = strFolie;
	//	pGO->Objektart() = strObjArt;
	//	pGO->Aktualitaet() = m_Aktuali;


//=== Regeln für besondere Informationen suchen ========================================

		strRule = strFolie + strObjArt + strObjArtBI + strArtBI;
		pRule_Info = g_pMetaData->GetRule_Info( strRule );
		if( NULL == pRule_Info )
			return;

		strText = pSatz -> OF_BI_Text( j, k );
		strText.TrimAll();
		if( pConfiguration->m_sCodePage )
			strText.Transform(pConfiguration->m_sCodePage);

		if( pRule_Info->ObjektartBI_bestimmt_Objektklasse_Hauptgeometrie() ) {
			CGeoObj	*pGO;

			pGO = g_pObjektPool->GetGeoObj( strObjNum + "H" );
			if( pConfiguration->m_tCreateAttributeRegeln )
				pGO->AddAttribute( strRegeln, strRule );
			pGO->Folie() = strFolie;
			pGO->Objektart() = strObjArtBI;
			g_pMetaData->ObjectClassesTRiAS().Lookup( pRule_Info->ObjectClassTRiAS_Hauptgeometrie(), (CObject*&)pGO->ObjectClassTRiAS() );
		}

	//=== Regeln für Texte ============================================================
		tText_erzeugt = false;
		if( pConfiguration->m_tCreateBItext) {
			if( 0 != pRule_Info->Importmodus_Attr() ) {
				CxString strTextToCreate;

				strTemp = pRule_Info->Konvertierung_Text().Left(1);
				if( strTemp == "\"" ) {
					strTextToCreate = pRule_Info->Konvertierung_Text().Mid( 1, pRule_Info->Konvertierung_Text().GetLength() - 2 );
				}
				else if( !strText.IsEmpty() ) { 
					if( strTemp == "§" ) {
	//--- Konvertierung für Hausnummern ------------------------------------------------
						if( "§Hausnummer" == pRule_Info->Konvertierung_Text() ) {
							if( strText.Left(2) == "HA" ) {
								CxString strHANR, strHANRZ, strArt, strObjArt;
								int ix1, ix2;
								strHANR = strText;
								strHANR = strHANR.Mid(23,3);
								if( strHANR == "P01" || strHANR == " 01" || strHANR == "001") {
									strHANR = strText;
									strHANR = strHANR.Mid(15,8);
									strHANRZ = strHANR;
									while( isdigit((int)*strHANRZ.Left(1)) )
										strHANRZ = strHANRZ.Mid(1);
									strHANRZ.TrimAll();
									strHANR.Format("%ld", strHANR.Long());
									if( !strHANRZ.IsEmpty() )
										strHANR += strHANRZ;
									for( ix1 = 0,ix2 = pSatz -> OF_AnzahlBesInfo( j );
										ix1 < ix2;
										ix1++ ) {
										strArt = pSatz -> OF_BI_Art( j, ix1 );
										strObjArt = pSatz -> OF_BI_Objektart( j, ix1 );
										if(  strArt == "21" ) {
											if( strObjArt == "  1031" ) {
												strHANR.Empty();
												break;
											}
										}
										else
											continue;
									}	
									strTextToCreate = strHANR;
								}
							}
							else
								strTextToCreate = strText;
						}
	//--- Konvertierung für Flurstückskennzeichen -------------------------------------
						else if( "§Flurstückskennzeichen" == pRule_Info->Konvertierung_Text() ) {
							if( strText.Left(2) == "FS" ) {
								long z, n;
								z = ((CxString)strText.Mid(11,5)).Long();
								n = ((CxString)strText.Mid(16,3)).Long();
								if( 0 == n )							
									strTextToCreate.printf( "%lu", z );
								else							
									strTextToCreate.printf( "%lu/%lu", z, n );
							}
							else
								strTextToCreate = strText;
						}
	//--- Konvertierung für Flurkennzeichen -------------------------------------
						else if( "§Flurkennzeichen" == pRule_Info->Konvertierung_Text() ) {
							if( strText.Left(2) == "FL" ) {
								long f;
								f = ((CxString)strText.Mid(8,3)).Long();
								strTextToCreate.printf( "Fl. %lu", f );
							}
							else
								strTextToCreate = strText;
						}
					}
					else {
						strTextToCreate = strText;
					}
				}

				if( strTextToCreate.IsEmpty() )
					tText_erzeugt = false;
				else {
					tText_erzeugt = true;
					strObjNumBI = strObjNum + "T";
					strObjNumBI += "_";
					txt.Format("%03d", j);
					strObjNumBI += txt;
					strObjNumBI += "_";
					txt.Format("%03d", k);
					strObjNumBI += txt;
	/*
					strObjNumBI = strObjNum;
					strObjNumBI += "_";
			//		txt.Format("%06ld", pSatz->m_lEDBSSatzNummer);
					txt.Format("%08ld", pSatz->m_lNumParserCalls);
					strObjNumBI += txt;
					strObjNumBI += "_";
					txt.Format("%03d", k);
					strObjNumBI += txt;
					strObjNumBI += "_";
					strObjNumBI += key;
					strObjNumBI += "T";
					strObjNumBI += pSatz->OF_BI_ArtGeo(j,k);
					strObjNumBI += "T";
	*/

					pBIpoints1 = pSatz -> OF_BI_Points( j, k );
					if( pBIpoints1 ) {
						pGOBI = g_pObjektPool->GetGeoObj( strObjNumBI );
						if( pConfiguration->m_tCreateAttributeRegeln )
							pGOBI->AddAttribute( strRegeln, strRule );
						pGOBI->tBI = true;
						pGOBI->Folie() = strFolie;
						pGOBI->Objektart() = strObjArtBI;
			//			pGOBI->Aktualitaet() = m_Aktuali;
						g_pMetaData->ObjectClassesTRiAS().Lookup( pRule_Info->Objektklasse_Text(), (CObject*&)pGOBI->ObjectClassTRiAS() );
						if( pBIpoints1->GetSize() > 1 ) {
							pBIpoints2 = new CPunktFolge( 1 );
							if(	pBIpoints1->GetPoint(1).Hoch() == pSatz -> GrundPunktHoch()
								&& pBIpoints1->GetPoint(1).Rechts() == pSatz -> GrundPunktRechts() ) {
								(*pBIpoints2)[0] = new CPunkt( pBIpoints1->GetPoint(0).Hoch(), pBIpoints1->GetPoint(1).Rechts(), pBIpoints1->GetPoint(1).Dreh() );
							}
							else {
								(*pBIpoints2)[0] = new CPunkt( pBIpoints1->GetPoint(0).Hoch(), pBIpoints1->GetPoint(0).Rechts(), pBIpoints1->GetPoint(0).Dreh() );
							}
							AddLineBI( strObjNumBI, pBIpoints2, pGOBI,
								"BI", strFolie, strObjArtBI );
							delete pBIpoints2;
							pBIpoints2 = NULL;
						}
						else
							AddLineBI( strObjNumBI, pBIpoints1, pGOBI,
								"BI", strFolie, strObjArtBI );

						pGOBI->ObjTyp() = 'T';
						pGOBI->ObjLabel() = strTextToCreate;
					}
				}
			}
		}

	//=== Regeln für Attribute ========================================================
		if( pConfiguration->m_tCreateBIattr && !strText.IsEmpty() ) {
			CMapStringToString	mapAttrToCreate;
			CxString	strAttrToCreate;

			if( 0 != pRule_Info->Importmodus_Attr() ) {
				strTemp = pRule_Info->Konvertierung_Attr().Left(1);
				if( strTemp == "\"" ) {
					strAttrToCreate = pRule_Info->Konvertierung_Attr().Mid( 1, pRule_Info->Konvertierung_Attr().GetLength() - 2 );
					mapAttrToCreate.SetAt( pRule_Info->AttributeName(), strAttrToCreate );
				}
				else if( strTemp == "§" ) {
	//--- Konvertierungen -------------------------------------------------------------
					if( "{" == pRule_Info->Konvertierung_Attr().Mid(1,1) ) { // Attributmenge
						CxString strAttrNames(pRule_Info->AttributeName() + ";");
						if( "§{Gebaeudekennzeichen}" == pRule_Info->Konvertierung_Attr() ) {
							if( strText.Left(2) == "HA" ) {
								if( 0 <= strAttrNames.Find("Laenderschluessel;") )
									mapAttrToCreate.SetAt( "Laenderschluessel", strText.Mid( 2, 2 ) );
								if( 0 <= strAttrNames.Find("Regierungsbeziksschluessel;") )
									mapAttrToCreate.SetAt( "Regierungsbeziksschluessel", strText.Mid( 4, 1 ) );
								if( 0 <= strAttrNames.Find("Kreisschluessel;") )
									mapAttrToCreate.SetAt( "Kreisschluessel", strText.Mid( 5, 2 ) );
								if( 0 <= strAttrNames.Find("Gemeindeschluessel;") )
									mapAttrToCreate.SetAt( "Gemeindeschluessel", strText.Mid( 7, 3 ) );
								if( 0 <= strAttrNames.Find("Strassenschluessel;") )
									mapAttrToCreate.SetAt( "Strassenschluessel", strText.Mid( 10, 5 ) );
								if( 0 <= strAttrNames.Find("Hausnummer;") )
									mapAttrToCreate.SetAt( "Hausnummer", strText.Mid( 15, 4 ) );
								if( 0 <= strAttrNames.Find("Hausnummernzusatz;") )
									mapAttrToCreate.SetAt( "Hausnummernzusatz", strText.Mid( 19, 4 ) );
								if( 0 <= strAttrNames.Find("Gebaeudenummer;") )
									mapAttrToCreate.SetAt( "Gebaeudenummer", strText.Mid( 23, 3 ) );
							}
						}	
						if( "§{Flurstueckskennzeichen}" == pRule_Info->Konvertierung_Attr() ) {
							if( strText.Left(2) == "FS" ) {
								if( 0 <= strAttrNames.Find("Bundeslandschluessel;") )
									mapAttrToCreate.SetAt( "Bundeslandschluessel", strText.Mid( 2, 2 ) );
								if( 0 <= strAttrNames.Find("Gemarkungsschluessel;") )
									mapAttrToCreate.SetAt( "Gemarkungsschluessel", strText.Mid( 4, 4 ) );
								if( 0 <= strAttrNames.Find("Flur;") )
									mapAttrToCreate.SetAt( "Flur", strText.Mid( 8, 3 ) );
								if( 0 <= strAttrNames.Find("Flurstueckszaehler;") )
									mapAttrToCreate.SetAt( "Flurstueckszaehler", strText.Mid( 11, 5 ) );
								if( 0 <= strAttrNames.Find("Flurstuecksnenner;") )
									mapAttrToCreate.SetAt( "Flurstuecksnenner", strText.Mid( 16, 3 ) );
								if( 0 <= strAttrNames.Find("Flurstuecksfolgenummer;") )
									mapAttrToCreate.SetAt( "Flurstuecksfolgenummer", strText.Mid( 19, 2 ) );
							}
						}	
					}
					else {										// Einzelattribut
						if( "§WLDGE-Flurstueckskennzeichen" == pRule_Info->Konvertierung_Attr() ) {
							strAttrToCreate = strText.Mid( 2, 6 )
								+ "-" + strText.Mid( 8, 3 ) + "-"
								+ strText.Mid( 11, 5 ) + "/" + strText.Mid( 16, 3 )
								+ "." + strText.Mid( 19, 2 );
							mapAttrToCreate.SetAt( pRule_Info->AttributeName(), strAttrToCreate );
						}	
					}
				}
				else
					mapAttrToCreate.SetAt( pRule_Info->AttributeName(), strText );

				if( !mapAttrToCreate.IsEmpty() ) {
					CGeoObj	*pGO;

					pGO = g_pObjektPool->GetGeoObj( strObjNum + "H" );
					if( pConfiguration->m_tCreateAttributeRegeln )
						pGO->AddAttribute( strRegeln, strRule );
					if( 0 == pGO->AnzahlLinien() && !tText_erzeugt ) {
						double dblH;
						double dblR; 

						if( pGO->Folie().IsEmpty() )
							pGO->Folie() = strFolie;
						if( pGO->Objektart().IsEmpty() )
							pGO->Objektart() = strObjArt;
	//					pGO->Aktualitaet() = m_Aktuali;
						dblH = pSatz -> GrundPunktHoch();
						dblR = pSatz -> GrundPunktRechts();
						if (( dblH != 0.0 ) && ( dblR != 0.0 ))
							pGO -> SetzPunkt( dblH, dblR );
					}

					POSITION pos;
					CString strAttrName;
					CString strAttrValue;
					for ( pos = mapAttrToCreate.GetStartPosition();
						pos != NULL; ) {
						mapAttrToCreate.GetNextAssoc( pos, strAttrName, strAttrValue  );
						pGO -> AddAttribute( strAttrName, strAttrValue );
						g_pTriasInterface -> NeuesMerkmal( strAttrName );
					}
					mapAttrToCreate.RemoveAll();
				}
			}
		}

	//=== Regeln für Geometrien =======================================================
		if( pConfiguration->m_tCreateBIgeom && strText.IsEmpty() && !tText_erzeugt ) {
			if( 0 != pRule_Info->Importmodus_Detailgeometrie() ) {
				strObjNumBI = strObjNum + "D";
				strObjNumBI += "_";
				txt.Format("%03d", j);
				strObjNumBI += txt;
				txt.Format("%03d", k);
				strObjNumBI += txt;
				strObjNumBI += strObjArtBI;
				txt.Format("%08ld", pSatz->m_lNumParserCalls);
				strObjNumBI += txt;
	/*
					strObjNumBI = strObjNum;
					strObjNumBI += "_";
			//		txt.Format("%06ld", pSatz->m_lEDBSSatzNummer);
					txt.Format("%08ld", pSatz->m_lNumParserCalls);
					strObjNumBI += txt;
					strObjNumBI += "_";
					txt.Format("%03d", k);
					strObjNumBI += txt;
					strObjNumBI += "_";
					strObjNumBI += strObjArt + strInfoArt;
					strObjNumBI += "T";
					strObjNumBI += pSatz->OF_BI_ArtGeo(j,k);
	*/
				pBIpoints1 = pSatz -> OF_BI_Points( j, k );
				if( pBIpoints1 ) {
					int iAnzahlPunkte = 0;

					iArtGeo = atoi(pSatz->OF_BI_ArtGeo(j,k));
					switch( iArtGeo ) {
					case _EinzelpunktInBesondererAusrichtung:
			#pragma message( "Einzelpunkte verarbeiten" )
						pBIpoints2 = new CPunktFolge( *pBIpoints1, false );
						break;
					case _Gerade:
						pBIpoints2 = new CPunktFolge( *pBIpoints1, false );
						break;
					case _Polygonzug:
						pBIpoints2 = new CPunktFolge( *pBIpoints1, false );
						break;
					case _Kreisbogen_rechts:
						{
							if( pBIpoints1->GetSize() == 3 ) {
								SAFEARRAY *psa = NULL;
								ConvertArc1(
										(pBIpoints1->GetPoint(1)).Hoch(), (pBIpoints1->GetPoint(1)).Rechts(),
										(pBIpoints1->GetPoint(2)).Hoch(), (pBIpoints1->GetPoint(2)).Rechts(),
										(pBIpoints1->GetPoint(0)).Hoch(), (pBIpoints1->GetPoint(0)).Rechts(),
										&psa );
								if( psa ) {
									iAnzahlPunkte = psa->rgsabound[0].cElements / 2;
									if( iAnzahlPunkte > 0 ) {
										pBIpoints2 = new CPunktFolge( iAnzahlPunkte );
										do {
											--iAnzahlPunkte;
											(*pBIpoints2)[iAnzahlPunkte] = new CPunkt( *(((double*)psa->pvData) + iAnzahlPunkte*2), *(((double*)psa->pvData) + iAnzahlPunkte*2 + 1) );
										} while( iAnzahlPunkte > 0);
									}
									SafeArrayDestroy( psa );
									psa = NULL;
								}
							}
							else {	//Korrektur für Kreise aus zwei Punkten
								pBIpoints2 = new CPunktFolge( *pBIpoints1, false );
							}
						}
						break;
					case _Kreisbogen_links:
						{
							if( pBIpoints1->GetSize() == 3 ) {
								SAFEARRAY *psa = NULL;
								ConvertArc1(
										(pBIpoints1->GetPoint(0)).Hoch(), (pBIpoints1->GetPoint(0)).Rechts(),
										(pBIpoints1->GetPoint(2)).Hoch(), (pBIpoints1->GetPoint(2)).Rechts(),
										(pBIpoints1->GetPoint(1)).Hoch(), (pBIpoints1->GetPoint(1)).Rechts(),
										&psa );
								if( psa ) {
									iAnzahlPunkte = psa->rgsabound[0].cElements / 2;
									if( iAnzahlPunkte > 0 ) {
										pBIpoints2 = new CPunktFolge( iAnzahlPunkte );
										do {
											--iAnzahlPunkte;
											(*pBIpoints2)[iAnzahlPunkte] = new CPunkt( *(((double*)psa->pvData) + iAnzahlPunkte*2), *(((double*)psa->pvData) + iAnzahlPunkte*2 + 1) );
										} while( iAnzahlPunkte > 0);
									}
									SafeArrayDestroy( psa );
									psa = NULL;
								}
							}
							else {	//Korrektur für Kreise aus zwei Punkten
								pBIpoints2 = new CPunktFolge( *pBIpoints1, false );
							}
						}
						break;
			/*
					case _Kurve:
						iAnzahlPunkte = 0;

						pPF = new CPunktFolge( iAnzahlPunkte + 2 );
						(*pPF)[0] = new CPunkt( pSatz -> GrundPunktHoch(), pSatz -> GrundPunktRechts());
						(*pPF)[iAnzahlPunkte + 1] = new CPunkt( pSatz -> EndPunktHoch( i ), pSatz -> EndPunktRechts( i ));
						break;
			*/		default:
			//			_ASSERT(0);
						break;
					}
				}
				if( pBIpoints2 ) {
					pGOBI = g_pObjektPool->GetGeoObj( strObjNumBI );
					if( pConfiguration->m_tCreateAttributeRegeln )
						pGOBI->AddAttribute( strRegeln, strRule );
					pGOBI->tBI = true;
					pGOBI->Folie() = strFolie;
					if( pRule_Info->Objektart_bestimmt_Objektklasse_Detailgeometrie() ) {
						pGOBI->Objektart() = strObjArt;
						g_pMetaData->ObjectClassesTRiAS().Lookup( g_pMetaData->m_strObjectClassesTRiAS + strFolie + strObjArt, (CObject*&)pGOBI->ObjectClassTRiAS() );
					}
					else {
						pGOBI->Objektart() = strObjArtBI;
						g_pMetaData->ObjectClassesTRiAS().Lookup( pRule_Info->Objektklasse_Detailgeometrie(), (CObject*&)pGOBI->ObjectClassTRiAS() );
					}
					AddLineBI( strObjNumBI, pBIpoints2, pGOBI,
						"BI", strFolie, strObjArtBI );
					delete pBIpoints2;
					pBIpoints2 = NULL;
				}
			}
		}


	/*		
		if( pConfiguration->m_tDefaultObjectMapping ) {
	//==========================================================================
	/ *		lH = pSatz -> GrundPunktHoch();
			lR = pSatz -> GrundPunktRechts();
			if (( lH != 0.0 ) && ( lR != 0.0 ))
				pGO -> SetzPunkt( lH, lR );

			if ( pGO -> Objektart().IsEmpty())
				pGO -> Objektart() = strObjArt;
			else if ( pGO -> Objektart().Find( strObjArt ) < 0 )	{
				txt = strObjArt;
				txt += ", ";
				txt += pGO -> Objektart();
				pGO -> Objektart() = txt;
			}
	* /
	//=== Standard D-Regeln =============================================================================
		}
		else {
			if ( !strText.IsEmpty() && ( strText != "NNNN" )) {
		//=== C-Regeln =============================================================================
		/ *
				key = strObjArt;
				key += strInfoArt;
				key += ":";
				key += strText;
				if ( g_pTriasInterface -> Get_C_Rule( key, newkey )) {
					if ( !newkey.IsEmpty())	{
						strNewKey = newkey;
						strNewKey.Teilen( newkey, strText, '#' );

						pGO -> AddAttribute( newkey, strText );
						g_pTriasInterface -> NeuesMerkmal( newkey );
					}
				}
		* /
			}
			lH = pSatz -> GrundPunktHoch();
			lR = pSatz -> GrundPunktRechts();
			if (( lH != 0.0 ) && ( lR != 0.0 ))
				pGO -> SetzPunkt( lH, lR );

			if ( pGO -> Objektart().IsEmpty())
				pGO -> Objektart() = strObjArt;
			else if ( pGO -> Objektart().Find( strObjArt ) < 0 )	{
				txt = strObjArt;
				txt += ", ";
				txt += pGO -> Objektart();
				pGO -> Objektart() = txt;
			}

		//=== D-Regeln =============================================================================
		}
	*/
	} 
	catch( ... ) {
		AfxMessageBox( "Unerwarteter Fehler in BesondInfo",0,0);
	}
}	// BesondInfo
Exemplo n.º 16
0
void CObjektPool::WriteBack(bool fStatus)
{
CTriasObjekt *pTO;
CGeoObj *pGO;
CPunktFolge *pPF;
CPunkt *pPT;
CString text, id, key;
POSITION pos, posMM;
int a, j, nr, anzahl;
long l, z, max, kp = 1L;
long *pkp = NULL;

CString strPrepared;

	VERIFY(strPrepared.LoadString(IDS_OBJECTSPREPARED));
	anzahl = m_omGeoObjekte.GetCount();
	((CEDBSExtension*)g_pTE) -> SetDefaultStatusTexte(strPrepared, NULL, NULL, "  ");

CString strPrepare;

	VERIFY(strPrepare.LoadString(IDS_PREPAREOBJECTS));
	((CEDBSExtension*)g_pTE) -> InitStatusDialog(strPrepare, (ULONG)anzahl, NULL );

	if (PrepareObjTeile()) {
	// nicht abgebrochen
	CString strSaved;

		VERIFY(strSaved.LoadString(IDS_OBJECTSSAVED));
		((CEDBSExtension*)g_pTE) -> SetDefaultStatusTexte(strSaved, NULL, NULL, "  ");

	CString strSave;

		VERIFY(strSave.LoadString(IDS_SAVEOBJECTS));
		nr = 0;
		anzahl = m_omGeoObjekte.GetCount();			// sind jetzt u.U. weniger
		((CEDBSExtension*)g_pTE) -> InitStatusDialog(strSave, (ULONG)anzahl, NULL );

		for (pos = m_omGeoObjekte.GetStartPosition(); pos != NULL; /**/)
		{
			m_omGeoObjekte.GetNextAssoc(pos, id, (CObject *&)pGO);

		//	------------------------------------------------------------------------------------
		//	Hier ansetzen um Objekte mit Löchern zu identifizieren!
		//	------------------------------------------------------------------------------------
			((CEDBSExtension *)g_pTE) -> SetupStatus((ULONG)nr++);
			if (((CEDBSExtension *)g_pTE) -> NutzerAbbruch())
				break;		// abgebrochen

		//	------------------------------------------------------------------------------------
		//	Fallunterscheidung: Linienobjekte mit mehreren, nicht verbundenen Linienabschnitten
		//						werden in mehrere Objekte gesplittet!
		//	------------------------------------------------------------------------------------
			if (( pGO -> AnzahlLinien() == 1 ) && ( pGO -> ObjTyp() != 'L' ))
				if ( pGO -> Punkte(0) -> Geschlossen())
					pGO -> ObjTyp() = 'F';

			if (( pGO -> ObjTyp() == 'F' ) && ( pGO -> AnzahlLinien() > 1 ))
			{
				// Flächen mit nicht geschlossenen Konturen aussondern!
				for ( j = 0; j < pGO -> AnzahlLinien(); j++ )
					if ( !pGO -> Punkte( j ) -> Geschlossen())
						pGO -> ObjTyp() = 'L';
			}
			if (( pGO -> ObjTyp() == 'L' ) && ( pGO -> AnzahlLinien() > 1 ))
			{
			CxString strUID;

				for (int loop = 0; loop < pGO -> AnzahlLinien(); loop++)
				{
					pTO = new CTriasObjekt();
					pkp = &kp;

					if ( pTO ) {
						pTO -> ONr() = 0L;				// neues Objekt!
						pTO -> Neu() = TRUE;

						pTO -> Ident() = g_pTriasInterface -> GetIdent (pGO -> Folie(), pGO -> ObjektArt(), pGO -> Merkmale());
						max = z = 0L;
						a = 0;
						z = pGO -> AnzahlPunkte( loop );
						pTO -> AnzahlPunkte() = z;
						pTO -> XKoord( new double[z+1]);
						pTO -> YKoord( new double[z+1]);
						pTO -> KonturPunkte( pkp );
						pkp[0] = z;
						z = 0L;

						pPF = pGO -> Punkte( loop );
						for ( l = 0; l < pPF -> GetSize(); l++ )
						{	
							pPT = (CPunkt*)pPF -> GetAt( (int)l );
							*((double*)pTO -> XKoord() + z) = pPT -> Rechts();
							*((double*)pTO -> YKoord() + z) = pPT -> Hoch();
							z++;
						}

						pTO -> ObjTyp() = OGLinie;
						pTO -> AnzahlKonturen() = 1;
						strUID.Empty();
						strUID.printf( "%s_%d", (const char*)pGO -> UniqueIdent(), loop );
						pTO -> UniqueIdent() = strUID;

						if (!pGO -> Folie().IsEmpty())
							pTO -> AddTextMerkmal ("ATKIS-Folie", pGO -> Folie());
						if (!pGO -> ObjektArt().IsEmpty())
							pTO -> AddTextMerkmal ("ATKIS-Objektart", pGO -> ObjektArt());
						pTO -> AddTextMerkmal ("ATKIS-Dateiname", g_pTriasInterface -> GetActFileName());

						posMM = pGO -> GetMMStartPos();
						while ( posMM )
						{	
							pGO -> GetMMNext( posMM, key, text );
							pTO -> AddTextMerkmal( key, text );
						}

						pTO -> WriteBack();
						pTO -> KonturPunkte( NULL );	// weil: &kp nicht freigeben!!!
						delete pTO;
					}	
				}	
			}
			else {
				pTO = new CTriasObjekt();
				if ( pGO -> AnzahlLinien() || pGO -> ObjNr())
				{	
					if ( pGO -> AnzahlLinien() > 1 )	
						pkp = new long[pGO -> AnzahlLinien()];
					else
						pkp = &kp;

					if ( pTO )
					{	
						if ( pGO -> ObjNr())
							pTO -> ONr() = pGO -> ObjNr();
						else
							pTO -> ONr() = 0L;				// neues Objekt!

						pTO -> Ident() = g_pTriasInterface -> GetIdent(pGO -> Folie(), pGO -> ObjektArt(), pGO -> Merkmale());
						max = z = 0L;
						a = 0;

					// Gesamtzahl Punkte und Hypothese für Aussenkontur ermitteln
						for ( j = 0; j < pGO -> AnzahlLinien(); j++)
						{	
							z += pGO -> AnzahlPunkte( j );
							if (pGO -> AnzahlPunkte(j) > max)
							{
								max = pGO -> AnzahlPunkte( j );
								a = j;
							}	
						}

						pTO -> AnzahlPunkte() = z;
						pTO -> XKoord(new double[z+1]);
						pTO -> YKoord(new double[z+1]);
						pTO -> KonturPunkte(pkp);
						z = 0L;

						if (pGO -> AnzahlLinien())
						{	
						// zuerst die Aussenkontur eintragen!
							pPF = pGO -> Punkte( a );
							for ( l = 0; l < pPF -> GetSize(); l++ )
							{
								pPT = (CPunkt*)pPF -> GetAt( (int)l );
								*((double*)pTO -> XKoord() + z) = pPT -> Rechts();
								*((double*)pTO -> YKoord() + z) = pPT -> Hoch();
								z++;
							}	
						}
						pkp[0] = max;

						if ( pGO -> ObjTyp() == 'F' )
						{	
							if ( pGO -> AnzahlLinien())
							{	if ( pGO -> AnzahlPunkte( 0 ) == 1 )
									pTO -> ObjTyp() = OGPunkt;
								else
									pTO -> ObjTyp() = OGFlaeche;
							}	
						}
						else if (pGO -> ObjTyp() == 'L')
							pTO -> ObjTyp() = OGLinie;
						else if (pGO -> ObjTyp() == 'P') {
						// ggf. Textobjekt draus machen
							if (!g_pTriasInterface -> MakeText(pGO -> ObjektArt())) 
								pTO -> ObjTyp() = OGPunkt;
							else 
								ConvertToText (pGO, pTO);

						} else if (pGO -> AnzahlLinien()) {	
							if (pGO -> AnzahlPunkte( 0 ) == 1) {
							// ggf. Textobjekt draus machen
								if (!g_pTriasInterface -> MakeText(pGO -> ObjektArt())) 
									pTO -> ObjTyp() = OGPunkt;
								else 
									ConvertToText (pGO, pTO);
							} else {
								if (pGO -> Punkte(0) -> Geschlossen())
									pTO -> ObjTyp() = OGFlaeche;
								else
									pTO -> ObjTyp() = OGLinie;
							}
						}

						pTO -> AnzahlKonturen() = pGO -> AnzahlLinien();
						pTO -> UniqueIdent() = pGO -> UniqueIdent();

					// Standard-Attribute erzeugen
						if (!pGO -> ObjNr())
						{	
							pTO -> Neu() = TRUE;
							if (!pGO -> Folie().IsEmpty())
								pTO -> AddTextMerkmal ("ATKIS-Folie", pGO -> Folie());
							if (!pGO -> ObjektArt().IsEmpty())
								pTO -> AddTextMerkmal ("ATKIS-Objektart", pGO -> ObjektArt());
							pTO -> AddTextMerkmal ("ATKIS-Dateiname", g_pTriasInterface -> GetActFileName());
						}

					// alle sonstigen Attribute übernehmen
						posMM = pGO -> GetMMStartPos();
						while ( posMM )
						{
							text.Empty();
							pGO -> GetMMNext( posMM, key, text );
							pTO -> AddTextMerkmal( key, text );
						}

						for ( j = 0; j < pGO -> AnzahlLinien(); j++ ) {	
							if ( j != a ) {	
								if ( j < a )
									pkp[j+1] = pGO -> AnzahlPunkte( j );
								else
									pkp[j]   = pGO -> AnzahlPunkte( j );

								pPF = pGO -> Punkte( j );
								for ( l = 0; l < pPF -> GetSize(); l++ )
								{	
									pPT = (CPunkt*)pPF -> GetAt( (int)l );
									*((double*)pTO -> XKoord() + z) = pPT -> Rechts();
									*((double*)pTO -> YKoord() + z) = pPT -> Hoch();
									z++;
								}	
							}	
						}
					}	
				}
				else if (pGO -> IsFloeDelta()) { 
				HOBJECT lONr = g_pTriasInterface -> FindObject(pGO -> UniqueIdent());

					if (INVALID_HOBJECT != lONr) {
					// ggf. reine Attributkorrektur (#HK011114)
					// war in einem FLOE-Satz (DLTA1001) und muß Bezug haben
						pTO -> UniqueIdent() = pGO -> UniqueIdent();

					// Standard-Attribute erzeugen
//						pTO -> ONr() = pGO -> ObjNr();
						if (!pGO -> Folie().IsEmpty())
							pTO -> AddTextMerkmal ("ATKIS-Folie", pGO -> Folie());
						if (!pGO -> ObjektArt().IsEmpty())
							pTO -> AddTextMerkmal ("ATKIS-Objektart", pGO -> ObjektArt());
						pTO -> AddTextMerkmal ("ATKIS-Dateiname", g_pTriasInterface -> GetActFileName());

					// alle sonstigen Attribute übernehmen
						posMM = pGO -> GetMMStartPos();
						while (posMM)
						{
							text.Empty();
							pGO -> GetMMNext( posMM, key, text );
							pTO -> AddTextMerkmal( key, text );
						}

						pTO -> ONr() = lONr;
						pTO -> Neu() = FALSE;
					}
				}

				if ((pTO -> ObjTyp() == OGLinie) && (pTO -> AnzahlKonturen() > 1))
				{
				CString	text = "Nicht verbundene Linienabschnitte! UID: ";

					text += pTO -> UniqueIdent();
					AfxMessageBox(text);
				}

				pTO -> WriteBack();
				pTO -> KonturPunkte( NULL );	// weil: &kp nicht freigeben!!!
				if ( pGO -> AnzahlLinien() > 1 )
					delete pkp;
				delete pTO;
			}
		}
	}

	for (pos = m_omGeoObjekte.GetStartPosition(); pos != NULL; )
	{	
		m_omGeoObjekte.GetNextAssoc( pos, id, (CObject*&)pGO );
		delete pGO;
	}
	m_omGeoObjekte.RemoveAll();
}	// WriteBack
Exemplo n.º 17
0
void CObjektPool::WriteBack( bool fStatus )
{
	CTriasObjekt	*pTO;
//	CObjectClassEDBS *pOCE;
	CGeoObj			*pGO;
	CPunktFolge		*pPF;
	CPunkt			*pPT;
	CString			text, id, key;
	POSITION		pos;
	int			a, j, nr, anzahl;
	long			l, z, max, kp = 1L;
	long			*pkp = NULL;

	g_pTriasInterface->UpdateHeaders();

	nr = 0;
	anzahl = m_omGeoObjekte.GetCount();
	text = "Gelesene Objekte zu %d%% in ";
	text += ((CEDBSExtension*)g_pTE)->Configuration.m_strTRiASName;
	text += " gespeichert!";
	((CEDBSExtension*)g_pTE) -> SetDefaultStatusTexte( text, NULL, "Datei:",   NULL );

	((CEDBSExtension*)g_pTE) -> InitStatusDialog( g_pTriasInterface->strImportFullFileName,
					(ULONG)anzahl, NULL );

	for ( pos = m_omGeoObjekte.GetStartPosition(); pos != NULL; ) {	
		m_omGeoObjekte.GetNextAssoc( pos, id, (CObject*&)pGO );
		
		((CEDBSExtension*)g_pTE) -> SetupStatus( (ULONG)++nr );

		if( !g_pMetaData->ClassifyGeoObject( *pGO ) ) {
			delete pGO;
			continue;
		}
/*		pOCE = g_pMetaData->GetObjectClassEDBS(pGO->Objektart());
		if( pOCE )
			if( pOCE->Ignored() ) 
				continue;
		if( g_pMetaData->IgnoreFolie( pGO->Folie() ) )
			continue;	
*/
		if( !g_pMetaData->Filter.IsEmpty() )
			if( strcmp(pGO -> UniqueIdent().Left(g_pMetaData->Filter.GetLength()), g_pMetaData->Filter) ) {
				delete pGO;
				continue;
			}
//	------------------------------------------------------------------------------------
//	Hier ansetzen um Objekte mit Löchern zu identifizieren!
//	------------------------------------------------------------------------------------

//	------------------------------------------------------------------------------------
//	Fallunterscheidung: Linienobjekte mit mehreren, nicht verbundenen Linienabschnitten
//						werden in mehrere Objekte gesplittet!
//	------------------------------------------------------------------------------------
		if (( pGO -> AnzahlLinien() == 1 ) && ( pGO -> ObjTyp() != 'L' ))
			if ( pGO -> Punkte(0) -> Geschlossen())
				pGO -> ObjTyp() = 'F';

		if (( pGO -> ObjTyp() == 'F' ) && ( pGO -> AnzahlLinien() > 1 )) {
			// Flächen mit nicht geschlossenen Konturen aussondern!
			for ( j = 0; j < pGO -> AnzahlLinien(); j++ )
				if ( !pGO -> Punkte( j ) -> Geschlossen())
					pGO -> ObjTyp() = 'L';
		}
		
		if (( pGO -> ObjTyp() == 'L' ) && ( pGO -> AnzahlLinien() > 1 )) {
			CxString	strUID;
			for ( short loop = 0; loop < pGO -> AnzahlLinien(); loop++ ) {
				pTO = new CTriasObjekt( pGO );
				pkp = &kp;

				if ( pTO ) {
					pTO -> Neu() = TRUE;
					pTO -> ONr() = -1;				// neues Objekt!

					pTO -> Ident() = pGO->ObjectClassTRiAS()->ClassIdentTRiAS();

					max = z = 0L;
					a = 0;
					z = pGO -> AnzahlPunkte( loop );
					pTO -> AnzahlPunkte() = z;
					pTO -> XKoord( new double[z+1]);
					pTO -> YKoord( new double[z+1]);
					pTO -> KonturPunkte( pkp );
					pkp[0] = z;
					z = 0L;

					pPF = pGO -> Punkte( loop );
					for ( l = 0; l < pPF -> GetSize(); l++ )
					{	pPT = (CPunkt*)pPF -> GetAt( (int)l );
						*((double*)pTO -> XKoord() + z) = pPT -> Rechts();
						*((double*)pTO -> YKoord() + z) = pPT -> Hoch();
						z++;
					}

					pTO -> ObjTyp() = OGLinie;
					pTO -> AnzahlKonturen() = 1;
					strUID.Empty();
					strUID.printf( "%s_%d", (const char*)pGO -> UniqueIdent(), loop );
					pTO -> UniqueIdent() = strUID;
					pTO -> WriteBack();
					pTO -> KonturPunkte( NULL );	// weil: &kp nicht freigeben!!!
					delete pTO;
				}
			}	
		}
		else {
			pTO = new CTriasObjekt( pGO );
			if ( pGO -> AnzahlLinien() || pGO -> ObjNr()) {
				if ( pGO -> AnzahlLinien() > 1 )
					pkp = new long[pGO -> AnzahlLinien()];
				else
					pkp = &kp;

				if ( pTO ) {
					if ( pGO -> ObjNr()) {
						pTO->Neu() = FALSE;
						pTO -> ONr() = pGO -> ObjNr();
					}
					else {	// neues Objekt!
						pTO->Neu() = TRUE;
						pTO -> ONr() = -1;				
					}

					pTO -> Ident() = pGO->ObjectClassTRiAS()->ClassIdentTRiAS();

					max = z = 0L;
					a = 0;
					// Gesamtzahl Punkte und Hypothese für Aussenkontur ermitteln
					for ( j = 0; j < pGO -> AnzahlLinien(); j++ )
					{	z += pGO -> AnzahlPunkte( j );
						if ( pGO -> AnzahlPunkte( j ) > max )
						{	max = pGO -> AnzahlPunkte( j );
							a = j;
					}	}
					pTO -> AnzahlPunkte() = z;
					pTO -> XKoord( new double[z+1] );
					pTO -> YKoord( new double[z+1] );
					pTO -> KonturPunkte( pkp );
					z = 0L;

					if ( pGO -> AnzahlLinien())
					{	// zuerst die Aussenkontur eintragen!
						pPF = pGO -> Punkte( a );
						for ( l = 0; l < pPF -> GetSize(); l++ )
						{	pPT = (CPunkt*)pPF -> GetAt( (int)l );
							*((double*)pTO -> XKoord() + z) = pPT -> Rechts();
							*((double*)pTO -> YKoord() + z) = pPT -> Hoch();
							z++;
					}	}
					pkp[0] = max;

					if ( pGO -> ObjTyp() == 'F' ) {
						if ( pGO -> AnzahlLinien()) {
							if ( pGO -> AnzahlPunkte( 0 ) == 1 )
								pTO -> ObjTyp() = OGPunkt;
							else
								pTO -> ObjTyp() = OGFlaeche;
						}	
					}
					else if ( pGO -> ObjTyp() == 'L' )
						pTO -> ObjTyp() = OGLinie;
					else if ( pGO -> ObjTyp() == 'P' )
						pTO -> ObjTyp() = OGPunkt;
					else if ( pGO -> ObjTyp() == 'T' ) {
						pTO -> ObjTyp() = OGText;
					}
					else
						if ( pGO -> AnzahlLinien())
						{	if ( pGO -> AnzahlPunkte( 0 ) == 1 )
								pTO -> ObjTyp() = OGPunkt;
							else
								if ( pGO -> Punkte(0) -> Geschlossen())
									pTO -> ObjTyp() = OGFlaeche;
								else
									pTO -> ObjTyp() = OGLinie;
						}

					pTO -> AnzahlKonturen() = pGO -> AnzahlLinien();
					pTO -> UniqueIdent() = pGO -> UniqueIdent();

					for ( j = 0; j < pGO -> AnzahlLinien(); j++ )
					{	if ( j != a )
						{	if ( j < a )	pkp[j+1] = pGO -> AnzahlPunkte( j );
							else		pkp[j]   = pGO -> AnzahlPunkte( j );

							pPF = pGO -> Punkte( j );
							for ( l = 0; l < pPF -> GetSize(); l++ )
							{	pPT = (CPunkt*)pPF -> GetAt( (int)l );
	//							*((double*)pTO -> XKoord() + z) = double( pPT -> Rechts() / 100.0 );
	//							*((double*)pTO -> YKoord() + z) = double( pPT -> Hoch() / 100.0 );
								*((double*)pTO -> XKoord() + z) = pPT -> Rechts();
								*((double*)pTO -> YKoord() + z) = pPT -> Hoch();
								z++;
							}
						}
					}
				}	
			}

/*#fje
	if (( pTO -> ObjTyp() == OGLinie ) && ( pTO -> AnzahlKonturen() > 1 )) {
		CString	text = "Nicht verbundene Linienabschnitte! UID: ";
		text += pTO -> UniqueIdent();
		AfxMessageBox( text );
	}
*/

			pTO -> WriteBack();
			pTO -> KonturPunkte( NULL );	// weil: &kp nicht freigeben!!!
			if ( pGO -> AnzahlLinien() > 1 )
				delete pkp;
			delete pTO;
		}	
		delete pGO;

		if (((CEDBSExtension*)g_pTE) -> NutzerAbbruch()) {
			if ( AfxMessageBox( "Alle bisher gelesenen Informationen gehen beim Abbruch verloren!\nTatsächlich abbrechen?",
				MB_ICONQUESTION|MB_YESNO ) == IDYES ) {
				break;
			}
			else
				((CEDBSExtension*)g_pTE) -> ResetAbbruch();
		}	
	}

/*
	for ( pos = m_omGeoObjekte.GetStartPosition(); pos != NULL; )
	{	m_omGeoObjekte.GetNextAssoc( pos, id, (CObject*&)pGO );
		delete pGO;
	}
*/
	m_omGeoObjekte.RemoveAll();
}	// WriteBack
Exemplo n.º 18
0
unsigned int __stdcall CxServerSocketTCP::WorkerThread( LPVOID lpParam )
{
	char * pRecvBuffer = NULL;
	ServerThreadContext* pContext = (ServerThreadContext*) lpParam;
	CxServerSocketTCP *pThis = (CxServerSocketTCP *)pContext->pThis;

	XTRACE( _T("Starting thread [%p]0x%x\r\n"), pContext, pContext->hThread );

	if ( !pContext->bListen )
		pThis->OnClientConnected( pContext, pContext->strClientIP, pContext->nClientPort );

	const int nRecvBufferSize = pThis->m_nMaxRecvBufferSize;
	if ( !(pRecvBuffer = (char *)xmalloc(nRecvBufferSize)) ) 
		return 0;

	int nEventIndex;
	WSANETWORKEVENTS hNetworkEvents;
	BOOL bWork = TRUE;
	while ( bWork ) 
	{
		nEventIndex = WSAWaitForMultipleEvents( 2, pContext->hNetEvent, FALSE, 500, FALSE );

		nEventIndex -= WSA_WAIT_EVENT_0;

		for ( int ix=nEventIndex ; ix<2 ; ix++ )
		{
			nEventIndex = WSAWaitForMultipleEvents( 1, &pContext->hNetEvent[ix], TRUE, 0, FALSE );

			if ( (nEventIndex == WSA_WAIT_FAILED ) ) continue;
			else if ( (nEventIndex==WSA_WAIT_TIMEOUT) )
			{
			}
			else
			{
				if ( ix == 1 )
				{
					WSAEnumNetworkEvents( pContext->hSocket, pContext->hNetEvent[1], &hNetworkEvents );
					if ( hNetworkEvents.lNetworkEvents & FD_READ )
					{
						if ( hNetworkEvents.iErrorCode[FD_READ_BIT] != 0 )
						{
							XTRACE( _T("Socket Read Error![%p]\r\n"), pContext );
							break;
						}
						int nRecvBytes = recv( pContext->hSocket, pRecvBuffer, nRecvBufferSize, 0 );

						if ( nRecvBytes > 0 )
						{
							//XTRACE( _T("%d bytes received!\r\n"), nRecvBytes );
							pThis->ProcessBuffer( pContext, pRecvBuffer, nRecvBytes );
						}
						else
						{
							char szBye[3] = { 0, };
							send( pContext->hSocket, szBye, 3, 0 );
							shutdown( pContext->hSocket, SD_BOTH );
							closesocket( pContext->hSocket );
							XTRACE( _T("Closed socket handle [%p]%x\r\n"), pContext, pContext->hSocket );
							
							pContext->hSocket = INVALID_SOCKET;

							if ( pContext->bListen )
								pThis->OnStopServer();
							else
							{
								pThis->OnClientDisconnected( pContext->strClientIP, pContext->nClientPort );
								bWork = FALSE;
							}

						}
					}

					if ( hNetworkEvents.lNetworkEvents & FD_ACCEPT )
					{
						if ( hNetworkEvents.iErrorCode[FD_ACCEPT_BIT] != 0 )
						{
							XTRACE( _T("[%p] Accept Error!\r\n"), pContext );
						}

						SOCKADDR_IN addrinClient;
						int nAddrSize = sizeof(SOCKADDR_IN);
						SOCKET hClientSocket = ::accept( pContext->hSocket, reinterpret_cast<struct sockaddr *>(&addrinClient), &nAddrSize );

						if ( hClientSocket == INVALID_SOCKET )
						{
							XTRACE( _T("[%p] accept() failed: %d\r\n"), pContext, WSAGetLastError() );
							bWork = FALSE;
							break;
						}

						int nRet;
						int nMaxSendBufferSize = MAX_SEND_BUF_SIZE;
						int nMaxRecvBufferSize = MAX_RECV_BUF_SIZE;
						nRet = ::setsockopt( hClientSocket, SOL_SOCKET, SO_SNDBUF, (const char*)&nMaxSendBufferSize, sizeof(int) );
						nRet = ::setsockopt( hClientSocket, SOL_SOCKET, SO_RCVBUF, (const char*)&nMaxRecvBufferSize, sizeof(int) );

						int nLen = sizeof(int);
						nRet = ::getsockopt( hClientSocket, SOL_SOCKET, SO_SNDBUF, (char*)&nMaxSendBufferSize, &nLen );
						nLen = sizeof(int);
						nRet = ::getsockopt( hClientSocket, SOL_SOCKET, SO_RCVBUF, (char*)&nMaxRecvBufferSize, &nLen );

						CxString strClientIP;
						int nPort;

						TCHAR szClientAddr[50]={0,};
						DWORD dwSize = sizeof(szClientAddr);
						SOCKADDR* pClientSockAddr = (SOCKADDR*)&addrinClient;
						CxString strClientSockAddr;
						if ( WSAAddressToString( pClientSockAddr, sizeof(SOCKADDR), NULL, szClientAddr, &dwSize) != SOCKET_ERROR )
						{
							strClientSockAddr = szClientAddr;
						}

						int nColonPos = strClientSockAddr.ReverseFind( _T(':') );
						strClientIP = strClientSockAddr.Left( nColonPos );
						strClientSockAddr.Delete( 0, nColonPos+1 );

						nPort = _tcstol(strClientSockAddr, NULL, 10);

						ServerThreadContext* pThreadContext = new ServerThreadContext;

						pThreadContext->hSocket = hClientSocket;
						pThreadContext->hThread = NULL;
						pThreadContext->pThis = pThis;
						pThreadContext->hNetEvent[0] = pThis->m_hCleanupEvent;
						pThreadContext->hNetEvent[1] = WSA_INVALID_EVENT;
						pThreadContext->IoBuffer.Create( pThis->GetIOBufferSize() );
						pThreadContext->IoBuffer.Clear();
						pThreadContext->bListen = FALSE;
						pThreadContext->strClientIP = strClientIP;
						pThreadContext->nClientPort = nPort;
						pThreadContext->dwUserData = 0;

						pThreadContext->hNetEvent[1] = WSACreateEvent();
						if ( WSAEventSelect( pThreadContext->hSocket, pThreadContext->hNetEvent[1], FD_READ|FD_CLOSE ) == SOCKET_ERROR )
						{
							XTRACE( _T("WSAEventSelect() error\r\n") );
							break;
						}
						
						unsigned int nThreadID = 0;
						pThreadContext->hThread = (HANDLE)::_beginthreadex( NULL, 0, WorkerThread, pThreadContext, 0, &nThreadID );
						
						if ( pThreadContext->hThread == NULL )
						{
							delete pThreadContext;
							break;
						}

						CloseHandle( pThreadContext->hThread );
					}

					if ( hNetworkEvents.lNetworkEvents & FD_CLOSE ) // ¿¬°á Á¾·á
					{
						if ( hNetworkEvents.iErrorCode[FD_CLOSE_BIT] != 0 )	
						{
							XTRACE( _T("Abnormal closed...!!!\r\n") );
						}
						else
						{
							WSACloseEvent( pContext->hNetEvent[1] );
							pContext->hNetEvent[1] = WSA_INVALID_EVENT;
						}

						char szBye[3] = { 0, };
						send( pContext->hSocket, szBye, 3, 0 );
						shutdown( pContext->hSocket, SD_BOTH );
						closesocket( pContext->hSocket );
						XTRACE( _T("Closed socket handle [%p]%x\r\n"), pContext, pContext->hSocket );

						pContext->hSocket = INVALID_SOCKET;

						if ( pContext->bListen )
							pThis->OnStopServer();
						else
						{
							pThis->OnClientDisconnected( pContext->strClientIP, pContext->nClientPort );
							bWork = FALSE;
						}
						break;
					}
				}
				else
				{
					bWork = FALSE;
					break;
				}
			}
		}
	}

	if ( pRecvBuffer )
		xfree(pRecvBuffer);

	XTRACE( _T("Exit thread [%p]0x%x\r\n"), pContext, pContext->hThread );

	if ( !pContext->bListen )
	{
		delete pContext;
	}

	_endthreadex(0);

	return 0;
}
Exemplo n.º 19
0
void CErfassPrivDlg :: RestorePages()
{
	CEigentuemer	*pSatz;
	CTime			tempTime;
	CxString		text;

//	if ( page1 -> m_tNFP1_ANDAT.GetStatus() == COleDateTime::valid )
//		tempTime = CTime( page1 -> m_tNFP1_ANDAT.GetYear(),
//						  page1 -> m_tNFP1_ANDAT.GetMonth(),
//						  page1 -> m_tNFP1_ANDAT.GetDay(),
//						  page1 -> m_tNFP1_ANDAT.GetHour(),
//						  page1 -> m_tNFP1_ANDAT.GetMinute(),
//						  page1 -> m_tNFP1_ANDAT.GetSecond());

	page1 -> UpdateData( TRUE );
	if ( ::IsWindow( page2 -> m_hWnd ))		// Falls Seite 2 nicht aufgeklappt wurde!
		page2 -> UpdateData( TRUE );
	if ( ::IsWindow( page3 -> m_hWnd ))		page3 -> UpdateData( TRUE );
	if ( ::IsWindow( page4 -> m_hWnd ))		page4 -> UpdateData( TRUE );
	if ( ::IsWindow( page5 -> m_hWnd ))		page5 -> UpdateData( TRUE );
	if ( ::IsWindow( page7 -> m_hWnd ))		page7 -> UpdateData( TRUE );

	if ( page1 -> m_strNFP1_ANDAT.IsEmpty())
		tempTime = time_t( 0 );
	else
	{
		text = page1 -> m_strNFP1_ANDAT;
		tempTime = text.GetDate();
	}

	// Seite 1
	if ( m_bEditIDE )
		m_strNFP1_IDE = page1 -> m_strNFP1_IDE;

	if ( 1 <= m_arrEigent.GetSize())
	{
		pSatz = (CEigentuemer*)m_arrEigent.GetAt(0);
		m_strNFP1_ENA   = pSatz -> m_NFP4_ENA;
		m_strNFP1_EAN   = pSatz -> m_NFP4_EAN;
		m_strNFP1_EPL   = pSatz -> m_NFP4_EPL;
		m_strNFP1_EOR   = pSatz -> m_NFP4_EOR;
	}
	else
	{
		m_strNFP1_ENA   = "";
		m_strNFP1_EAN   = "";
		m_strNFP1_EPL   = "";
		m_strNFP1_EOR   = "";
	}

//	m_strNFP1_ORT   = page1 -> m_strNFP1_ORT;
	m_strNFP1_FLU   = page1 -> m_strNFP1_FLU;
	m_rNFP1_BAR     = page1 -> m_iNFP1_BAR + 1;
	m_rNFP1_GFZ     = page1 -> m_rNFP1_GFZ;
	m_rNFP1_BMZ     = page1 -> m_rNFP1_BMZ;
	m_rNFP1_VGZ     = page1 -> m_rNFP1_VGZ;
	m_rNFP1_GUZ     = page1 -> m_rNFP1_GUZ;
	m_strNFP1_FST   = page1 -> m_strNFP1_FST;
	m_rNFP1_KAT     = page1 -> m_rNFP1_KAT;
	m_tNFP1_ANDAT   = tempTime;

	// Seite 4
	m_rAWE = page4 -> m_rAWE;
	m_rAEW = page4 -> m_rAEW;
	m_rEGW = page4 -> m_rEGW;
	m_bZE = page4 -> m_bZE;
	m_bSGR = page4 -> m_bSGR;
	m_rFS = page4 -> m_rFS;
	m_bSGT = page4 -> m_bSGT;
	m_bKK = page4 -> m_bKK;
	m_rFKK = page4 -> m_rFKK;
	m_bKKT = page4 -> m_bKKT;
	m_bVF = page4 -> m_bVF;
	m_bK = page4 -> m_bK;
	m_bFZ = page4 -> m_bFZ;
	m_bFE = page4 -> m_bFE;
	m_bFZE = page4 -> m_bFZE;
	m_strBem = page4 -> m_strSonst;
	if ( page4 -> m_bANNWL )	m_strANNWL = "Y";
	else						m_strANNWL = "N";

	// Seite 5
	page5 -> m_parrPG1GB = &m_arrPG1GB;

	// Seite 6
//	m_strBem = page6 -> m_strBem;

	// Seite 7 (Eigentümer)
	page7 -> m_parrEigent = &m_arrEigent;
	m_bMiteigent = page7 -> m_bMiteigentum;
}