Allow passing buffer to serializers that support it

This commit is contained in:
Thomas Krijnen
2026-05-09 21:03:15 +02:00
parent 0d8e9f0edc
commit 2eb2d65710
7 changed files with 88 additions and 2 deletions
+49
View File
@@ -286,12 +286,45 @@ public:
serializer_settings
};
initialize_serializer(extension, context);
}
PythonPluginGeometrySerializer(
const std::string& extension,
const stream_or_filename& output_filename,
const stream_or_filename& output_temp_filename,
ifcopenshell::geometry::Settings& geometry_settings,
const ifcopenshell::geometry::SerializerSettings& serializer_settings
)
: GeometrySerializer(geometry_settings, serializer_settings)
{
const auto output_filename_string = output_filename.filename().value_or("");
const auto output_temp_filename_string = output_temp_filename.filename().value_or(output_filename_string);
ifcopenshell::serializers::geometry_serializer_context context{
output_filename_string,
output_temp_filename_string,
geometry_settings,
serializer_settings,
&output_filename,
&output_temp_filename
};
initialize_serializer(extension, context);
}
private:
void initialize_serializer(
const std::string& extension,
ifcopenshell::serializers::geometry_serializer_context& context
) {
auto& registry = ifcopenshell::serializers::geometry_serializer_registry_instance();
registry.configure(extension, context);
geometry_settings_ = context.geometry_settings;
serializer_ = registry.create(extension, context);
}
public:
bool ready() override {
return serializer_->ready();
}
@@ -659,6 +692,22 @@ struct ShapeRTTI : public boost::static_visitor<PyObject*>
);
}
GeometrySerializer* create_geometry_serializer(
const std::string& extension,
const stream_or_filename& output_filename,
const stream_or_filename& output_temp_filename,
ifcopenshell::geometry::Settings& geometry_settings,
const ifcopenshell::geometry::SerializerSettings& serializer_settings
) {
return new PythonPluginGeometrySerializer(
extension,
output_filename,
output_temp_filename,
geometry_settings,
serializer_settings
);
}
IfcGeom::Iterator* construct_iterator(const std::string& geometry_library, ifcopenshell::geometry::Settings settings, ifcopenshell::file* file, int num_threads) {
return new IfcGeom::Iterator(ifcopenshell::geometry::kernels::construct(file, geometry_library, settings), settings, file, num_threads);
}