20 #ifndef _STELSPHEREGEOMETRY_HPP_
21 #define _STELSPHEREGEOMETRY_HPP_
24 #include <QSharedPointer>
26 #include <QVarLengthArray>
29 #include "OctahedronPolygon.hpp"
30 #include "renderer/StelVertexBuffer.hpp"
31 #include "Triplet.hpp"
32 #include "VecMath.hpp"
56 SphericalRegionP(
const QWeakPointer<SphericalRegion>& other) : QSharedPointer<SphericalRegion>(other) {;}
109 static void serializeToJson(
const QVariant& jsonObject, QIODevice* output,
int indentLevel=0);
117 static int initialize();
254 VERTEX_ATTRIBUTES(
Vec3f Position)
263 : position(position) , texCoord(texCoord) {}
265 : position(pos[0], pos[1], pos[2]) , texCoord(texCoord) {}
266 VERTEX_ATTRIBUTES(
Vec3f Position,
Vec2f TexCoord)
272 , previousFillDrawParams(NULL)
328 return PrimitiveType_Triangles;
346 return PrimitiveType_Lines;
357 virtual void serialize(QDataStream& out)
const = 0;
361 QByteArray
toJSON()
const;
490 DrawParams previousFillDrawParams;
517 Q_ASSERT(
d==0 || std::fabs(
n.lengthSquared()-1.)<0.0000001);}
535 virtual double getArea()
const {
return 2.*M_PI*(1.-
d);}
547 bool contains(
const Vec3d &v)
const
549 Q_ASSERT(
d==0 || std::fabs(v.lengthSquared()-1.)<0.00000021);
555 const double a =
n*h.
n-
d*h.
d;
556 return d<=h.
d && ( a>=1. || (a>=0. && a*a >= (1.-
d*
d)*(1.-h.
d*h.
d)));
566 const double a =
d*h.
d -
n*h.
n;
567 return d+h.
d<=0. || a<=0. || (a<=1. && a*a <= (1.-
d*
d)*(1.-h.
d*h.
d));
590 const double a =
n[0]*hn0+
n[1]*hn1+
n[2]*hn2;
591 return d<=0. || a<=0. || (a<=1. && a*a <= (1.-
d*
d));
639 return (v1[1] * v2[2] - v1[2] * v2[1])*p[0] +
640 (v1[2] * v2[0] - v1[0] * v2[2])*p[1] +
641 (v1[0] * v2[1] - v1[1] * v2[0])*p[2]>=-1e-17;
647 Vec3d n(v1[1]*v2[2]-v1[2]*v2[1], v2[0]*v1[2]-v2[2]*v1[0], v2[1]*v1[0]-v2[0]*v1[1]);
649 const double a = n*h.
n;
650 return 0<=h.
d && ( a>=1. || (a>=0. && a*a >= 1.-h.
d*h.
d));
656 Vec3d n(v1[1]*v2[2]-v1[2]*v2[1], v2[0]*v1[2]-v2[2]*v1[0], v2[1]*v1[0]-v2[0]*v1[1]);
681 virtual bool contains(
const Vec3d& p)
const {
return n==p;}
684 virtual bool contains(
const SphericalCap&)
const {
return false;}
689 virtual bool intersects(
const SphericalCap& r)
const {
return r.contains(
n);}
710 return OctahedronPolygon::getAllSkyOctahedronPolygon();
712 virtual double getArea()
const {
return 4.*M_PI;}
722 virtual bool contains(
const Vec3d&)
const {
return true;}
725 virtual bool contains(
const SphericalCap&)
const {
return true;}
730 virtual bool intersects(
const SphericalCap&)
const {
return true;}
731 virtual bool intersects(
const SphericalPoint&)
const {
return true;}
755 return OctahedronPolygon::getEmptyOctahedronPolygon();
767 virtual bool contains(
const Vec3d&)
const {
return false;}
770 virtual bool contains(
const SphericalCap&)
const {
return false;}
771 virtual bool contains(
const SphericalPoint&)
const {
return false;}
775 virtual bool intersects(
const SphericalCap&)
const {
return false;}
776 virtual bool intersects(
const SphericalPoint&)
const {
return false;}
798 SphericalPolygon(
const QVector<QVector<Vec3d> >& contours) : octahedronPolygon(contours) {;}
802 SphericalPolygon(
const QList<OctahedronPolygon>& octContours) : octahedronPolygon(octContours) {;}
807 return octahedronPolygon;
815 virtual void serialize(QDataStream& out)
const;
819 virtual bool contains(
const Vec3d& p)
const {
return octahedronPolygon.contains(p);}
820 virtual bool contains(
const SphericalPolygon& r)
const {
return octahedronPolygon.contains(r.octahedronPolygon);}
823 virtual bool contains(
const SphericalPoint& r)
const {
return octahedronPolygon.contains(r.
n);}
826 virtual bool intersects(
const SphericalPolygon& r)
const {
return octahedronPolygon.intersects(r.octahedronPolygon);}
828 virtual bool intersects(
const SphericalCap& r)
const {
return r.intersects(*
this);}
829 virtual bool intersects(
const SphericalPoint& r)
const {
return octahedronPolygon.contains(r.
n);}
891 Q_ASSERT(contours.size()==1);
930 return PrimitiveType_TriangleFan;
940 return PrimitiveType_LineLoop;
943 virtual double getArea()
const;
956 virtual bool contains(
const Vec3d& p)
const;
960 virtual bool contains(
const SphericalPoint& r)
const {
return contains(r.
n);}
965 virtual bool intersects(
const SphericalPoint& r)
const {
return contains(r.
n);}
1049 bool containsConvexContour(
const Vec3d* vertice,
int nbVertex)
const;
1154 virtual void setContour(
const QVector<Vec3d>& acontour,
const QVector<Vec2f>& texCoord)
1202 #endif // _STELSPHEREGEOMETRY_HPP_