diff --git a/src/ifcparse/IfcUntypedEntity.cpp b/src/ifcparse/IfcUntypedEntity.cpp index 3069eed95b..142799a5a5 100644 --- a/src/ifcparse/IfcUntypedEntity.cpp +++ b/src/ifcparse/IfcUntypedEntity.cpp @@ -65,7 +65,7 @@ void Ifc::IfcUntypedEntity::setArgument(unsigned int i) { bool is_optional = Ifc2x3::Type::GetAttributeOptional(_type, i); if (is_optional) { writable_entity()->setArgument(i); - } else invalid_argument(i,"NONE"); + } else invalid_argument(i,"NULL"); } void Ifc::IfcUntypedEntity::setArgument(unsigned int i, int v) { IfcUtil::ArgumentType arg_type = Ifc2x3::Type::GetAttributeType(_type,i); diff --git a/src/ifcparse/IfcWrite.cpp b/src/ifcparse/IfcWrite.cpp index 4f52e763fd..dda9f7b1a1 100644 --- a/src/ifcparse/IfcWrite.cpp +++ b/src/ifcparse/IfcWrite.cpp @@ -190,7 +190,11 @@ std::string IfcWriteEntityListArgument::toString(bool upper) const { if ( Ifc2x3::Type::IsSimple(e->type()) ) { ss << e->toString(upper); } else { - ss << "#" << e->id(); + if (e->file) { + ss << "#" << e->id(); + } else { + ss << "#?"; + } } } ss << ")"; @@ -323,7 +327,11 @@ std::string IfcWriteIntegralArgument::toString(bool upper) const { if ( Ifc2x3::Type::IsSimple(e->type()) ) { ss << e->toString(upper); } else { - ss << "#" << e->id(); + if (e->file) { + ss << "#" << e->id(); + } else { + ss << "#?"; + } }} break; default: throw IfcParse::IfcException("Invalid cast"); diff --git a/src/ifcwrap/IfcPython.i b/src/ifcwrap/IfcPython.i index 984086209a..0d99710255 100644 --- a/src/ifcwrap/IfcPython.i +++ b/src/ifcwrap/IfcPython.i @@ -41,6 +41,30 @@ %rename("__repr__") toString; %rename("Entity") IfcUntypedEntity; +%typemap(typecheck,precedence=SWIG_TYPECHECK_INTEGER) IfcEntities { + $1 = (PySequence_Check($input) && !PyUnicode_Check($input) && !PyString_Check($input)) ? 1 : 0; +} + +%typemap(in) IfcEntities { + if (PySequence_Check($input)) { + $1 = std::make_shared(); + for(Py_ssize_t i = 0; i < PySequence_Size($input); ++i) { + PyObject* obj = PySequence_GetItem($input, i); + if (obj) { + void *arg = 0; + int res = SWIG_ConvertPtr(obj, &arg, SWIGTYPE_p_Ifc__IfcUntypedEntity, 0); + if (!SWIG_IsOK(res)) { + SWIG_exception_fail(SWIG_ArgError(res), "in method '" "Entity__set_argument" "', argument " "3"" of type '" "Ifc::IfcUntypedEntity *""'"); + } else { + $1->push(reinterpret_cast(arg)); + } + } + } + } else { + SWIG_exception(SWIG_RuntimeError,"Unknown argument type"); + } +} + %typemap(out) IfcEntities { const unsigned size = $1 ? $1->Size() : 0; $result = PyList_New(size);