Re-enable setting logical with UNKNOWN in python

This commit is contained in:
Thomas Krijnen
2026-01-15 13:13:51 +01:00
parent 43f78605f2
commit 1f4c4204d0
2 changed files with 22 additions and 0 deletions
@@ -76,3 +76,17 @@ def test_equality():
assert f[1] == g[1]
g[1].Coordinates = (1., 0.)
assert f[1] != g[1]
def test_setting_logical():
f = ifcopenshell.file()
inst = f.createIfcPresentationLayerWithStyle(LayerOn="UNKNOWN")
assert inst.LayerOn == "UNKNOWN"
assert '.U.' in str(inst)
with pytest.raises(Exception):
inst.LayerOn = "SOME_OTHER_STRING"
inst.LayerOn = False
assert inst.LayerOn is False
assert '.F.' in str(inst)
inst.LayerOn = True
assert inst.LayerOn is True
assert '.T.' in str(inst)
+8
View File
@@ -789,6 +789,14 @@ private:
boost::logic::tribool t(boost::logic::indeterminate);
if (PyBool_Check(value)) {
t = (value == Py_True);
} else if (PyUnicode_Check(value)) {
if (PyObject* ascii = PyUnicode_AsEncodedString(value, "UTF-8", "strict")) {
// value is kept as indeterminate
if (strcmp(PyBytes_AS_STRING(ascii), "UNKNOWN") != 0) {
throw IfcParse::IfcException("Attribute not set");
}
Py_DECREF(ascii);
}
} else {
long v = to_index_long(value);
if (v == 0) t = false;