ifcviewer: filter iterator to net IfcElements, void-limit setting

Mirror bonsai's IfcImporter.process_element_filter so the streamer
walks only IfcElement (plus IfcProxy on IFC2X3/IFC4), drops
IfcFeatureElement except IfcSurfaceFeature, and routes elements
with more openings than the configurable void limit through a
second iterator pass with disable-opening-subtractions=true.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Dion Moult
2026-04-29 08:54:35 +10:00
parent e21bd1ac96
commit b73cdd1a0e
5 changed files with 211 additions and 89 deletions
+8
View File
@@ -47,11 +47,18 @@ public:
bool loadDataSource() const;
void setLoadDataSource(bool value);
// Skip elements with more than this many voids (HasOpenings inverse).
// Boolean subtraction of many openings is the dominant cost in some
// pathological exports; dropping those elements keeps load times sane.
int voidLimit() const;
void setVoidLimit(int value);
signals:
void geometryLibraryChanged(const QString& value);
void showStatsChanged(bool value);
void backfaceCullingChanged(bool value);
void loadDataSourceChanged(bool value);
void voidLimitChanged(int value);
private:
AppSettings();
@@ -62,6 +69,7 @@ private:
bool show_stats_ = false;
bool backface_culling_ = true;
bool load_data_source_ = true;
int void_limit_ = 30;
};
#endif // APPSETTINGS_H