Skip to content

File Surface.h

File List > Element > Surface.h

Go to the documentation of this file

#pragma once

#include "Core.h"
#include "Variant.h"

namespace rayx {

enum class ToroidType {
    Convex,
    Concave,
};

// a surface is a potentially infinite curved surface in 3d space.
// as our elements are mostly finite in size, they are represented by a (potentially infinite) surface in combination with a finite cutout (see CTYPE
// constants)

namespace detail {
struct SurfaceTypes {
    struct Plane {
        // no parameters
    };

    struct Quadric {
        int m_icurv;
        double m_a11;
        double m_a12;
        double m_a13;
        double m_a14;
        double m_a22;
        double m_a23;
        double m_a24;
        double m_a33;
        double m_a34;
        double m_a44;
    };

    struct Toroid {
        double m_longRadius;
        double m_shortRadius;
        ToroidType m_toroidType;
    };

    struct Cubic {
        // int m_icurv;
        double m_a11;
        double m_a12;
        double m_a13;
        double m_a14;
        double m_a22;
        double m_a23;
        double m_a24;
        double m_a33;
        double m_a34;
        double m_a44;

        double m_b12;
        double m_b13;
        double m_b21;
        double m_b23;
        double m_b31;
        double m_b32;

        double m_psi;
    };
};
}  // namespace detail

using Surface = Variant<detail::SurfaceTypes, detail::SurfaceTypes::Plane, detail::SurfaceTypes::Quadric, detail::SurfaceTypes::Toroid,
                        detail::SurfaceTypes::Cubic>;

class DesignElement;
enum class CylinderDirection { LongRadiusR, ShortRadiusRho };
Surface makeSurface(const DesignElement& dele);
Surface makeToroid(const DesignElement& dele);      //< creates a toroid from the parameters given in ` dele`.
Surface makeQuadric(const DesignElement& dele);     //< creates a quadric from the parameters given in ` dele`.
Surface makeCubic(const DesignElement& dele);       //< creates a cubic from the parameters given in ` dele`.
Surface makeEllipsoid(const DesignElement& dele);   //< creates a Ellipsoid from the parameters given in ` dele`.
Surface makeCone(const DesignElement& dele);        //< creates a Cone from the parameters given in ` dele`.
Surface makeCylinder(const DesignElement& dele);    //< creates a Cylinder from the parameters given in ` dele`.
Surface makeSphere(double radius);                  //< creates a sphere from the radius .
Surface makePlane();                                //< creates a plane surface
Surface makeParaboloid(const DesignElement& dele);  //< creates a Paraboloid from the parameters given in ` dele`.

}  // namespace rayx