Sketch on face (#1371)
* add extra metadata to extrudeGroup * add boilerplate Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup and generate docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * change plane id to entity id Signed-off-by: Jess Frazelle <github@jessfraz.com> * generate docs Signed-off-by: Jess Frazelle <github@jessfraz.com> * get face id from extrude using segment tag * cleanup a bit Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup a bit Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix doc comment Signed-off-by: Jess Frazelle <github@jessfraz.com> * get rid of face_id in geo_meta Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * sketch on face test Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * cleanup edge_id Signed-off-by: Jess Frazelle <github@jessfraz.com> * updates Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix value Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix test Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> * fix tests Signed-off-by: Jess Frazelle <github@jessfraz.com> --------- Signed-off-by: Jess Frazelle <github@jessfraz.com> Co-authored-by: Kurt Hutten Irev-Dev <k.hutten@protonmail.ch>
This commit is contained in:
@ -22,13 +22,14 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use self::kcl_stdlib::KclStdLibFn;
|
||||
use crate::{
|
||||
ast::types::parse_json_number_as_f64,
|
||||
ast::types::{parse_json_number_as_f64, parse_json_value_as_string},
|
||||
docs::StdLibFn,
|
||||
engine::EngineManager,
|
||||
errors::{KclError, KclErrorDetails},
|
||||
executor::{
|
||||
ExecutorContext, ExtrudeGroup, Geometry, MemoryItem, Metadata, Plane, SketchGroup, SketchGroupSet, SourceRange,
|
||||
ExecutorContext, ExtrudeGroup, Geometry, MemoryItem, Metadata, SketchGroup, SketchGroupSet, SourceRange,
|
||||
},
|
||||
std::sketch::SketchSurface,
|
||||
};
|
||||
|
||||
pub type StdFn = fn(Args) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<MemoryItem, KclError>>>>;
|
||||
@ -384,7 +385,6 @@ impl Args {
|
||||
})
|
||||
})?
|
||||
.get_json_value()?;
|
||||
|
||||
let data: String = serde_json::from_value(first_value).map_err(|e| {
|
||||
KclError::Type(KclErrorDetails {
|
||||
message: format!("Expected a file path string: {}", e),
|
||||
@ -406,6 +406,33 @@ impl Args {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_data_and_optional_tag<T: serde::de::DeserializeOwned>(&self) -> Result<(T, Option<String>), KclError> {
|
||||
let first_value = self
|
||||
.args
|
||||
.first()
|
||||
.ok_or_else(|| {
|
||||
KclError::Type(KclErrorDetails {
|
||||
message: format!("Expected a struct as the first argument, found `{:?}`", self.args),
|
||||
source_ranges: vec![self.source_range],
|
||||
})
|
||||
})?
|
||||
.get_json_value()?;
|
||||
|
||||
let data: T = serde_json::from_value(first_value).map_err(|e| {
|
||||
KclError::Type(KclErrorDetails {
|
||||
message: format!("Failed to deserialize struct from JSON: {}", e),
|
||||
source_ranges: vec![self.source_range],
|
||||
})
|
||||
})?;
|
||||
|
||||
if let Some(second_value) = self.args.get(1) {
|
||||
let tag = parse_json_value_as_string(&second_value.get_json_value()?);
|
||||
Ok((data, tag))
|
||||
} else {
|
||||
Ok((data, None))
|
||||
}
|
||||
}
|
||||
|
||||
fn get_data_and_sketch_group<T: serde::de::DeserializeOwned>(&self) -> Result<(T, Box<SketchGroup>), KclError> {
|
||||
let first_value = self
|
||||
.args
|
||||
@ -487,7 +514,7 @@ impl Args {
|
||||
Ok((data, geometry))
|
||||
}
|
||||
|
||||
fn get_data_and_plane<T: serde::de::DeserializeOwned>(&self) -> Result<(T, Box<Plane>), KclError> {
|
||||
fn get_data_and_sketch_surface<T: serde::de::DeserializeOwned>(&self) -> Result<(T, SketchSurface), KclError> {
|
||||
let first_value = self
|
||||
.args
|
||||
.first()
|
||||
@ -513,16 +540,21 @@ impl Args {
|
||||
})
|
||||
})?;
|
||||
|
||||
let plane = if let MemoryItem::Plane(p) = second_value {
|
||||
p.clone()
|
||||
let sketch_surface = if let MemoryItem::Plane(p) = second_value {
|
||||
SketchSurface::Plane(p.clone())
|
||||
} else if let MemoryItem::Face(face) = second_value {
|
||||
SketchSurface::Face(face.clone())
|
||||
} else {
|
||||
return Err(KclError::Type(KclErrorDetails {
|
||||
message: format!("Expected a Plane as the second argument, found `{:?}`", self.args),
|
||||
message: format!(
|
||||
"Expected a plane or face (SketchSurface) as the second argument, found `{:?}`",
|
||||
self.args
|
||||
),
|
||||
source_ranges: vec![self.source_range],
|
||||
}));
|
||||
};
|
||||
|
||||
Ok((data, plane))
|
||||
Ok((data, sketch_surface))
|
||||
}
|
||||
|
||||
fn get_segment_name_to_number_sketch_group(&self) -> Result<(String, f64, Box<SketchGroup>), KclError> {
|
||||
|
Reference in New Issue
Block a user