Пример #1
0
/*****************************************************
**
**   TextHelper   ---   writeTextAnalysis
**
******************************************************/
int TextHelper::writeTextAnalysis( const int &mode, const int varga, const int dasa )
{
	int ret = 0;
	switch ( mode )
	{
	case TEXT_MODE_BASE:
		writeBaseData();
		break;

	case TEXT_MODE_WESTERN_PLANETS:
		ret = writeWesternPlanetReport();
		break;

	case TEXT_MODE_VEDIC_PLANETS:
		ret = writeVedicPlanetReport();
		break;

	case TEXT_MODE_NAKSHATRA:
	{
		NakshatraExpert( horoscope ).write( writer, chartprops, show_header );
	}
	break;

	case TEXT_MODE_ASHTAKAVARGA:
	{
		VargaHoroscope chart( horoscope, varga );
		AshtakavargaExpert aexpert( &chart );
		aexpert.update();
		aexpert.write( writer, show_header );
	}
	break;
	case TEXT_MODE_KP:
		ret = writeKp( dasa );
		break;

	case TEXT_MODE_BHAVA:
		writeBhavas();
		break;

	case TEXT_MODE_ARABICPARTS:
	{
		ArabicPartsExpert( horoscope ).write( writer, chartprops->isVedic(), show_header );
	}
	break;

	case TEXT_MODE_VEDIC_ASPECTARIUM:
	{
		AspectExpert aspexpert( horoscope );
		aspexpert.writeVedicAspectarium( horoscope, writer, chartprops, show_header );
	}
	break;

	case TEXT_MODE_WESTERN_ASPECTARIUM:
	{
		AspectExpert aspexpert( horoscope );
		aspexpert.update( horoscope, chartprops );
		if ( show_header ) writer->writeHeader1( _( "Aspectarium" ));
		aspexpert.writeWesternAspectarium( writer, chartprops );
		aspexpert.writeWesternAspectList( writer, chartprops );
	}
	break;

	case TEXT_MODE_WESTERN_ASPECTARIUM_PLAIN:
	{
		AspectExpert aspexpert( horoscope );
		aspexpert.update( horoscope, chartprops );
		aspexpert.writeWesternAspectarium( writer, chartprops );
	}
	break;

	case TEXT_MODE_ASTRONOMICAL:
		ret = writeAstronomicalData();
		break;

	case TEXT_MODE_VARGA:
	{
		VargaExpert vexpert( horoscope );
		vexpert.write( writer, chartprops->getVedicObjectStyle(), show_header );
	}
	break;

	case TEXT_MODE_DASA:
		assert( dasa >= 0 && dasa < (int)DasaExpertFactory::MAX_DASAEXPERTS );
		DasaExpertFactory::get()->getDasaExpert( dasa )->write( writer, horoscope, varga, show_header );
		break;

	case TEXT_MODE_DASACOMPACT:
		assert( dasa >= 0 && dasa < (int)DasaExpertFactory::MAX_DASAEXPERTS );
		DasaExpertFactory::get()->getDasaExpert( dasa )->writeCompact( writer, horoscope, varga, show_header );
		break;

	case TEXT_MODE_DASALONG:
		assert( dasa >= 0 && dasa < (int)DasaExpertFactory::MAX_DASAEXPERTS );
		DasaExpertFactory::get()->getDasaExpert( dasa )->writeMore( writer, horoscope, varga, show_header );
		break;

	case TEXT_MODE_JAIMINI:
	{
		VargaHoroscope chart( horoscope, varga );
		JaiminiExpert jexpert( &chart );
		jexpert.update();
		jexpert.write( writer, show_header );
	}
	break;

	case TEXT_MODE_MAIN_VIEW:
		ret = writePlanets();
		break;

	default:
		assert( false );
		break;
	}
	if ( ret ) printf( "Warn: %d objects couldn't be calculated\n", ret );
	return ret;
}
Пример #2
0
int main(int argc, char **argv) {

  int i;
  char errmsg[128];

  // time stuff
  double simJD;		// Julian day, simulated
  struct ln_date date;	// date structure
  struct ln_zonedate zdate;	// date structure, includes gmtoff (seconds east of UTC)
  int year,month,day;
  double hour;

  // location stuff
  struct ln_lnlat_posn observer;
  int got_meridian = 0;
  double s_meridian = 0.0;

  // astronomy stuff
  float sunPos[3];
  int tsolar;
  int isSun = FALSE;
  int isSky = FALSE;
  int isMoon = FALSE;
  int isStars = FALSE;

  // atmosphere stuff
  float turbidity = 2.45;	// gensky default, also near europe average
  double gprefl = 0.2;		// deciduous forest

  // set defaults ---------------------------------------

  // set to my house in Newton Center
  observer.lat = 42.36;
  observer.lng = -71.06;	// note: east longitude (use west for cli)

  // set the julian date to right now
  simJD = ln_get_julian_from_sys();

  //(void) ln_get_local_date (simJD, &date);
  //fprintf(stdout,"# %4d-%02d-%02d %2d:%02d:%02d\n",
  //        date.years,date.months,date.days,
  //        date.hours,date.minutes,(int)date.seconds);

  // create the time string for the current date
  (void) ln_get_date (simJD, &date);
  //fprintf(stdout,"# UTC now: %4d-%02d-%02d %2d:%02d:%02d\n",
  //        date.years,date.months,date.days,
  //        date.hours,date.minutes,(int)date.seconds);

  // 14400 for 4 hours behind UTC
  //(void) ln_date_to_zonedate (&date, &zdate, -14400);
  //fprintf(stdout,"# Local time now: %4d-%02d-%02d %2d:%02d:%02d\n",
  //        zdate.years,zdate.months,zdate.days,
  //        zdate.hours,zdate.minutes,(int)zdate.seconds);

  // and use those as defaults (really only to set the year)
  year = date.years;
  month = date.months;
  day = date.days;
  hour = date.hours + date.minutes/60. + date.seconds/3600.;

  // parse command-line arguments -----------------------
  // 1st arg is month number
  // 2nd arg is day
  // 3rd arg is 24-hour decimal hours (can add "EST" or other time zone to string!)
  // -a latitude (North assumed)
  // -o longitude (West assumed)

  // use code from gensky.c

        progname = argv[0];
        if (argc < 4)
                userror("arg count");
        month = atoi(argv[1]);
        if (month < 1 || month > 12)
                userror("bad month");
        day = atoi(argv[2]);
        if (day < 1 || day > 31)
                userror("bad day");
        got_meridian = cvthour(argv[3], &hour, &tsolar, &s_meridian);
        for (i = 4; i < argc; i++)
                if (argv[i][0] == '-' || argv[i][0] == '+')
                        switch (argv[i][1]) {
                        case 'y':
                                year = atoi(argv[++i]);
                                break;
                        case 't':
                                turbidity = atof(argv[++i]);
                                break;
                        case 'g':
                                gprefl = atof(argv[++i]);
                                break;
                        case 'a':
				// keep in degrees!
                                //observer.lat = atof(argv[++i]) * (PI/180);
                                observer.lat = atof(argv[++i]);
                                break;
                        case 'o':
				// note negative to match gensky behavior!
                                //observer.lng = -atof(argv[++i]) * (PI/180);
                                observer.lng = -atof(argv[++i]);
                                break;
                        case 'm':
                                if (got_meridian) {
                                        ++i;
                                        break;          /* time overrides */
                                }
				// keep in degrees
                                //s_meridian = atof(argv[++i]) * (PI/180);
                                s_meridian = atof(argv[++i]);
                                break;
                        default:
                                sprintf(errmsg, "unknown option: %s", argv[i]);
                                userror(errmsg);
                        }
                else
                        userror("bad option");

        // if no meridian, assume local time?
        if (!got_meridian) s_meridian = -observer.lng;
        // check for meridian far away from observer location
        if (fabs(s_meridian+observer.lng) > 45.)
                fprintf(stderr,
        "%s: warning: %.1f hours btwn. standard meridian and longitude\n",
                        progname, (-observer.lng-s_meridian)/15.);

        printhead(argc, argv);

        //fprintf(stdout,"tsolar %d\n",tsolar);
        //fprintf(stdout,"got_meridian %d\n",got_meridian);
        //fprintf(stdout,"s_meridian %g\n",s_meridian);
        //fprintf(stdout,"observer.lng %g\n",observer.lng);


  // convert the time -----------------------------------

  // change date to match input
  //date.years = year;
  //date.months = month;
  //date.days = day;
  //date.hours = floor(hour);
  //simJD = ln_get_julian_day(&date);
  //fprintf(stdout,"# jd %15.10e\n",simJD);

  zdate.years = year;
  zdate.months = month;
  zdate.days = day;
  zdate.hours = floor(hour);
  zdate.minutes = floor(60.*(hour-(double)(zdate.hours)));
  zdate.seconds = 3600.*(hour-(double)(zdate.hours)-(double)(zdate.minutes)/60.);
  zdate.gmtoff = 86400 - (long)(240.*s_meridian);
  fprintf(stdout,"# Using time: %4d-%02d-%02d %2d:%02d:%02d\n",
          zdate.years,zdate.months,zdate.days,
          zdate.hours,zdate.minutes,(int)zdate.seconds);
  simJD = ln_get_julian_local_date(&zdate);
  fprintf(stdout,"# Julian day: %15.10e\n",simJD);

  // write output ---------------------------------------

  // compute and write the sun "light" and "source" descriptions
  isSun = writeSun (simJD, observer, turbidity, sunPos);

  // always write the sky dome
  isSky = writeSky (turbidity, sunPos);

  // place the moon if it is above the horizon
  isMoon = writeMoon (simJD, observer);

  // place the three brightest planets if they are above the horizon
  writePlanets (simJD, observer);

  // if the sky is dim enough, place stars
  isStars = writeStars (simJD, sunPos[2], observer);
  (void) writeSkyStarMix (sunPos[2]);

  // if there is cloud geometry available, place it
  //writeClouds ();

  // create a material for the ground haze
  writeHaze (isSun,isSky,isMoon,isStars);

  // ANSI C requires main to return int
  return 0;
}