示例#1
0
// Anzeige des aktuellen Maßstabes --------------------------------------------
bool IrisWind :: SetMasstab (Rectangle R) 
{
// wenn Rechteck entartet ist, dann nichts ändern
	if (R.Right() == R.Left()) return false;

Rectangle CRc = CanvasRect();

	if (CRc.Left() == CRc.Right()) return false;		// Icon

// Koordinaten in DB-Koordinaten umsetzen
CoordTrans *pCT = DBO().pCT();

	TX_ASSERT(NULL != pCT);
	if (NULL == pCT) return false;

Point ptLO = R.UpperLeft();
Punkt LO = DCtoOC (ptLO);       // Device --> Objekt
Point ptRU = R.LowerRight();
Punkt RU = DCtoOC (ptRU);

#if defined(_KOORD_ISDOUBLE)
DoublePair P1 (LO.GetX(), LO.GetY());
DoublePair P2 (RU.GetX(), LO.GetY());	// über X-Koordinate berechnen
#else
double XLO, XRU, YLO, YRU;

	pCT() -> UnScale (LO, &XLO, &YLO);
	pCT() -> UnScale (RU, &XRU, &YRU);

DoublePair P1 (XLO, YLO);
DoublePair P2 (XRU, YLO);	// über X-Koordinate berechnen
#endif // _KOORD_ISDOUBLE

double dX = 1.0;

	if (pCT -> hasDistEx()) {
	double dY = 1.0;

		pCT -> CoordTransDistanceEx (&P1, &P2, dX, dY);
	} else
		dX = pCT -> CoordTransDistance (&P1, &P2);

DoublePair dimD;
Dimension DotsPerMM (GetDotsPerMM (NULL, &dimD));
long M = (long)((fabs(dX) * 1000.0 * dimD.Width()) / ((double)(CRc.Right()-CRc.Left())));

// Maßstab muß positiv sein
	if (M < 0L) 
		M = -M;

	if (0 != m_lFakeZoom)
		DEXN_ScalingChanged (m_lFakeZoom);
	else
		DEXN_ScalingChanged (M);

	return true;
}
示例#2
0
bool CCoordTransService::UnScale (const Punkt &Pt, double *pX, double *pY)
{
	if (NULL == pX || NULL == pY) 
		return false;

	*pX = UnScaleX (Pt.GetX(), Pt.GetY());
	*pY = UnScaleY (Pt.GetX(), Pt.GetY());;
	return true;
}
示例#3
0
HRESULT HitTest (LONG lONr, int iVisType, CRect &rrc, Punkt &rpt, CursPos *prgCP)
{
	TEST_E_POINTER("HitTest", prgCP);

// Epsilons berechnen
LONG lEpsX = 0L;
LONG lEpsY = 0L;
LONG lEpsLine = 0L;

	switch (iVisType) {
	case VT_Punkt:
		RetrievePointDims (lONr, rrc, lEpsX, lEpsY);
		break;

	case VT_Linie:
		RetrieveLineDim (lONr, rrc, lEpsLine);
		break;

	case VT_Flaeche:
		break;				// alle Eps sind 0

	case VT_Text:
		*prgCP = CURSPOS_OBJECT;
		return S_OK;		// Texte sind rechtwinklig

	default:
		return E_INVALIDARG;
	}

// jetzt Geoemtrie genau testen
	try {
	WObjektGeometrie Obj (CLSID_ObjektGeometrie);	// throws hr
	WInitObjektGeometrie Init (Obj);				// throws hr

		THROW_FAILED_HRESULT(Init -> InitObjGeometry (lONr));
		THROW_FAILED_HRESULT(Obj -> CursorInObject (rpt.GetX(), rpt.GetY(), lEpsX, lEpsY, lEpsLine, true, prgCP));

	} catch (_com_error &e) {
		return _COM_ERROR(e);
	}
	return S_OK;
}
示例#4
0
bool CCoordTransService::NativeEx (
	const double &rdX, const double &rdY, Punkt &outPt, LPVOID pData)
{
	return NativeEx (rdX, rdY, &outPt.X(), &outPt.Y(), pData);
}
示例#5
0
bool CCoordTransService::MetricEx (
	const Punkt &rPt, double *pX, double *pY, LPVOID pData)
{
	return MetricEx (rPt.GetX(), rPt.GetY(), pX, pY, pData);
}
示例#6
0
///////////////////////////////////////////////////////////////////////////////
// Funktionen für parametrisierbare Transformationen
bool CCoordTransService::GetMetricParam (const Punkt &rPt, LPVOID *ppData)
{
	return GetMetricParam (rPt.GetX(), rPt.GetY(), ppData);
}
示例#7
0
bool CCoordTransService::Metric (const Punkt &Pt, double *pX, double *pY)
{
	return Metric (Pt.GetX(), Pt.GetY(), pX, pY);
}
示例#8
0
bool CCoordTransService::Native (
	const double &rdX, const double &rdY, Punkt &outPt)
{
	return Native (rdX, rdY, &outPt.X(), &outPt.Y());
}
示例#9
0
bool CCoordTransService::Scale (const double &rdX, const double &rdY, Punkt &outPt)
{
	outPt.X() = ScaleX (rdX, rdY);
	outPt.Y() = ScaleY (rdX, rdY);
	return true;
}
示例#10
0
文件: PUNKTLI.HPP 项目: hkaiser/TRiAS
//	Operatoren
	BOOL operator == (Punkt &P) { return ((P.X() == _X) && (P.Y() == _Y)); }