@ -6,7 +6,7 @@ use kittycad_modeling_cmds::coord::{System, KITTYCAD, OPENGL, VULKAN};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
errors::KclErrorDetails,
|
errors::KclErrorDetails,
|
||||||
execution::types::{UnitAngle, UnitLen},
|
execution::types::UnitLen,
|
||||||
parsing::ast::types::{Annotation, Expr, LiteralValue, Node, ObjectProperty},
|
parsing::ast::types::{Annotation, Expr, LiteralValue, Node, ObjectProperty},
|
||||||
KclError, SourceRange,
|
KclError, SourceRange,
|
||||||
};
|
};
|
||||||
@ -16,7 +16,6 @@ pub(super) const SIGNIFICANT_ATTRS: [&str; 2] = [SETTINGS, NO_PRELUDE];
|
|||||||
|
|
||||||
pub(crate) const SETTINGS: &str = "settings";
|
pub(crate) const SETTINGS: &str = "settings";
|
||||||
pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit";
|
pub(crate) const SETTINGS_UNIT_LENGTH: &str = "defaultLengthUnit";
|
||||||
pub(crate) const SETTINGS_UNIT_ANGLE: &str = "defaultAngleUnit";
|
|
||||||
pub(crate) const SETTINGS_VERSION: &str = "kclVersion";
|
pub(crate) const SETTINGS_VERSION: &str = "kclVersion";
|
||||||
pub(super) const NO_PRELUDE: &str = "no_std";
|
pub(super) const NO_PRELUDE: &str = "no_std";
|
||||||
|
|
||||||
@ -54,7 +53,7 @@ impl FromStr for Impl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn settings_completion_text() -> String {
|
pub(crate) fn settings_completion_text() -> String {
|
||||||
format!("@{SETTINGS}({SETTINGS_UNIT_LENGTH} = mm, {SETTINGS_UNIT_ANGLE} = deg, {SETTINGS_VERSION} = 1.0)")
|
format!("@{SETTINGS}({SETTINGS_UNIT_LENGTH} = mm, {SETTINGS_VERSION} = 1.0)")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(super) fn is_significant(attr: &&Node<Annotation>) -> bool {
|
pub(super) fn is_significant(attr: &&Node<Annotation>) -> bool {
|
||||||
@ -148,16 +147,3 @@ impl UnitLen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UnitAngle {
|
|
||||||
pub(super) fn from_str(s: &str, source_range: SourceRange) -> Result<Self, KclError> {
|
|
||||||
match s {
|
|
||||||
"deg" => Ok(UnitAngle::Degrees),
|
|
||||||
"rad" => Ok(UnitAngle::Radians),
|
|
||||||
value => Err(KclError::Semantic(KclErrorDetails {
|
|
||||||
message: format!("Unexpected value for angle units: `{value}`; expected one of `deg`, `rad`"),
|
|
||||||
source_ranges: vec![source_range],
|
|
||||||
})),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -36,7 +36,7 @@ use crate::{
|
|||||||
execution::{
|
execution::{
|
||||||
cache::{CacheInformation, CacheResult},
|
cache::{CacheInformation, CacheResult},
|
||||||
typed_path::TypedPath,
|
typed_path::TypedPath,
|
||||||
types::{UnitAngle, UnitLen},
|
types::UnitLen,
|
||||||
},
|
},
|
||||||
fs::FileManager,
|
fs::FileManager,
|
||||||
modules::{ModuleId, ModulePath, ModuleRepr},
|
modules::{ModuleId, ModulePath, ModuleRepr},
|
||||||
|
@ -18,7 +18,7 @@ use crate::{
|
|||||||
memory::{ProgramMemory, Stack},
|
memory::{ProgramMemory, Stack},
|
||||||
types,
|
types,
|
||||||
types::NumericType,
|
types::NumericType,
|
||||||
EnvironmentRef, ExecOutcome, ExecutorSettings, KclValue, UnitAngle, UnitLen,
|
EnvironmentRef, ExecOutcome, ExecutorSettings, KclValue, UnitLen,
|
||||||
},
|
},
|
||||||
modules::{ModuleId, ModuleInfo, ModuleLoader, ModulePath, ModuleRepr, ModuleSource},
|
modules::{ModuleId, ModuleInfo, ModuleLoader, ModulePath, ModuleRepr, ModuleSource},
|
||||||
parsing::ast::types::Annotation,
|
parsing::ast::types::Annotation,
|
||||||
@ -255,7 +255,6 @@ impl ExecState {
|
|||||||
pub fn current_default_units(&self) -> NumericType {
|
pub fn current_default_units(&self) -> NumericType {
|
||||||
NumericType::Default {
|
NumericType::Default {
|
||||||
len: self.length_unit(),
|
len: self.length_unit(),
|
||||||
angle: self.angle_unit(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,10 +262,6 @@ impl ExecState {
|
|||||||
self.mod_local.settings.default_length_units
|
self.mod_local.settings.default_length_units
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn angle_unit(&self) -> UnitAngle {
|
|
||||||
self.mod_local.settings.default_angle_units
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn circular_import_error(&self, path: &ModulePath, source_range: SourceRange) -> KclError {
|
pub(super) fn circular_import_error(&self, path: &ModulePath, source_range: SourceRange) -> KclError {
|
||||||
KclError::ImportCycle(KclErrorDetails {
|
KclError::ImportCycle(KclErrorDetails {
|
||||||
message: format!(
|
message: format!(
|
||||||
@ -339,7 +334,6 @@ impl ModuleState {
|
|||||||
std_path,
|
std_path,
|
||||||
settings: MetaSettings {
|
settings: MetaSettings {
|
||||||
default_length_units: Default::default(),
|
default_length_units: Default::default(),
|
||||||
default_angle_units: Default::default(),
|
|
||||||
kcl_version: "0.1".to_owned(),
|
kcl_version: "0.1".to_owned(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -351,7 +345,6 @@ impl ModuleState {
|
|||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct MetaSettings {
|
pub struct MetaSettings {
|
||||||
pub default_length_units: types::UnitLen,
|
pub default_length_units: types::UnitLen,
|
||||||
pub default_angle_units: types::UnitAngle,
|
|
||||||
pub kcl_version: String,
|
pub kcl_version: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,11 +364,6 @@ impl MetaSettings {
|
|||||||
self.default_length_units = value;
|
self.default_length_units = value;
|
||||||
updated_len = true;
|
updated_len = true;
|
||||||
}
|
}
|
||||||
annotations::SETTINGS_UNIT_ANGLE => {
|
|
||||||
let value = annotations::expect_ident(&p.inner.value)?;
|
|
||||||
let value = types::UnitAngle::from_str(value, annotation.as_source_range())?;
|
|
||||||
self.default_angle_units = value;
|
|
||||||
}
|
|
||||||
annotations::SETTINGS_VERSION => {
|
annotations::SETTINGS_VERSION => {
|
||||||
let value = annotations::expect_number(&p.inner.value)?;
|
let value = annotations::expect_number(&p.inner.value)?;
|
||||||
self.kcl_version = value;
|
self.kcl_version = value;
|
||||||
@ -385,7 +373,7 @@ impl MetaSettings {
|
|||||||
message: format!(
|
message: format!(
|
||||||
"Unexpected settings key: `{name}`; expected one of `{}`, `{}`",
|
"Unexpected settings key: `{name}`; expected one of `{}`, `{}`",
|
||||||
annotations::SETTINGS_UNIT_LENGTH,
|
annotations::SETTINGS_UNIT_LENGTH,
|
||||||
annotations::SETTINGS_UNIT_ANGLE
|
annotations::SETTINGS_VERSION
|
||||||
),
|
),
|
||||||
source_ranges: vec![annotation.as_source_range()],
|
source_ranges: vec![annotation.as_source_range()],
|
||||||
}))
|
}))
|
||||||
|
@ -434,7 +434,7 @@ pub enum NumericType {
|
|||||||
// Specified by the user (directly or indirectly)
|
// Specified by the user (directly or indirectly)
|
||||||
Known(UnitType),
|
Known(UnitType),
|
||||||
// Unspecified, using defaults
|
// Unspecified, using defaults
|
||||||
Default { len: UnitLen, angle: UnitAngle },
|
Default { len: UnitLen },
|
||||||
// Exceeded the ability of the type system to track.
|
// Exceeded the ability of the type system to track.
|
||||||
Unknown,
|
Unknown,
|
||||||
// Type info has been explicitly cast away.
|
// Type info has been explicitly cast away.
|
||||||
@ -445,7 +445,6 @@ impl Default for NumericType {
|
|||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
NumericType::Default {
|
NumericType::Default {
|
||||||
len: UnitLen::default(),
|
len: UnitLen::default(),
|
||||||
angle: UnitAngle::default(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -474,13 +473,6 @@ impl NumericType {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn expect_default_angle(&self) -> Self {
|
|
||||||
match self {
|
|
||||||
NumericType::Default { angle, .. } => NumericType::Known(UnitType::Angle(*angle)),
|
|
||||||
_ => unreachable!(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Combine two types when we expect them to be equal, erring on the side of less coercion. To be
|
/// Combine two types when we expect them to be equal, erring on the side of less coercion. To be
|
||||||
/// precise, only adjusting one number or the other when they are of known types.
|
/// precise, only adjusting one number or the other when they are of known types.
|
||||||
///
|
///
|
||||||
@ -501,8 +493,6 @@ impl NumericType {
|
|||||||
}
|
}
|
||||||
(t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 => (a.n, b.n, t),
|
(t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 => (a.n, b.n, t),
|
||||||
(Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) if l1 == l2 => (a.n, b.n, t),
|
(Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) if l1 == l2 => (a.n, b.n, t),
|
||||||
(t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 => (a.n, b.n, t),
|
|
||||||
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) if a1 == a2 => (a.n, b.n, t),
|
|
||||||
|
|
||||||
_ => (a.n, b.n, Unknown),
|
_ => (a.n, b.n, Unknown),
|
||||||
}
|
}
|
||||||
@ -522,6 +512,8 @@ impl NumericType {
|
|||||||
(at, Any) => (a.n, b.n, at),
|
(at, Any) => (a.n, b.n, at),
|
||||||
(Any, bt) => (a.n, b.n, bt),
|
(Any, bt) => (a.n, b.n, bt),
|
||||||
|
|
||||||
|
(Default { .. }, Known(UnitType::Angle(_))) |
|
||||||
|
(Known(UnitType::Angle(_)), Default { .. }) |
|
||||||
(Default { .. }, Default { .. }) | (_, Unknown) | (Unknown, _) => (a.n, b.n, Unknown),
|
(Default { .. }, Default { .. }) | (_, Unknown) | (Unknown, _) => (a.n, b.n, Unknown),
|
||||||
|
|
||||||
// Known types and compatible, but needs adjustment.
|
// Known types and compatible, but needs adjustment.
|
||||||
@ -538,9 +530,6 @@ impl NumericType {
|
|||||||
|
|
||||||
(t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) => (a.n, l2.adjust_to(b.n, l1).0, t),
|
(t @ Known(UnitType::Length(l1)), Default { len: l2, .. }) => (a.n, l2.adjust_to(b.n, l1).0, t),
|
||||||
(Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) => (l1.adjust_to(a.n, l2).0, b.n, t),
|
(Default { len: l1, .. }, t @ Known(UnitType::Length(l2))) => (l1.adjust_to(a.n, l2).0, b.n, t),
|
||||||
|
|
||||||
(t @ Known(UnitType::Angle(a1)), Default { angle: a2, .. }) => (a.n, a2.adjust_to(b.n, a1).0, t),
|
|
||||||
(Default { angle: a1, .. }, t @ Known(UnitType::Angle(a2))) => (a1.adjust_to(a.n, a2).0, b.n, t),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -567,14 +556,10 @@ impl NumericType {
|
|||||||
}
|
}
|
||||||
|
|
||||||
(Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 || i.n == 0.0 => {}
|
(Known(UnitType::Length(l1)), Default { len: l2, .. }) if l1 == l2 || i.n == 0.0 => {}
|
||||||
(Known(UnitType::Angle(a1)), Default { angle: a2, .. }) if a1 == a2 || i.n == 0.0 => {}
|
|
||||||
|
|
||||||
(Default { len: l1, .. }, Known(UnitType::Length(l2))) if l1 == l2 => {
|
(Default { len: l1, .. }, Known(UnitType::Length(l2))) if l1 == l2 => {
|
||||||
ty = Known(UnitType::Length(*l2));
|
ty = Known(UnitType::Length(*l2));
|
||||||
}
|
}
|
||||||
(Default { angle: a1, .. }, Known(UnitType::Angle(a2))) if a1 == a2 => {
|
|
||||||
ty = Known(UnitType::Angle(*a2));
|
|
||||||
}
|
|
||||||
|
|
||||||
_ => return (result, Unknown),
|
_ => return (result, Unknown),
|
||||||
}
|
}
|
||||||
@ -619,7 +604,6 @@ impl NumericType {
|
|||||||
match suffix {
|
match suffix {
|
||||||
NumericSuffix::None => NumericType::Default {
|
NumericSuffix::None => NumericType::Default {
|
||||||
len: settings.default_length_units,
|
len: settings.default_length_units,
|
||||||
angle: settings.default_angle_units,
|
|
||||||
},
|
},
|
||||||
NumericSuffix::Count => NumericType::Known(UnitType::Count),
|
NumericSuffix::Count => NumericType::Known(UnitType::Count),
|
||||||
NumericSuffix::Length => NumericType::Known(UnitType::Length(UnitLen::Unknown)),
|
NumericSuffix::Length => NumericType::Known(UnitType::Length(UnitLen::Unknown)),
|
||||||
@ -647,7 +631,7 @@ impl NumericType {
|
|||||||
NumericType::Known(UnitType::Length(UnitLen::Unknown)),
|
NumericType::Known(UnitType::Length(UnitLen::Unknown)),
|
||||||
)
|
)
|
||||||
| (
|
| (
|
||||||
NumericType::Known(UnitType::Angle(_)) | NumericType::Default { .. },
|
NumericType::Known(UnitType::Angle(_)),
|
||||||
NumericType::Known(UnitType::Angle(UnitAngle::Unknown)),
|
NumericType::Known(UnitType::Angle(UnitAngle::Unknown)),
|
||||||
) => true,
|
) => true,
|
||||||
(Unknown, _) | (_, Unknown) => false,
|
(Unknown, _) | (_, Unknown) => false,
|
||||||
@ -743,14 +727,7 @@ impl NumericType {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
(Default { angle: a1, .. }, Known(UnitType::Angle(a2))) => {
|
(Default { .. }, Known(UnitType::Angle(_))) => Err(val.into()),
|
||||||
let (value, ty) = a1.adjust_to(*value, *a2);
|
|
||||||
Ok(KclValue::Number {
|
|
||||||
value,
|
|
||||||
ty: Known(UnitType::Angle(ty)),
|
|
||||||
meta: meta.clone(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
(_, _) => unreachable!(),
|
(_, _) => unreachable!(),
|
||||||
}
|
}
|
||||||
@ -2063,8 +2040,7 @@ mod test {
|
|||||||
default
|
default
|
||||||
.coerce(
|
.coerce(
|
||||||
&NumericType::Default {
|
&NumericType::Default {
|
||||||
len: UnitLen::Yards,
|
len: UnitLen::Yards
|
||||||
angle: UnitAngle::default()
|
|
||||||
}
|
}
|
||||||
.into(),
|
.into(),
|
||||||
&mut exec_state
|
&mut exec_state
|
||||||
|
@ -7,7 +7,7 @@ use crate::{execution::types::NumericType, pretty::NumericSuffix};
|
|||||||
pub fn human_display_number(value: f64, ty: NumericType) -> String {
|
pub fn human_display_number(value: f64, ty: NumericType) -> String {
|
||||||
match ty {
|
match ty {
|
||||||
NumericType::Known(unit_type) => format!("{value}: number({unit_type})"),
|
NumericType::Known(unit_type) => format!("{value}: number({unit_type})"),
|
||||||
NumericType::Default { len, angle } => format!("{value} (no units, defaulting to {len} or {angle})"),
|
NumericType::Default { len } => format!("{value} (no units, defaulting to {len})"),
|
||||||
NumericType::Unknown => format!("{value} (number with unknown units)"),
|
NumericType::Unknown => format!("{value} (number with unknown units)"),
|
||||||
NumericType::Any => format!("{value} (number with any units)"),
|
NumericType::Any => format!("{value} (number with any units)"),
|
||||||
}
|
}
|
||||||
@ -87,20 +87,18 @@ mod tests {
|
|||||||
1.0,
|
1.0,
|
||||||
NumericType::Default {
|
NumericType::Default {
|
||||||
len: UnitLen::Mm,
|
len: UnitLen::Mm,
|
||||||
angle: UnitAngle::Degrees,
|
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
"1 (no units, defaulting to mm or deg)"
|
"1 (no units, defaulting to mm)"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
human_display_number(
|
human_display_number(
|
||||||
1.0,
|
1.0,
|
||||||
NumericType::Default {
|
NumericType::Default {
|
||||||
len: UnitLen::Feet,
|
len: UnitLen::Feet,
|
||||||
angle: UnitAngle::Radians,
|
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
"1 (no units, defaulting to ft or rad)"
|
"1 (no units, defaulting to ft)"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
human_display_number(1.0, NumericType::Unknown),
|
human_display_number(1.0, NumericType::Unknown),
|
||||||
|
@ -230,10 +230,11 @@ impl Program {
|
|||||||
pub fn change_default_units(
|
pub fn change_default_units(
|
||||||
&self,
|
&self,
|
||||||
length_units: Option<execution::types::UnitLen>,
|
length_units: Option<execution::types::UnitLen>,
|
||||||
angle_units: Option<execution::types::UnitAngle>,
|
// TODO
|
||||||
|
_angle_units: Option<execution::types::UnitAngle>,
|
||||||
) -> Result<Self, KclError> {
|
) -> Result<Self, KclError> {
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
ast: self.ast.change_default_units(length_units, angle_units)?,
|
ast: self.ast.change_default_units(length_units)?,
|
||||||
original_file_contents: self.original_file_contents.clone(),
|
original_file_contents: self.original_file_contents.clone(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ use crate::{
|
|||||||
errors::KclError,
|
errors::KclError,
|
||||||
execution::{
|
execution::{
|
||||||
annotations,
|
annotations,
|
||||||
types::{ArrayLen, UnitAngle, UnitLen},
|
types::{ArrayLen, UnitLen},
|
||||||
KclValue, Metadata, TagIdentifier,
|
KclValue, Metadata, TagIdentifier,
|
||||||
},
|
},
|
||||||
parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR},
|
parsing::{ast::digest::Digest, token::NumericSuffix, PIPE_OPERATOR},
|
||||||
@ -361,7 +361,6 @@ impl Node<Program> {
|
|||||||
pub fn change_default_units(
|
pub fn change_default_units(
|
||||||
&self,
|
&self,
|
||||||
length_units: Option<UnitLen>,
|
length_units: Option<UnitLen>,
|
||||||
angle_units: Option<UnitAngle>,
|
|
||||||
) -> Result<Self, KclError> {
|
) -> Result<Self, KclError> {
|
||||||
let mut new_program = self.clone();
|
let mut new_program = self.clone();
|
||||||
let mut found = false;
|
let mut found = false;
|
||||||
@ -373,12 +372,6 @@ impl Node<Program> {
|
|||||||
Expr::Name(Box::new(Name::new(&len.to_string()))),
|
Expr::Name(Box::new(Name::new(&len.to_string()))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if let Some(angle) = angle_units {
|
|
||||||
node.inner.add_or_update(
|
|
||||||
annotations::SETTINGS_UNIT_ANGLE,
|
|
||||||
Expr::Name(Box::new(Name::new(&angle.to_string()))),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Previous source range no longer makes sense, but we want to
|
// Previous source range no longer makes sense, but we want to
|
||||||
// preserve other things like comments.
|
// preserve other things like comments.
|
||||||
@ -396,12 +389,6 @@ impl Node<Program> {
|
|||||||
Expr::Name(Box::new(Name::new(&len.to_string()))),
|
Expr::Name(Box::new(Name::new(&len.to_string()))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if let Some(angle) = angle_units {
|
|
||||||
settings.inner.add_or_update(
|
|
||||||
annotations::SETTINGS_UNIT_ANGLE,
|
|
||||||
Expr::Name(Box::new(Name::new(&angle.to_string()))),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
new_program.inner_attrs.push(settings);
|
new_program.inner_attrs.push(settings);
|
||||||
}
|
}
|
||||||
@ -4247,7 +4234,7 @@ startSketchOn(XY)"#;
|
|||||||
|
|
||||||
// Edit the ast.
|
// Edit the ast.
|
||||||
let new_program = program
|
let new_program = program
|
||||||
.change_default_units(Some(crate::execution::types::UnitLen::Mm), None)
|
.change_default_units(Some(crate::execution::types::UnitLen::Mm))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let result = new_program.meta_settings().unwrap();
|
let result = new_program.meta_settings().unwrap();
|
||||||
@ -4276,7 +4263,7 @@ startSketchOn(XY)
|
|||||||
|
|
||||||
// Edit the ast.
|
// Edit the ast.
|
||||||
let new_program = program
|
let new_program = program
|
||||||
.change_default_units(Some(crate::execution::types::UnitLen::Mm), None)
|
.change_default_units(Some(crate::execution::types::UnitLen::Mm))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let result = new_program.meta_settings().unwrap();
|
let result = new_program.meta_settings().unwrap();
|
||||||
@ -4311,7 +4298,7 @@ startSketchOn(XY)
|
|||||||
let program = crate::parsing::top_level_parse(code).unwrap();
|
let program = crate::parsing::top_level_parse(code).unwrap();
|
||||||
|
|
||||||
let new_program = program
|
let new_program = program
|
||||||
.change_default_units(Some(crate::execution::types::UnitLen::Cm), None)
|
.change_default_units(Some(crate::execution::types::UnitLen::Cm))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let result = new_program.meta_settings().unwrap();
|
let result = new_program.meta_settings().unwrap();
|
||||||
|
@ -109,7 +109,6 @@ impl TyF64 {
|
|||||||
|
|
||||||
pub fn to_degrees(&self) -> f64 {
|
pub fn to_degrees(&self) -> f64 {
|
||||||
let angle = match self.ty {
|
let angle = match self.ty {
|
||||||
NumericType::Default { angle, .. } => angle,
|
|
||||||
NumericType::Known(UnitType::Angle(angle)) => angle,
|
NumericType::Known(UnitType::Angle(angle)) => angle,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
@ -121,7 +120,6 @@ impl TyF64 {
|
|||||||
|
|
||||||
pub fn to_radians(&self) -> f64 {
|
pub fn to_radians(&self) -> f64 {
|
||||||
let angle = match self.ty {
|
let angle = match self.ty {
|
||||||
NumericType::Default { angle, .. } => angle,
|
|
||||||
NumericType::Known(UnitType::Angle(angle)) => angle,
|
NumericType::Known(UnitType::Angle(angle)) => angle,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
@ -31,7 +31,7 @@ export PI = 3.14159265358979323846264338327950288_?
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 30,
|
/// angle = 30deg,
|
||||||
/// length = 2 * E ^ 2,
|
/// length = 2 * E ^ 2,
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
@ -47,7 +47,7 @@ export E = 2.71828182845904523536028747135266250_
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 50,
|
/// angle = 50deg,
|
||||||
/// length = 10 * TAU,
|
/// length = 10 * TAU,
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
@ -63,7 +63,7 @@ export TAU = 6.28318530717958647692528676655900577_
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 30,
|
/// angle = 30deg,
|
||||||
/// length = 3 / cos(30deg),
|
/// length = 3 / cos(30deg),
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
@ -80,7 +80,7 @@ export fn cos(@num: number(Angle)): number(Count) {}
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 50,
|
/// angle = 50deg,
|
||||||
/// length = 15 / sin(135deg),
|
/// length = 15 / sin(135deg),
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
@ -97,7 +97,7 @@ export fn sin(@num: number(Angle)): number(Count) {}
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 50,
|
/// angle = 50deg,
|
||||||
/// length = 50 * tan((1/2): number(rad)),
|
/// length = 50 * tan((1/2): number(rad)),
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
@ -185,7 +185,7 @@ export fn atan2(y: number(Length), x: number(Length)): number(rad) {}
|
|||||||
/// ```
|
/// ```
|
||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> line(end = polar(angle = 30, length = 5), tag = $thing)
|
/// |> line(end = polar(angle = 30deg, length = 5), tag = $thing)
|
||||||
/// |> line(end = [0, 5])
|
/// |> line(end = [0, 5])
|
||||||
/// |> line(end = [segEndX(thing), 0])
|
/// |> line(end = [segEndX(thing), 0])
|
||||||
/// |> line(end = [-20, 10])
|
/// |> line(end = [-20, 10])
|
||||||
@ -226,7 +226,7 @@ export fn rem(
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 50,
|
/// angle = 50deg,
|
||||||
/// length = sqrt(2500),
|
/// length = sqrt(2500),
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
@ -312,7 +312,7 @@ export fn ceil(@input: number): number {}
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 70,
|
/// angle = 70deg,
|
||||||
/// length = min([15, 31, 4, 13, 22])
|
/// length = min([15, 31, 4, 13, 22])
|
||||||
/// )
|
/// )
|
||||||
/// |> line(end = [20, 0])
|
/// |> line(end = [20, 0])
|
||||||
@ -332,7 +332,7 @@ export fn min(
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 70,
|
/// angle = 70deg,
|
||||||
/// length = max([15, 31, 4, 13, 22])
|
/// length = max([15, 31, 4, 13, 22])
|
||||||
/// )
|
/// )
|
||||||
/// |> line(end = [20, 0])
|
/// |> line(end = [20, 0])
|
||||||
@ -352,7 +352,7 @@ export fn max(
|
|||||||
/// exampleSketch = startSketchOn(XZ)
|
/// exampleSketch = startSketchOn(XZ)
|
||||||
/// |> startProfile(at = [0, 0])
|
/// |> startProfile(at = [0, 0])
|
||||||
/// |> angledLine(
|
/// |> angledLine(
|
||||||
/// angle = 50,
|
/// angle = 50deg,
|
||||||
/// length = pow(5, exp = 2),
|
/// length = pow(5, exp = 2),
|
||||||
/// )
|
/// )
|
||||||
/// |> yLine(endAbsolute = 0)
|
/// |> yLine(endAbsolute = 0)
|
||||||
|
Reference in New Issue
Block a user