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
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
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
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
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 ); }
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 ); } }