2015-01-05 14:11:42 +00:00
|
|
|
###############################################################################
|
|
|
|
|
# #
|
|
|
|
|
# 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/>. #
|
|
|
|
|
# #
|
|
|
|
|
###############################################################################
|
|
|
|
|
|
2017-11-01 10:41:27 +01:00
|
|
|
from __future__ import absolute_import
|
|
|
|
|
from __future__ import division
|
2016-06-22 15:03:18 +02:00
|
|
|
from __future__ import print_function
|
|
|
|
|
|
2015-01-05 14:11:42 +00:00
|
|
|
import os
|
2015-02-19 13:37:37 +00:00
|
|
|
import sys
|
|
|
|
|
|
2020-11-01 20:08:27 +07:00
|
|
|
if hasattr(os, "uname"):
|
2017-03-09 10:16:22 +01:00
|
|
|
platform_system = os.uname()[0].lower()
|
|
|
|
|
else:
|
2020-11-01 20:08:27 +07:00
|
|
|
platform_system = "windows"
|
2017-11-06 09:10:28 +01:00
|
|
|
|
2017-03-09 10:16:22 +01:00
|
|
|
if sys.maxsize == (1 << 31) - 1:
|
2020-11-01 20:08:27 +07:00
|
|
|
platform_architecture = "32bit"
|
2017-03-09 10:16:22 +01:00
|
|
|
else:
|
2020-11-01 20:08:27 +07:00
|
|
|
platform_architecture = "64bit"
|
2017-11-06 09:10:28 +01:00
|
|
|
|
2020-11-01 20:08:27 +07:00
|
|
|
python_version_tuple = tuple(sys.version.split(" ")[0].split("."))
|
2017-03-09 10:16:22 +01:00
|
|
|
|
2020-11-01 20:08:27 +07:00
|
|
|
python_distribution = os.path.join(platform_system, platform_architecture, "python%s.%s" % python_version_tuple[:2])
|
|
|
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "lib", python_distribution)))
|
2015-02-19 13:37:37 +00:00
|
|
|
|
|
|
|
|
try:
|
2016-07-18 15:53:20 +02:00
|
|
|
from . import ifcopenshell_wrapper
|
2016-06-22 15:03:18 +02:00
|
|
|
except Exception as e:
|
2017-03-09 10:16:22 +01:00
|
|
|
if int(python_version_tuple[0]) == 2:
|
|
|
|
|
# Only for py2, as py3 has exception chaining
|
2016-06-22 15:03:18 +02:00
|
|
|
import traceback
|
2017-11-06 11:06:40 +01:00
|
|
|
|
2016-06-22 15:03:18 +02:00
|
|
|
traceback.print_exc()
|
2020-11-01 20:08:27 +07:00
|
|
|
print("-" * 64)
|
2016-07-18 15:53:20 +02:00
|
|
|
raise ImportError("IfcOpenShell not built for '%s'" % python_distribution)
|
2017-11-06 09:10:28 +01:00
|
|
|
|
2016-06-22 15:03:18 +02:00
|
|
|
from . import guid
|
|
|
|
|
from .file import file
|
|
|
|
|
from .entity_instance import entity_instance
|
2015-01-05 14:11:42 +00:00
|
|
|
|
2021-02-15 11:11:14 +01:00
|
|
|
READ_ERROR = ifcopenshell_wrapper.file_open_status.READ_ERROR
|
|
|
|
|
NO_HEADER = ifcopenshell_wrapper.file_open_status.NO_HEADER
|
|
|
|
|
UNSUPPORTED_SCHEMA = ifcopenshell_wrapper.file_open_status.UNSUPPORTED_SCHEMA
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Error(Exception):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class SchemaError(Error):
|
|
|
|
|
pass
|
|
|
|
|
|
2017-11-06 09:10:28 +01:00
|
|
|
|
2017-12-31 12:20:13 +01:00
|
|
|
def open(fn):
|
2018-01-01 11:22:12 +01:00
|
|
|
f = ifcopenshell_wrapper.open(os.path.abspath(fn))
|
|
|
|
|
if f.good():
|
|
|
|
|
return file(f)
|
|
|
|
|
else:
|
2021-02-15 11:11:14 +01:00
|
|
|
exc, msg = {
|
|
|
|
|
READ_ERROR: (IOError, "Unable to open file for reading"),
|
|
|
|
|
NO_HEADER: (Error, "Unable to parse IFC SPF header"),
|
|
|
|
|
UNSUPPORTED_SCHEMA: (
|
|
|
|
|
SchemaError,
|
|
|
|
|
"Unsupported schema: %s" % ",".join(f.header.file_schema.schema_identifiers),
|
|
|
|
|
),
|
|
|
|
|
}[f.good().value()]
|
|
|
|
|
raise exc(msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def create_entity(type, schema="IFC4", *args, **kwargs):
|
2021-01-09 11:59:34 +01:00
|
|
|
e = entity_instance((schema, type))
|
2020-11-01 20:08:27 +07:00
|
|
|
attrs = list(enumerate(args)) + [(e.wrapped_data.get_argument_index(name), arg) for name, arg in kwargs.items()]
|
2017-11-06 09:10:28 +01:00
|
|
|
for idx, arg in attrs:
|
|
|
|
|
e[idx] = arg
|
2016-07-18 15:53:20 +02:00
|
|
|
return e
|
2020-11-01 20:08:27 +07:00
|
|
|
|
|
|
|
|
|
2020-09-08 14:40:27 +02:00
|
|
|
gcroot = []
|
2020-11-01 20:08:27 +07:00
|
|
|
|
|
|
|
|
|
2020-09-08 14:40:27 +02:00
|
|
|
def register_schema(schema):
|
|
|
|
|
gcroot.append(schema)
|
|
|
|
|
ifcopenshell_wrapper.register_schema(schema.schema)
|
2017-11-06 09:10:28 +01:00
|
|
|
|
2020-11-01 20:08:27 +07:00
|
|
|
|
2017-10-06 16:05:55 +02:00
|
|
|
from .main import *
|