[package]
edition = "2024"
rust-version = "1.88"
name = "brepkit-operations"
version = "4.0.21"
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "CAD modeling operations (booleans, fillets, extrusions) for brepkit"
homepage = "https://github.com/andymai/brepkit"
readme = "README.md"
keywords = [
"cad",
"brep",
"geometry",
"solid-modeling",
"nurbs",
]
categories = [
"graphics",
"mathematics",
"science",
]
license = "AGPL-3.0-only"
repository = "https://github.com/andymai/brepkit"
[package.metadata.docs.rs]
all-features = true
[features]
perf-counters = ["brepkit-algo/perf-counters"]
[lib]
name = "brepkit_operations"
path = "src/lib.rs"
[[example]]
name = "approx_census"
path = "examples/approx_census.rs"
[[example]]
name = "debug_boolean"
path = "examples/debug_boolean.rs"
[[example]]
name = "flux_orientation_probe"
path = "examples/flux_orientation_probe.rs"
[[example]]
name = "interface_fuse_probe"
path = "examples/interface_fuse_probe.rs"
[[example]]
name = "perf_probe"
path = "examples/perf_probe.rs"
[[example]]
name = "plate_probe"
path = "examples/plate_probe.rs"
[[example]]
name = "profile_boolean"
path = "examples/profile_boolean.rs"
[[example]]
name = "slot_cut_probe"
path = "examples/slot_cut_probe.rs"
[[example]]
name = "tess_profile"
path = "examples/tess_profile.rs"
[[test]]
name = "ball_and_ring_drills"
path = "tests/ball_and_ring_drills.rs"
[[test]]
name = "blend_integration"
path = "tests/blend_integration.rs"
[[test]]
name = "boolean_edge_cases"
path = "tests/boolean_edge_cases.rs"
[[test]]
name = "boolean_invariants"
path = "tests/boolean_invariants.rs"
[[test]]
name = "boolean_stress"
path = "tests/boolean_stress.rs"
[[test]]
name = "bspline_conversion_mesh"
path = "tests/bspline_conversion_mesh.rs"
[[test]]
name = "chamfer_round_rims"
path = "tests/chamfer_round_rims.rs"
[[test]]
name = "classify_cavities"
path = "tests/classify_cavities.rs"
[[test]]
name = "coaxial_cone_cut_classification"
path = "tests/coaxial_cone_cut_classification.rs"
[[test]]
name = "coaxial_cones"
path = "tests/coaxial_cones.rs"
[[test]]
name = "coaxial_cylinders"
path = "tests/coaxial_cylinders.rs"
[[test]]
name = "coaxial_torus"
path = "tests/coaxial_torus.rs"
[[test]]
name = "coincident_planes"
path = "tests/coincident_planes.rs"
[[test]]
name = "coincident_proptest"
path = "tests/coincident_proptest.rs"
[[test]]
name = "concentric_spheres"
path = "tests/concentric_spheres.rs"
[[test]]
name = "cone_plane_cut"
path = "tests/cone_plane_cut.rs"
[[test]]
name = "cone_pocket"
path = "tests/cone_pocket.rs"
[[test]]
name = "convex_chamfer_volume_check"
path = "tests/convex_chamfer_volume_check.rs"
[[test]]
name = "curved_properties"
path = "tests/curved_properties.rs"
[[test]]
name = "cylinder_wall_windows"
path = "tests/cylinder_wall_windows.rs"
[[test]]
name = "examples"
path = "tests/examples.rs"
[[test]]
name = "far_from_origin_volume"
path = "tests/far_from_origin_volume.rs"
[[test]]
name = "flat_sided_rods"
path = "tests/flat_sided_rods.rs"
[[test]]
name = "frustum_halved_at_every_angle"
path = "tests/frustum_halved_at_every_angle.rs"
[[test]]
name = "golden_regression"
path = "tests/golden_regression.rs"
[[test]]
name = "interface_fuse_winding"
path = "tests/interface_fuse_winding.rs"
[[test]]
name = "mirror_mixed_faces"
path = "tests/mirror_mixed_faces.rs"
[[test]]
name = "non_uniform_scale_mesh"
path = "tests/non_uniform_scale_mesh.rs"
[[test]]
name = "oblique_rod_cut"
path = "tests/oblique_rod_cut.rs"
[[test]]
name = "parity_boolean_curved"
path = "tests/parity_boolean_curved.rs"
[[test]]
name = "parity_boolean_empty"
path = "tests/parity_boolean_empty.rs"
[[test]]
name = "parity_boolean_planar"
path = "tests/parity_boolean_planar.rs"
[[test]]
name = "perf_64cut_determinism"
path = "tests/perf_64cut_determinism.rs"
[[test]]
name = "profile_intersect"
path = "tests/profile_intersect.rs"
[[test]]
name = "proptest_operations"
path = "tests/proptest_operations.rs"
[[test]]
name = "regress_blend_keepside_tangency"
path = "tests/regress_blend_keepside_tangency.rs"
[[test]]
name = "regress_blend_split_guard_scale"
path = "tests/regress_blend_split_guard_scale.rs"
[[test]]
name = "regress_blend_trim_neighbor_split"
path = "tests/regress_blend_trim_neighbor_split.rs"
[[test]]
name = "regress_chamfer_obtuse_ridge"
path = "tests/regress_chamfer_obtuse_ridge.rs"
[[test]]
name = "regress_fillet_concave_notch"
path = "tests/regress_fillet_concave_notch.rs"
[[test]]
name = "regress_fillet_miter_corner_matrix"
path = "tests/regress_fillet_miter_corner_matrix.rs"
[[test]]
name = "regress_fillet_miter_needs_convex_corner"
path = "tests/regress_fillet_miter_needs_convex_corner.rs"
[[test]]
name = "regress_fillet_stripe_tessellation_deflection"
path = "tests/regress_fillet_stripe_tessellation_deflection.rs"
[[test]]
name = "regress_fillet_unset_back_trihedral_corner"
path = "tests/regress_fillet_unset_back_trihedral_corner.rs"
[[test]]
name = "regress_fillet_variable_retry_seam_stub"
path = "tests/regress_fillet_variable_retry_seam_stub.rs"
[[test]]
name = "regress_four_edge_exact_limit"
path = "tests/regress_four_edge_exact_limit.rs"
[[test]]
name = "regress_hexwall_cuts"
path = "tests/regress_hexwall_cuts.rs"
[[test]]
name = "regress_kumiko_corner_wedge"
path = "tests/regress_kumiko_corner_wedge.rs"
[[test]]
name = "regress_two_edge_exact_limit"
path = "tests/regress_two_edge_exact_limit.rs"
[[test]]
name = "regress_twoedge_torus_incidence"
path = "tests/regress_twoedge_torus_incidence.rs"
[[test]]
name = "reversed_face_holes"
path = "tests/reversed_face_holes.rs"
[[test]]
name = "rod_halved_at_every_angle"
path = "tests/rod_halved_at_every_angle.rs"
[[test]]
name = "rod_side_bore"
path = "tests/rod_side_bore.rs"
[[test]]
name = "scale_dependent"
path = "tests/scale_dependent.rs"
[[test]]
name = "shelled_bin_slot_cut"
path = "tests/shelled_bin_slot_cut.rs"
[[test]]
name = "sphere_plane_cut"
path = "tests/sphere_plane_cut.rs"
[[test]]
name = "tessellate_watertight"
path = "tests/tessellate_watertight.rs"
[[test]]
name = "torus_coaxial_tools"
path = "tests/torus_coaxial_tools.rs"
[[test]]
name = "torus_plane_cut"
path = "tests/torus_plane_cut.rs"
[[bench]]
name = "boolean_perf"
path = "benches/boolean_perf.rs"
harness = false
[[bench]]
name = "boolean_tracking"
path = "benches/boolean_tracking.rs"
harness = false
[[bench]]
name = "cad_operations"
path = "benches/cad_operations.rs"
harness = false
[[bench]]
name = "compound_cut_perf"
path = "benches/compound_cut_perf.rs"
harness = false
[[bench]]
name = "fuse_perf"
path = "benches/fuse_perf.rs"
harness = false
[dependencies.brepkit-algo]
version = "4.0.21"
[dependencies.brepkit-blend]
version = "4.0.21"
[dependencies.brepkit-check]
version = "4.0.21"
[dependencies.brepkit-geometry]
version = "4.0.21"
[dependencies.brepkit-heal]
version = "4.0.21"
[dependencies.brepkit-math]
version = "4.0.21"
[dependencies.brepkit-offset]
version = "4.0.21"
[dependencies.brepkit-sketch]
version = "4.0.21"
[dependencies.brepkit-topology]
version = "4.0.21"
[dependencies.log]
version = "0.4"
[dependencies.rayon]
version = "1.11"
[dependencies.thiserror]
version = "2"
[dev-dependencies.brepkit-topology]
version = "4.0.21"
features = ["test-utils"]
[dev-dependencies.criterion]
version = "0.8"
features = ["html_reports"]
[dev-dependencies.env_logger]
version = "0.11"
[dev-dependencies.proptest]
version = "1"
[lints.clippy]
bool_to_int_with_if = "allow"
branches_sharing_code = "allow"
cast_lossless = "allow"
cast_possible_truncation = "allow"
cast_precision_loss = "allow"
cast_sign_loss = "allow"
dbg_macro = "deny"
derive_partial_eq_without_eq = "allow"
doc_markdown = "allow"
expect_used = "warn"
if_same_then_else = "allow"
imprecise_flops = "allow"
iter_over_hash_type = "allow"
manual_let_else = "allow"
manual_slice_fill = "allow"
many_single_char_names = "allow"
map_unwrap_or = "allow"
match_same_arms = "allow"
missing_const_for_fn = "allow"
module_name_repetitions = "allow"
needless_pass_by_value = "allow"
needless_range_loop = "allow"
option_if_let_else = "allow"
panic = "deny"
print_stderr = "deny"
print_stdout = "deny"
redundant_else = "allow"
similar_names = "allow"
suboptimal_flops = "allow"
suspicious_operation_groupings = "allow"
todo = "warn"
too_many_lines = "allow"
tuple_array_conversions = "allow"
uninlined_format_args = "allow"
unwrap_used = "deny"
used_underscore_binding = "allow"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.nursery]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -1
[lints.rust]
missing_docs = "warn"
unsafe_code = "deny"