pycadkit 0.3.1__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pycadkit-0.3.1 → pycadkit-0.3.2}/Cargo.lock +10 -10
- {pycadkit-0.3.1 → pycadkit-0.3.2}/Cargo.toml +7 -7
- {pycadkit-0.3.1 → pycadkit-0.3.2}/PKG-INFO +1 -1
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tables.rs +42 -4
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests/regressions.rs +88 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/examples/interchange.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/aci.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/bytes.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/error.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/export.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/geom.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/geom_ops.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/model.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/ops.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/options.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/polygon.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/svg.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/text.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-core/src/units.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/examples/dgn_summary.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/examples/raster_structure.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/budget.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/cfb.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/fuzz_tests.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/le.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/level_names.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/map/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/map/v7.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/map/v8.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/native/decode_v8.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/native/element.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/native/linkage.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/native/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/native/v7.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/native/v8.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/palette.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/text.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/container.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/encode.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/polyline.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/raster.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/raster_template.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests/application.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests/microstation.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests/raster.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests/raster_template.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests/text.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/tests.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/writer/text.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/src/zlib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/common/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/private_corpus.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/robustness.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/v7_corpus.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/v8_oracle.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/v8_public.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dgn/tests/v8_range.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/examples/docsummary.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/examples/dwgdump.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/bits.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/classes.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/codepage.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/lz77_r2004.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/lz77_r2007.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/r13.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/r2004.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/r2007.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/container/reed_solomon.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/crc.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/handles.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/header.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/mapping/entity.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/mapping/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/native/entities.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/native/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/annotation.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/curves.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/entities.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/hatch.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/misc.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/registry.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/object/tables.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/reader.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/src/version.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/tests/corpus.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/tests/oracle.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dwg/tests/robustness.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/examples/dump.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/native/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/native/text.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/ocs.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/reader/common.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/reader/entities.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/reader/hatch.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/reader/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/reader/records.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/reader/tables.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/writer/curves.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/writer/entities.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/writer/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/src/writer/out.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/ascii_vs_binary.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/common/mod.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/compare_reader_with_ezdxf.py +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/review_fixes.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/robustness.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/roundtrip.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/synthetic_read.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/synthetic_write.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-dxf/tests/validate_with_ezdxf.py +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/curves.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/export.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/geometry.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/mapping.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/native.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/tkgm.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/validate.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/src/xml.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/tests/roundtrip.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/tests/support/export_cases.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-gml/tests/support/tkgm_cases.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/Cargo.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/LICENSE-APACHE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/LICENSE-MIT +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/NOTICE +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/README.md +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/src/lib.rs +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/tests/conftest.py +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/tests/test_cadkit.py +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/crates/cadkit-py/tests/test_citygml.py +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/pyproject.toml +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/python/cadkit/__init__.py +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/python/cadkit/__init__.pyi +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/python/cadkit/_cadkit.pyi +0 -0
- {pycadkit-0.3.1 → pycadkit-0.3.2}/python/cadkit/py.typed +0 -0
|
@@ -66,7 +66,7 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
|
|
|
66
66
|
|
|
67
67
|
[[package]]
|
|
68
68
|
name = "cadkit"
|
|
69
|
-
version = "0.3.
|
|
69
|
+
version = "0.3.2"
|
|
70
70
|
dependencies = [
|
|
71
71
|
"cadkit-core",
|
|
72
72
|
"cadkit-dgn",
|
|
@@ -78,7 +78,7 @@ dependencies = [
|
|
|
78
78
|
|
|
79
79
|
[[package]]
|
|
80
80
|
name = "cadkit-capi"
|
|
81
|
-
version = "0.3.
|
|
81
|
+
version = "0.3.2"
|
|
82
82
|
dependencies = [
|
|
83
83
|
"cadkit",
|
|
84
84
|
"serde",
|
|
@@ -87,7 +87,7 @@ dependencies = [
|
|
|
87
87
|
|
|
88
88
|
[[package]]
|
|
89
89
|
name = "cadkit-cli"
|
|
90
|
-
version = "0.3.
|
|
90
|
+
version = "0.3.2"
|
|
91
91
|
dependencies = [
|
|
92
92
|
"cadkit",
|
|
93
93
|
"clap",
|
|
@@ -96,7 +96,7 @@ dependencies = [
|
|
|
96
96
|
|
|
97
97
|
[[package]]
|
|
98
98
|
name = "cadkit-core"
|
|
99
|
-
version = "0.3.
|
|
99
|
+
version = "0.3.2"
|
|
100
100
|
dependencies = [
|
|
101
101
|
"serde",
|
|
102
102
|
"serde_json",
|
|
@@ -105,7 +105,7 @@ dependencies = [
|
|
|
105
105
|
|
|
106
106
|
[[package]]
|
|
107
107
|
name = "cadkit-dgn"
|
|
108
|
-
version = "0.3.
|
|
108
|
+
version = "0.3.2"
|
|
109
109
|
dependencies = [
|
|
110
110
|
"cadkit-core",
|
|
111
111
|
"cfb",
|
|
@@ -116,7 +116,7 @@ dependencies = [
|
|
|
116
116
|
|
|
117
117
|
[[package]]
|
|
118
118
|
name = "cadkit-dwg"
|
|
119
|
-
version = "0.3.
|
|
119
|
+
version = "0.3.2"
|
|
120
120
|
dependencies = [
|
|
121
121
|
"cadkit-core",
|
|
122
122
|
"cadkit-dxf",
|
|
@@ -126,7 +126,7 @@ dependencies = [
|
|
|
126
126
|
|
|
127
127
|
[[package]]
|
|
128
128
|
name = "cadkit-dxf"
|
|
129
|
-
version = "0.3.
|
|
129
|
+
version = "0.3.2"
|
|
130
130
|
dependencies = [
|
|
131
131
|
"cadkit-core",
|
|
132
132
|
"encoding_rs",
|
|
@@ -135,7 +135,7 @@ dependencies = [
|
|
|
135
135
|
|
|
136
136
|
[[package]]
|
|
137
137
|
name = "cadkit-gml"
|
|
138
|
-
version = "0.3.
|
|
138
|
+
version = "0.3.2"
|
|
139
139
|
dependencies = [
|
|
140
140
|
"cadkit-core",
|
|
141
141
|
"quick-xml",
|
|
@@ -145,7 +145,7 @@ dependencies = [
|
|
|
145
145
|
|
|
146
146
|
[[package]]
|
|
147
147
|
name = "cadkit-py"
|
|
148
|
-
version = "0.3.
|
|
148
|
+
version = "0.3.2"
|
|
149
149
|
dependencies = [
|
|
150
150
|
"cadkit",
|
|
151
151
|
"pyo3",
|
|
@@ -155,7 +155,7 @@ dependencies = [
|
|
|
155
155
|
|
|
156
156
|
[[package]]
|
|
157
157
|
name = "cadkit-wasm"
|
|
158
|
-
version = "0.3.
|
|
158
|
+
version = "0.3.2"
|
|
159
159
|
dependencies = [
|
|
160
160
|
"cadkit",
|
|
161
161
|
"js-sys",
|
|
@@ -4,7 +4,7 @@ members = ["crates/*"]
|
|
|
4
4
|
exclude = ["fuzz"]
|
|
5
5
|
|
|
6
6
|
[workspace.package]
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.2"
|
|
8
8
|
edition = "2024"
|
|
9
9
|
rust-version = "1.85"
|
|
10
10
|
license = "MIT OR Apache-2.0"
|
|
@@ -14,12 +14,12 @@ keywords = ["cad", "dwg", "dgn", "dxf", "citygml"]
|
|
|
14
14
|
categories = ["parser-implementations", "graphics", "encoding", "science::geo"]
|
|
15
15
|
|
|
16
16
|
[workspace.dependencies]
|
|
17
|
-
cadkit-core = { path = "crates/cadkit-core", version = "0.3.
|
|
18
|
-
cadkit-dgn = { path = "crates/cadkit-dgn", version = "0.3.
|
|
19
|
-
cadkit-dwg = { path = "crates/cadkit-dwg", version = "0.3.
|
|
20
|
-
cadkit-dxf = { path = "crates/cadkit-dxf", version = "0.3.
|
|
21
|
-
cadkit-gml = { path = "crates/cadkit-gml", version = "0.3.
|
|
22
|
-
cadkit = { path = "crates/cadkit", version = "0.3.
|
|
17
|
+
cadkit-core = { path = "crates/cadkit-core", version = "0.3.2" }
|
|
18
|
+
cadkit-dgn = { path = "crates/cadkit-dgn", version = "0.3.2" }
|
|
19
|
+
cadkit-dwg = { path = "crates/cadkit-dwg", version = "0.3.2" }
|
|
20
|
+
cadkit-dxf = { path = "crates/cadkit-dxf", version = "0.3.2" }
|
|
21
|
+
cadkit-gml = { path = "crates/cadkit-gml", version = "0.3.2" }
|
|
22
|
+
cadkit = { path = "crates/cadkit", version = "0.3.2" }
|
|
23
23
|
serde = { version = "1", features = ["derive"] }
|
|
24
24
|
serde_json = "1"
|
|
25
25
|
thiserror = "2"
|
|
@@ -42,12 +42,50 @@ impl Tables {
|
|
|
42
42
|
changed_sets: BTreeMap::new(),
|
|
43
43
|
};
|
|
44
44
|
let mut level_names = HashSet::new();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
let read_record = |raw: &RawElement| {
|
|
46
|
+
decode_v8::decode(
|
|
47
|
+
raw,
|
|
48
48
|
crate::text::encoding_for(read.fallback_codepage.as_deref()),
|
|
49
49
|
&read.limits,
|
|
50
|
-
)
|
|
50
|
+
)
|
|
51
|
+
};
|
|
52
|
+
let records: Vec<RawElement> = records.collect();
|
|
53
|
+
// Some seeds (files a 3D post-processor touched) carry a second level table
|
|
54
|
+
// whose codes repeat codes of the first one. Elements store the code only, so
|
|
55
|
+
// a repeated code makes readers show new elements on the other table's level.
|
|
56
|
+
// Later definitions of a code move to free codes after the highest one, and the
|
|
57
|
+
// extra table headers are dropped: the output has one table with unique codes.
|
|
58
|
+
let mut free_level = records
|
|
59
|
+
.iter()
|
|
60
|
+
.filter_map(|raw| match read_record(raw).data {
|
|
61
|
+
ElementData::Level(level) => Some(level.id),
|
|
62
|
+
_ => None,
|
|
63
|
+
})
|
|
64
|
+
.max()
|
|
65
|
+
.unwrap_or(0);
|
|
66
|
+
let mut level_codes = HashSet::new();
|
|
67
|
+
let mut level_header = false;
|
|
68
|
+
for mut raw in records {
|
|
69
|
+
let is_level_header = crate::le::u32_at(&raw.bytes, 0).map(|v| v & 0xffff) == Some(96)
|
|
70
|
+
&& crate::le::u32_at(&raw.bytes, 12) == Some(1);
|
|
71
|
+
if is_level_header {
|
|
72
|
+
if level_header {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
level_header = true;
|
|
76
|
+
}
|
|
77
|
+
let mut e = read_record(&raw);
|
|
78
|
+
if let ElementData::Level(level) = &mut e.data
|
|
79
|
+
&& !level_codes.insert(level.id)
|
|
80
|
+
&& crate::le::u32_at(&raw.bytes, 0x20) == Some(level.id)
|
|
81
|
+
{
|
|
82
|
+
free_level = free_level
|
|
83
|
+
.checked_add(1)
|
|
84
|
+
.ok_or_else(|| Error::LimitExceeded("DGN levels".into()))?;
|
|
85
|
+
u32_at(&mut raw.bytes, 0x20, free_level)?;
|
|
86
|
+
level.id = free_level;
|
|
87
|
+
level_codes.insert(free_level);
|
|
88
|
+
}
|
|
51
89
|
match e.data {
|
|
52
90
|
ElementData::Font { number, name } => {
|
|
53
91
|
out.fonts.insert(name, number);
|
|
@@ -297,3 +297,91 @@ fn literal_names_cannot_collide_with_generated_level_aliases() {
|
|
|
297
297
|
(2, Some("Shared")),
|
|
298
298
|
]);
|
|
299
299
|
}
|
|
300
|
+
|
|
301
|
+
/// A seed whose second level table (as left by a 3D post-processor) repeats the codes of
|
|
302
|
+
/// the first one: elements written on a first-table level must read back on that level.
|
|
303
|
+
#[test]
|
|
304
|
+
fn a_second_level_table_with_repeated_codes_cannot_capture_new_elements() {
|
|
305
|
+
let level = |id: u64, code: u32, name: &str| {
|
|
306
|
+
let mut b = prefix(95, 0x30, id, 1, 0.).unwrap();
|
|
307
|
+
u32_at(&mut b, 0x20, code).unwrap();
|
|
308
|
+
u32_at(&mut b, 0x24, u32::MAX).unwrap();
|
|
309
|
+
finish(b, &string_link(1, name).unwrap()).unwrap()
|
|
310
|
+
};
|
|
311
|
+
let header = |id: u64, count: u32| {
|
|
312
|
+
let mut b = prefix(96, 0x28, id, 1, 0.).unwrap();
|
|
313
|
+
u32_at(&mut b, 0x20, count).unwrap();
|
|
314
|
+
finish(b, &[]).unwrap()
|
|
315
|
+
};
|
|
316
|
+
let first = vec![
|
|
317
|
+
header(90, 3),
|
|
318
|
+
level(100, 1, "Frame"),
|
|
319
|
+
level(101, 2, "Area"),
|
|
320
|
+
level(102, 64, "Default"),
|
|
321
|
+
];
|
|
322
|
+
let second = vec![
|
|
323
|
+
header(200, 2),
|
|
324
|
+
level(201, 1, "Temp"),
|
|
325
|
+
level(202, 2, "Surface"),
|
|
326
|
+
];
|
|
327
|
+
let mut file = ::cfb::CompoundFile::open(Cursor::new(seed(false))).unwrap();
|
|
328
|
+
file.create_storage_all("Dgn^Nm").unwrap();
|
|
329
|
+
for (path, records) in [("Dgn^Nm/$1", &first), ("Dgn^Nm/$2", &second)] {
|
|
330
|
+
file.create_stream(path)
|
|
331
|
+
.unwrap()
|
|
332
|
+
.write_all(&page(records, 3, 1).unwrap())
|
|
333
|
+
.unwrap();
|
|
334
|
+
}
|
|
335
|
+
file.flush().unwrap();
|
|
336
|
+
let seed = file.into_inner().into_inner();
|
|
337
|
+
|
|
338
|
+
let mut doc = crate::read(&seed, &ReadOptions::default()).unwrap();
|
|
339
|
+
doc.models[0].entities = ["Frame", "Area"]
|
|
340
|
+
.into_iter()
|
|
341
|
+
.map(|name| {
|
|
342
|
+
let mut entity = line();
|
|
343
|
+
entity.layer = Some(name.into());
|
|
344
|
+
entity
|
|
345
|
+
})
|
|
346
|
+
.collect();
|
|
347
|
+
let bytes = write_v8(&doc, &seed, &WriteOptions::default()).unwrap();
|
|
348
|
+
let parsed = crate::read(&bytes, &ReadOptions::default()).unwrap();
|
|
349
|
+
let layers: Vec<_> = parsed.models[0]
|
|
350
|
+
.entities
|
|
351
|
+
.iter()
|
|
352
|
+
.map(|e| e.layer.clone().unwrap())
|
|
353
|
+
.collect();
|
|
354
|
+
assert_eq!(layers, ["Frame", "Area"]);
|
|
355
|
+
|
|
356
|
+
let native = v8::read(&bytes, &ReadOptions::default()).unwrap();
|
|
357
|
+
let records: Vec<_> = native
|
|
358
|
+
.named_pages
|
|
359
|
+
.iter()
|
|
360
|
+
.flat_map(|p| &p.elements)
|
|
361
|
+
.collect();
|
|
362
|
+
let headers: Vec<_> = records
|
|
363
|
+
.iter()
|
|
364
|
+
.filter(|e| {
|
|
365
|
+
crate::le::u32_at(&e.bytes, 0).map(|n| n & 0xffff) == Some(96)
|
|
366
|
+
&& crate::le::u32_at(&e.bytes, 12) == Some(1)
|
|
367
|
+
})
|
|
368
|
+
.collect();
|
|
369
|
+
assert_eq!(headers.len(), 1, "one level table");
|
|
370
|
+
let codes: Vec<_> = records
|
|
371
|
+
.iter()
|
|
372
|
+
.filter(|e| e.type_code() == 95 && crate::le::u32_at(&e.bytes, 12) == Some(1))
|
|
373
|
+
.filter_map(|e| crate::le::u32_at(&e.bytes, 0x20))
|
|
374
|
+
.collect();
|
|
375
|
+
let unique: BTreeSet<_> = codes.iter().collect();
|
|
376
|
+
assert_eq!(
|
|
377
|
+
unique.len(),
|
|
378
|
+
codes.len(),
|
|
379
|
+
"level codes are unique: {codes:?}"
|
|
380
|
+
);
|
|
381
|
+
assert_eq!(
|
|
382
|
+
crate::le::u32_at(&headers[0].bytes, 0x20),
|
|
383
|
+
Some(codes.len() as u32)
|
|
384
|
+
);
|
|
385
|
+
// The second table's levels are kept under fresh codes.
|
|
386
|
+
assert!(parsed.layers.iter().any(|l| l.name.starts_with("Temp")));
|
|
387
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|