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