Add clone (#5462)
* updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> update the extrude idds Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> fix sample Signed-off-by: Jess Frazelle <github@jessfraz.com> better docs Signed-off-by: Jess Frazelle <github@jessfraz.com> fix the start and end tag Signed-off-by: Jess Frazelle <github@jessfraz.com> better docs Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> new tests Signed-off-by: Jess Frazelle <github@jessfraz.com> codespell Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix examples Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix some stuff Signed-off-by: Jess Frazelle <github@jessfraz.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * add another test for fillet Signed-off-by: Jess Frazelle <github@jessfraz.com> * Update rust/kcl-lib/src/std/clone.rs Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> * fixes Signed-off-by: Jess Frazelle <github@jessfraz.com> * add sweep test Signed-off-by: Jess Frazelle <github@jessfraz.com> * revolve test; Signed-off-by: Jess Frazelle <github@jessfraz.com> * Update rust/kcl-lib/src/std/clone.rs Co-authored-by: Jonathan Tran <jonnytran@gmail.com> * add another test for fillet Signed-off-by: Jess Frazelle <github@jessfraz.com> * allow cloning an imported geometry; Signed-off-by: Jess Frazelle <github@jessfraz.com> * allow for imported geometry Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * update docs Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
This commit is contained in:
@ -47,6 +47,29 @@ impl Geometry {
|
||||
}
|
||||
}
|
||||
|
||||
/// A geometry including an imported geometry.
|
||||
#[derive(Debug, Clone, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
||||
#[ts(export)]
|
||||
#[serde(tag = "type")]
|
||||
pub enum GeometryWithImportedGeometry {
|
||||
Sketch(Sketch),
|
||||
Solid(Solid),
|
||||
ImportedGeometry(Box<ImportedGeometry>),
|
||||
}
|
||||
|
||||
impl GeometryWithImportedGeometry {
|
||||
pub async fn id(&mut self, ctx: &ExecutorContext) -> Result<uuid::Uuid, KclError> {
|
||||
match self {
|
||||
GeometryWithImportedGeometry::Sketch(s) => Ok(s.id),
|
||||
GeometryWithImportedGeometry::Solid(e) => Ok(e.id),
|
||||
GeometryWithImportedGeometry::ImportedGeometry(i) => {
|
||||
let id = i.id(ctx).await?;
|
||||
Ok(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// A set of geometry.
|
||||
#[derive(Debug, Clone, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
||||
#[ts(export)]
|
||||
@ -807,7 +830,10 @@ pub struct Solid {
|
||||
/// Chamfers or fillets on this solid.
|
||||
#[serde(default, skip_serializing_if = "Vec::is_empty")]
|
||||
pub edge_cuts: Vec<EdgeCut>,
|
||||
/// The units of the solid.
|
||||
pub units: UnitLen,
|
||||
/// Is this a sectional solid?
|
||||
pub sectional: bool,
|
||||
/// Metadata.
|
||||
#[serde(skip)]
|
||||
pub meta: Vec<Metadata>,
|
||||
@ -858,6 +884,13 @@ impl EdgeCut {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_id(&mut self, id: uuid::Uuid) {
|
||||
match self {
|
||||
EdgeCut::Fillet { id: ref mut i, .. } => *i = id,
|
||||
EdgeCut::Chamfer { id: ref mut i, .. } => *i = id,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn edge_id(&self) -> uuid::Uuid {
|
||||
match self {
|
||||
EdgeCut::Fillet { edge_id, .. } => *edge_id,
|
||||
@ -865,6 +898,13 @@ impl EdgeCut {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_edge_id(&mut self, id: uuid::Uuid) {
|
||||
match self {
|
||||
EdgeCut::Fillet { edge_id: ref mut i, .. } => *i = id,
|
||||
EdgeCut::Chamfer { edge_id: ref mut i, .. } => *i = id,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn tag(&self) -> Option<TagNode> {
|
||||
match self {
|
||||
EdgeCut::Fillet { tag, .. } => *tag.clone(),
|
||||
@ -1184,6 +1224,21 @@ impl Path {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_id(&mut self, id: uuid::Uuid) {
|
||||
match self {
|
||||
Path::ToPoint { base } => base.geo_meta.id = id,
|
||||
Path::Horizontal { base, .. } => base.geo_meta.id = id,
|
||||
Path::AngledLineTo { base, .. } => base.geo_meta.id = id,
|
||||
Path::Base { base } => base.geo_meta.id = id,
|
||||
Path::TangentialArcTo { base, .. } => base.geo_meta.id = id,
|
||||
Path::TangentialArc { base, .. } => base.geo_meta.id = id,
|
||||
Path::Circle { base, .. } => base.geo_meta.id = id,
|
||||
Path::CircleThreePoint { base, .. } => base.geo_meta.id = id,
|
||||
Path::Arc { base, .. } => base.geo_meta.id = id,
|
||||
Path::ArcThreePoint { base, .. } => base.geo_meta.id = id,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_tag(&self) -> Option<TagNode> {
|
||||
match self {
|
||||
Path::ToPoint { base } => base.tag.clone(),
|
||||
|
@ -9,8 +9,8 @@ use crate::{
|
||||
execution::{
|
||||
annotations::{SETTINGS, SETTINGS_UNIT_LENGTH},
|
||||
types::{NumericType, PrimitiveType, RuntimeType, UnitLen},
|
||||
EnvironmentRef, ExecState, Face, Helix, ImportedGeometry, MetaSettings, Metadata, Plane, Sketch, Solid,
|
||||
TagIdentifier,
|
||||
EnvironmentRef, ExecState, Face, Geometry, GeometryWithImportedGeometry, Helix, ImportedGeometry, MetaSettings,
|
||||
Metadata, Plane, Sketch, Solid, TagIdentifier,
|
||||
},
|
||||
parsing::ast::types::{
|
||||
DefaultParamVal, FunctionExpression, KclNone, Literal, LiteralValue, Node, TagDeclarator, TagNode,
|
||||
@ -611,3 +611,22 @@ impl KclValue {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<Geometry> for KclValue {
|
||||
fn from(value: Geometry) -> Self {
|
||||
match value {
|
||||
Geometry::Sketch(x) => Self::Sketch { value: Box::new(x) },
|
||||
Geometry::Solid(x) => Self::Solid { value: Box::new(x) },
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<GeometryWithImportedGeometry> for KclValue {
|
||||
fn from(value: GeometryWithImportedGeometry) -> Self {
|
||||
match value {
|
||||
GeometryWithImportedGeometry::Sketch(x) => Self::Sketch { value: Box::new(x) },
|
||||
GeometryWithImportedGeometry::Solid(x) => Self::Solid { value: Box::new(x) },
|
||||
GeometryWithImportedGeometry::ImportedGeometry(x) => Self::ImportedGeometry(*x),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user