diff --git a/src/app/cmd_result.rs b/src/app/cmd_result.rs index f75a76436..32964ee82 100644 --- a/src/app/cmd_result.rs +++ b/src/app/cmd_result.rs @@ -1230,11 +1230,11 @@ impl OpenCADStudio { let wire = wire?; let origin = Point3::new( axis_start.x as f64, - axis_start.z as f64, axis_start.y as f64, + axis_start.z as f64, ); let dir = (axis_end - axis_start).normalize(); - let axis = TruckVec3::new(dir.x as f64, dir.z as f64, dir.y as f64); + let axis = TruckVec3::new(dir.x as f64, dir.y as f64, dir.z as f64); let shell = builder::rsweep( &wire, origin, diff --git a/src/io/obj.rs b/src/io/obj.rs index 0f56b2235..2e09d172c 100644 --- a/src/io/obj.rs +++ b/src/io/obj.rs @@ -27,14 +27,15 @@ pub fn parse_obj(src: &str, color: [f32; 4]) -> Option { "v" => { let vals: Vec = parts.filter_map(|s| s.parse().ok()).collect(); if vals.len() >= 3 { - // OBJ: Y-up right-handed. OpenCADStudio viewport is also Y-up → keep as-is. - positions.push([vals[0], vals[1], vals[2]]); + // OBJ is Y-up right-handed; OpenCADStudio's world is Z-up. + // Rotate +90° about X so OBJ Y→world Z (up): (x, y, z) → (x, -z, y). + positions.push([vals[0], -vals[2], vals[1]]); } } "vn" => { let vals: Vec = parts.filter_map(|s| s.parse().ok()).collect(); if vals.len() >= 3 { - normals_raw.push([vals[0], vals[1], vals[2]]); + normals_raw.push([vals[0], -vals[2], vals[1]]); } } "f" => {