Camera::GetLocalNormal doing surface angle logic that belongs elsewhere...?
The Camera::GetLocalNormal method performs logic to calculate local surface normal. The local surface normal is a calculation that seems to me to belong in the ShapeModel class or elsewhere, but not in the Camera class.
In fact, the Camera class implements many not-obviously-camera-related methods such as (but perhaps not limited to) those at the end of this description. This is related to question #2183.
bool SetUniversalGround (const double latitude, const double longitude)
bool SetUniversalGround (const double latitude, const double longitude, const double radius)
bool SetGround (Latitude latitude, Longitude longitude)
bool SetGround (const SurfacePoint &surfacePt)
bool SetRightAscensionDeclination (const double ra, const double dec)
void LocalPhotometricAngles (Angle &phase, Angle &incidence, Angle &emission, bool &success)
void GetLocalNormal (double normal)
bool GroundRange (double &minlat, double &maxlat, double &minlon, double &maxlon, Pvl &pvl)
bool ringRange (double &minRingRadius, double &maxRingRadius, double &minRingLongitude, double &maxRingLongitude, Pvl &pvl)
bool IntersectsLongitudeDomain (Pvl &pvl)
double NorthAzimuth ()
double SunAzimuth ()
double SpacecraftAzimuth ()
double OffNadirAngle ()