pycadkit 0.2.0__tar.gz → 0.2.1__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.2.0 → pycadkit-0.2.1}/Cargo.lock +10 -10
- {pycadkit-0.2.0 → pycadkit-0.2.1}/Cargo.toml +7 -7
- {pycadkit-0.2.0 → pycadkit-0.2.1}/PKG-INFO +1 -1
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/encode.rs +26 -12
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/mod.rs +84 -35
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/tables.rs +73 -2
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/tests/application.rs +43 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/tests/raster.rs +1 -1
- pycadkit-0.2.1/crates/cadkit-dgn/src/writer/tests/text.rs +358 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/text.rs +34 -1
- pycadkit-0.2.0/crates/cadkit-dgn/src/writer/tests/text.rs +0 -113
- {pycadkit-0.2.0 → pycadkit-0.2.1}/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/examples/interchange.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/aci.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/bytes.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/error.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/export.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/geom.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/geom_ops.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/model.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/ops.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/options.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/polygon.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/svg.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/text.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-core/src/units.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/examples/dgn_summary.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/examples/raster_structure.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/budget.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/cfb.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/fuzz_tests.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/le.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/level_names.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/map/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/map/v7.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/map/v8.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/native/decode_v8.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/native/element.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/native/linkage.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/native/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/native/v7.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/native/v8.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/palette.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/text.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/container.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/polyline.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/raster.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/tests/regressions.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/writer/tests.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/src/zlib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/tests/common/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/tests/private_corpus.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/tests/robustness.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/tests/v7_corpus.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/tests/v8_oracle.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dgn/tests/v8_public.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/examples/docsummary.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/examples/dwgdump.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/bits.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/classes.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/codepage.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/lz77_r2004.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/lz77_r2007.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/r13.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/r2004.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/r2007.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/container/reed_solomon.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/crc.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/handles.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/header.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/mapping/entity.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/mapping/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/native/entities.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/native/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/annotation.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/curves.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/entities.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/hatch.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/misc.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/registry.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/object/tables.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/reader.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/src/version.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/tests/corpus.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/tests/oracle.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dwg/tests/robustness.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/examples/dump.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/native/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/native/text.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/ocs.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/reader/common.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/reader/entities.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/reader/hatch.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/reader/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/reader/records.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/reader/tables.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/writer/curves.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/writer/entities.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/writer/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/src/writer/out.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/ascii_vs_binary.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/common/mod.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/compare_reader_with_ezdxf.py +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/review_fixes.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/robustness.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/roundtrip.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/synthetic_read.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/synthetic_write.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-dxf/tests/validate_with_ezdxf.py +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/curves.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/export.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/geometry.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/mapping.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/native.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/tkgm.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/validate.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/src/xml.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/tests/roundtrip.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/tests/support/export_cases.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-gml/tests/support/tkgm_cases.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/Cargo.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/LICENSE-APACHE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/LICENSE-MIT +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/NOTICE +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/README.md +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/src/lib.rs +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/tests/conftest.py +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/tests/test_cadkit.py +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/crates/cadkit-py/tests/test_citygml.py +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/pyproject.toml +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/python/cadkit/__init__.py +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/python/cadkit/__init__.pyi +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/python/cadkit/_cadkit.pyi +0 -0
- {pycadkit-0.2.0 → pycadkit-0.2.1}/python/cadkit/py.typed +0 -0
|
@@ -66,7 +66,7 @@ checksum = "72f5acc6cb2ba439de613abc23857ec3d78374d8ed5ac84e9d11336e87da8649"
|
|
|
66
66
|
|
|
67
67
|
[[package]]
|
|
68
68
|
name = "cadkit"
|
|
69
|
-
version = "0.2.
|
|
69
|
+
version = "0.2.1"
|
|
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.2.
|
|
81
|
+
version = "0.2.1"
|
|
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.2.
|
|
90
|
+
version = "0.2.1"
|
|
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.2.
|
|
99
|
+
version = "0.2.1"
|
|
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.2.
|
|
108
|
+
version = "0.2.1"
|
|
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.2.
|
|
119
|
+
version = "0.2.1"
|
|
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.2.
|
|
129
|
+
version = "0.2.1"
|
|
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.2.
|
|
138
|
+
version = "0.2.1"
|
|
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.2.
|
|
148
|
+
version = "0.2.1"
|
|
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.2.
|
|
158
|
+
version = "0.2.1"
|
|
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.2.
|
|
7
|
+
version = "0.2.1"
|
|
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.2.
|
|
18
|
-
cadkit-dgn = { path = "crates/cadkit-dgn", version = "0.2.
|
|
19
|
-
cadkit-dwg = { path = "crates/cadkit-dwg", version = "0.2.
|
|
20
|
-
cadkit-dxf = { path = "crates/cadkit-dxf", version = "0.2.
|
|
21
|
-
cadkit-gml = { path = "crates/cadkit-gml", version = "0.2.
|
|
22
|
-
cadkit = { path = "crates/cadkit", version = "0.2.
|
|
17
|
+
cadkit-core = { path = "crates/cadkit-core", version = "0.2.1" }
|
|
18
|
+
cadkit-dgn = { path = "crates/cadkit-dgn", version = "0.2.1" }
|
|
19
|
+
cadkit-dwg = { path = "crates/cadkit-dwg", version = "0.2.1" }
|
|
20
|
+
cadkit-dxf = { path = "crates/cadkit-dxf", version = "0.2.1" }
|
|
21
|
+
cadkit-gml = { path = "crates/cadkit-gml", version = "0.2.1" }
|
|
22
|
+
cadkit = { path = "crates/cadkit", version = "0.2.1" }
|
|
23
23
|
serde = { version = "1", features = ["derive"] }
|
|
24
24
|
serde_json = "1"
|
|
25
25
|
thiserror = "2"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
//! Belgelenmiş V8 öğe alanlarının sınır denetimli kodlayıcısı.
|
|
2
2
|
|
|
3
3
|
use crate::native::v8::ModelHeader;
|
|
4
|
-
use cadkit_core::{Entity, Error,
|
|
4
|
+
use cadkit_core::{Entity, Error, Point3, Result, Value, Vec3};
|
|
5
5
|
|
|
6
6
|
pub(super) fn put(b: &mut [u8], offset: usize, value: &[u8]) -> Result<()> {
|
|
7
7
|
let end = offset
|
|
@@ -62,6 +62,7 @@ pub(super) fn prefix(kind: u32, size: usize, id: u64, level: u32, time: f64) ->
|
|
|
62
62
|
Ok(b)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
+
#[allow(clippy::too_many_arguments)]
|
|
65
66
|
pub(super) fn header(
|
|
66
67
|
kind: u32,
|
|
67
68
|
size: usize,
|
|
@@ -70,6 +71,7 @@ pub(super) fn header(
|
|
|
70
71
|
time: f64,
|
|
71
72
|
entity: &Entity,
|
|
72
73
|
three: bool,
|
|
74
|
+
weight: u32,
|
|
73
75
|
) -> Result<Vec<u8>> {
|
|
74
76
|
let mut b = prefix(kind | 0x1000_0000, size, id, level, time)?;
|
|
75
77
|
let hole = matches!(entity.props.get("dgn.hole"), Some(Value::Bool(true)));
|
|
@@ -99,17 +101,6 @@ pub(super) fn header(
|
|
|
99
101
|
u32::try_from(*n).map_err(|_| Error::invalid(0, "DGN style"))?,
|
|
100
102
|
)?;
|
|
101
103
|
}
|
|
102
|
-
let weight = match entity.props.get("dgn.weight") {
|
|
103
|
-
Some(Value::Int(n)) => u32::try_from(*n).map_err(|_| Error::invalid(0, "DGN weight"))?,
|
|
104
|
-
_ => match entity.lineweight {
|
|
105
|
-
Lineweight::Millimeters(_) => {
|
|
106
|
-
return Err(Error::Unsupported(
|
|
107
|
-
"DGN lineweight requires dgn.weight index".into(),
|
|
108
|
-
));
|
|
109
|
-
}
|
|
110
|
-
_ => 0,
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
104
|
u32_at(&mut b, 0x30, weight)?;
|
|
114
105
|
Ok(b)
|
|
115
106
|
}
|
|
@@ -160,6 +151,29 @@ pub(super) fn range(b: &mut [u8], points: &[[f64; 3]]) -> Result<()> {
|
|
|
160
151
|
Ok(())
|
|
161
152
|
}
|
|
162
153
|
|
|
154
|
+
/// Absolute bounds for generated records; type-17 stores a relative high span.
|
|
155
|
+
pub(super) fn absolute_range(b: &[u8]) -> Result<[[i64; 3]; 2]> {
|
|
156
|
+
let text = crate::le::u32_at(b, 0).is_some_and(|kind| kind & 0xffff == 17);
|
|
157
|
+
let mut low = [0; 3];
|
|
158
|
+
let mut high = [0; 3];
|
|
159
|
+
for (axis, (lo, hi)) in low.iter_mut().zip(high.iter_mut()).enumerate() {
|
|
160
|
+
*lo = crate::le::i64_at(b, 0x38 + axis * 8)
|
|
161
|
+
.ok_or_else(|| Error::invalid(0, "short DGN record range"))?;
|
|
162
|
+
let stored_high = crate::le::i64_at(b, 0x50 + axis * 8)
|
|
163
|
+
.ok_or_else(|| Error::invalid(0, "short DGN record range"))?;
|
|
164
|
+
*hi = if text {
|
|
165
|
+
if stored_high < 0 {
|
|
166
|
+
return Err(Error::invalid(0, "negative DGN text range span"));
|
|
167
|
+
}
|
|
168
|
+
lo.checked_add(stored_high)
|
|
169
|
+
.ok_or_else(|| Error::invalid(0, "DGN text range high overflow"))?
|
|
170
|
+
} else {
|
|
171
|
+
stored_high
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
Ok([low, high])
|
|
175
|
+
}
|
|
176
|
+
|
|
163
177
|
pub(super) fn utf16(value: &str) -> Result<Vec<u8>> {
|
|
164
178
|
if value.contains('\0') {
|
|
165
179
|
return Err(Error::invalid(0, "embedded NUL in DGN string"));
|
|
@@ -203,15 +203,24 @@ pub fn write_v8(doc: &Document, seed: &[u8], options: &WriteOptions) -> Result<V
|
|
|
203
203
|
}
|
|
204
204
|
let max_id = max_id.max(le::u64_at(&seed_header.data, 0x128).unwrap_or(0));
|
|
205
205
|
let rasters = raster::Preserved::prepare(doc, seed, model, &read, options)?;
|
|
206
|
+
let mut tables = Tables::new(
|
|
207
|
+
native
|
|
208
|
+
.named_pages
|
|
209
|
+
.iter()
|
|
210
|
+
.flat_map(|p| p.elements.iter().cloned()),
|
|
211
|
+
max_id,
|
|
212
|
+
&read,
|
|
213
|
+
)?;
|
|
214
|
+
tables.observe_model_fonts(
|
|
215
|
+
model
|
|
216
|
+
.graphic_pages
|
|
217
|
+
.iter()
|
|
218
|
+
.chain(&model.control_pages)
|
|
219
|
+
.flat_map(|p| &p.elements),
|
|
220
|
+
&read,
|
|
221
|
+
);
|
|
206
222
|
let mut state = State {
|
|
207
|
-
tables
|
|
208
|
-
native
|
|
209
|
-
.named_pages
|
|
210
|
-
.iter()
|
|
211
|
-
.flat_map(|p| p.elements.iter().cloned()),
|
|
212
|
-
max_id,
|
|
213
|
-
&read,
|
|
214
|
-
)?,
|
|
223
|
+
tables,
|
|
215
224
|
model: header,
|
|
216
225
|
options,
|
|
217
226
|
wide_tags: wide_integer_tags(&source.entities),
|
|
@@ -315,9 +324,14 @@ pub fn write_v8(doc: &Document, seed: &[u8], options: &WriteOptions) -> Result<V
|
|
|
315
324
|
let mut low = [i64::MAX; 3];
|
|
316
325
|
let mut high = [i64::MIN; 3];
|
|
317
326
|
for b in &records {
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
327
|
+
let [record_low, record_high] = absolute_range(b)?;
|
|
328
|
+
for ((lo, hi), (record_lo, record_hi)) in low
|
|
329
|
+
.iter_mut()
|
|
330
|
+
.zip(high.iter_mut())
|
|
331
|
+
.zip(record_low.into_iter().zip(record_high))
|
|
332
|
+
{
|
|
333
|
+
*lo = (*lo).min(record_lo);
|
|
334
|
+
*hi = (*hi).max(record_hi);
|
|
321
335
|
}
|
|
322
336
|
}
|
|
323
337
|
if records.is_empty() {
|
|
@@ -470,7 +484,8 @@ impl State<'_> {
|
|
|
470
484
|
entity: &Entity,
|
|
471
485
|
three: bool,
|
|
472
486
|
) -> Result<Vec<u8>> {
|
|
473
|
-
let
|
|
487
|
+
let weight = self.lineweight(entity)?;
|
|
488
|
+
let mut b = encode::header(kind, size, id, level, time, entity, three, weight)?;
|
|
474
489
|
if !entity.props.contains_key("dgn.color_index") {
|
|
475
490
|
use cadkit_core::Color;
|
|
476
491
|
let color = if entity.color == Color::ByLayer {
|
|
@@ -513,6 +528,52 @@ impl State<'_> {
|
|
|
513
528
|
Ok(b)
|
|
514
529
|
}
|
|
515
530
|
|
|
531
|
+
fn lineweight(&self, entity: &Entity) -> Result<u32> {
|
|
532
|
+
fn native(props: &cadkit_core::Props) -> Result<Option<u32>> {
|
|
533
|
+
match props.get("dgn.weight") {
|
|
534
|
+
Some(Value::Int(n)) => {
|
|
535
|
+
let weight = u32::try_from(*n)
|
|
536
|
+
.map_err(|_| Error::invalid(0, "DGN weight must be a nonnegative index"))?;
|
|
537
|
+
if weight > 31 {
|
|
538
|
+
return Err(Error::Unsupported("DGN lineweight indexes above 31".into()));
|
|
539
|
+
}
|
|
540
|
+
Ok(Some(weight))
|
|
541
|
+
}
|
|
542
|
+
Some(_) => Err(Error::invalid(0, "DGN weight must be an integer index")),
|
|
543
|
+
None => Ok(None),
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
if let Some(weight) = native(&entity.props)? {
|
|
547
|
+
return Ok(weight);
|
|
548
|
+
}
|
|
549
|
+
let weight = if entity.lineweight == cadkit_core::Lineweight::ByLayer {
|
|
550
|
+
match self
|
|
551
|
+
.layers
|
|
552
|
+
.iter()
|
|
553
|
+
.find(|layer| Some(layer.name.as_str()) == entity.layer.as_deref())
|
|
554
|
+
{
|
|
555
|
+
Some(layer) => {
|
|
556
|
+
if let Some(weight) = native(&layer.props)? {
|
|
557
|
+
return Ok(weight);
|
|
558
|
+
}
|
|
559
|
+
layer.lineweight
|
|
560
|
+
}
|
|
561
|
+
None => cadkit_core::Lineweight::Default,
|
|
562
|
+
}
|
|
563
|
+
} else {
|
|
564
|
+
entity.lineweight
|
|
565
|
+
};
|
|
566
|
+
match weight {
|
|
567
|
+
cadkit_core::Lineweight::Millimeters(_) => Err(Error::Unsupported(
|
|
568
|
+
"DGN lineweight needs an explicit entity/layer dgn.weight index; millimeter mapping is display-dependent".into(),
|
|
569
|
+
)),
|
|
570
|
+
cadkit_core::Lineweight::ByBlock => Err(Error::Unsupported(
|
|
571
|
+
"resolve ByBlock lineweight before DGN export".into(),
|
|
572
|
+
)),
|
|
573
|
+
cadkit_core::Lineweight::Default | cadkit_core::Lineweight::ByLayer => Ok(0),
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
|
|
516
577
|
fn add(&mut self, b: Vec<u8>, tag: bool) -> Result<()> {
|
|
517
578
|
self.bytes = self.bytes.saturating_add(b.len() as u64);
|
|
518
579
|
if self.bytes > self.options.limits.max_decompressed_bytes
|
|
@@ -820,17 +881,7 @@ impl State<'_> {
|
|
|
820
881
|
{
|
|
821
882
|
return Err(Error::invalid(0, "invalid text dimensions or normal"));
|
|
822
883
|
}
|
|
823
|
-
let font =
|
|
824
|
-
Some(Value::Int(n)) => {
|
|
825
|
-
u32::try_from(*n).map_err(|_| Error::invalid(0, "invalid DGN font"))?
|
|
826
|
-
}
|
|
827
|
-
_ => match style {
|
|
828
|
-
Some(name) => *self.tables.fonts.get(name).ok_or_else(|| {
|
|
829
|
-
Error::Unsupported("text font is absent from seed".into())
|
|
830
|
-
})?,
|
|
831
|
-
None => self.tables.fonts.values().next().copied().unwrap_or(0),
|
|
832
|
-
},
|
|
833
|
-
};
|
|
884
|
+
let font = self.tables.font(e, style.as_deref())?;
|
|
834
885
|
let (justification, fx, fy) = text::justification(e, *halign, *valign)?;
|
|
835
886
|
let length = text::length(e, value, *height * *width_factor, fx)?;
|
|
836
887
|
let (x, y, n) = cadkit_core::geom_ops::arbitrary_axes(*normal);
|
|
@@ -879,7 +930,14 @@ impl State<'_> {
|
|
|
879
930
|
rotation(&mut b, 0x90, a, c, n, three)?;
|
|
880
931
|
point(&mut b, if three { 0xb0 } else { 0x98 }, origin, three)?;
|
|
881
932
|
put(&mut b, offset, &value)?;
|
|
882
|
-
range(
|
|
933
|
+
text::range(
|
|
934
|
+
&mut b,
|
|
935
|
+
origin,
|
|
936
|
+
a,
|
|
937
|
+
c,
|
|
938
|
+
length * self.model.uor_per_master,
|
|
939
|
+
height * self.model.uor_per_master,
|
|
940
|
+
)?;
|
|
883
941
|
links.extend(self.codepage_link()?);
|
|
884
942
|
b
|
|
885
943
|
}
|
|
@@ -1074,17 +1132,8 @@ impl State<'_> {
|
|
|
1074
1132
|
}
|
|
1075
1133
|
let mut corners = vec![];
|
|
1076
1134
|
for child in self.records.get(first..).unwrap_or(&[]) {
|
|
1077
|
-
let
|
|
1078
|
-
|
|
1079
|
-
le::i64_at(child, 0x40).unwrap_or(0) as f64,
|
|
1080
|
-
le::i64_at(child, 0x48).unwrap_or(0) as f64,
|
|
1081
|
-
];
|
|
1082
|
-
let q = [
|
|
1083
|
-
le::i64_at(child, 0x50).unwrap_or(0) as f64,
|
|
1084
|
-
le::i64_at(child, 0x58).unwrap_or(0) as f64,
|
|
1085
|
-
le::i64_at(child, 0x60).unwrap_or(0) as f64,
|
|
1086
|
-
];
|
|
1087
|
-
corners.extend([p, q]);
|
|
1135
|
+
let [low, high] = absolute_range(child)?;
|
|
1136
|
+
corners.extend([low.map(|v| v as f64), high.map(|v| v as f64)]);
|
|
1088
1137
|
}
|
|
1089
1138
|
if let Some(parent) = self.records.get_mut(index) {
|
|
1090
1139
|
range(parent, &corners)?;
|
|
@@ -6,8 +6,8 @@ use crate::native::{
|
|
|
6
6
|
element::{ElementData, TagDef, TagSetData, TagValue},
|
|
7
7
|
v8::RawElement,
|
|
8
8
|
};
|
|
9
|
-
use cadkit_core::{Attribute, Error, Result, Value};
|
|
10
|
-
use std::collections::{BTreeMap, HashSet};
|
|
9
|
+
use cadkit_core::{Attribute, Entity, Error, Result, Value};
|
|
10
|
+
use std::collections::{BTreeMap, BTreeSet, HashSet};
|
|
11
11
|
|
|
12
12
|
pub(super) struct Tables {
|
|
13
13
|
pub records: Vec<Vec<u8>>,
|
|
@@ -16,6 +16,7 @@ pub(super) struct Tables {
|
|
|
16
16
|
pub levels: BTreeMap<String, u32>,
|
|
17
17
|
pub sets: BTreeMap<Option<String>, (u64, TagSetData)>,
|
|
18
18
|
pub last_id: u64,
|
|
19
|
+
referenced_fonts: BTreeSet<u32>,
|
|
19
20
|
max_level: u32,
|
|
20
21
|
level_template: Option<Vec<u8>>,
|
|
21
22
|
tag_set_template: Option<Vec<u8>>,
|
|
@@ -34,6 +35,7 @@ impl Tables {
|
|
|
34
35
|
levels: BTreeMap::new(),
|
|
35
36
|
sets: BTreeMap::new(),
|
|
36
37
|
last_id,
|
|
38
|
+
referenced_fonts: BTreeSet::new(),
|
|
37
39
|
max_level: 0,
|
|
38
40
|
level_template: None,
|
|
39
41
|
tag_set_template: None,
|
|
@@ -79,6 +81,28 @@ impl Tables {
|
|
|
79
81
|
}
|
|
80
82
|
Ok(out)
|
|
81
83
|
}
|
|
84
|
+
pub fn observe_model_fonts<'a>(
|
|
85
|
+
&mut self,
|
|
86
|
+
records: impl Iterator<Item = &'a RawElement>,
|
|
87
|
+
read: &cadkit_core::ReadOptions,
|
|
88
|
+
) {
|
|
89
|
+
for raw in records {
|
|
90
|
+
let font = match decode_v8::decode(
|
|
91
|
+
raw,
|
|
92
|
+
crate::text::encoding_for(read.fallback_codepage.as_deref()),
|
|
93
|
+
&read.limits,
|
|
94
|
+
)
|
|
95
|
+
.data
|
|
96
|
+
{
|
|
97
|
+
ElementData::Text(text) => Some(text.font),
|
|
98
|
+
ElementData::TextNode(text) => Some(text.font),
|
|
99
|
+
_ => None,
|
|
100
|
+
};
|
|
101
|
+
if let Some(font) = font {
|
|
102
|
+
self.referenced_fonts.insert(font);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
82
106
|
pub fn id(&mut self) -> Result<u64> {
|
|
83
107
|
self.last_id = self
|
|
84
108
|
.last_id
|
|
@@ -113,6 +137,53 @@ impl Tables {
|
|
|
113
137
|
self.levels.insert(name.into(), level);
|
|
114
138
|
Ok(level)
|
|
115
139
|
}
|
|
140
|
+
|
|
141
|
+
pub fn font(&self, entity: &Entity, style: Option<&str>) -> Result<u32> {
|
|
142
|
+
let explicit = match entity.props.get("dgn.font_number") {
|
|
143
|
+
Some(Value::Int(n)) => {
|
|
144
|
+
Some(u32::try_from(*n).map_err(|_| Error::invalid(0, "invalid DGN font number"))?)
|
|
145
|
+
}
|
|
146
|
+
Some(_) => return Err(Error::invalid(0, "DGN font number must be an integer")),
|
|
147
|
+
None => None,
|
|
148
|
+
};
|
|
149
|
+
let known = |number| {
|
|
150
|
+
number == 0
|
|
151
|
+
|| self.fonts.values().any(|n| *n == number)
|
|
152
|
+
|| self.referenced_fonts.contains(&number)
|
|
153
|
+
};
|
|
154
|
+
let named = match style {
|
|
155
|
+
Some(name) => Some(
|
|
156
|
+
self.fonts
|
|
157
|
+
.get(name)
|
|
158
|
+
.copied()
|
|
159
|
+
.or_else(|| {
|
|
160
|
+
name.strip_prefix("DGN_FONT_")?
|
|
161
|
+
.parse()
|
|
162
|
+
.ok()
|
|
163
|
+
.filter(|n| known(*n))
|
|
164
|
+
})
|
|
165
|
+
.ok_or_else(|| {
|
|
166
|
+
Error::Unsupported("text font style is absent from seed".into())
|
|
167
|
+
})?,
|
|
168
|
+
),
|
|
169
|
+
None => None,
|
|
170
|
+
};
|
|
171
|
+
if let Some(number) = explicit {
|
|
172
|
+
// Font zero is the existing implicit fallback. A seed can also reference
|
|
173
|
+
// an external RSC font in its graphics without a named table definition.
|
|
174
|
+
// Do not accept unreferenced foreign indexes merely because they are small.
|
|
175
|
+
if !known(number) {
|
|
176
|
+
return Err(Error::Unsupported(
|
|
177
|
+
"text font number is absent from seed".into(),
|
|
178
|
+
));
|
|
179
|
+
}
|
|
180
|
+
if named.is_some_and(|n| n != number) {
|
|
181
|
+
return Err(Error::invalid(0, "DGN font number and style name disagree"));
|
|
182
|
+
}
|
|
183
|
+
return Ok(number);
|
|
184
|
+
}
|
|
185
|
+
Ok(named.unwrap_or_else(|| self.fonts.values().next().copied().unwrap_or(0)))
|
|
186
|
+
}
|
|
116
187
|
pub fn tag(&mut self, attribute: &Attribute) -> Result<(u64, u16, u16)> {
|
|
117
188
|
let name = &attribute.set;
|
|
118
189
|
let value_type = match attribute.value {
|
|
@@ -106,3 +106,46 @@ fn new_then_edited_geometry_unicode_labels_and_identifier_types() {
|
|
|
106
106
|
assert!((position.y - 4.).abs() < 1e-8);
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
|
+
|
|
110
|
+
#[test]
|
|
111
|
+
fn bylayer_lineweight_resolves_explicit_native_layer_index() {
|
|
112
|
+
let mut entity = line();
|
|
113
|
+
entity.layer = Some("Synthetic layer".into());
|
|
114
|
+
let mut source = document(false, vec![entity]);
|
|
115
|
+
let mut layer = cadkit_core::Layer {
|
|
116
|
+
name: "Synthetic layer".into(),
|
|
117
|
+
lineweight: cadkit_core::Lineweight::Millimeters(0.25),
|
|
118
|
+
..Default::default()
|
|
119
|
+
};
|
|
120
|
+
layer.props.insert("dgn.weight".into(), Value::Int(3));
|
|
121
|
+
source.layers.push(layer);
|
|
122
|
+
let blank = seed(false);
|
|
123
|
+
let weight = |source: &Document| {
|
|
124
|
+
let bytes = write_v8(source, &blank, &WriteOptions::default()).unwrap();
|
|
125
|
+
let parsed = crate::read(&bytes, &ReadOptions::default()).unwrap();
|
|
126
|
+
parsed.models[0].entities[0].props["dgn.weight"].clone()
|
|
127
|
+
};
|
|
128
|
+
assert_eq!(weight(&source), Value::Int(3));
|
|
129
|
+
source.models[0].entities[0]
|
|
130
|
+
.props
|
|
131
|
+
.insert("dgn.weight".into(), Value::Int(7));
|
|
132
|
+
assert_eq!(weight(&source), Value::Int(7));
|
|
133
|
+
source.models[0].entities[0].props.remove("dgn.weight");
|
|
134
|
+
source.models[0].entities[0].lineweight = cadkit_core::Lineweight::Default;
|
|
135
|
+
assert_eq!(weight(&source), Value::Int(0));
|
|
136
|
+
source.models[0].entities[0].lineweight = cadkit_core::Lineweight::ByBlock;
|
|
137
|
+
assert!(write_v8(&source, &blank, &WriteOptions::default()).is_err());
|
|
138
|
+
source.models[0].entities[0].lineweight = cadkit_core::Lineweight::ByLayer;
|
|
139
|
+
source.layers[0].props.remove("dgn.weight");
|
|
140
|
+
assert!(write_v8(&source, &blank, &WriteOptions::default()).is_err());
|
|
141
|
+
for invalid in [
|
|
142
|
+
Value::Int(-1),
|
|
143
|
+
Value::Int(32),
|
|
144
|
+
Value::Int(i64::from(u32::MAX)),
|
|
145
|
+
Value::Float(3.),
|
|
146
|
+
Value::Text("3".into()),
|
|
147
|
+
] {
|
|
148
|
+
source.layers[0].props.insert("dgn.weight".into(), invalid);
|
|
149
|
+
assert!(write_v8(&source, &blank, &WriteOptions::default()).is_err());
|
|
150
|
+
}
|
|
151
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
use super::*;
|
|
4
4
|
|
|
5
5
|
fn raster_seed() -> Vec<u8> {
|
|
6
|
-
let mut frame = header(94, 0x400, 100, 0, 0., &line(), false).unwrap();
|
|
6
|
+
let mut frame = header(94, 0x400, 100, 0, 0., &line(), false, 0).unwrap();
|
|
7
7
|
let matrix = [
|
|
8
8
|
1., 0., 0., 1000., 0., 1., 0., 2000., 0., 0., 1., 0., 0., 0., 0., 1.,
|
|
9
9
|
];
|