Merge pull request #89 from aothms/dynamic_lib_fixes

Dynamic lib fixes (#79)
This commit is contained in:
Thomas Krijnen
2016-06-09 10:51:05 +02:00
27 changed files with 1055 additions and 977 deletions
+4 -3
View File
@@ -4,7 +4,8 @@
/install*/
/win/BuildDepsCache*.txt
# IfcExpressParser residue
/src/ifcexpressparser/__pycache__
/src/ifcexpressparser/express_parser.py
# Python test residue
/test/__pycache__
# General Python residue
__pycache__
# Visual Studio Code files
.vscode
+2 -2
View File
@@ -1,7 +1,7 @@
IfcOpenShell
============
IfcOpenShell is an open source ([LGPL]) software library for working with the Industry Foundation Classes ([IFC])
file format. Currently supported IFC releases are [IFC2x3 TC1] and [IFC4].
file format. Currently supported IFC releases are [IFC2x3 TC1] and [IFC4 Add1].
For more information, see
* [http://ifcopenshell.org](http://ifcopenshell.org)
@@ -162,5 +162,5 @@ Usage examples
[LGPL]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/COPYING "LGPL"
[IFC]: http://www.buildingsmart-tech.org/specifications/ifc-overview "IFC"
[IFC2x3 TC1]: http://www.buildingsmart-tech.org/specifications/ifc-releases/ifc2x3-tc1-release "IFC2x3 TC1"
[IFC4]: http://www.buildingsmart-tech.org/specifications/ifc-releases/ifc4-release "IFC4"
[IFC4 Add1]: http://www.buildingsmart-tech.org/specifications/ifc-releases/ifc4-add1-release "IFC4 Add1"
[win/readme.md]: https://github.com/IfcOpenShell/IfcOpenShell/tree/master/win/readme.md "win/readme.md"
+43 -27
View File
@@ -30,7 +30,7 @@ OPTION(BUILD_IFCPYTHON "Build IfcPython." ON)
OPTION(BUILD_EXAMPLES "Build example applications." ON)
OPTION(USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF)
OPTION(BUILD_IFCMAX "Build IfcMax, a 3ds Max plug-in, Windows-only." OFF)
OPTION(BUILD_SHARED_LIBS "Build ifcparse and ifcgeom libs shared." OFF)
OPTION(BUILD_SHARED_LIBS "Build IfcParse and IfcGeom as shared libs (SO/DLL)." OFF)
# TODO QtViewer is deprecated ATM as it uses the 0.4 API
# OPTION(BUILD_QTVIEWER "Build IfcOpenShell Qt GUI Viewer (requires Qt 4 framework)." OFF)
@@ -60,7 +60,18 @@ IF(NOT IS_ABSOLUTE ${LIBDIR})
ENDIF()
MESSAGE(STATUS "LIBDIR: ${LIBDIR}")
set(IFCOPENSHELL_LIBARY_DIR "") # for *nix rpaths
if (BUILD_SHARED_LIBS)
add_definitions(-DBUILD_SHARED_LIBS)
if (MSVC)
message(WARNING "Building DLLs against the static VC run-time. This is not recommended if the DLLs are to be redistributed.")
# C4521: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2'
# There will be couple hundreds of these so suppress them away, https://msdn.microsoft.com/en-us/library/esew7y1w.aspx
add_definitions(-wd4251)
endif()
set(IFCOPENSHELL_LIBARY_DIR "${LIBDIR}")
endif()
# Create cache entries if absent for environment variables
MACRO(UNIFY_ENVVARS_AND_CACHE VAR)
@@ -305,6 +316,7 @@ IF(MSVC)
ADD_DEFINITIONS(-wd4458)
ENDIF()
# Link against the static VC runtime
# TODO Make this configurable
FOREACH(flag CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELWITHDEBINFO CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
@@ -318,9 +330,9 @@ IF(MSVC)
ElSE()
IF(WIN32)
# -fPIC is not relevant on Windows and create pointless warnings
ADD_DEFINITIONS(-Wno-non-virtual-dtor)
ADD_DEFINITIONS(-Wno-non-virtual-dtor -Wall -Wextra)
ELSE()
ADD_DEFINITIONS(-fPIC -Wno-non-virtual-dtor)
ADD_DEFINITIONS(-fPIC -Wno-non-virtual-dtor -Wall -Wextra)
ENDIF()
ENDIF()
@@ -408,7 +420,7 @@ else()
endif()
endif()
# Boost >= 1.58 requires BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE to build
# Boost >= 1.58 requires BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE to build on some Linux distros.
if(NOT Boost_VERSION LESS 105800)
add_definitions(-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE)
endif()
@@ -420,6 +432,8 @@ if(NOT WIN32)
LINK_DIRECTORIES(${LINK_DIRECTORIES} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64)
endif()
SET(IFCOPENSHELL_LIBRARIES IfcParse IfcGeom)
# IfcParse
file(GLOB IFCPARSE_H_FILES ../src/ifcparse/*.h)
file(GLOB IFCPARSE_CPP_FILES ../src/ifcparse/*.cpp)
@@ -434,7 +448,8 @@ endforeach()
set(IFCPARSE_FILES ${IFCPARSE_CPP_FILES} ${IFCPARSE_H_FILES})
ADD_LIBRARY(IfcParse STATIC ${IFCPARSE_FILES})
add_library(IfcParse ${IFCPARSE_FILES})
set_target_properties(IfcParse PROPERTIES COMPILE_FLAGS -DIfcParse_EXPORTS)
IF(UNICODE_SUPPORT)
TARGET_LINK_LIBRARIES(IfcParse ${ICU_LIBRARIES} ${Boost_LIBRARIES})
@@ -443,31 +458,24 @@ ENDIF()
# IfcGeom
file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/*.h)
file(GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/*.cpp)
set(IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES})
IF(BUILD_SHARED_LIBS)
ADD_LIBRARY(IfcGeom SHARED ${IFCGEOM_FILES})
SET(IFCLIBS "IfcGeom")
SET(IFCDIRS "${LIBDIR}")
message(WARNING "Building IfcGeom as shared library not currently supported")
add_library(IfcGeom STATIC ${IFCGEOM_FILES})
ELSE()
ADD_LIBRARY(IfcGeom STATIC ${IFCGEOM_FILES})
SET(IFCLIBS "IfcParse;IfcGeom")
SET(IFCDIRS "")
# add macro for every project: use IfcParse as static lib
ADD_DEFINITIONS(-DIFCPARSE_STATIC_DEFINE)
add_library(IfcGeom ${IFCGEOM_FILES})
ENDIF()
TARGET_LINK_LIBRARIES(IfcGeom IfcParse)
# IfcConvert
if (IFCCONVERT_DOUBLE_PRECISION)
add_definitions(-DIFCCONVERT_DOUBLE_PRECISION)
endif()
file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp)
file(GLOB IFCCONVERT_H_FILES ../src/ifcconvert/*.h)
set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES})
ADD_EXECUTABLE(IfcConvert ${IFCCONVERT_FILES})
if (IFCCONVERT_DOUBLE_PRECISION)
set_target_properties(IfcConvert PROPERTIES COMPILE_FLAGS -DIFCCONVERT_DOUBLE_PRECISION)
endif()
# Make sure cross-referenced symbols between static OCC libraries get
# resolved. Also add thread and rt libraries.
@@ -480,9 +488,9 @@ if("${libTKernelExt}" STREQUAL ".a")
set(OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${LIB_RT} dl)
endif()
TARGET_LINK_LIBRARIES(IfcConvert ${IFCLIBS} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${ICU_LIBRARIES})
TARGET_LINK_LIBRARIES(IfcConvert ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${ICU_LIBRARIES})
if (NOT WIN32)
SET_INSTALL_RPATHS(IfcConvert "${IFCDIRS};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS};${OPENCOLLADA_LIBRARY_DIR};${ICU_LIBRARY_DIR}")
SET_INSTALL_RPATHS(IfcConvert "${IFCOPENSHELL_LIBARY_DIR};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS};${OPENCOLLADA_LIBRARY_DIR};${ICU_LIBRARY_DIR}")
endif()
# IfcGeomServer
@@ -490,10 +498,9 @@ file(GLOB CPP_FILES ../src/ifcgeomserver/*.cpp)
file(GLOB H_FILES ../src/ifcgeomserver/*.h)
set(SOURCE_FILES ${CPP_FILES} ${H_FILES})
ADD_EXECUTABLE(IfcGeomServer ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(IfcGeomServer ${IFCLIBS} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${ICU_LIBRARIES})
TARGET_LINK_LIBRARIES(IfcGeomServer ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${ICU_LIBRARIES})
if (NOT WIN32)
SET_INSTALL_RPATHS(IfcGeomServer "${IFCDIRS};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS};${ICU_LIBRARY_DIR}")
SET_INSTALL_RPATHS(IfcGeomServer "${IFCOPENSHELL_LIBARY_DIR};${OCC_LIBRARY_DIR};${Boost_LIBRARY_DIRS};${ICU_LIBRARY_DIR}")
endif()
IF(BUILD_IFCPYTHON)
@@ -509,7 +516,16 @@ IF(BUILD_IFCMAX)
ENDIF()
# CMake installation targets
INSTALL(FILES ${IFCPARSE_H_FILES} DESTINATION ${INCLUDEDIR}/ifcparse)
INSTALL(FILES ${IFCGEOM_H_FILES} DESTINATION ${INCLUDEDIR}/ifcgeom)
INSTALL(TARGETS IfcConvert IfcGeomServer DESTINATION ${BINDIR})
INSTALL(TARGETS ${IFCLIBS} DESTINATION ${LIBDIR})
INSTALL(FILES ${IFCPARSE_H_FILES}
DESTINATION ${INCLUDEDIR}/ifcparse
)
INSTALL(FILES ${IFCGEOM_H_FILES}
DESTINATION ${INCLUDEDIR}/ifcgeom
)
INSTALL(TARGETS IfcParse IfcGeom IfcConvert IfcGeomServer
ARCHIVE DESTINATION ${LIBDIR}
LIBRARY DESTINATION ${LIBDIR}
RUNTIME DESTINATION ${BINDIR}
)
+2 -6
View File
@@ -18,13 +18,9 @@
################################################################################
ADD_EXECUTABLE(IfcParseExamples IfcParseExamples.cpp)
IF(BUILD_SHARED_LIBS)
TARGET_LINK_LIBRARIES(IfcParseExamples ${IFCLIBS})
ELSE()
TARGET_LINK_LIBRARIES(IfcParseExamples IfcParse)
ENDIF()
TARGET_LINK_LIBRARIES(IfcParseExamples IfcParse)
set_target_properties(IfcParseExamples PROPERTIES FOLDER Examples)
ADD_EXECUTABLE(IfcOpenHouse IfcOpenHouse.cpp)
TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCLIBS} ${OPENCASCADE_LIBRARIES})
TARGET_LINK_LIBRARIES(IfcOpenHouse ${IFCOPENSHELL_LIBRARIES} ${OPENCASCADE_LIBRARIES})
set_target_properties(IfcOpenHouse PROPERTIES FOLDER Examples)
+14 -13
View File
@@ -93,23 +93,24 @@ lb_header = """
#define IfcSchema %(schema_name)s
#include "../ifcparse/IfcParse_Export.h"
#include "../ifcparse/IfcUtil.h"
#include "../ifcparse/IfcEntityDescriptor.h"
#include "../ifcparse/IfcWritableEntity.h"
namespace %(schema_name)s {
namespace Type {
int GetAttributeCount(Enum t);
int GetAttributeIndex(Enum t, const std::string& a);
IfcUtil::ArgumentType GetAttributeType(Enum t, unsigned char a);
Enum GetAttributeEntity(Enum t, unsigned char a);
const std::string& GetAttributeName(Enum t, unsigned char a);
bool GetAttributeOptional(Enum t, unsigned char a);
bool GetAttributeDerived(Enum t, unsigned char a);
std::pair<const char*, int> GetEnumerationIndex(Enum t, const std::string& a);
std::pair<Enum, unsigned> GetInverseAttribute(Enum t, const std::string& a);
std::set<std::string> GetInverseAttributeNames(Enum t);
void PopulateDerivedFields(IfcWrite::IfcWritableEntity* e);
IfcParse_EXPORT int GetAttributeCount(Enum t);
IfcParse_EXPORT int GetAttributeIndex(Enum t, const std::string& a);
IfcParse_EXPORT IfcUtil::ArgumentType GetAttributeType(Enum t, unsigned char a);
IfcParse_EXPORT Enum GetAttributeEntity(Enum t, unsigned char a);
IfcParse_EXPORT const std::string& GetAttributeName(Enum t, unsigned char a);
IfcParse_EXPORT bool GetAttributeOptional(Enum t, unsigned char a);
IfcParse_EXPORT bool GetAttributeDerived(Enum t, unsigned char a);
IfcParse_EXPORT std::pair<const char*, int> GetEnumerationIndex(Enum t, const std::string& a);
IfcParse_EXPORT std::pair<Enum, unsigned> GetInverseAttribute(Enum t, const std::string& a);
IfcParse_EXPORT std::set<std::string> GetInverseAttributeNames(Enum t);
IfcParse_EXPORT void PopulateDerivedFields(IfcWrite::IfcWritableEntity* e);
}}
#endif
@@ -389,8 +390,8 @@ typedef IfcUtil::IfcBaseClass %(name)s;
enumeration = """namespace %(name)s {
%(documentation)s
typedef enum {%(values)s} %(name)s;
const char* ToString(%(name)s v);
%(name)s FromString(const std::string& s);
IfcParse_EXPORT const char* ToString(%(name)s v);
IfcParse_EXPORT %(name)s FromString(const std::string& s);
}
"""
+1 -3
View File
@@ -1294,9 +1294,7 @@ std::pair<std::string, double> IfcGeom::Kernel::initializeUnits(IfcSchema::IfcUn
Logger::Message(Logger::LOG_ERROR, "No unit information found");
} else {
for (IfcEntityList::it it = units->begin(); it != units->end(); ++it) {
std::string current_unit_name = "";
IfcUtil::IfcBaseClass* base = *it;
IfcSchema::IfcSIUnit* unit = 0;
if (base->is(IfcSchema::Type::IfcNamedUnit)) {
IfcSchema::IfcNamedUnit* named_unit = base->as<IfcSchema::IfcNamedUnit>();
if (named_unit->UnitType() == IfcSchema::IfcUnitEnum::IfcUnit_LENGTHUNIT ||
@@ -1387,7 +1385,7 @@ bool IfcGeom::Kernel::convert_layerset(const IfcSchema::IfcProduct* product, std
double u1, u2;
Handle_Geom_Curve axis_curve = BRep_Tool::Curve(axis_edge, u1, u2);
if (true) {
if (true) { /**< @todo Why always true? */
if (axis_curve->DynamicType() == STANDARD_TYPE(Geom_Line)) {
Handle_Geom_Line axis_line = Handle_Geom_Line::DownCast(axis_curve);
reference_surface = new Geom_Plane(axis_line->Lin().Location(), axis_line->Lin().Direction() ^ gp::DZ());
+17 -2
View File
@@ -65,6 +65,7 @@
#include <algorithm>
#include <boost/algorithm/string.hpp>
#include <boost/regex.hpp>
#include <gp_Mat.hxx>
#include <gp_Mat2d.hxx>
@@ -308,7 +309,7 @@ namespace IfcGeom {
{
names_to_include_or_exclude.clear();
foreach(const std::string &name, names)
names_to_include_or_exclude.insert(IfcUtil::wildcard_string_to_regex(name));
names_to_include_or_exclude.insert(wildcard_string_to_regex(name));
include_entities_in_processing = true;
}
@@ -317,10 +318,24 @@ namespace IfcGeom {
{
names_to_include_or_exclude.clear();
foreach(const std::string &name, names)
names_to_include_or_exclude.insert(IfcUtil::wildcard_string_to_regex(name));
names_to_include_or_exclude.insert(wildcard_string_to_regex(name));
include_entities_in_processing = false;
}
static boost::regex wildcard_string_to_regex(std::string str)
{
// Escape all non-"*?" regex special chars
std::string special_chars = "\\^.$|()[]+/";
foreach(char c, special_chars) {
std::string char_str(1, c);
boost::replace_all(str, char_str, "\\" + char_str);
}
// Convert "*?" to their regex equivalents
boost::replace_all(str, "?", ".");
boost::replace_all(str, "*", ".*");
return boost::regex(str);
}
const gp_XYZ& bounds_min() const { return bounds_min_; }
const gp_XYZ& bounds_max() const { return bounds_max_; }
+8 -6
View File
@@ -17,12 +17,14 @@
* *
********************************************************************************/
/********************************************************************************
* *
* This file has been generated from IFC2X3_TC1.exp. Do not make modifications *
* but instead modify the python script that has been used to generate this. *
* *
********************************************************************************/
/********************************************************************************************
* *
* This file has been generated from *
* http://www.buildingsmart-tech.org/downloads/ifc/ifc2x3tc/IFC2X3_TC1_EXPRESS_longform.zip *
* Do not make modifications but instead modify the Python script that has been *
* used to generate this. *
* *
********************************************************************************************/
#ifndef USE_IFC4
+20 -17
View File
@@ -17,35 +17,38 @@
* *
********************************************************************************/
/********************************************************************************
* *
* This file has been generated from IFC2X3_TC1.exp. Do not make modifications *
* but instead modify the python script that has been used to generate this. *
* *
********************************************************************************/
/********************************************************************************************
* *
* This file has been generated from *
* http://www.buildingsmart-tech.org/downloads/ifc/ifc2x3tc/IFC2X3_TC1_EXPRESS_longform.zip *
* Do not make modifications but instead modify the Python script that has been *
* used to generate this. *
* *
********************************************************************************************/
#ifndef IFC2X3RT_H
#define IFC2X3RT_H
#define IfcSchema Ifc2x3
#include "../ifcparse/IfcParse_Export.h"
#include "../ifcparse/IfcUtil.h"
#include "../ifcparse/IfcEntityDescriptor.h"
#include "../ifcparse/IfcWritableEntity.h"
namespace Ifc2x3 {
namespace Type {
int GetAttributeCount(Enum t);
int GetAttributeIndex(Enum t, const std::string& a);
IfcUtil::ArgumentType GetAttributeType(Enum t, unsigned char a);
Enum GetAttributeEntity(Enum t, unsigned char a);
const std::string& GetAttributeName(Enum t, unsigned char a);
bool GetAttributeOptional(Enum t, unsigned char a);
bool GetAttributeDerived(Enum t, unsigned char a);
std::pair<const char*, int> GetEnumerationIndex(Enum t, const std::string& a);
std::pair<Enum, unsigned> GetInverseAttribute(Enum t, const std::string& a);
std::set<std::string> GetInverseAttributeNames(Enum t);
void PopulateDerivedFields(IfcWrite::IfcWritableEntity* e);
IfcParse_EXPORT int GetAttributeCount(Enum t);
IfcParse_EXPORT int GetAttributeIndex(Enum t, const std::string& a);
IfcParse_EXPORT IfcUtil::ArgumentType GetAttributeType(Enum t, unsigned char a);
IfcParse_EXPORT Enum GetAttributeEntity(Enum t, unsigned char a);
IfcParse_EXPORT const std::string& GetAttributeName(Enum t, unsigned char a);
IfcParse_EXPORT bool GetAttributeOptional(Enum t, unsigned char a);
IfcParse_EXPORT bool GetAttributeDerived(Enum t, unsigned char a);
IfcParse_EXPORT std::pair<const char*, int> GetEnumerationIndex(Enum t, const std::string& a);
IfcParse_EXPORT std::pair<Enum, unsigned> GetInverseAttribute(Enum t, const std::string& a);
IfcParse_EXPORT std::set<std::string> GetInverseAttributeNames(Enum t);
IfcParse_EXPORT void PopulateDerivedFields(IfcWrite::IfcWritableEntity* e);
}}
#endif
+8 -6
View File
@@ -17,12 +17,14 @@
* *
********************************************************************************/
/********************************************************************************
* *
* This file has been generated from IFC2X3_TC1.exp. Do not make modifications *
* but instead modify the python script that has been used to generate this. *
* *
********************************************************************************/
/********************************************************************************************
* *
* This file has been generated from *
* http://www.buildingsmart-tech.org/downloads/ifc/ifc2x3tc/IFC2X3_TC1_EXPRESS_longform.zip *
* Do not make modifications but instead modify the Python script that has been *
* used to generate this. *
* *
********************************************************************************************/
#ifndef USE_IFC4
+336 -334
View File
File diff suppressed because it is too large Load Diff
+8 -6
View File
@@ -17,12 +17,14 @@
* *
********************************************************************************/
/********************************************************************************
* *
* This file has been generated from IFC2X3_TC1.exp. Do not make modifications *
* but instead modify the python script that has been used to generate this. *
* *
********************************************************************************/
/********************************************************************************************
* *
* This file has been generated from *
* http://www.buildingsmart-tech.org/downloads/ifc/ifc2x3tc/IFC2X3_TC1_EXPRESS_longform.zip *
* Do not make modifications but instead modify the Python script that has been *
* used to generate this. *
* *
********************************************************************************************/
#ifndef IFC2X3ENUM_H
#define IFC2X3ENUM_H
+10 -6
View File
@@ -19,8 +19,10 @@
/********************************************************************************
* *
* This file has been generated from IFC4.exp. Do not make modifications *
* but instead modify the python script that has been used to generate this. *
* This file has been generated from *
* http://www.buildingsmart-tech.org/ifc/IFC4/Add1/IFC4_ADD1.exp *
* Do not make modifications but instead modify the Python script that has been *
* used to generate this. *
* *
********************************************************************************/
@@ -272,6 +274,8 @@ void InitDescriptorMap() {
current->add("wrappedValue",false,IfcUtil::Argument_DOUBLE);
current = entity_descriptor_map[Type::IfcSpecularRoughness] = new IfcEntityDescriptor(Type::IfcSpecularRoughness,0);
current->add("wrappedValue",false,IfcUtil::Argument_DOUBLE);
current = entity_descriptor_map[Type::IfcStrippedOptional] = new IfcEntityDescriptor(Type::IfcStrippedOptional,0);
current->add("wrappedValue",false,IfcUtil::Argument_BOOL);
current = entity_descriptor_map[Type::IfcTemperatureGradientMeasure] = new IfcEntityDescriptor(Type::IfcTemperatureGradientMeasure,0);
current->add("wrappedValue",false,IfcUtil::Argument_DOUBLE);
current = entity_descriptor_map[Type::IfcTemperatureRateOfChangeMeasure] = new IfcEntityDescriptor(Type::IfcTemperatureRateOfChangeMeasure,0);
@@ -474,7 +478,7 @@ void InitDescriptorMap() {
current->add("Name",true,IfcUtil::Argument_STRING,Type::IfcLabel);
current->add("Description",true,IfcUtil::Argument_STRING,Type::IfcText);
current->add("Category",true,IfcUtil::Argument_STRING,Type::IfcLabel);
current->add("Priority",true,IfcUtil::Argument_DOUBLE,Type::IfcNormalisedRatioMeasure);
current->add("Priority",true,IfcUtil::Argument_INT,Type::IfcInteger);
current = entity_descriptor_map[Type::IfcMaterialLayerSet] = new IfcEntityDescriptor(Type::IfcMaterialLayerSet,entity_descriptor_map.find(Type::IfcMaterialDefinition)->second);
current->add("MaterialLayers",false,IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE,Type::IfcMaterialLayer);
current->add("LayerSetName",true,IfcUtil::Argument_STRING,Type::IfcLabel);
@@ -489,7 +493,7 @@ void InitDescriptorMap() {
current->add("Description",true,IfcUtil::Argument_STRING,Type::IfcText);
current->add("Material",true,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcMaterial);
current->add("Profile",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcProfileDef);
current->add("Priority",true,IfcUtil::Argument_DOUBLE,Type::IfcNormalisedRatioMeasure);
current->add("Priority",true,IfcUtil::Argument_INT,Type::IfcInteger);
current->add("Category",true,IfcUtil::Argument_STRING,Type::IfcLabel);
current = entity_descriptor_map[Type::IfcMaterialProfileSet] = new IfcEntityDescriptor(Type::IfcMaterialProfileSet,entity_descriptor_map.find(Type::IfcMaterialDefinition)->second);
current->add("Name",true,IfcUtil::Argument_STRING,Type::IfcLabel);
@@ -705,6 +709,7 @@ void InitDescriptorMap() {
current->add("DispersionFactor",true,IfcUtil::Argument_DOUBLE,Type::IfcReal);
current = entity_descriptor_map[Type::IfcSurfaceStyleShading] = new IfcEntityDescriptor(Type::IfcSurfaceStyleShading,entity_descriptor_map.find(Type::IfcPresentationItem)->second);
current->add("SurfaceColour",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcColourRgb);
current->add("Transparency",true,IfcUtil::Argument_DOUBLE,Type::IfcNormalisedRatioMeasure);
current = entity_descriptor_map[Type::IfcSurfaceStyleWithTextures] = new IfcEntityDescriptor(Type::IfcSurfaceStyleWithTextures,entity_descriptor_map.find(Type::IfcPresentationItem)->second);
current->add("Textures",false,IfcUtil::Argument_AGGREGATE_OF_ENTITY_INSTANCE,Type::IfcSurfaceTexture);
current = entity_descriptor_map[Type::IfcSurfaceTexture] = new IfcEntityDescriptor(Type::IfcSurfaceTexture,entity_descriptor_map.find(Type::IfcPresentationItem)->second);
@@ -973,7 +978,7 @@ void InitDescriptorMap() {
current->add("URLReference",false,IfcUtil::Argument_STRING,Type::IfcURIReference);
current = entity_descriptor_map[Type::IfcIndexedColourMap] = new IfcEntityDescriptor(Type::IfcIndexedColourMap,entity_descriptor_map.find(Type::IfcPresentationItem)->second);
current->add("MappedTo",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcTessellatedFaceSet);
current->add("Overrides",true,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcSurfaceStyleShading);
current->add("Opacity",true,IfcUtil::Argument_DOUBLE,Type::IfcNormalisedRatioMeasure);
current->add("Colours",false,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcColourRgbList);
current->add("ColourIndex",false,IfcUtil::Argument_AGGREGATE_OF_INT,Type::IfcPositiveInteger);
current = entity_descriptor_map[Type::IfcIndexedTextureMap] = new IfcEntityDescriptor(Type::IfcIndexedTextureMap,entity_descriptor_map.find(Type::IfcTextureCoordinate)->second);
@@ -1224,7 +1229,6 @@ void InitDescriptorMap() {
current = entity_descriptor_map[Type::IfcSurface] = new IfcEntityDescriptor(Type::IfcSurface,entity_descriptor_map.find(Type::IfcGeometricRepresentationItem)->second);
current = entity_descriptor_map[Type::IfcSurfaceStyleRendering] = new IfcEntityDescriptor(Type::IfcSurfaceStyleRendering,entity_descriptor_map.find(Type::IfcSurfaceStyleShading)->second);
current->add("Transparency",true,IfcUtil::Argument_DOUBLE,Type::IfcNormalisedRatioMeasure);
current->add("DiffuseColour",true,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcColourOrFactor);
current->add("TransmissionColour",true,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcColourOrFactor);
current->add("DiffuseTransmissionColour",true,IfcUtil::Argument_ENTITY_INSTANCE,Type::IfcColourOrFactor);
+16 -13
View File
@@ -19,8 +19,10 @@
/********************************************************************************
* *
* This file has been generated from IFC4.exp. Do not make modifications *
* but instead modify the python script that has been used to generate this. *
* This file has been generated from *
* http://www.buildingsmart-tech.org/ifc/IFC4/Add1/IFC4_ADD1.exp *
* Do not make modifications but instead modify the Python script that has been *
* used to generate this. *
* *
********************************************************************************/
@@ -29,23 +31,24 @@
#define IfcSchema Ifc4
#include "../ifcparse/IfcParse_Export.h"
#include "../ifcparse/IfcUtil.h"
#include "../ifcparse/IfcEntityDescriptor.h"
#include "../ifcparse/IfcWritableEntity.h"
namespace Ifc4 {
namespace Type {
int GetAttributeCount(Enum t);
int GetAttributeIndex(Enum t, const std::string& a);
IfcUtil::ArgumentType GetAttributeType(Enum t, unsigned char a);
Enum GetAttributeEntity(Enum t, unsigned char a);
const std::string& GetAttributeName(Enum t, unsigned char a);
bool GetAttributeOptional(Enum t, unsigned char a);
bool GetAttributeDerived(Enum t, unsigned char a);
std::pair<const char*, int> GetEnumerationIndex(Enum t, const std::string& a);
std::pair<Enum, unsigned> GetInverseAttribute(Enum t, const std::string& a);
std::set<std::string> GetInverseAttributeNames(Enum t);
void PopulateDerivedFields(IfcWrite::IfcWritableEntity* e);
IfcParse_EXPORT int GetAttributeCount(Enum t);
IfcParse_EXPORT int GetAttributeIndex(Enum t, const std::string& a);
IfcParse_EXPORT IfcUtil::ArgumentType GetAttributeType(Enum t, unsigned char a);
IfcParse_EXPORT Enum GetAttributeEntity(Enum t, unsigned char a);
IfcParse_EXPORT const std::string& GetAttributeName(Enum t, unsigned char a);
IfcParse_EXPORT bool GetAttributeOptional(Enum t, unsigned char a);
IfcParse_EXPORT bool GetAttributeDerived(Enum t, unsigned char a);
IfcParse_EXPORT std::pair<const char*, int> GetEnumerationIndex(Enum t, const std::string& a);
IfcParse_EXPORT std::pair<Enum, unsigned> GetInverseAttribute(Enum t, const std::string& a);
IfcParse_EXPORT std::set<std::string> GetInverseAttributeNames(Enum t);
IfcParse_EXPORT void PopulateDerivedFields(IfcWrite::IfcWritableEntity* e);
}}
#endif
+35 -21
View File
File diff suppressed because one or more lines are too long
+461 -449
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -40,7 +40,7 @@ typedef unsigned int UChar32;
namespace IfcParse {
class IfcCharacterDecoder {
class IfcParse_EXPORT IfcCharacterDecoder {
private:
IfcParse::IfcSpfStream* file;
#ifdef HAVE_ICU
@@ -75,7 +75,7 @@ namespace IfcParse {
namespace IfcWrite {
class IfcCharacterEncoder {
class IfcParse_EXPORT IfcCharacterEncoder {
private:
std::string str;
#ifdef HAVE_ICU
+2 -2
View File
@@ -39,7 +39,7 @@
namespace IfcUtil {
class IfcEnumerationDescriptor {
class IfcParse_EXPORT IfcEnumerationDescriptor {
private:
IfcSchema::Type::Enum type;
std::vector<std::string> values;
@@ -62,7 +62,7 @@ namespace IfcUtil {
}
};
class IfcEntityDescriptor {
class IfcParse_EXPORT IfcEntityDescriptor {
public:
class IfcArgumentDescriptor
{
+17 -4
View File
@@ -20,23 +20,32 @@
#ifndef IFCEXCEPTION_H
#define IFCEXCEPTION_H
#include "IfcParse_Export.h"
#include <exception>
#include <string>
#ifdef _MSC_VER
// "C4275 can be ignored in Visual C++ if you are deriving from a type in the Standard C++ Library",
// https://msdn.microsoft.com/en-us/library/3tdb471s.aspx
#pragma warning(push)
#pragma warning(disable : 4275)
#endif
namespace IfcParse {
class IfcException : public std::exception {
class IfcParse_EXPORT IfcException : public std::exception {
private:
std::string message;
public:
IfcException(const std::string& m)
: message(m) {}
~IfcException () throw () {}
const char* what() const throw() {
virtual ~IfcException () throw () {}
virtual const char* what() const throw() {
return message.c_str();
}
};
class IfcAttributeOutOfRangeException : public IfcException {
class IfcParse_EXPORT IfcAttributeOutOfRangeException : public IfcException {
public:
IfcAttributeOutOfRangeException(const std::string& e)
: IfcException(e) {}
@@ -44,4 +53,8 @@ namespace IfcParse {
};
}
#ifdef _MSC_VER
#pragma warning(pop)
#endif
#endif
+3 -2
View File
@@ -34,8 +34,9 @@
#include <boost/optional.hpp>
#include "IfcParse_Export.h"
class Logger {
class IfcParse_EXPORT Logger {
public:
typedef enum { LOG_NOTICE, LOG_WARNING, LOG_ERROR } Severity;
private:
@@ -59,4 +60,4 @@ public:
static std::string GetLog();
};
#endif
#endif
+28 -13
View File
@@ -1,22 +1,37 @@
/********************************************************************************
* *
* This file is part of IfcOpenShell. *
* *
* IfcOpenShell is free software: you can redistribute it and/or modify *
* it under the terms of the Lesser GNU General Public License as published by *
* the Free Software Foundation, either version 3.0 of the License, or *
* (at your option) any later version. *
* *
* IfcOpenShell is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* Lesser GNU General Public License for more details. *
* *
* You should have received a copy of the Lesser GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
********************************************************************************/
#ifndef IfcParse_EXPORT_H
#define IfcParse_EXPORT_H
#ifdef IFCPARSE_STATIC_DEFINE
#define IfcParse_EXPORT
#else
#ifdef _WIN32
#ifndef IfcParse_EXPORT
#ifdef IfcParse_EXPORTS
#define IfcParse_EXPORT __declspec(dllexport)
#else
#define IfcParse_EXPORT __declspec(dllimport)
#endif
#ifdef BUILD_SHARED_LIBS
#ifdef _MSC_VER
#ifdef IfcParse_EXPORTS
#define IfcParse_EXPORT __declspec(dllexport)
#else
#define IfcParse_EXPORT __declspec(dllimport)
#endif
#elif __linux__
#else // simply assume GCC-like
#define IfcParse_EXPORT __attribute__((visibility("default")))
#else
#define IfcParse_EXPORT
#endif
#else
#define IfcParse_EXPORT
#endif
#endif
+4 -4
View File
@@ -21,11 +21,11 @@
#define IFCSIPREFIX
#include "../ifcparse/IfcParse.h"
#include "IfcParse_Export.h"
namespace IfcParse {
double IfcSIPrefixToValue(IfcSchema::IfcSIPrefix::IfcSIPrefix);
double get_SI_equivalent(IfcSchema::IfcNamedUnit*);
IfcParse_EXPORT double IfcSIPrefixToValue(IfcSchema::IfcSIPrefix::IfcSIPrefix);
IfcParse_EXPORT double get_SI_equivalent(IfcSchema::IfcNamedUnit*);
}
#endif
#endif
-16
View File
@@ -111,22 +111,6 @@ bool IfcUtil::valid_binary_string(const std::string& s) {
return true;
}
#ifndef IFCPARSE_NO_REGEX
boost::regex IfcUtil::wildcard_string_to_regex(std::string str)
{
// Escape all non-"*?" regex special chars
std::string special_chars = "\\^.$|()[]+/";
foreach(char c, special_chars) {
std::string char_str(1, c);
boost::replace_all(str, char_str, "\\"+ char_str);
}
// Convert "*?" to their regex equivalents
boost::replace_all(str, "?", ".");
boost::replace_all(str, "*", ".*");
return boost::regex(str);
}
#endif
void IfcUtil::sanitate_material_name(std::string &str)
{
// Spaces in material names have been observed to cause problems with obj and dae importers.
+5 -13
View File
@@ -36,9 +36,6 @@
#include <boost/shared_ptr.hpp>
#include <boost/dynamic_bitset.hpp>
#ifndef IFCPARSE_NO_REGEX //allow builds without boost.regex
#include <boost/regex.hpp>
#endif
#include <boost/foreach.hpp>
#define foreach BOOST_FOREACH
@@ -77,7 +74,7 @@ namespace IfcUtil {
Argument_UNKNOWN
};
const char* ArgumentTypeToString(ArgumentType argument_type);
IfcParse_EXPORT const char* ArgumentTypeToString(ArgumentType argument_type);
class IfcParse_EXPORT IfcBaseClass {
public:
@@ -118,16 +115,11 @@ namespace IfcUtil {
IfcSchema::Type::Enum getArgumentEntity(unsigned int /*i*/) const { return IfcSchema::Type::UNDEFINED; }
};
bool valid_binary_string(const std::string& s);
#ifndef IFCPARSE_NO_REGEX
boost::regex wildcard_string_to_regex(std::string str);
#endif
IfcParse_EXPORT bool valid_binary_string(const std::string& s);
/// Replaces spaces and potentially other problem causing characters with underscores.
void sanitate_material_name(std::string &str);
void escape_xml(std::string &str);
void unescape_xml(std::string &str);
IfcParse_EXPORT void sanitate_material_name(std::string &str);
IfcParse_EXPORT void escape_xml(std::string &str);
IfcParse_EXPORT void unescape_xml(std::string &str);
}
template <class T>
+1 -1
View File
@@ -146,7 +146,7 @@ namespace IfcWrite {
// Accumulates all schema instances created from constructors
// This way they can be added in a single batch to the IfcFile
class EntityBuffer {
class IfcParse_EXPORT EntityBuffer {
private:
IfcEntityList::ptr buffer;
static EntityBuffer* i;
+3 -3
View File
@@ -22,11 +22,11 @@
@echo off
set TARGET_ARCH=%1
if "%TARGET_ARCH%"=="" set TARGET_ARCH=x64
if not exist BuildDepsCache-%TARGET_ARCH%.txt. (
echo BuildDepsCache-%TARGET_ARCH%.txt does not exist
if not exist %~dp0BuildDepsCache-%TARGET_ARCH%.txt. (
echo %~dp0BuildDepsCache-%TARGET_ARCH%.txt does not exist
goto :EOF
)
for /f "delims== tokens=1,2" %%G in (BuildDepsCache-%TARGET_ARCH%.txt) do set %%G=%%H
for /f "delims== tokens=1,2" %%G in (%~dp0BuildDepsCache-%TARGET_ARCH%.txt) do set %%G=%%H
if not defined PYTHONHOME (
echo PYTHONHOME PYTHONHOME not defined
goto :EOF