CvFractal::getHeight(int, int)
- Defined in
- CvFractal.cpp, line 283
- Class
- CvFractal
- Hook name
CivHooks::CvFractal_getHeight
Hooks
static bool BeforeCvFractal_getHeight(CvFractal* self, int iX, int iY, int& result);static void AfterCvFractal_getHeight(CvFractal* self, int iX, int iY, int& result);static int ReplaceCvFractal_getHeight(int (*original)(CvFractal*, int, int), CvFractal* self, int iX, int iY);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::CvFractal_getHeight::ID, CIV_HOOK_BEFORE, (void*)&BeforeCvFractal_getHeight);host->RegisterHook(host->pluginIndex, CivHooks::CvFractal_getHeight::ID, CIV_HOOK_AFTER, (void*)&AfterCvFractal_getHeight);host->RegisterHook(host->pluginIndex, CivHooks::CvFractal_getHeight::ID, CIV_HOOK_REPLACE, (void*)&ReplaceCvFractal_getHeight);
Code
283int CvFractal::getHeight(int iX, int iY)284{285 int iErrX = 0;286 int iErrY = 0;287 int iSum = 0;288 int iHeight = 0;289 int iLowX = 0;290 int iLowY = 0;291292 CvAssertMsg(0 <= iX && iX < m_iXs, "iX out of range");293 if(!(0 <= iX && iX < m_iXs)) return 0;294295 CvAssertMsg(0 <= iY && iY < m_iYs, "iY out of range");296 if(!(0 <= iY && iY < m_iYs)) return 0;297298 iLowX = ((m_iXInc * iX) / FLOAT_PRECISION);299 if(iLowX > m_iFracX - 1)300 {301 iLowX = m_iFracX - 1; // clamp so that iLowX+1 doesn't overrun array302 }303304 iLowY = ((m_iYInc * iY) / FLOAT_PRECISION);305 if(iLowY > m_iFracY - 1)306 {307 iLowY = m_iFracY - 1; // clamp so that iLowY+1 doesn't overrun array308 }309 iErrX = ((m_iXInc * iX) - (iLowX * FLOAT_PRECISION));310 iErrY = ((m_iYInc * iY) - (iLowY * FLOAT_PRECISION));311312 if(iLowX < 0 || iLowX > FRACTAL_MAX_DIMS) return 0; // array is defined as FRACTAL_MAX_DIMS+1313 if(iLowY < 0 || iLowY > FRACTAL_MAX_DIMS) return 0; // array is defined as FRACTAL_MAX_DIMS+1314315 iSum = 0;316 iSum += ((FLOAT_PRECISION - iErrX) * (FLOAT_PRECISION - iErrY) * m_aaiFrac[iLowX ][iLowY ]);317 iSum += ((iErrX) * (FLOAT_PRECISION - iErrY) * m_aaiFrac[iLowX + 1][iLowY ]);318 iSum += ((FLOAT_PRECISION - iErrX) * (iErrY) * m_aaiFrac[iLowX ][iLowY + 1]);319 iSum += ((iErrX) * (iErrY) * m_aaiFrac[iLowX + 1][iLowY + 1]);320321 iSum /= (FLOAT_PRECISION * FLOAT_PRECISION);322323 iHeight = range(iSum, 0, 255);324325 if(m_iFlags & FRAC_PERCENT)326 {327 return ((iHeight * 100) >> 8);328 }329 else330 {331 return iHeight;332 }333}