void objsearch_pi::SendVectorChartObjectInfo(wxString &chart, wxString &feature, wxString &objname, double lat, double lon, double scale, int nativescale)
{
    if ( !m_bDBUsable || !IsDBThreadRunning() )
        return;
    long chart_id = GetChartId(chart);
    long feature_id = GetFeatureId(feature);
    if ( chart_id == 0 )
    {
        m_bWaitForDB = true;
        Chart ch = StoreNewChart( chart, scale, nativescale );
        m_chartsInDb[ch.name] = ch;
        m_bWaitForDB = false;
    }
    if ( feature_id == 0 )
    {
        m_bWaitForDB = true;
        feature_id = StoreNewFeature( feature ).ToLong();
        m_featuresInDb[feature] = feature_id;
        m_bWaitForDB = false;
    }
        
    if ( chart == m_chartLoading )
        StoreNewObject( chart_id, feature_id, objname, lat, lon );
}
Example #2
0
// --------------------------------------------------------------------------------------------
// EditierDialog anzeigen;
// in ulCnt wird die Anzahl und in ppIOG werden die ObjektGeometrien der aktuell editierten
// Objekte übergeben;
// wenn Linienobjekte verlängert werden sollen, werden in iCloseCnt, plCloseX und plCloseY
// die Anzahl und die Koordinaten der Endpunkte dieser Linienobjekte erwartet;
// in piResult wird das Ergebnis der DialogBedienung (OK, Abbrechen, Fortsetzen, Inselbeginn)
// zurückgegeben
STDMETHODIMP CGeoEditExtension::ShowEditDialog (LPCSTR pcCapt, LPCSTR pcRegKey, ulong ulCnt,
	 IUnknown** ppIOG, int* piGrabCnt, long* pGrabPktX, long* pGrabPktY, HRESULT hrComBorder,
	 long lComONr, int iCloseCnt, long* plCloseX, long* plCloseY, int* piResult)
{
	_ASSERTE (pcRegKey != NULL);
	_ASSERTE (piResult != NULL);

// Neueditierung (true) oder Modifizierung (false), also z.B. Linienverlängerung bzw.
// Inselergänzung
bool bNewEdit = (0 == strcmp (g_cbGeoEditNewPoint, pcRegKey) ||
				 0 == strcmp (g_cbGeoEditNewLine, pcRegKey) ||
				 0 == strcmp (g_cbGeoEditNewArea, pcRegKey));

// !!!! es wird vorläufig nur EIN ppIOG-Objekt berücksichtigt !!!!!
WObjektGeometrie wObj = *ppIOG;		// mit implizitem QueryInterface

CEditDlg sheetED (pcCapt, wObj, lComONr, piGrabCnt);
// eigene Pages zum	Einfügen in sheetED
CEditBaseDlg pageEB (pGrabPktX, pGrabPktY, hrComBorder, iCloseCnt,
					 plCloseX, plCloseY, bNewEdit);
CEditCoordDlg pageEC (iCloseCnt, plCloseX, plCloseY);

	sheetED.AddPage (&pageEB);	// 1. Page einfügen
	sheetED.AddPage (&pageEC);	// nächste Page hinzufügen

	// zusätzliche Pages über die Registry nachladen
	sheetED.LoadExtPagesFromRegistry (pcRegKey, ulCnt, ppIOG);

	sheetED.Show();

	if (piGrabCnt) *piGrabCnt = sheetED.GetGrabCnt();

	*piResult = sheetED.Result();

int iMarkGr;	// Markergröße
Rectangle Rec;	// rechteckiger Bereich, der (evtl.) gezeichnet werden soll

	m_wTopObjs->GetMarkerSizeBS (&iMarkGr);
	wObj->RectangleToDraw2 ((RECT*)&Rec, iMarkGr);

HRESULT hrRet = S_OK;

	switch (*piResult)
	{
		case IDOK:
			if (bNewEdit)
			{
			BSTR bsObjName = A2BSTR("");	// noch leerer Objektname  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

				hrRet = StoreNewObject (wObj, bsObjName);
				if (S_FALSE == hrRet) {
				// Objekt wurde wieder gelöscht, IDCANCEL simulieren
					if (piGrabCnt) 
						*piGrabCnt = 0;
					DEX_RePaintRectWait (Rec);	// Objekt auf Bildschirm durch Zeichnen löschen
					*piResult = IDCANCEL;
					return S_FALSE;
				}
			}
			// die Linienverlängerungen werden in LineElongation.cpp abgespeichert;
			// Flächenobjekte mit hinzugefügten Inseln werden in IslandAdd.cpp abgespeichert
			else if	(0 != strcmp (g_cbGeoEditLineElongat, pcRegKey) &&
					 0 != strcmp (g_cbGeoEditIslandAdd, pcRegKey))
			{
				_ASSERTE (false);
				hrRet = E_UNEXPECTED;
			}

			if (piGrabCnt) *piGrabCnt = 0;

			// für "Insel hinzufügen" erfolgt das Zeichnen wegen evtl. Geometriefehler auf
			// jeden Fall in StoreAreaWithNewIsland()
			if (0 != strcmp (g_cbGeoEditIslandAdd, pcRegKey))
				DEX_RePaintRectWait (Rec);
			break;

		case IDCANCEL:
			if (piGrabCnt) *piGrabCnt = 0;
			DEX_RePaintRectWait (Rec);	// Objekt auf Bildschirm durch Zeichnen löschen
			break;

		case IDB_CONTINUE:
		case IDB_ISLAND:
			break;

		default:
			_ASSERTE (false);
			hrRet = E_UNEXPECTED;
			break;
	}

	return hrRet;

} // ShowEditDialog