mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-17 22:11:36 +00:00
dispatch_with_upgrade to use only upgrade types for optimization
This commit is contained in:
@@ -105,7 +105,7 @@ namespace {
|
|||||||
template <size_t N>
|
template <size_t N>
|
||||||
struct dispatch_with_upgrade {
|
struct dispatch_with_upgrade {
|
||||||
static bool dispatch(ifcopenshell::geometry::kernels::AbstractKernel* kernel, const ifcopenshell::geometry::taxonomy::ptr item, IfcGeom::ConversionResults& results) {
|
static bool dispatch(ifcopenshell::geometry::kernels::AbstractKernel* kernel, const ifcopenshell::geometry::taxonomy::ptr item, IfcGeom::ConversionResults& results) {
|
||||||
auto concrete_item = ifcopenshell::geometry::taxonomy::template dcast<ifcopenshell::geometry::taxonomy::type_by_kind::type<N>>(item);
|
auto concrete_item = ifcopenshell::geometry::taxonomy::template dcast<ifcopenshell::geometry::taxonomy::upgrades::type<N>>(item);
|
||||||
if (concrete_item) {
|
if (concrete_item) {
|
||||||
return kernel->convert_impl(concrete_item, results);
|
return kernel->convert_impl(concrete_item, results);
|
||||||
} else {
|
} else {
|
||||||
@@ -115,7 +115,7 @@ namespace {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct dispatch_with_upgrade<ifcopenshell::geometry::taxonomy::type_by_kind::max> {
|
struct dispatch_with_upgrade<ifcopenshell::geometry::taxonomy::upgrades::max> {
|
||||||
static bool dispatch(ifcopenshell::geometry::kernels::AbstractKernel*, const ifcopenshell::geometry::taxonomy::ptr item, IfcGeom::ConversionResults&) {
|
static bool dispatch(ifcopenshell::geometry::kernels::AbstractKernel*, const ifcopenshell::geometry::taxonomy::ptr item, IfcGeom::ConversionResults&) {
|
||||||
Logger::Error("No conversion with upgrade for " + std::to_string(item->kind()));
|
Logger::Error("No conversion with upgrade for " + std::to_string(item->kind()));
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -1066,6 +1066,7 @@ typedef item const* ptr;
|
|||||||
typedef std::tuple<matrix4, point3, direction3, line, circle, ellipse, bspline_curve, offset_curve, plane, cylinder, sphere, torus, bspline_surface, edge, loop, face, shell, solid, loft, extrusion, revolve, sweep_along_curve, node, collection, boolean_result, piecewise_function> KindsTuple;
|
typedef std::tuple<matrix4, point3, direction3, line, circle, ellipse, bspline_curve, offset_curve, plane, cylinder, sphere, torus, bspline_surface, edge, loop, face, shell, solid, loft, extrusion, revolve, sweep_along_curve, node, collection, boolean_result, piecewise_function> KindsTuple;
|
||||||
typedef std::tuple<line, circle, ellipse, bspline_curve, offset_curve, loop, edge> CurvesTuple;
|
typedef std::tuple<line, circle, ellipse, bspline_curve, offset_curve, loop, edge> CurvesTuple;
|
||||||
typedef std::tuple<plane, cylinder, sphere, torus, bspline_surface, extrusion, revolve> SurfacesTuple;
|
typedef std::tuple<plane, cylinder, sphere, torus, bspline_surface, extrusion, revolve> SurfacesTuple;
|
||||||
|
typedef std::tuple<edge, loop, face, piecewise_function> UpgradesTuple;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct type_by_kind {
|
struct type_by_kind {
|
||||||
@@ -1089,6 +1090,13 @@ typedef item const* ptr;
|
|||||||
static const size_t max = std::tuple_size<impl::SurfacesTuple>::value;
|
static const size_t max = std::tuple_size<impl::SurfacesTuple>::value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct upgrades {
|
||||||
|
template <std::size_t N>
|
||||||
|
using type = typename std::tuple_element<N, impl::UpgradesTuple>::type;
|
||||||
|
|
||||||
|
static const size_t max = std::tuple_size<impl::UpgradesTuple>::value;
|
||||||
|
};
|
||||||
|
|
||||||
boost::optional<face::ptr> loop_to_face_upgrade_impl(ptr item);
|
boost::optional<face::ptr> loop_to_face_upgrade_impl(ptr item);
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class loop_to_face_upgrade {
|
class loop_to_face_upgrade {
|
||||||
|
|||||||
Reference in New Issue
Block a user