Ejemplo n.º 1
0
// --------------------------------------------------------------------------------------------
// Ermittlung des Startindex lStartInd aus einer (evtl.) gemeinsamen Strecke mit einem schon
// rechtwinklig gemachten Objekt, das aus zur gleichen Objektklasse wie das lONr-Objekt gehört;
// gibt es kein solches Objekt, dann ist der return-Wert "S_FALSE", lStartInd ist in
// diesem Fall unbestimmt
HRESULT CGeoEditExtension::CommonLineWithRectObject (long lONr, KoOrd* plXK, KoOrd* plYK,
													 long lCnt0, long& lStartInd)
{
KoOrd x0, y0, x1, y1;	// Anfangs- und Endkoordinaten des längsten Konturabschnitts

	try	{
	// Objektnummern aller Objekte der Objektklasse des lONr-Objektes bereitstellen
	WEnumLONG wEnumIn (CLSID_EnumObjectsByNumber);	// throws_com_error
	ENUMLONGKEY ELK;

		ELK.eKey = DEX_GetObjIdentEx (lONr);
		ELK.eFcn = (ENUMLONGKEYPROC) GetRectObjects;
		ELK.ePtr = wEnumIn;
		DEX_EnumIdentObjects (ELK);

		if (0 == wEnumIn->Count())	// kein Objekt gefunden, das schon rechtwinklig gemacht
			return S_FALSE;			// wurde

	ulong ulIdent = 0;				// Identifikator für die Ergebnisobjekte (wird hier nicht
									// weiter benötigt)
	DWORD dwLageAusw = LAUSS;			// nur die wEnumIn-Flächen für Vergleich heranziehen, die
									// außerhalb der lONr-Fläche liegen
	SpForm sfSForm = SFORM_TEMP;	// temporäre Abspeicherung 
	WEnumLONG wComCont (CLSID_EnumObjectsByNumber);	// Objektnummern der gemeinsamen
													// Konturabschnitte

		if (! m_wObjOper.IsValid())	// (wenn noch nicht, dann) IExtendObjOper-Interface für
		{							//  CommonContour_ONr() zuschalten
		WUnknown wObjOper;

			ObjOperInterface (wObjOper.ppi());
			m_wObjOper = wObjOper;
		}

		if (m_wObjOper.IsValid())
			m_wObjOper->CommonContour_ONr (lONr, ulIdent, wEnumIn, dwLageAusw, sfSForm,
										   wComCont.ppi());
		else
			_ASSERTE (false);

		if (0 == wComCont->Count())	// keines der schon rechtwinklig gemachten Objekte hat
			return S_FALSE;			// einen gemeinsamen Konturabschnitt mit dem lONr-Objekt

		// wenn es mindestens 1 gemeinsamen Konturabschnitt gibt, dann die längste Strecke
		// bestimmen
		THROW_FAILED_HRESULT (GiveLongestLine (wComCont, x0, y0, x1, y1));
		VisualCommonContour (wComCont);
	}
	catch (_com_error& e)
	{
		return _COM_ERROR (e);
	}

	return StartIndex (plXK, plYK, lCnt0, x0, y0, x1, y1, lStartInd);

} // CommonLineWithRectObject
Ejemplo n.º 2
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CRegOperatPropAct::EndAction (DWORD, IDataObject** ppDataOut)
{
	_ASSERTE (m_ObjsIter != m_InObjs.end());

	*ppDataOut = 0;
	try {
	WEnumLONG wEnumInObj (*m_ObjsIter);	// die zu bearbeitenden Objekte
	WEnumLONG wEnumOutObj;				// Ergebnisobjekte der ausgewählten Operation

	// Optionen abfragen
	DWORD dwOptions = 0x00;

		if (SUCCEEDED(EnsureOptionsIF())) {
			_ASSERTE(m_wOperOptions.IsValid());
			m_wOperOptions->GetOptions (&dwOptions);
		}

		// im Dialog ausgewählte Operation ausführen
		THROW_FAILED_HRESULT (m_pRegOperDlg->ExecuteOperation (m_hPr, wEnumInObj, dwOptions,
															   wEnumOutObj.ppi()));
		m_ObjsIter++;

		if (wEnumOutObj.IsValid())
		{
		// IDataObject abfragen
		WDataObject IDO (CLSID_DataTransferObject);

		// Ergebnisobjekte im DataObjekt IDO speichern
			THROW_FAILED_HRESULT (SetEnumLONGData (
				(IEnum<LONG>*)(IEnumLONG*)wEnumOutObj, IDO));

		// Resultat setzen
			*ppDataOut = IDO.detach();
			if (0 == wEnumOutObj->Count()) {
			ResString resTitel (ResID (IDS_LONGCLASSNAME, pRF), 50);
			ResString resText (ResID (IDS_BOXTEXT1, pRF), 200);
	
				MessageBox (__hWndM, resText.Addr(), resTitel.Addr(),
							MB_ICONINFORMATION | MB_OK);
			}
		}
	}
	catch (_com_error& hr_result)		// 23.09.99
	{
		DELETE_OBJ (m_pRegOperDlg);		// bei Fehler Dialog wieder freigeben
		return _COM_ERROR(hr_result);	// 23.09.99
	}

	if (m_ObjsIter != m_InObjs.end())	// es kommen noch weitere Daten
		return S_FALSE;

	DELETE_OBJ (m_pRegOperDlg);			// es kommen keine Daten mehr
	return S_OK;

} // EndAction
Ejemplo n.º 3
0
// --------------------------------------------------------------------------------------------
// Ermittlung des Startindex lStartInd aus einer (evtl.) gemeinsamen Strecke mit einem
// pEnumIn-Objekt; gibt es kein solches Objekt, dann ist der return-Wert "S_FALSE", lStartInd
// ist in diesem Fall unbestimmt
HRESULT CGeoEditExtension::CommonLine (long lONr, KoOrd* plXK, KoOrd* plYK, long lCnt0,
									   IEnumLONG* pEnumIn, long& lStartInd)
{
	if (NULL == pEnumIn) return S_FALSE;

KoOrd x0, y0, x1, y1;	// Anfangs- und Endkoordinaten des längsten Konturabschnitts

	try
	{
	ulong ulIdent = 0;				// Identifikator für die Ergebnisobjekte (wird hier nicht
									// weiter benötigt)
	DWORD dwLageAusw = LINAU;		// nur die pEnumIn-Flächen für Vergleich heranziehen, die
									// sowohl innerhalb als auch außerhalb der lONr-Fläche
									// liegen
	SpForm sfSForm = SFORM_TEMP;	// temporäre Abspeicherung 
	WEnumLONG wComCont (CLSID_EnumObjectsByNumber);	// Objektnummern der gemeinsamen
													// Konturabschnitte

		if (! m_wObjOper.IsValid())	// (wenn noch nicht, dann) IExtendObjOper-Interface für
		{							//  CommonContour_ONr() zuschalten
		WUnknown wObjOper;

			ObjOperInterface (wObjOper.ppi());
			m_wObjOper = wObjOper;
		}

		if (m_wObjOper.IsValid())
			m_wObjOper->CommonContour_ONr (lONr, ulIdent, pEnumIn, dwLageAusw, sfSForm,
										   wComCont.ppi());
		else
			_ASSERTE (false);

		if (0 == wComCont->Count())	// keines der pEnumIn-Objekt hat einen gemeinsamen
			return S_FALSE;			// Konturabschnitt mit dem lONr-Objekt

		// wenn es mindestens 1 gemeinsamen Konturabschnitt gibt, dann die längste Strecke
		// bestimmen
		THROW_FAILED_HRESULT (GiveLongestLine (wComCont, x0, y0, x1, y1));
		VisualCommonContour (wComCont);
	}
	catch (_com_error& e)
	{
		return _COM_ERROR (e);
	}

	return StartIndex (plXK, plYK, lCnt0, x0, y0, x1, y1, lStartInd);

}  // CommonLine
Ejemplo n.º 4
0
// --------------------------------------------------------------------------------------------
STDMETHODIMP CAreaBuildPropAct::EndAction (DWORD, IDataObject** ppDataOut)
{
	_ASSERTE (m_ObjsIter != m_InObjs.end());

	*ppDataOut = 0;

	COM_TRY {
	WEnumLONG wEnumInObj (*m_ObjsIter);	// die zu bearbeitenden Objekte
	WEnumLONG wEnumOutObj;				// Ergebnisobjekte der ausgewählten Operation

	// Optionen abfragen
	DWORD dwOptions = 0x00;

		if (m_wOperOptions.IsValid())
			m_wOperOptions->GetOptions (&dwOptions);

		// im Dialog ausgewählte Operation ausführen
		THROW_FAILED_HRESULT (m_pAreaBuildDlg->ExecuteOperation (m_hPr, wEnumInObj, dwOptions,
																 wEnumOutObj.ppi()));

		m_ObjsIter++;

		if (wEnumOutObj.IsValid()) {
		// IDataObject abfragen
		WDataObject IDO (CLSID_DataTransferObject);

		// Ergebnisobjekte im DataObjekt IDO speichern
			THROW_FAILED_HRESULT (SetEnumLONGData ((IEnum<LONG>*)(IEnumLONG*)wEnumOutObj,
												   IDO));
		// Resultat setzen
			*ppDataOut = IDO.detach();

			if (0 == wEnumOutObj->Count()) {
			ResString resTitel (ResID (IDS_LONGCLASSNAME, pRF), 50);
			ResString resText (ResID (IDS_BOXTEXT7, pRF), 200);
	
				MessageBox (__hWndM, resText.Addr(), resTitel.Addr(),
							MB_ICONINFORMATION | MB_OK);
			}
		}
	}
	COM_CATCH_OP(
		delete m_pAreaBuildDlg;	// bei Fehler Dialog wieder freigeben
    );