/*************************************************************************
 Draw our module. This should draw line in the main window
*************************************************************************/
void SimpleDrawLine::draw(StelCore* core, StelRenderer* renderer)
{
	const StelProjectorP prj = core->getProjection(StelCore::FrameAltAz);
	Vec3d startPoint, endPoint;
	double lon1, lat1, lon2, lat2;
	lon1 = StelUtils::getDecAngle("10d");
	lat1 = StelUtils::getDecAngle("-5d");
	lon2 = StelUtils::getDecAngle("73d");
	lat2 = StelUtils::getDecAngle("80d");
	StelUtils::spheToRect(lon1,lat1,startPoint);
	StelUtils::spheToRect(lon2,lat2,endPoint);
	renderer->setGlobalColor(1.f, 0.5f, 0.5f, 1.f);
	StelCircleArcRenderer circleArcRenderer = StelCircleArcRenderer(renderer, prj);
	circleArcRenderer.drawGreatCircleArc(startPoint, endPoint);
}
void Constellation::drawOptim(StelRenderer* renderer, StelProjectorP projector, const StelCore* core, const SphericalCap& viewportHalfspace) const
{
	// Avoid drawing when not visible
	if (lineFader.getInterstate() <= 0.001f)
	{
		return;
	}

	renderer->setGlobalColor(lineColor[0], lineColor[1], 
	                         lineColor[2], lineFader.getInterstate());

	Vec3d star1;
	Vec3d star2;
	for (unsigned int i = 0; i < numberOfSegments; ++i)
	{
		star1 = asterism[2 * i]->getJ2000EquatorialPos(core);
		star2 = asterism[2 * i + 1]->getJ2000EquatorialPos(core);
		star1.normalize();
		star2.normalize();
		StelCircleArcRenderer(renderer, projector)
			.drawGreatCircleArc(star1, star2, &viewportHalfspace);
	}
}
void Constellation::drawBoundaryOptim(StelRenderer* renderer, StelProjectorP projector) const
{
	if (boundaryFader.getInterstate() < 0.001)
	{
		return;
	}

	renderer->setBlendMode(BlendMode_Alpha);
	renderer->setGlobalColor(boundaryColor[0], boundaryColor[1], 
	                         boundaryColor[2], boundaryFader.getInterstate());

	int size = singleSelected ? isolatedBoundarySegments.size() 
	                          : sharedBoundarySegments.size();

	const SphericalCap& viewportHalfspace = projector->getBoundingCap();

	for (int i = 0; i < size; i++)
	{
		std::vector<Vec3f>* points = singleSelected ? isolatedBoundarySegments[i] 
		                                            : sharedBoundarySegments[i];

		for (int j = 0; j < static_cast<int>(points->size()) - 1; j++)
		{
			const Vec3f pt1 = points->at(j) ;
			const Vec3f pt2 = points->at(j +1);
			if (pt1 * pt2 > 0.9999999f)
			{
				continue;
			}
			const Vec3d ptd1(pt1[0], pt1[1], pt1[2]);
			const Vec3d ptd2(pt2[0], pt2[1], pt2[2]);
			StelCircleArcRenderer(renderer, projector)
				.drawGreatCircleArc(ptd1, ptd2, &viewportHalfspace);
		}
	}
}