Program Listing for File infra_sweep_helper.h

↰ Return to documentation for file (src/ifcgeom/infra_sweep_helper.h)

#ifndef LINEAR_SWEEP_HELPER_H
#define LINEAR_SWEEP_HELPER_H

#include "taxonomy.h"
#include "conversion_settings.h"

#include "ifc_geom_api.h"

namespace ifcopenshell {

    namespace geom {

        struct IFC_GEOM_API cross_section {
            double dist_along;
            taxonomy::geom_item::ptr section_geometry;
            Eigen::Vector3d offset;
            // rotation: the IfcAxis2PlacementLinear basis [X | Y | Axis], or nullopt when
            // the placement carries neither Axis nor RefDirection.
            std::optional<Eigen::Matrix3d> rotation;
            // ref_direction: the raw RefDirection, only when it was actually authored on the
            // placement (rotation carries a default otherwise). When absent the profile
            // normal comes from the directrix tangent -- see buildingSMART IFC4.x-IF #147.
            std::optional<Eigen::Vector3d> ref_direction;

            bool operator <(const cross_section& other) const {
                return dist_along < other.dist_along;
            }
        };

        IFC_GEOM_API taxonomy::loft::ptr make_loft(const ifcopenshell::geom::settings& settings, const express::base inst, const taxonomy::function_item::ptr& directrix, std::vector<cross_section>& cross_sections, logger& logger = ifcopenshell::logger::root());
    }

}

#endif