Compare commits
5 Commits
remove-the
...
achalmers/
Author | SHA1 | Date | |
---|---|---|---|
a91d8c07b6 | |||
d8102252e1 | |||
1d8b0cb12f | |||
88685c24cc | |||
118b642cc5 |
@ -514,10 +514,18 @@
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"type": "Angle",
|
||||
"schema": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
@ -983,10 +991,18 @@
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"type": "Angle",
|
||||
"schema": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
@ -1016,8 +1032,16 @@
|
||||
"properties": {
|
||||
"angle": {
|
||||
"description": "The angle of the line.",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"length": {
|
||||
"description": "The length of the line.",
|
||||
@ -1033,10 +1057,24 @@
|
||||
{
|
||||
"description": "An angle and length.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
],
|
||||
"maxItems": 2,
|
||||
"minItems": 2
|
||||
}
|
||||
@ -1937,8 +1975,16 @@
|
||||
"properties": {
|
||||
"angle": {
|
||||
"description": "The angle of the line.",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"length": {
|
||||
"description": "The length of the line.",
|
||||
@ -1954,10 +2000,24 @@
|
||||
{
|
||||
"description": "An angle and length.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
],
|
||||
"maxItems": 2,
|
||||
"minItems": 2
|
||||
}
|
||||
@ -2858,8 +2918,16 @@
|
||||
"properties": {
|
||||
"angle": {
|
||||
"description": "The angle of the line.",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"length": {
|
||||
"description": "The length of the line.",
|
||||
@ -2875,10 +2943,24 @@
|
||||
{
|
||||
"description": "An angle and length.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
],
|
||||
"maxItems": 2,
|
||||
"minItems": 2
|
||||
}
|
||||
@ -3775,8 +3857,16 @@
|
||||
"properties": {
|
||||
"angle": {
|
||||
"description": "The angle of the line.",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"intersectTag": {
|
||||
"description": "The tag of the line to intersect with.",
|
||||
@ -4690,8 +4780,16 @@
|
||||
"properties": {
|
||||
"angle": {
|
||||
"description": "The angle of the line.",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tag": {
|
||||
"description": "The tag.",
|
||||
@ -4707,10 +4805,24 @@
|
||||
{
|
||||
"description": "An angle and point to draw to.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
],
|
||||
"maxItems": 2,
|
||||
"minItems": 2
|
||||
}
|
||||
@ -5611,8 +5723,16 @@
|
||||
"properties": {
|
||||
"angle": {
|
||||
"description": "The angle of the line.",
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"tag": {
|
||||
"description": "The tag.",
|
||||
@ -5628,10 +5748,24 @@
|
||||
{
|
||||
"description": "An angle and point to draw to.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
},
|
||||
"items": [
|
||||
{
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
],
|
||||
"maxItems": 2,
|
||||
"minItems": 2
|
||||
}
|
||||
@ -13889,10 +14023,18 @@
|
||||
],
|
||||
"returnValue": {
|
||||
"name": "",
|
||||
"type": "number",
|
||||
"type": "Angle",
|
||||
"schema": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
"type": "object",
|
||||
"required": [
|
||||
"degrees"
|
||||
],
|
||||
"properties": {
|
||||
"degrees": {
|
||||
"type": "number",
|
||||
"format": "double"
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": true
|
||||
},
|
||||
|
@ -106,7 +106,7 @@ Returns the angle to match the given length for x.
|
||||
|
||||
|
||||
```
|
||||
angleToMatchLengthX(segment_name: string, to: number, sketch_group: SketchGroup) -> number
|
||||
angleToMatchLengthX(segment_name: string, to: number, sketch_group: SketchGroup) -> Angle
|
||||
```
|
||||
|
||||
#### Arguments
|
||||
@ -179,7 +179,12 @@ angleToMatchLengthX(segment_name: string, to: number, sketch_group: SketchGroup)
|
||||
|
||||
#### Returns
|
||||
|
||||
* `number`
|
||||
* `Angle`
|
||||
```
|
||||
{
|
||||
degrees: number,
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
@ -190,7 +195,7 @@ Returns the angle to match the given length for y.
|
||||
|
||||
|
||||
```
|
||||
angleToMatchLengthY(segment_name: string, to: number, sketch_group: SketchGroup) -> number
|
||||
angleToMatchLengthY(segment_name: string, to: number, sketch_group: SketchGroup) -> Angle
|
||||
```
|
||||
|
||||
#### Arguments
|
||||
@ -263,7 +268,12 @@ angleToMatchLengthY(segment_name: string, to: number, sketch_group: SketchGroup)
|
||||
|
||||
#### Returns
|
||||
|
||||
* `number`
|
||||
* `Angle`
|
||||
```
|
||||
{
|
||||
degrees: number,
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
@ -283,13 +293,15 @@ angledLine(data: AngledLineData, sketch_group: SketchGroup) -> SketchGroup
|
||||
```
|
||||
{
|
||||
// The angle of the line.
|
||||
angle: number,
|
||||
angle: {
|
||||
degrees: number,
|
||||
},
|
||||
// The length of the line.
|
||||
length: number,
|
||||
// The tag.
|
||||
tag: string,
|
||||
} |
|
||||
[number]
|
||||
string
|
||||
```
|
||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths.
|
||||
```
|
||||
@ -439,13 +451,15 @@ angledLineOfXLength(data: AngledLineData, sketch_group: SketchGroup) -> SketchGr
|
||||
```
|
||||
{
|
||||
// The angle of the line.
|
||||
angle: number,
|
||||
angle: {
|
||||
degrees: number,
|
||||
},
|
||||
// The length of the line.
|
||||
length: number,
|
||||
// The tag.
|
||||
tag: string,
|
||||
} |
|
||||
[number]
|
||||
string
|
||||
```
|
||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths.
|
||||
```
|
||||
@ -595,13 +609,15 @@ angledLineOfYLength(data: AngledLineData, sketch_group: SketchGroup) -> SketchGr
|
||||
```
|
||||
{
|
||||
// The angle of the line.
|
||||
angle: number,
|
||||
angle: {
|
||||
degrees: number,
|
||||
},
|
||||
// The length of the line.
|
||||
length: number,
|
||||
// The tag.
|
||||
tag: string,
|
||||
} |
|
||||
[number]
|
||||
string
|
||||
```
|
||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths.
|
||||
```
|
||||
@ -751,7 +767,9 @@ angledLineThatIntersects(data: AngeledLineThatIntersectsData, sketch_group: Sket
|
||||
```
|
||||
{
|
||||
// The angle of the line.
|
||||
angle: number,
|
||||
angle: {
|
||||
degrees: number,
|
||||
},
|
||||
// The tag of the line to intersect with.
|
||||
intersectTag: string,
|
||||
// The offset from the intersecting line.
|
||||
@ -908,13 +926,15 @@ angledLineToX(data: AngledLineToData, sketch_group: SketchGroup) -> SketchGroup
|
||||
```
|
||||
{
|
||||
// The angle of the line.
|
||||
angle: number,
|
||||
angle: {
|
||||
degrees: number,
|
||||
},
|
||||
// The tag.
|
||||
tag: string,
|
||||
// The point to draw to.
|
||||
to: number,
|
||||
} |
|
||||
[number]
|
||||
string
|
||||
```
|
||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths.
|
||||
```
|
||||
@ -1064,13 +1084,15 @@ angledLineToY(data: AngledLineToData, sketch_group: SketchGroup) -> SketchGroup
|
||||
```
|
||||
{
|
||||
// The angle of the line.
|
||||
angle: number,
|
||||
angle: {
|
||||
degrees: number,
|
||||
},
|
||||
// The tag.
|
||||
tag: string,
|
||||
// The point to draw to.
|
||||
to: number,
|
||||
} |
|
||||
[number]
|
||||
string
|
||||
```
|
||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths.
|
||||
```
|
||||
@ -2680,7 +2702,7 @@ Returns the angle of the segment.
|
||||
|
||||
|
||||
```
|
||||
segAng(segment_name: string, sketch_group: SketchGroup) -> number
|
||||
segAng(segment_name: string, sketch_group: SketchGroup) -> Angle
|
||||
```
|
||||
|
||||
#### Arguments
|
||||
@ -2752,7 +2774,12 @@ segAng(segment_name: string, sketch_group: SketchGroup) -> number
|
||||
|
||||
#### Returns
|
||||
|
||||
* `number`
|
||||
* `Angle`
|
||||
```
|
||||
{
|
||||
degrees: number,
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
@ -155,14 +155,20 @@ pub fn segment_angle(args: &mut Args) -> Result<MemoryItem, KclError> {
|
||||
let (segment_name, sketch_group) = args.get_segment_name_sketch_group()?;
|
||||
|
||||
let result = inner_segment_angle(&segment_name, sketch_group, args)?;
|
||||
args.make_user_val_from_f64(result)
|
||||
let j = serde_json::to_value(result).map_err(|e| {
|
||||
KclError::Type(KclErrorDetails {
|
||||
message: format!("Could not serialize KCL value {result:?}: {e}"),
|
||||
source_ranges: vec![args.source_range],
|
||||
})
|
||||
})?;
|
||||
args.make_user_val_from_json(j)
|
||||
}
|
||||
|
||||
/// Returns the angle of the segment.
|
||||
#[stdlib {
|
||||
name = "segAng",
|
||||
}]
|
||||
fn inner_segment_angle(segment_name: &str, sketch_group: SketchGroup, args: &mut Args) -> Result<f64, KclError> {
|
||||
fn inner_segment_angle(segment_name: &str, sketch_group: SketchGroup, args: &mut Args) -> Result<Angle, KclError> {
|
||||
let path = sketch_group.get_path_by_name(segment_name).ok_or_else(|| {
|
||||
KclError::Type(KclErrorDetails {
|
||||
message: format!(
|
||||
@ -174,9 +180,7 @@ fn inner_segment_angle(segment_name: &str, sketch_group: SketchGroup, args: &mut
|
||||
})?;
|
||||
let line = path.get_base();
|
||||
|
||||
let result = Angle::between(line.from.into(), line.to.into());
|
||||
|
||||
Ok(result.degrees())
|
||||
Ok(Angle::between(line.from.into(), line.to.into()))
|
||||
}
|
||||
|
||||
/// Returns the angle to match the given length for x.
|
||||
|
@ -297,14 +297,14 @@ pub enum AngledLineData {
|
||||
/// An angle and length with a tag.
|
||||
AngleWithTag {
|
||||
/// The angle of the line.
|
||||
angle: f64,
|
||||
angle: Angle,
|
||||
/// The length of the line.
|
||||
length: f64,
|
||||
/// The tag.
|
||||
tag: String,
|
||||
},
|
||||
/// An angle and length.
|
||||
AngleAndLength([f64; 2]),
|
||||
AngleAndLength(Angle, f64),
|
||||
}
|
||||
|
||||
/// Draw an angled line.
|
||||
@ -327,11 +327,11 @@ fn inner_angled_line(
|
||||
let from = sketch_group.get_coords_from_paths()?;
|
||||
let (angle, length) = match &data {
|
||||
AngledLineData::AngleWithTag { angle, length, .. } => (*angle, *length),
|
||||
AngledLineData::AngleAndLength(angle_and_length) => (angle_and_length[0], angle_and_length[1]),
|
||||
AngledLineData::AngleAndLength(angle, length) => (*angle, *length),
|
||||
};
|
||||
let to: [f64; 2] = [
|
||||
from.x + length * f64::cos(angle.to_radians()),
|
||||
from.y + length * f64::sin(angle.to_radians()),
|
||||
from.x + length * f64::cos(angle.radians()),
|
||||
from.y + length * f64::sin(angle.radians()),
|
||||
];
|
||||
|
||||
let id = uuid::Uuid::new_v4();
|
||||
@ -390,10 +390,10 @@ fn inner_angled_line_of_x_length(
|
||||
) -> Result<SketchGroup, KclError> {
|
||||
let (angle, length) = match &data {
|
||||
AngledLineData::AngleWithTag { angle, length, .. } => (*angle, *length),
|
||||
AngledLineData::AngleAndLength(angle_and_length) => (angle_and_length[0], angle_and_length[1]),
|
||||
AngledLineData::AngleAndLength(angle, length) => (*angle, *length),
|
||||
};
|
||||
|
||||
let to = get_y_component(Angle::from_degrees(angle), length);
|
||||
let to = get_y_component(angle, length);
|
||||
|
||||
let new_sketch_group = inner_line(
|
||||
if let AngledLineData::AngleWithTag { tag, .. } = data {
|
||||
@ -416,14 +416,14 @@ pub enum AngledLineToData {
|
||||
/// An angle and point with a tag.
|
||||
AngleWithTag {
|
||||
/// The angle of the line.
|
||||
angle: f64,
|
||||
angle: Angle,
|
||||
/// The point to draw to.
|
||||
to: f64,
|
||||
/// The tag.
|
||||
tag: String,
|
||||
},
|
||||
/// An angle and point to draw to.
|
||||
AngleAndPoint([f64; 2]),
|
||||
AngleAndPoint(Angle, f64),
|
||||
}
|
||||
|
||||
/// Draw an angled line to a given x coordinate.
|
||||
@ -446,11 +446,11 @@ fn inner_angled_line_to_x(
|
||||
let from = sketch_group.get_coords_from_paths()?;
|
||||
let (angle, x_to) = match &data {
|
||||
AngledLineToData::AngleWithTag { angle, to, .. } => (*angle, *to),
|
||||
AngledLineToData::AngleAndPoint(angle_and_to) => (angle_and_to[0], angle_and_to[1]),
|
||||
AngledLineToData::AngleAndPoint(angle, to) => (*angle, *to),
|
||||
};
|
||||
|
||||
let x_component = x_to - from.x;
|
||||
let y_component = x_component * f64::tan(angle.to_radians());
|
||||
let y_component = x_component * f64::tan(angle.radians());
|
||||
let y_to = from.y + y_component;
|
||||
|
||||
let new_sketch_group = inner_line_to(
|
||||
@ -485,10 +485,10 @@ fn inner_angled_line_of_y_length(
|
||||
) -> Result<SketchGroup, KclError> {
|
||||
let (angle, length) = match &data {
|
||||
AngledLineData::AngleWithTag { angle, length, .. } => (*angle, *length),
|
||||
AngledLineData::AngleAndLength(angle_and_length) => (angle_and_length[0], angle_and_length[1]),
|
||||
AngledLineData::AngleAndLength(angle, length) => (*angle, *length),
|
||||
};
|
||||
|
||||
let to = get_x_component(Angle::from_degrees(angle), length);
|
||||
let to = get_x_component(angle, length);
|
||||
|
||||
let new_sketch_group = inner_line(
|
||||
if let AngledLineData::AngleWithTag { tag, .. } = data {
|
||||
@ -523,11 +523,11 @@ fn inner_angled_line_to_y(
|
||||
let from = sketch_group.get_coords_from_paths()?;
|
||||
let (angle, y_to) = match &data {
|
||||
AngledLineToData::AngleWithTag { angle, to, .. } => (*angle, *to),
|
||||
AngledLineToData::AngleAndPoint(angle_and_to) => (angle_and_to[0], angle_and_to[1]),
|
||||
AngledLineToData::AngleAndPoint(angle, to) => (*angle, *to),
|
||||
};
|
||||
|
||||
let y_component = y_to - from.y;
|
||||
let x_component = y_component / f64::tan(angle.to_radians());
|
||||
let x_component = y_component / f64::tan(angle.radians());
|
||||
let x_to = from.x + x_component;
|
||||
|
||||
let new_sketch_group = inner_line_to(
|
||||
@ -549,7 +549,7 @@ fn inner_angled_line_to_y(
|
||||
// TODO: make sure the docs on the args below are correct.
|
||||
pub struct AngeledLineThatIntersectsData {
|
||||
/// The angle of the line.
|
||||
pub angle: f64,
|
||||
pub angle: Angle,
|
||||
/// The tag of the line to intersect with.
|
||||
pub intersect_tag: String,
|
||||
/// The offset from the intersecting line.
|
||||
|
@ -5,7 +5,10 @@ use crate::{
|
||||
executor::{Point2d, SourceRange},
|
||||
};
|
||||
|
||||
#[derive(Clone, Copy, Default, PartialOrd, PartialEq, Debug)]
|
||||
use schemars::JsonSchema;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Clone, Copy, Default, PartialOrd, PartialEq, Debug, ts_rs::TS, Serialize, Deserialize, JsonSchema)]
|
||||
pub struct Angle {
|
||||
degrees: f64,
|
||||
}
|
||||
@ -125,10 +128,10 @@ pub fn distance_between_points(point_a: Point2d, point_b: Point2d) -> f64 {
|
||||
((y2 - y1).powi(2) + (x2 - x1).powi(2)).sqrt()
|
||||
}
|
||||
|
||||
pub fn calculate_intersection_of_two_lines(line1: &[Point2d; 2], line2_angle: f64, line2_point: Point2d) -> Point2d {
|
||||
pub fn calculate_intersection_of_two_lines(line1: &[Point2d; 2], line2_angle: Angle, line2_point: Point2d) -> Point2d {
|
||||
let line2_point_b = Point2d {
|
||||
x: line2_point.x + f64::cos(line2_angle.to_radians()) * 10.0,
|
||||
y: line2_point.y + f64::sin(line2_angle.to_radians()) * 10.0,
|
||||
x: line2_point.x + f64::cos(line2_angle.radians()) * 10.0,
|
||||
y: line2_point.y + f64::sin(line2_angle.radians()) * 10.0,
|
||||
};
|
||||
intersect(line1[0], line1[1], line2_point, line2_point_b)
|
||||
}
|
||||
@ -159,7 +162,7 @@ pub fn intersect(p1: Point2d, p2: Point2d, p3: Point2d, p4: Point2d) -> Point2d
|
||||
pub fn intersection_with_parallel_line(
|
||||
line1: &[Point2d; 2],
|
||||
line1_offset: f64,
|
||||
line2_angle: f64,
|
||||
line2_angle: Angle,
|
||||
line2_point: Point2d,
|
||||
) -> Point2d {
|
||||
calculate_intersection_of_two_lines(&offset_line(line1_offset, line1[0], line1[1]), line2_angle, line2_point)
|
||||
|
Reference in New Issue
Block a user