forked from 1b-agent/opencadstudio-upstream
Enable free-form surface thickening
This commit is contained in:
1 parent
9b112e3ac0
commit
7a58b9bf91
4 files changed
+54
-5
No files matched your search
Generated
+1
-1
@@ -885,7 +885,7 @@ checksum = "fc652a48c352aef3ea3aed32080501cf3ef6ed5da78602a020c991775b0aff04"
|
||||
[[package]]
|
||||
name = "cadkernel"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/HakanSeven12/cadkernel.git?rev=7f18223c66c1fde2e2a2c16e61259655d173bf4f#7f18223c66c1fde2e2a2c16e61259655d173bf4f"
|
||||
source = "git+https://github.com/HakanSeven12/cadkernel.git?rev=e831220b3a4bed5292625f4e6b7b2dc6f1191cba#e831220b3a4bed5292625f4e6b7b2dc6f1191cba"
|
||||
dependencies = [
|
||||
"acadrust",
|
||||
"cavalier_contours",
|
||||
|
||||
+1
-1
@@ -32,7 +32,7 @@ rfd = "0.17"
|
||||
clap = { version = "4", features = ["derive", "string"] }
|
||||
env_logger = "0.11"
|
||||
acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "62628c41670a914d1598a14faafc3c6e3aa4a270", features = ["serde"] }
|
||||
cadkernel = { git = "https://github.com/HakanSeven12/cadkernel.git", rev = "7f18223c66c1fde2e2a2c16e61259655d173bf4f", features = ["acis", "offset"] }
|
||||
cadkernel = { git = "https://github.com/HakanSeven12/cadkernel.git", rev = "e831220b3a4bed5292625f4e6b7b2dc6f1191cba", features = ["acis", "offset"] }
|
||||
dwg-thumbnailer = { path = "crates/dwg-thumbnailer" }
|
||||
flate2 = "1"
|
||||
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "bmp", "tiff"] }
|
||||
|
||||
@@ -15,7 +15,7 @@ thiserror = "1"
|
||||
|
||||
# Host adapters convert ObjectId to acadrust handles; kernel handles stay local.
|
||||
acadrust = { git = "https://github.com/HakanSeven12/cadcodec.git", rev = "62628c41670a914d1598a14faafc3c6e3aa4a270", features = ["serde"], optional = true }
|
||||
cadkernel = { git = "https://github.com/HakanSeven12/cadkernel.git", rev = "7f18223c66c1fde2e2a2c16e61259655d173bf4f", features = ["acis", "offset"], optional = true }
|
||||
cadkernel = { git = "https://github.com/HakanSeven12/cadkernel.git", rev = "e831220b3a4bed5292625f4e6b7b2dc6f1191cba", features = ["acis", "offset"], optional = true }
|
||||
ocs_plugin_api = { path = "../ocs_plugin_api", optional = true, features = ["host"] }
|
||||
|
||||
[build-dependencies]
|
||||
|
||||
@@ -5814,8 +5814,8 @@ fn resample_widths(source: &[(f64, f64)], count: usize) -> Vec<(f64, f64)> {
|
||||
mod thicken_tests {
|
||||
use super::*;
|
||||
use acadrust::entities::{Surface, SurfaceKind};
|
||||
use cadkernel::geom2d::{Circle, Curve};
|
||||
use cadkernel::space::Plane;
|
||||
use cadkernel::geom2d::{Circle, Curve, NurbsCurve};
|
||||
use cadkernel::space::{Parameterization, Plane};
|
||||
|
||||
#[test]
|
||||
fn thicken_preserves_sources_and_round_trips_results_with_one_undo() {
|
||||
@@ -5857,4 +5857,53 @@ mod thicken_tests {
|
||||
assert!(app.tabs[i].scene.document.solid_history_operation(result).is_some());
|
||||
assert_eq!(serde_json::to_value(app.tabs[i].scene.document.get_entity(source).unwrap()).unwrap(), original);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn thicken_creates_a_solid_from_a_free_form_surface() {
|
||||
let mut app = OpenCADStudio::new_for_test();
|
||||
app.automation_op(r#"{"op":"new"}"#);
|
||||
let profile = NurbsCurve::interpolate(
|
||||
&[[0.0, 0.0], [0.7, 0.15], [1.3, -0.1], [2.0, 0.0]],
|
||||
None,
|
||||
None,
|
||||
Parameterization::Chord,
|
||||
)
|
||||
.unwrap();
|
||||
let body = cadkernel::brep::extrude_surface(
|
||||
Plane::XY,
|
||||
&[Curve::Nurbs(profile)],
|
||||
[0.0, 0.0, 2.0],
|
||||
)
|
||||
.unwrap();
|
||||
let source = app.add_surface_model(
|
||||
acadrust::EntityType::Surface(Surface::new(SurfaceKind::Generic)),
|
||||
body,
|
||||
);
|
||||
let i = app.active_tab;
|
||||
|
||||
let _ = app.apply_cmd_result(CmdResult::ThickenEntities {
|
||||
handles: vec![source],
|
||||
distance: 0.15,
|
||||
});
|
||||
|
||||
let solids = app.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.entities()
|
||||
.filter_map(|entity| {
|
||||
matches!(entity, acadrust::EntityType::Solid3D(_))
|
||||
.then_some(entity.common().handle)
|
||||
})
|
||||
.collect::<Vec<_>>();
|
||||
assert_eq!(solids.len(), 1);
|
||||
let solid = &app.tabs[i].scene.solid_models[&solids[0]];
|
||||
assert!(solid.validate().is_empty());
|
||||
assert!(solid.edges.iter().all(|(_, edge)| edge.coedges.len() == 2));
|
||||
assert!(app.tabs[i]
|
||||
.scene
|
||||
.document
|
||||
.solid_history_operation(solids[0])
|
||||
.is_some());
|
||||
assert!(app.tabs[i].scene.document.get_entity(source).is_some());
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user