web-ifc-three
web-ifc-three copied to clipboard
writeLine Issue: "Line object cannot be serialized" issue when trying to write ANY line via the ifcApi
Currently it is not possible to write (even unchanged lines) back to the model, this is due to a typo in the IFCWorker.js:87227
as you can clearly see there is a check for expressID
, type
and ToType
[sic] -> ToType
does not exist within a line Object and the code below states that it was actually meant to be ToTape
, once you change the clause to ToTape
it works just fine.
if (lineObject.expressID == void 0 || lineObject.type == void 0 || lineObject.ToType === void 0) {
console.warn("Line object cannot be serialized: ", lineObject);
return;
}
let rawLineData = {
ID: lineObject.expressID,
type: lineObject.type,
arguments: lineObject.ToTape()
};
this.WriteRawLineData(modelID, rawLineData);
-Hi, i use [email protected] and [email protected]. I customized function "WriteLine", and did not use ifcworker.js(multi threading). Here is my code and it worked for me. WriteLine(modelID, lineObject) { var _this = this; const ifcAPI = this.ifcManager.ifc.ifcAPI; Object.keys(lineObject).forEach((propertyName) => { let property = lineObject[propertyName]; if (property && property.expressID !== void 0) { _this.WriteLine(modelID, property); lineObject[propertyName] = { type: 5, value: property.expressID, }; } else if (Array.isArray(property) && property.length > 0) { for (let i = 0; i < property.length; i++) { if (property[i].expressID !== void 0) { _this.WriteLine(modelID, property[i]); lineObject[propertyName][i] = { type: 5, value: property[i].expressID, }; } } } });
let rawLineData = {
ID: lineObject.expressID,
type: lineObject.type,
arguments: lineObject.ToTape(),
};
ifcAPI.WriteRawLineData(modelID, rawLineData);
}