Petru Conduraru
ee2b357d74
IfcParse: serialize REALs with shortest round-trip form #7696
...
format_double formatted doubles with setprecision(max_digits10) (17 digits),
which padded clean values with noise: 0.0174532925199433 was rewritten as
0.017453292519943299 and 1.E-05 as 1.0000000000000001E-05. Every REAL in a file
changed on save, producing enormous diffs for anyone version-controlling IFC.
Use std::to_chars, which emits the shortest string that round-trips exactly
(like Python's repr), then keep the existing mantissa/exponent formatting.
Verified in a standalone compile of the exact function logic: the reporter's
values become 0.0174532925199433 and 1.E-05, 0.1 stays 0.1, and every tested
value (including a denormal) round-trips back to the identical double.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-06 13:14:24 +02:00
Petru Conduraru
d2381ad6c6
IfcParse: don't strip delimiters from a single-character token #5683
...
asStringRef removes the first and last characters of a string, enumeration
or binary token to drop the delimiters, guarded only by !str.empty(). A
malformed single-character token (e.g. a bare '.' left when a fuzzer turns
'.PHYSICAL.' into '.)HYSICAL.') has length 1, so the first erase empties the
string and the second erase(str.begin()) runs on an empty string. That is
undefined behaviour: benign on a normal build, but it aborts (or throws
std::length_error from a later append) under a hardened libstdc++ with
_GLIBCXX_ASSERTIONS, which is why this file only segfaulted on the Fedora
build. Require at least two characters before stripping.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-06 12:28:17 +02:00
Thomas Krijnen
f3dcf0b539
Attempt at less double counting of inverses #7973
2026-06-28 13:42:36 +02:00
Thomas Krijnen
347a3c80bb
More logger changes
2026-06-11 21:09:56 +02:00
Thomas Krijnen
a7738eeb64
Pass around non-static logger instances and programmatic access to messages in-memory
2026-06-10 18:40:17 +02:00
Thomas Krijnen
a751fb956d
Introduce unique error codes
2026-06-10 18:40:17 +02:00
ssg3d
7b4889d2ec
Update IfcParse.cpp
...
IfcOpenshell read file, and write file without changes. This round trip introduces truncation noise. It should not hurt to increase the precision to keep this clean.
2026-02-13 10:03:05 +01:00
Thomas Krijnen
9d437b5bc3
Mark simple type instance file ownership #7226
2025-11-25 09:19:28 +01:00
Thomas Krijnen
1594b9505c
Don't emit Parsing terminated on benign files by not reading past stream in skipComment()
2025-10-25 20:14:02 +02:00
Thomas Krijnen
e82ca0e932
Less back and forths by returning semi count in page
2025-10-25 15:08:21 +02:00
Thomas Krijnen
2e951eb952
Whitespace handling now that token strings are built on the fly
2025-10-25 13:55:15 +02:00
Thomas Krijnen
bcb5fd7810
Missing return type
2025-10-24 13:32:18 +02:00
Thomas Krijnen
0494bd9677
Option to bypass storing types when opening model
2025-10-24 12:06:59 +02:00
Thomas Krijnen
a6d20c0cc4
Follow up after 4d688170e0
2025-10-22 21:42:37 +02:00
Thomas Krijnen
4d688170e0
Storage rework WIP
2025-10-13 20:47:43 +02:00
Thomas Krijnen
e15f222a19
Address segfault #7215 #7185
2025-10-08 14:17:47 +02:00
Thomas Krijnen
5e10e61aca
Clean-up parsed simple types #7185
2025-10-03 14:18:07 +02:00
Andrej730
babf95785c
Move IFCOPENSHELL_VERSION definition from IfcParse.h
...
To prevent recompiling all files that have IfcParse.h include and improve caching.
2025-09-30 19:17:46 +05:00
Thomas Krijnen
06f5ded038
Don't crash on missing schema when loading rdb
2025-09-29 11:29:52 +02:00
Thomas Krijnen
ab59173135
Add a stream2_from_string() (mostly for wasm)
2025-09-23 11:32:52 +02:00
Thomas Krijnen
f659b9bb7b
Fix exception in file.from_string()
2025-09-19 13:24:02 +02:00
Thomas Krijnen
23b48c43a6
Conditional compilation
2025-09-14 13:53:33 +02:00
Thomas Krijnen
9d99de2340
file.reset_identity_cache() function for adv use cases
2025-09-11 13:56:11 +02:00
Thomas Krijnen
e68cc7201c
Call init_locale() when streaming
2025-09-10 21:42:55 +02:00
Thomas Krijnen
be79d3712d
Initialize header after storage
2025-09-10 11:37:17 +02:00
Thomas Krijnen
de8c8d3bed
Rocksdb header parsing
2025-09-10 09:10:59 +02:00
Thomas Krijnen
f8e523daff
h| i| t| serialization consistency
2025-09-10 09:10:32 +02:00
Thomas Krijnen
59a5bf2344
RocksDB zstd encryption; cache tuning; readonly open mode
2025-09-03 11:11:55 +02:00
Thomas Krijnen
a831884ee6
Free rocksdb iterators
2025-09-01 14:32:13 +02:00
Thomas Krijnen
01b64674ab
Init max_id_
2025-09-01 13:25:48 +02:00
Thomas Krijnen
e6ea58cd72
Implement get_inverse_indices on rocksdb
2025-08-31 21:27:21 +02:00
Thomas Krijnen
55e54f0b37
Re-add token offset to failing declaration lookup in order to be picked up by validate.py
2025-08-31 16:01:28 +02:00
Thomas Krijnen
e4d08ce6b7
Don't raise exception in file constructor
2025-08-31 15:52:46 +02:00
Thomas Krijnen
dfaa8d510c
authorisation -> authorization in header schema for compatibility
2025-08-29 16:08:42 +02:00
Thomas Krijnen
93c2a4fe66
That's what you get for not using a visitor
2025-08-29 14:15:58 +02:00
Thomas Krijnen
df726a2d61
Initialization in various other constructor forms
2025-08-29 14:13:21 +02:00
Thomas Krijnen
9330e73a70
Call process_deletion_inverse()
2025-08-29 13:48:00 +02:00
Thomas Krijnen
a73c60a467
Initialize guid map in case of empty file creation
2025-08-29 13:47:48 +02:00
Thomas Krijnen
3245d0af5c
Serialization of header entities with #0=
2025-08-28 11:15:18 +02:00
Thomas Krijnen
a65fa1e606
Fix failing inverse test
2025-08-28 09:37:09 +02:00
Thomas Krijnen
c97a1faecd
Initialize file schema to nullptr, wire up guid map
2025-08-27 15:14:20 +02:00
Thomas Krijnen
96336d6f68
Ugly conditional compilation for without rdb support
2025-08-26 13:56:03 +02:00
Thomas Krijnen
862aa71a77
Left-overs after merge
2025-08-26 10:20:08 +02:00
Thomas Krijnen
e920379ca3
SFINAE for BaseClass*
2025-08-26 10:19:47 +02:00
Thomas Krijnen
9d9e9ed4cb
Merge remote-tracking branch 'origin/v0.8.0' into tfk-rocksdb-storage
2025-08-26 10:17:57 +02:00
Thomas Krijnen
d2c7c1532c
Implement streaming scan through file and use in rocksdb serializer and python
2025-08-25 12:45:10 +02:00
Thomas Krijnen
2949a86f09
Properly initialize stream::eof #7045
2025-08-21 10:00:44 +02:00
Thomas Krijnen
952400bd58
Support defined types with instance references in parser (IfcPropertySetDefinitionSet; #6330 )
2025-04-11 15:52:40 +02:00
Andrej730
0d7439c7a5
ifcopenshell.validate to catch invalid entities used in entities attributes #6409
...
Example
```
For instance:
# 1 =IFCCARTESIANPOINT((5.,5.,nan.));
Entity with name 'nan.' not found in schema 'IFC4'
```
2025-03-25 18:15:37 +05:00
Thomas Krijnen
c935b2fc12
Merge branch 'v0.8.0' into tfk-rocksdb-storage
2025-03-25 13:05:45 +01:00