if (!pPE->pCache) { \
pPE->pCache = new FDHCache(4); \
co = &(((FDHCache*)pPE->pCache)->oval[0]); \
cd = &(((FDHCache*)pPE->pCache)->dval[0]); \
*(co+0) = SCALE * ( origin.x + origin.y + origin.z); \
*(co+1) = SCALE * ( origin.x - origin.y + origin.z); \
*(co+2) = SCALE * (-origin.x + origin.y + origin.z); \
*(co+3) = SCALE * ( origin.x + origin.y - origin.z); \
*(cd+0) = SCALE * ( direction.x + direction.y + direction.z); \
*(cd+1) = SCALE * ( direction.x - direction.y + direction.z); \
*(cd+2) = SCALE * (-direction.x + direction.y + direction.z); \
*(cd+3) = SCALE * ( direction.x + direction.y - direction.z); \
} else { \
co = &(((FDHCache*)pPE->pCache)->oval[0]); \
cd = &(((FDHCache*)pPE->pCache)->dval[0]); \
}