mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-10 14:07:43 +00:00
More work on isolating into plug-ins
This commit is contained in:
@@ -1,26 +1,10 @@
|
||||
set(document_serializer_plugin_runtime_dir "${CMAKE_BINARY_DIR}/serializers/$<CONFIG>")
|
||||
|
||||
foreach(schema ${SCHEMA_VERSIONS})
|
||||
add_library(document_serializer_xml_ifc${schema} SHARED XmlSerializer.cpp xml_plugin.cpp)
|
||||
target_link_libraries(document_serializer_xml_ifc${schema} PRIVATE plugin Serializers IfcGeom IfcParse)
|
||||
set_target_properties(document_serializer_xml_ifc${schema} PROPERTIES
|
||||
COMPILE_FLAGS "-DIfcSchema=Ifc${schema}"
|
||||
OUTPUT_NAME "document.xml.ifc${schema}"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${document_serializer_plugin_runtime_dir}"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${document_serializer_plugin_runtime_dir}"
|
||||
)
|
||||
list(APPEND document_serializer_libraries document_serializer_xml_ifc${schema})
|
||||
add_document_serializer_plugin(document_serializer_xml_ifc${schema} "document.xml.ifc${schema}" SOURCES XmlSerializer.cpp xml_plugin.cpp)
|
||||
target_compile_definitions(document_serializer_xml_ifc${schema} PRIVATE IfcSchema=Ifc${schema})
|
||||
|
||||
if(WITH_GLTF)
|
||||
add_library(document_serializer_json_ifc${schema} SHARED JsonSerializer.cpp json_plugin.cpp)
|
||||
target_link_libraries(document_serializer_json_ifc${schema} PRIVATE plugin Serializers IfcGeom IfcParse)
|
||||
set_target_properties(document_serializer_json_ifc${schema} PROPERTIES
|
||||
COMPILE_FLAGS "-DIfcSchema=Ifc${schema}"
|
||||
OUTPUT_NAME "document.json.ifc${schema}"
|
||||
RUNTIME_OUTPUT_DIRECTORY "${document_serializer_plugin_runtime_dir}"
|
||||
LIBRARY_OUTPUT_DIRECTORY "${document_serializer_plugin_runtime_dir}"
|
||||
)
|
||||
list(APPEND document_serializer_libraries document_serializer_json_ifc${schema})
|
||||
if(GLTF_SUPPORT)
|
||||
add_document_serializer_plugin(document_serializer_json_ifc${schema} "document.json.ifc${schema}" SOURCES JsonSerializer.cpp json_plugin.cpp)
|
||||
target_compile_definitions(document_serializer_json_ifc${schema} PRIVATE IfcSchema=Ifc${schema})
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
||||
@@ -25,16 +25,16 @@
|
||||
#include "../../ifcparse/macros.h"
|
||||
|
||||
#include <boost/dll/alias.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
struct factory_t {
|
||||
JsonSerializer* operator()(ifcopenshell::file* file, const std::string& json_filename, JsonSerializer::Dialect dialect) const {
|
||||
auto* serializer = new POSTFIX_SCHEMA(JsonSerializer)(file, json_filename, dialect);
|
||||
serializer->setFile(file);
|
||||
return serializer;
|
||||
}
|
||||
};
|
||||
boost::shared_ptr<Serializer> create_serializer(const ifcopenshell::serializers::document_serializer_context& context) {
|
||||
return boost::make_shared<POSTFIX_SCHEMA(JsonSerializer)>(
|
||||
context.file,
|
||||
context.output_filename,
|
||||
static_cast<JsonSerializer::Dialect>(context.dialect));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -50,9 +50,11 @@ plugin::metadata plugin_metadata() {
|
||||
return document_serializer_plugin_metadata("json", STRINGIFY(IfcSchema));
|
||||
}
|
||||
|
||||
void register_plugin(JsonSerializerFactory::Factory& registry, const plugin::module& module) {
|
||||
factory_t factory;
|
||||
registry.bind(STRINGIFY(IfcSchema), factory, module);
|
||||
void register_plugin(document_serializer_registry& registry, const plugin::module& module) {
|
||||
document_serializer_info info;
|
||||
info.format = "json";
|
||||
info.schema_name = STRINGIFY(IfcSchema);
|
||||
registry.bind(info, create_serializer, module);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -23,16 +23,13 @@
|
||||
#include "../../ifcparse/macros.h"
|
||||
|
||||
#include <boost/dll/alias.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
struct factory_t {
|
||||
XmlSerializer* operator()(ifcopenshell::file* file, const std::string& xml_filename) const {
|
||||
auto* serializer = new POSTFIX_SCHEMA(XmlSerializer)(file, xml_filename);
|
||||
serializer->setFile(file);
|
||||
return serializer;
|
||||
}
|
||||
};
|
||||
boost::shared_ptr<Serializer> create_serializer(const ifcopenshell::serializers::document_serializer_context& context) {
|
||||
return boost::make_shared<POSTFIX_SCHEMA(XmlSerializer)>(context.file, context.output_filename);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -48,9 +45,11 @@ plugin::metadata plugin_metadata() {
|
||||
return document_serializer_plugin_metadata("xml", STRINGIFY(IfcSchema));
|
||||
}
|
||||
|
||||
void register_plugin(XmlSerializerFactory::Factory& registry, const plugin::module& module) {
|
||||
factory_t factory;
|
||||
registry.bind(STRINGIFY(IfcSchema), factory, module);
|
||||
void register_plugin(document_serializer_registry& registry, const plugin::module& module) {
|
||||
document_serializer_info info;
|
||||
info.format = "xml";
|
||||
info.schema_name = STRINGIFY(IfcSchema);
|
||||
registry.bind(info, create_serializer, module);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user