mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-18 19:30:25 +00:00
Allow passing buffer to serializers that support it
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user