public double TransitSearch(Body.Name SearchBody, Moment StartDate, bool Forward, Longitude TransitPoint, Longitude FoundLon, ref bool bForward) { if (SearchBody == Body.Name.Sun || SearchBody == Body.Name.Moon) { return(TransitSearchDirect(SearchBody, StartDate, Forward, TransitPoint, FoundLon, ref bForward)); } if (((int)SearchBody <= (int)Body.Name.Moon || (int)SearchBody > (int)Body.Name.Saturn) && SearchBody != Body.Name.Lagna) { return(StartDate.toUniversalTime()); } sweph.obtainLock(h); Retrogression r = new Retrogression(h, SearchBody); double julday_ut = StartDate.toUniversalTime() - h.info.tz.toDouble() / 24.0; double found_ut = julday_ut; if (Forward) { found_ut = r.GetTransitForward(julday_ut, TransitPoint); } else { found_ut = r.GetTransitBackward(julday_ut, TransitPoint); } FoundLon.value = r.GetLon(found_ut, ref bForward).value; sweph.releaseLock(h); return(found_ut); }