Allow the origin of rotation to be specified (#7608)

* pass axis origin to endpoint

* fmt

* fix lint errors

* update sim tests with new transform endpoint

* added missed files

* revert cargo.toml

* implement review requests

* fmt

* revert unnecessary custom origin
This commit is contained in:
Ben Crabbe
2025-06-27 00:38:18 +01:00
committed by GitHub
parent 4356885aa2
commit 107adc77b3
45 changed files with 635 additions and 166 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 0 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 0 B

4
rust/Cargo.lock generated
View File

@ -2071,9 +2071,9 @@ dependencies = [
[[package]]
name = "kittycad-modeling-cmds"
version = "0.2.124"
version = "0.2.125"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "221aa4670a7ad7dc8f1e4e0f9990bf3cff0a64417eb76493bafe5bbbc1f8350a"
checksum = "cfd09d95f8bbeb090d4d1137c9bf421eb75763f7a30e4a9e8eefa249ddf20bd3"
dependencies = [
"anyhow",
"chrono",

View File

@ -36,7 +36,7 @@ dashmap = { version = "6.1.0" }
http = "1"
indexmap = "2.9.0"
kittycad = { version = "0.3.37", default-features = false, features = ["js", "requests"] }
kittycad-modeling-cmds = { version = "0.2.124", features = ["ts-rs", "websocket"] }
kittycad-modeling-cmds = { version = "0.2.125", features = ["ts-rs", "websocket"] }
lazy_static = "1.5.0"
miette = "7.6.0"
pyo3 = { version = "0.24.2" }
@ -60,6 +60,6 @@ lossy_float_literal = "warn"
result_large_err = "allow"
# Example: how to point modeling-app at a different repo (e.g. a branch or a local clone)
#[patch.crates-io]
#kittycad-modeling-cmds = { path = "../../../modeling-api/modeling-cmds" }
#kittycad-modeling-session = { path = "../../../modeling-api/modeling-session" }
# [patch.crates-io]
# kittycad-modeling-cmds = { path = "../../modeling-api/modeling-cmds/" }
# kittycad-modeling-session = { path = "../../modeling-api/modeling-session" }

View File

@ -58,4 +58,11 @@ impl Axis3dOrPoint3d {
Axis3dOrPoint3d::Point(point) => point.clone(),
}
}
pub fn axis_origin(&self) -> Option<[TyF64; 3]> {
match self {
Axis3dOrPoint3d::Axis { origin, .. } => Some(origin.clone()),
Axis3dOrPoint3d::Point(..) => None,
}
}
}

View File

@ -5,7 +5,7 @@ use kcmc::{
ModelingCmd, each_cmd as mcmd,
length_unit::LengthUnit,
shared,
shared::{Point3d, Point4d},
shared::{OriginType, Point3d},
};
use kittycad_modeling_cmds as kcmc;
@ -18,6 +18,16 @@ use crate::{
std::{Args, args::TyF64, axis_or_reference::Axis3dOrPoint3d},
};
fn transform_by<T>(property: T, set: bool, is_local: bool, origin: Option<OriginType>) -> shared::TransformBy<T> {
shared::TransformBy {
property,
set,
#[expect(deprecated)]
is_local,
origin,
}
}
/// Scale a solid or a sketch.
pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let objects = args.get_unlabeled_kw_arg(
@ -70,6 +80,13 @@ async fn inner_scale(
exec_state.flush_batch_for_solids((&args).into(), solids).await?;
}
let is_global = global.unwrap_or(false);
let origin = if is_global {
Some(OriginType::Global)
} else {
Some(OriginType::Local)
};
let mut objects = objects.clone();
for object_id in objects.ids(&args.ctx).await? {
exec_state
@ -78,15 +95,16 @@ async fn inner_scale(
ModelingCmd::from(mcmd::SetObjectTransform {
object_id,
transforms: vec![shared::ComponentTransform {
scale: Some(shared::TransformBy::<Point3d<f64>> {
property: Point3d {
scale: Some(transform_by(
Point3d {
x: x.unwrap_or(1.0),
y: y.unwrap_or(1.0),
z: z.unwrap_or(1.0),
},
set: false,
is_local: !global.unwrap_or(false),
}),
false,
!is_global,
origin,
)),
translate: None,
rotate_rpy: None,
rotate_angle_axis: None,
@ -142,6 +160,13 @@ async fn inner_translate(
exec_state.flush_batch_for_solids((&args).into(), solids).await?;
}
let is_global = global.unwrap_or(false);
let origin = if is_global {
Some(OriginType::Global)
} else {
Some(OriginType::Local)
};
let mut objects = objects.clone();
for object_id in objects.ids(&args.ctx).await? {
exec_state
@ -150,15 +175,16 @@ async fn inner_translate(
ModelingCmd::from(mcmd::SetObjectTransform {
object_id,
transforms: vec![shared::ComponentTransform {
translate: Some(shared::TransformBy::<Point3d<LengthUnit>> {
property: shared::Point3d {
translate: Some(transform_by(
shared::Point3d {
x: LengthUnit(x.as_ref().map(|t| t.to_mm()).unwrap_or_default()),
y: LengthUnit(y.as_ref().map(|t| t.to_mm()).unwrap_or_default()),
z: LengthUnit(z.as_ref().map(|t| t.to_mm()).unwrap_or_default()),
},
set: false,
is_local: !global.unwrap_or(false),
}),
false,
!is_global,
origin,
)),
scale: None,
rotate_rpy: None,
rotate_angle_axis: None,
@ -193,6 +219,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
]),
exec_state,
)?;
let origin = axis.clone().map(|a| a.axis_origin()).unwrap_or_default();
let axis = axis.map(|a| a.to_point3d());
let angle: Option<TyF64> = args.get_kw_arg_opt("angle", &RuntimeType::degrees(), exec_state)?;
let global = args.get_kw_arg_opt("global", &RuntimeType::bool(), exec_state)?;
@ -286,6 +313,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
// Don't adjust axis units since the axis must be normalized and only the direction
// should be significant, not the magnitude.
axis.map(|a| [a[0].n, a[1].n, a[2].n]),
origin.map(|a| [a[0].n, a[1].n, a[2].n]),
angle.map(|t| t.n),
global,
exec_state,
@ -302,6 +330,7 @@ async fn inner_rotate(
pitch: Option<f64>,
yaw: Option<f64>,
axis: Option<[f64; 3]>,
origin: Option<[f64; 3]>,
angle: Option<f64>,
global: Option<bool>,
exec_state: &mut ExecState,
@ -313,6 +342,20 @@ async fn inner_rotate(
exec_state.flush_batch_for_solids((&args).into(), solids).await?;
}
let origin = if let Some(origin) = origin {
Some(OriginType::Custom {
origin: shared::Point3d {
x: origin[0],
y: origin[1],
z: origin[2],
},
})
} else if global.unwrap_or(false) {
Some(OriginType::Global)
} else {
Some(OriginType::Local)
};
let mut objects = objects.clone();
for object_id in objects.ids(&args.ctx).await? {
if let (Some(axis), Some(angle)) = (&axis, angle) {
@ -322,16 +365,17 @@ async fn inner_rotate(
ModelingCmd::from(mcmd::SetObjectTransform {
object_id,
transforms: vec![shared::ComponentTransform {
rotate_angle_axis: Some(shared::TransformBy::<Point4d<f64>> {
property: shared::Point4d {
rotate_angle_axis: Some(transform_by(
shared::Point4d {
x: axis[0],
y: axis[1],
z: axis[2],
w: angle,
},
set: false,
is_local: !global.unwrap_or(false),
}),
false,
!global.unwrap_or(false),
origin,
)),
scale: None,
rotate_rpy: None,
translate: None,
@ -347,15 +391,16 @@ async fn inner_rotate(
ModelingCmd::from(mcmd::SetObjectTransform {
object_id,
transforms: vec![shared::ComponentTransform {
rotate_rpy: Some(shared::TransformBy::<Point3d<f64>> {
property: shared::Point3d {
rotate_rpy: Some(transform_by(
shared::Point3d {
x: roll.unwrap_or(0.0),
y: pitch.unwrap_or(0.0),
z: yaw.unwrap_or(0.0),
},
set: false,
is_local: !global.unwrap_or(false),
}),
false,
!global.unwrap_or(false),
origin,
)),
scale: None,
rotate_angle_axis: None,
translate: None,

View File

@ -5571926,7 +5571926,10 @@ description: Artifact commands import_async.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -19,7 +19,10 @@ description: Artifact commands import_mesh_clone.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -84,7 +87,10 @@ description: Artifact commands import_mesh_clone.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -149,7 +155,10 @@ description: Artifact commands import_mesh_clone.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -214,7 +223,10 @@ description: Artifact commands import_mesh_clone.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -5571084,7 +5571084,10 @@ description: Artifact commands import_transform.kcl
"z": 3.14
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -5571107,7 +5571110,10 @@ description: Artifact commands import_transform.kcl
"z": 3.14
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -5571134,7 +5571140,10 @@ description: Artifact commands import_transform.kcl
"z": 3.14
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
}
}
]

View File

@ -182,7 +182,10 @@ description: Artifact commands import_whole_simple.kcl
"z": 1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -20,7 +20,10 @@ description: Artifact commands import_whole_transitive_import.kcl
"z": 1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -393,7 +393,10 @@ description: Artifact commands intersect_cubes.kcl
"z": 1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -956,7 +956,10 @@ description: Artifact commands ball-joint-rod-end.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1211,7 +1214,10 @@ description: Artifact commands ball-joint-rod-end.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 84 KiB

View File

@ -7382,7 +7382,10 @@ description: Artifact commands car-wheel-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7406,7 +7409,10 @@ description: Artifact commands car-wheel-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7430,7 +7436,10 @@ description: Artifact commands car-wheel-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7454,7 +7463,10 @@ description: Artifact commands car-wheel-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7478,7 +7490,10 @@ description: Artifact commands car-wheel-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7523,7 +7538,10 @@ description: Artifact commands car-wheel-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -7075,7 +7075,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7139,7 +7142,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7163,7 +7169,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7267,7 +7276,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7291,7 +7303,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7315,7 +7330,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7339,7 +7357,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7363,7 +7384,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7387,7 +7411,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7411,7 +7438,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7435,7 +7465,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7459,7 +7492,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -7483,7 +7519,10 @@ description: Artifact commands cpu-cooler.kcl
"z": 100.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -482,7 +482,10 @@ description: Artifact commands curtain-wall-anchor-plate.kcl
"z": -1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -616,7 +619,10 @@ description: Artifact commands curtain-wall-anchor-plate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1479,7 +1485,10 @@ description: Artifact commands curtain-wall-anchor-plate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1502,7 +1511,10 @@ description: Artifact commands curtain-wall-anchor-plate.kcl
"z": 5.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -206,7 +206,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6604.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -231,7 +234,10 @@ description: Artifact commands dodecahedron.kcl
"z": 0.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -441,7 +447,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6606.54
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -466,7 +475,10 @@ description: Artifact commands dodecahedron.kcl
"z": 0.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -676,7 +688,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6609.079999999999
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -701,7 +716,10 @@ description: Artifact commands dodecahedron.kcl
"z": 72.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -911,7 +929,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6611.62
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -936,7 +957,10 @@ description: Artifact commands dodecahedron.kcl
"z": 144.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1146,7 +1170,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6614.159999999999
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1171,7 +1198,10 @@ description: Artifact commands dodecahedron.kcl
"z": 216.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1381,7 +1411,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6616.7
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1406,7 +1439,10 @@ description: Artifact commands dodecahedron.kcl
"z": 288.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1616,7 +1652,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6619.24
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1641,7 +1680,10 @@ description: Artifact commands dodecahedron.kcl
"z": 0.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1851,7 +1893,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6621.78
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1876,7 +1921,10 @@ description: Artifact commands dodecahedron.kcl
"z": 36.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2086,7 +2134,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6624.32
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2111,7 +2162,10 @@ description: Artifact commands dodecahedron.kcl
"z": 108.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2321,7 +2375,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6626.859999999999
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2346,7 +2403,10 @@ description: Artifact commands dodecahedron.kcl
"z": 180.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2556,7 +2616,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6606.794
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2581,7 +2644,10 @@ description: Artifact commands dodecahedron.kcl
"z": 252.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2791,7 +2857,10 @@ description: Artifact commands dodecahedron.kcl
"z": -6607.048
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2816,7 +2885,10 @@ description: Artifact commands dodecahedron.kcl
"z": 324.0
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_angle_axis": null,
"scale": null

View File

@ -2743,7 +2743,10 @@ description: Artifact commands helical-planetary-gearset.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -629,7 +629,10 @@ description: Artifact commands herringbone-gear.kcl
"z": 8.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -707,7 +707,10 @@ description: Artifact commands herringbone-planetary-gearset.kcl
"z": 8.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1383,7 +1386,10 @@ description: Artifact commands herringbone-planetary-gearset.kcl
"z": 8.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2059,7 +2065,10 @@ description: Artifact commands herringbone-planetary-gearset.kcl
"z": 8.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2125,7 +2134,10 @@ description: Artifact commands herringbone-planetary-gearset.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -689,7 +689,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1088,7 +1091,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1344,7 +1350,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1589,7 +1598,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1817,7 +1829,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1913,7 +1928,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2065,7 +2083,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2873,7 +2894,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -3012,7 +3036,10 @@ description: Artifact commands pdu-faceplate.kcl
"z": -13.335
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -1847,7 +1847,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"w": 180.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"scale": null
}
@ -1869,7 +1872,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 3.8353999999999995
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1893,7 +1899,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": -2.3114
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2223,7 +2232,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 17.525999999999996
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2952,7 +2964,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 18.3388
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2977,7 +2992,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -3387,7 +3405,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": -36.064825
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -3739,7 +3760,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -3762,7 +3786,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 11.175999999999998
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -4093,7 +4120,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -4116,7 +4146,10 @@ description: Artifact commands pipe-flange-assembly.kcl
"z": -15.011399999999998
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -570,7 +570,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 110.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -595,7 +598,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -794,7 +800,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 130.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -819,7 +828,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1018,7 +1030,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 140.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1043,7 +1058,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1242,7 +1260,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 145.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1267,7 +1288,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -1709,7 +1733,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 133.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1734,7 +1761,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2003,7 +2033,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 133.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2028,7 +2061,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2297,7 +2333,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 133.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -2322,7 +2361,10 @@ description: Artifact commands prosthetic-hip.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null

View File

@ -1002,7 +1002,10 @@ description: Artifact commands sash-window.kcl
"z": -227.5
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1026,7 +1029,10 @@ description: Artifact commands sash-window.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1277,7 +1283,10 @@ description: Artifact commands sash-window.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1301,7 +1310,10 @@ description: Artifact commands sash-window.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1557,7 +1569,10 @@ description: Artifact commands sash-window.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1581,7 +1596,10 @@ description: Artifact commands sash-window.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -1606,7 +1624,10 @@ description: Artifact commands sash-window.kcl
"z": -0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -2177,7 +2198,10 @@ description: Artifact commands sash-window.kcl
"z": 227.5
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -1805,7 +1805,10 @@ description: Artifact commands spool.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -661,7 +661,10 @@ description: Artifact commands spur-reduction-gearset.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -686,7 +689,10 @@ description: Artifact commands spur-reduction-gearset.kcl
"z": 3.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null

View File

@ -502,7 +502,10 @@ description: Artifact commands t-slot-rail.kcl
"z": 1.5
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
}
}
]

View File

@ -9827,7 +9827,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 50.8
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -9851,7 +9854,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -9875,7 +9881,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 12.7
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -9899,7 +9908,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 50.8
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -10181,7 +10193,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 31.75
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -10463,7 +10478,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 18.541999999999998
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -10746,7 +10764,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -10769,7 +10790,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 19.558
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -11052,7 +11076,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null
@ -11075,7 +11102,10 @@ description: Artifact commands walkie-talkie.kcl
"z": 6.350000000000001
},
"set": false,
"is_local": false
"is_local": false,
"origin": {
"type": "global"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -225,7 +225,10 @@ description: Artifact commands module_return_using_var.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -15925,7 +15925,10 @@ description: Artifact commands multiple-foreign-imports-all-render.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -15966,7 +15969,10 @@ description: Artifact commands multiple-foreign-imports-all-render.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -571,7 +571,10 @@ description: Artifact commands rotate_after_fillet.kcl
"z": 3.14
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null

View File

@ -573,7 +573,10 @@ description: Artifact commands scale_after_fillet.kcl
"z": 3.14
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
}
}
]

View File

@ -1025,7 +1025,10 @@ description: Artifact commands sketch_on_face_union.kcl
"w": -90.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"scale": null
}

View File

@ -357,7 +357,10 @@ description: Artifact commands spheres.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -367,7 +367,10 @@ description: Artifact commands subtract_cylinder_from_cube.kcl
"z": 3.14
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -393,7 +393,10 @@ description: Artifact commands subtract_doesnt_need_brackets.kcl
"z": 1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -233,7 +233,10 @@ description: Artifact commands subtract_regression03.kcl
"z": 1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
}
}
]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -682,7 +682,10 @@ description: Artifact commands subtract_with_pattern.kcl
"w": 90.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"scale": null
}

View File

@ -384,7 +384,10 @@ description: Artifact commands subtract_with_pattern_cut_thru.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -556,7 +559,10 @@ description: Artifact commands subtract_with_pattern_cut_thru.kcl
"w": 90.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"scale": null
}

View File

@ -570,7 +570,10 @@ description: Artifact commands translate_after_fillet.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -393,7 +393,10 @@ description: Artifact commands union_cubes.kcl
"z": 1.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,

View File

@ -146,7 +146,10 @@ description: Artifact commands user_reported_union_2_bug.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_rpy": null,
"rotate_angle_axis": null,
@ -401,7 +404,10 @@ description: Artifact commands user_reported_union_2_bug.kcl
"z": 0.0
},
"set": false,
"is_local": true
"is_local": true,
"origin": {
"type": "local"
}
},
"rotate_angle_axis": null,
"scale": null