1use kittycad_modeling_cmds_macros::define_modeling_cmd_enum;
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5pub use self::each_cmd::*;
6use crate::{self as kittycad_modeling_cmds};
7
8define_modeling_cmd_enum! {
9 pub mod each_cmd {
10 use std::collections::HashSet;
11
12 use crate::{self as kittycad_modeling_cmds};
13 use kittycad_modeling_cmds_macros::{ModelingCmdVariant};
14 use parse_display_derive::{Display, FromStr};
15 use schemars::JsonSchema;
16 use serde::{Deserialize, Serialize};
17 use uuid::Uuid;
18 use crate::shared::CameraViewState;
19
20 use crate::{
21 format::{OutputFormat2d, OutputFormat3d},
22 id::ModelingCmdId,
23 length_unit::LengthUnit,
24 shared::{
25 Angle,
26 ComponentTransform,
27 RelativeTo,
28 CutType,
29 CutStrategy,
30 CameraMovement,
31 ExtrudedFaceInfo, ExtrudeMethod,
32 AnnotationOptions, AnnotationType, CameraDragInteractionType, Color, DistanceType, EntityType,
33 PathComponentConstraintBound, PathComponentConstraintType, PathSegment, PerspectiveCameraParameters,
34 Point2d, Point3d, ExtrudeReference, SceneSelectionType, SceneToolType, Opposite,
35 },
36 units,
37 };
38
39 fn default_animation_seconds() -> f64 {
41 0.4
42 }
43
44 fn default_uuid_vector() -> Vec<Uuid> {
46 Vec::new()
47 }
48
49 #[derive(
51 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
52 )]
53 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
54 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
55 pub struct EngineUtilEvaluatePath {
56 pub path_json: String,
58
59 pub t: f64,
61 }
62
63 #[derive(
65 Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
66 )]
67 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
68 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
69 pub struct StartPath {}
70
71 #[derive(
79 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
80 )]
81 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
82 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
83 pub struct MovePathPen {
84 pub path: ModelingCmdId,
86 pub to: Point3d<LengthUnit>,
88 }
89
90 #[derive(
93 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
94 )]
95 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
96 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
97 pub struct ExtendPath {
98 pub path: ModelingCmdId,
100 pub segment: PathSegment,
103 #[serde(default, skip_serializing_if = "Option::is_none")]
105 pub label: Option<String>,
106 }
107
108 #[derive(
110 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
111 )]
112 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
113 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
114 pub struct Extrude {
115 pub target: ModelingCmdId,
118 pub distance: LengthUnit,
120 #[serde(default)]
123 pub faces: Option<ExtrudedFaceInfo>,
124 #[serde(default)]
127 pub opposite: Opposite<LengthUnit>,
128 #[serde(default)]
130 pub extrude_method: ExtrudeMethod,
131 }
132
133 #[derive(
135 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
136 )]
137 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
138 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
139 pub struct ExtrudeToReference {
140 pub target: ModelingCmdId,
143 pub reference: ExtrudeReference,
146 #[serde(default)]
149 pub faces: Option<ExtrudedFaceInfo>,
150 #[serde(default)]
152 pub extrude_method: ExtrudeMethod,
153 }
154
155 fn default_twist_extrude_section_interval() -> Angle {
156 Angle::from_degrees(15.0)
157 }
158
159 #[derive(
161 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
162 )]
163 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
164 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
165 pub struct TwistExtrude {
166 pub target: ModelingCmdId,
169 pub distance: LengthUnit,
171 #[serde(default)]
174 pub faces: Option<ExtrudedFaceInfo>,
175 #[serde(default)]
177 pub center_2d: Point2d<f64>,
178 pub total_rotation_angle: Angle,
180 #[serde(default = "default_twist_extrude_section_interval")]
182 pub angle_step_size: Angle,
183 pub tolerance: LengthUnit,
185 }
186
187 #[derive(
189 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
190 )]
191 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
192 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
193 pub struct Sweep {
194 pub target: ModelingCmdId,
197 pub trajectory: ModelingCmdId,
199 pub sectional: bool,
201 pub tolerance: LengthUnit,
203 #[serde(default)]
205 pub relative_to: RelativeTo,
206 }
207
208 #[derive(
210 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
211 )]
212 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
213 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
214 pub struct Revolve {
215 pub target: ModelingCmdId,
218 pub origin: Point3d<LengthUnit>,
220 pub axis: Point3d<f64>,
222 pub axis_is_2d: bool,
224 pub angle: Angle,
226 pub tolerance: LengthUnit,
228 #[serde(default)]
231 pub opposite: Opposite<Angle>,
232 }
233
234 #[derive(
236 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
237 )]
238 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
239 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
240 pub struct Solid3dShellFace {
241 pub object_id: Uuid,
243 pub face_ids: Vec<Uuid>,
245 pub shell_thickness: LengthUnit,
248 #[serde(default)]
250 pub hollow: bool,
251 }
252
253 #[derive(
255 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
256 )]
257 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
258 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
259 pub struct RevolveAboutEdge {
260 pub target: ModelingCmdId,
263 pub edge_id: Uuid,
265 pub angle: Angle,
267 pub tolerance: LengthUnit,
269 #[serde(default)]
272 pub opposite: Opposite<Angle>,
273 }
274
275 #[derive(
277 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant
278 )]
279 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
280 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
281 pub struct Loft {
282 pub section_ids: Vec<Uuid>,
285 pub v_degree: std::num::NonZeroU32,
288 pub bez_approximate_rational: bool,
292 pub base_curve_index: Option<u32>,
294 pub tolerance: LengthUnit,
296 }
297
298
299 #[derive(
301 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
302 )]
303 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
304 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
305 pub struct ClosePath {
306 pub path_id: Uuid,
308 }
309
310 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
312 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
313 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
314 pub struct CameraDragStart {
315 pub interaction: CameraDragInteractionType,
317 pub window: Point2d,
319 }
320
321 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
323 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
324 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
325 pub struct CameraDragMove {
326 pub interaction: CameraDragInteractionType,
328 pub window: Point2d,
330 pub sequence: Option<u32>,
335 }
336
337 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
339 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
340 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
341 pub struct CameraDragEnd {
342 pub interaction: CameraDragInteractionType,
344 pub window: Point2d,
346 }
347
348 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
350 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
351 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
352 pub struct DefaultCameraGetSettings {}
353
354 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
356 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
357 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
358 pub struct DefaultCameraGetView {}
359
360 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
362 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
363 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
364 pub struct DefaultCameraSetView {
365 pub view: CameraViewState,
367 }
368
369 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
371 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
372 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
373 pub struct DefaultCameraLookAt {
374 pub vantage: Point3d,
376 pub center: Point3d,
378 pub up: Point3d,
380 pub sequence: Option<u32>,
385 }
386
387 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
389 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
390 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
391 pub struct DefaultCameraPerspectiveSettings {
392 pub vantage: Point3d,
394 pub center: Point3d,
396 pub up: Point3d,
398 pub fov_y: Option<f32>,
400 pub z_near: Option<f32>,
402 pub z_far: Option<f32>,
404 pub sequence: Option<u32>,
409 }
410
411 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
413 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
414 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
415 pub struct DefaultCameraZoom {
416 pub magnitude: f32,
420 }
421
422 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
424 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
425 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
426 pub struct Export2d {
427 pub entity_ids: Vec<Uuid>,
429 pub format: OutputFormat2d,
431 }
432
433 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
435 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
436 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
437 pub struct Export3d {
438 pub entity_ids: Vec<Uuid>,
440 pub format: OutputFormat3d,
442 }
443
444 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
446 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
447 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
448 pub struct Export {
449 pub entity_ids: Vec<Uuid>,
451 pub format: OutputFormat3d,
453 }
454
455 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
457 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
458 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
459 pub struct EntityGetParentId {
460 pub entity_id: Uuid,
462 }
463
464 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
466 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
467 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
468 pub struct EntityGetNumChildren {
469 pub entity_id: Uuid,
471 }
472
473 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
475 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
476 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
477 pub struct EntityGetChildUuid {
478 pub entity_id: Uuid,
480 pub child_index: u32,
482 }
483
484 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
486 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
487 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
488 pub struct EntityGetAllChildUuids {
489 pub entity_id: Uuid,
491 }
492
493 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
495 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
496 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
497 pub struct EntityGetSketchPaths {
498 pub entity_id: Uuid,
500 }
501
502 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
504 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
505 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
506 pub struct EntityGetDistance {
507 pub entity_id1: Uuid,
509 pub entity_id2: Uuid,
511 pub distance_type: DistanceType,
513 }
514
515 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
518 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
519 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
520 pub struct EntityClone {
521 pub entity_id: Uuid,
523 }
524
525 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
528 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
529 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
530 pub struct EntityLinearPatternTransform {
531 pub entity_id: Uuid,
533 #[serde(default)]
537 pub transform: Vec<crate::shared::Transform>,
538 #[serde(default)]
542 pub transforms: Vec<Vec<crate::shared::Transform>>,
543 }
544
545 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
547 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
548 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
549 pub struct EntityLinearPattern {
550 pub entity_id: Uuid,
552 pub axis: Point3d<f64>,
555 pub num_repetitions: u32,
557 pub spacing: LengthUnit,
559 }
560 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
562 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
563 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
564 pub struct EntityCircularPattern {
565 pub entity_id: Uuid,
567 pub axis: Point3d<f64>,
570 pub center: Point3d<LengthUnit>,
573 pub num_repetitions: u32,
575 pub arc_degrees: f64,
577 pub rotate_duplicates: bool,
579 }
580
581 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
583 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
584 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
585 pub struct EntityMakeHelix {
586 pub cylinder_id: Uuid,
588 pub revolutions: f64,
590 #[serde(default)]
592 pub start_angle: Angle,
593 pub is_clockwise: bool,
595 pub length: Option<LengthUnit>,
597 }
598
599 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
601 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
602 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
603 pub struct EntityMakeHelixFromParams {
604 pub radius: LengthUnit,
606 pub length: LengthUnit,
608 pub revolutions: f64,
610 #[serde(default)]
612 pub start_angle: Angle,
613 pub is_clockwise: bool,
615 pub center: Point3d<LengthUnit>,
617 pub axis: Point3d<f64>,
619 }
620
621 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
623 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
624 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
625 pub struct EntityMakeHelixFromEdge {
626 pub radius: LengthUnit,
628 pub length: Option<LengthUnit>,
630 pub revolutions: f64,
632 #[serde(default)]
634 pub start_angle: Angle,
635 pub is_clockwise: bool,
637 pub edge_id: Uuid,
639 }
640
641 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
643 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
644 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
645 pub struct EntityMirror {
646 pub ids: Vec<Uuid>,
648 pub axis: Point3d<f64>,
650 pub point: Point3d<LengthUnit>,
652 }
653
654 #[derive(
656 Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant,
657 )]
658 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
659 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
660 pub struct EntityMirrorAcrossEdge {
661 pub ids: Vec<Uuid>,
663 pub edge_id: Uuid,
665 }
666
667 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
670 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
671 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
672 pub struct SelectWithPoint {
673 pub selected_at_window: Point2d,
675 pub selection_type: SceneSelectionType,
677 }
678
679 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
681 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
682 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
683 pub struct SelectAdd {
684 pub entities: Vec<Uuid>,
686 }
687
688 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
690 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
691 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
692 pub struct SelectRemove {
693 pub entities: Vec<Uuid>,
695 }
696
697 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
699 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
700 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
701 pub struct SceneClearAll {}
702
703 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
705 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
706 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
707 pub struct SelectReplace {
708 pub entities: Vec<Uuid>,
710 }
711
712 #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
715 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
716 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
717 pub struct HighlightSetEntity {
718 pub selected_at_window: Point2d,
720 pub sequence: Option<u32>,
725 }
726
727 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
729 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
730 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
731 pub struct HighlightSetEntities {
732 pub entities: Vec<Uuid>,
734 }
735
736 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
738 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
739 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
740 pub struct NewAnnotation {
741 pub options: AnnotationOptions,
743 pub clobber: bool,
745 pub annotation_type: AnnotationType,
747 }
748
749 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
751 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
752 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
753 pub struct UpdateAnnotation {
754 pub annotation_id: Uuid,
756 pub options: AnnotationOptions,
759 }
760
761 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
763 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
764 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
765 pub struct EdgeLinesVisible {
766 pub hidden: bool,
768 }
769
770 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
772 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
773 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
774 pub struct ObjectVisible {
775 pub object_id: Uuid,
777 pub hidden: bool,
779 }
780
781 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
783 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
784 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
785 pub struct ObjectBringToFront {
786 pub object_id: Uuid,
788 }
789
790 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
792 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
793 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
794 pub struct ObjectSetMaterialParamsPbr {
795 pub object_id: Uuid,
797 pub color: Color,
799 pub metalness: f32,
801 pub roughness: f32,
803 pub ambient_occlusion: f32,
805 }
806 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
808 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
809 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
810 pub struct GetEntityType {
811 pub entity_id: Uuid,
813 }
814
815 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
817 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
818 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
819 pub struct Solid3dGetAllEdgeFaces {
820 pub object_id: Uuid,
822 pub edge_id: Uuid,
824 }
825
826 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
828 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
829 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
830 pub struct Solid2dAddHole {
831 pub object_id: Uuid,
833 pub hole_id: Uuid,
835 }
836
837 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
839 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
840 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
841 pub struct Solid3dGetAllOppositeEdges {
842 pub object_id: Uuid,
844 pub edge_id: Uuid,
846 pub along_vector: Option<Point3d<f64>>,
848 }
849
850 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
852 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
853 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
854 pub struct Solid3dGetOppositeEdge {
855 pub object_id: Uuid,
857 pub edge_id: Uuid,
859 pub face_id: Uuid,
861 }
862
863 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
865 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
866 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
867 pub struct Solid3dGetNextAdjacentEdge {
868 pub object_id: Uuid,
870 pub edge_id: Uuid,
872 pub face_id: Uuid,
874 }
875
876 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
878 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
879 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
880 pub struct Solid3dGetPrevAdjacentEdge {
881 pub object_id: Uuid,
883 pub edge_id: Uuid,
885 pub face_id: Uuid,
887 }
888
889 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
891 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
892 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
893 pub struct Solid3dGetCommonEdge {
894 pub object_id: Uuid,
896 pub face_ids: [Uuid; 2]
898 }
899
900 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
902 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
903 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
904 pub struct Solid3dFilletEdge {
905 pub object_id: Uuid,
907 #[serde(default)]
909 pub edge_id: Option<Uuid>,
910 #[serde(default)]
912 pub edge_ids: Vec<Uuid>,
913 pub radius: LengthUnit,
915 pub tolerance: LengthUnit,
917 #[serde(default)]
919 pub cut_type: CutType,
920 #[serde(default)]
922 pub strategy: CutStrategy,
923 #[serde(default)]
931 pub extra_face_ids: Vec<Uuid>,
932 }
933
934 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
936 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
937 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
938 pub struct FaceIsPlanar {
939 pub object_id: Uuid,
941 }
942
943 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
945 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
946 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
947 pub struct FaceGetPosition {
948 pub object_id: Uuid,
950
951 pub uv: Point2d<f64>,
953 }
954
955 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
957 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
958 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
959 pub struct FaceGetCenter {
960 pub object_id: Uuid,
962 }
963
964 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
966 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
967 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
968 pub struct FaceGetGradient {
969 pub object_id: Uuid,
971
972 pub uv: Point2d<f64>,
974 }
975
976 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
978 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
979 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
980 pub struct SendObject {
981 pub object_id: Uuid,
983 pub front: bool,
985 }
986 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
988 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
989 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
990 pub struct EntitySetOpacity {
991 pub entity_id: Uuid,
993 pub opacity: f32,
997 }
998
999 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1001 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1002 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1003 pub struct EntityFade {
1004 pub entity_id: Uuid,
1006 pub fade_in: bool,
1008 #[serde(default = "default_animation_seconds")]
1010 pub duration_seconds: f64,
1011 }
1012
1013 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1015 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1016 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1017 pub struct MakePlane {
1018 pub origin: Point3d<LengthUnit>,
1020 pub x_axis: Point3d<f64>,
1022 pub y_axis: Point3d<f64>,
1024 pub size: LengthUnit,
1028 pub clobber: bool,
1030 pub hide: Option<bool>,
1032 }
1033
1034 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1036 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1037 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1038 pub struct PlaneSetColor {
1039 pub plane_id: Uuid,
1041 pub color: Color,
1043 }
1044
1045 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1047 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1048 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1049 pub struct SetTool {
1050 pub tool: SceneToolType,
1052 }
1053
1054 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1056 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1057 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1058 pub struct MouseMove {
1059 pub window: Point2d,
1061 pub sequence: Option<u32>,
1066 }
1067
1068 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1071 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1072 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1073 pub struct MouseClick {
1074 pub window: Point2d,
1076 }
1077
1078 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1082 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1083 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1084 pub struct SketchModeDisable {}
1085
1086 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1088 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1089 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1090 pub struct GetSketchModePlane {}
1091
1092 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1094 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1095 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1096 pub struct CurveSetConstraint {
1097 pub object_id: Uuid,
1099 pub constraint_bound: PathComponentConstraintBound,
1101 pub constraint_type: PathComponentConstraintType,
1103 }
1104
1105 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1107 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1108 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1109 pub struct EnableSketchMode {
1110 pub entity_id: Uuid,
1112 pub ortho: bool,
1115 pub animated: bool,
1117 pub adjust_camera: bool,
1119 pub planar_normal: Option<Point3d<f64>>,
1122 }
1123
1124 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1128 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1129 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1130 pub struct EnableDryRun {}
1131
1132 #[derive(Debug, Clone, Default, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1136 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1137 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1138 pub struct DisableDryRun {}
1139
1140 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1142 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1143 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1144 pub struct SetBackgroundColor {
1145 pub color: Color,
1147 }
1148
1149 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1151 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1152 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1153 pub struct SetCurrentToolProperties {
1154 pub color: Option<Color>,
1156 }
1157
1158 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1160 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1161 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1162 pub struct SetDefaultSystemProperties {
1163 pub color: Option<Color>,
1165 }
1166
1167 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1169 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1170 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1171 pub struct CurveGetType {
1172 pub curve_id: Uuid,
1174 }
1175
1176 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1178 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1179 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1180 pub struct CurveGetControlPoints {
1181 pub curve_id: Uuid,
1183 }
1184
1185 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1187 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1188 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1189 pub struct ProjectEntityToPlane {
1190 pub entity_id: Uuid,
1192 pub plane_id: Uuid,
1194 pub use_plane_coords: bool,
1197 }
1198
1199 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1201 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1202 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1203 pub struct ProjectPointsToPlane {
1204 pub plane_id: Uuid,
1206 pub points: Vec<Point3d<f64>>,
1208 pub use_plane_coords: bool,
1211 }
1212
1213 #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize, JsonSchema, FromStr, Display)]
1215 #[serde(rename_all = "snake_case")]
1216 #[display(style = "snake_case")]
1217 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1218 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1219 #[cfg_attr(feature = "python", pyo3::pyclass, pyo3_stub_gen::derive::gen_stub_pyclass_enum)]
1220 pub enum ImageFormat {
1221 Png,
1223 Jpeg,
1225 }
1226
1227 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1229 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1230 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1231 pub struct TakeSnapshot {
1232 pub format: ImageFormat,
1234 }
1235
1236 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1238 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1239 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1240 pub struct MakeAxesGizmo {
1241 pub gizmo_mode: bool,
1244 pub clobber: bool,
1246 }
1247
1248 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1250 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1251 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1252 pub struct PathGetInfo {
1253 pub path_id: Uuid,
1255 }
1256
1257 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1259 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1260 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1261 pub struct PathGetCurveUuidsForVertices {
1262 pub path_id: Uuid,
1264
1265 pub vertex_ids: Vec<Uuid>,
1267 }
1268
1269 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1271 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1272 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1273 pub struct PathGetCurveUuid {
1274 pub path_id: Uuid,
1276
1277 pub index: u32,
1279 }
1280
1281 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1283 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1284 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1285 pub struct PathGetVertexUuids {
1286 pub path_id: Uuid,
1288 }
1289
1290 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1292 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1293 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1294 pub struct PathGetSketchTargetUuid {
1295 pub path_id: Uuid,
1297 }
1298
1299 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1301 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1302 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1303 pub struct HandleMouseDragStart {
1304 pub window: Point2d,
1306 }
1307
1308 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1310 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1311 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1312 pub struct HandleMouseDragMove {
1313 pub window: Point2d,
1315 pub sequence: Option<u32>,
1320 }
1321
1322 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1324 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1325 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1326 pub struct HandleMouseDragEnd {
1327 pub window: Point2d,
1329 }
1330
1331 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1333 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1334 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1335 pub struct RemoveSceneObjects {
1336 pub object_ids: HashSet<Uuid>,
1338 }
1339
1340 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1343 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1344 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1345 pub struct PlaneIntersectAndProject {
1346 pub plane_id: Uuid,
1348 pub window: Point2d,
1350 }
1351
1352 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1354 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1355 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1356 pub struct CurveGetEndPoints {
1357 pub curve_id: Uuid,
1359 }
1360
1361 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1363 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1364 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1365 pub struct ReconfigureStream {
1366 pub width: u32,
1368 pub height: u32,
1370 pub fps: u32,
1372 #[serde(default)]
1374 pub bitrate: Option<u32>,
1375 }
1376
1377 #[derive(Debug, Eq, PartialEq, Clone, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1379 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1380 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1381 pub struct ImportFiles {
1382 pub files: Vec<super::ImportFile>,
1384 pub format: crate::format::InputFormat3d,
1386 }
1387
1388 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1393 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1394 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1395 pub struct SetSceneUnits {
1396 pub unit: units::UnitLength,
1398 }
1399
1400 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1402 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1403 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1404 pub struct Mass {
1405 pub entity_ids: Vec<Uuid>,
1408 pub material_density: f64,
1410 pub material_density_unit: units::UnitDensity,
1412 pub output_unit: units::UnitMass,
1414 }
1415
1416 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1418 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1419 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1420 pub struct Density {
1421 pub entity_ids: Vec<Uuid>,
1424 pub material_mass: f64,
1426 pub material_mass_unit: units::UnitMass,
1428 pub output_unit: units::UnitDensity,
1430 }
1431
1432 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1434 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1435 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1436 pub struct Volume {
1437 pub entity_ids: Vec<Uuid>,
1440 pub output_unit: units::UnitVolume,
1442 }
1443
1444 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1446 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1447 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1448 pub struct CenterOfMass {
1449 pub entity_ids: Vec<Uuid>,
1452 pub output_unit: units::UnitLength,
1454 }
1455
1456 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1458 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1459 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1460 pub struct SurfaceArea {
1461 pub entity_ids: Vec<Uuid>,
1464 pub output_unit: units::UnitArea,
1466 }
1467
1468 #[derive(
1470 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1471 )]
1472 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1473 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1474 pub struct DefaultCameraFocusOn {
1475 pub uuid: Uuid,
1477 }
1478 #[derive(
1480 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1481 )]
1482 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1483 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1484 pub struct SetSelectionType {
1485 pub selection_type: SceneSelectionType,
1487 }
1488
1489 #[derive(
1491 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1492 )]
1493 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1494 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1495 pub struct SetSelectionFilter {
1496 pub filter: Vec<EntityType>,
1499 }
1500
1501 #[derive(
1503 Clone, Debug, Default, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1504 )]
1505 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1506 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1507 pub struct DefaultCameraSetOrthographic {}
1508
1509 #[derive(
1511 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1512 )]
1513 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1514 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1515 pub struct DefaultCameraSetPerspective {
1516 pub parameters: Option<PerspectiveCameraParameters>,
1518 }
1519
1520 #[derive(
1523 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1524 )]
1525 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1526 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1527 pub struct DefaultCameraCenterToSelection {
1528 #[serde(default)]
1531 pub camera_movement: CameraMovement,
1532 }
1533
1534 #[derive(
1536 Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1537 )]
1538 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1539 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1540 pub struct DefaultCameraCenterToScene {
1541 #[serde(default)]
1544 pub camera_movement: CameraMovement,
1545 }
1546
1547 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1549 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1550 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1551 pub struct ZoomToFit {
1552 #[serde(default = "default_uuid_vector")]
1554 pub object_ids: Vec<Uuid>,
1555 #[serde(default)]
1560 pub padding: f32,
1561 #[serde(default)]
1563 pub animated: bool,
1564 }
1565
1566 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1568 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1569 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1570 pub struct OrientToFace {
1571 pub face_id: Uuid,
1573 #[serde(default)]
1578 pub padding: f32,
1579 #[serde(default)]
1581 pub animated: bool,
1582 }
1583
1584 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1586 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1587 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1588 pub struct ViewIsometric {
1589 #[serde(default = "f32::default")]
1594 pub padding: f32,
1595 }
1596
1597 #[derive(Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1599 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1600 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1601 pub struct Solid3dGetExtrusionFaceInfo {
1602 pub object_id: Uuid,
1604 pub edge_id: Uuid,
1606 }
1607
1608 #[derive(Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1610 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1611 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1612 pub struct Solid3dGetAdjacencyInfo {
1613 pub object_id: Uuid,
1615 pub edge_id: Uuid,
1617 }
1618
1619
1620 #[derive(Clone, Debug, Default, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1622 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1623 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1624 pub struct SelectClear {}
1625
1626 #[derive(Clone, Debug, Default, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1628 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1629 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1630 pub struct SelectGet {}
1631
1632 #[derive(
1634 Clone, Debug, Default, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant,
1635 )]
1636 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1637 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1638 pub struct GetNumObjects {}
1639
1640 #[derive(
1642 Clone, Debug, Deserialize, PartialEq, JsonSchema, Serialize, ModelingCmdVariant,
1643 )]
1644 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1645 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1646 pub struct SetObjectTransform
1647 {
1648 pub object_id: Uuid,
1650 pub transforms: Vec<ComponentTransform>,
1652 }
1653
1654 #[derive(
1657 Clone, Debug, Deserialize, PartialEq, JsonSchema, Serialize, ModelingCmdVariant,
1658 )]
1659 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1660 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1661 pub struct BooleanUnion
1662 {
1663 pub solid_ids: Vec<Uuid>,
1666 pub tolerance: LengthUnit,
1668 }
1669
1670 #[derive(
1673 Clone, Debug, Deserialize, PartialEq, JsonSchema, Serialize, ModelingCmdVariant,
1674 )]
1675 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1676 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1677 pub struct BooleanIntersection
1678 {
1679 pub solid_ids: Vec<Uuid>,
1681 pub tolerance: LengthUnit,
1683 }
1684
1685 #[derive(
1689 Clone, Debug, Deserialize, PartialEq, JsonSchema, Serialize, ModelingCmdVariant,
1690 )]
1691 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1692 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1693 pub struct BooleanSubtract
1694 {
1695 pub target_ids: Vec<Uuid>,
1697 pub tool_ids: Vec<Uuid>,
1699 pub tolerance: LengthUnit,
1701 }
1702
1703 #[derive(Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1706 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1707 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1708 pub struct MakeOffsetPath {
1709 pub object_id: Uuid,
1711 #[serde(default)]
1716 pub face_id: Option<Uuid>,
1717 pub offset: LengthUnit,
1719 }
1720
1721 #[derive(Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1723 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1724 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1725 pub struct AddHoleFromOffset {
1726 pub object_id: Uuid,
1728 pub offset: LengthUnit,
1730 }
1731
1732 #[derive(Clone, Debug, PartialEq, Deserialize, JsonSchema, Serialize, ModelingCmdVariant)]
1734 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1735 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1736 pub struct SetGridReferencePlane {
1737 pub grid_id: Uuid,
1739 pub reference_id: Uuid,
1742 }
1743
1744 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1746 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1747 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1748 pub struct SetGridScale {
1749 pub value: f32,
1751 pub units: units::UnitLength,
1753 }
1754 #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, JsonSchema, ModelingCmdVariant)]
1757 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1758 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1759 pub struct SetGridAutoScale {
1760 }
1761 }
1762}
1763
1764impl ModelingCmd {
1765 pub fn is_safe_to_batch(&self) -> bool {
1767 use ModelingCmd::*;
1768 matches!(
1769 self,
1770 MovePathPen(_)
1771 | ExtendPath(_)
1772 | Extrude(_)
1773 | Revolve(_)
1774 | Solid3dFilletEdge(_)
1775 | ClosePath(_)
1776 | UpdateAnnotation(_)
1777 | ObjectVisible(_)
1778 | ObjectBringToFront(_)
1779 | Solid2dAddHole(_)
1780 | SendObject(_)
1781 | EntitySetOpacity(_)
1782 | PlaneSetColor(_)
1783 | SetTool(_)
1784 )
1785 }
1786}
1787
1788#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema, Eq, PartialEq)]
1792#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
1793#[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
1794pub struct ImportFile {
1795 pub path: String,
1797 #[serde(
1799 serialize_with = "serde_bytes::serialize",
1800 deserialize_with = "serde_bytes::deserialize"
1801 )]
1802 pub data: Vec<u8>,
1803}