use super::CadDocument;
use crate::entities::{mirror::valid_transform, MirrorOptions, MirrorPlane};
use crate::types::{Handle, Transform, Vector3};
impl CadDocument {
pub fn mirror_entity(&mut self, handle: Handle, first: Vector3, second: Vector3) -> bool {
let options = MirrorOptions {
mirror_text: self.header.mirror_text,
..MirrorOptions::default()
};
self.mirror_entity_with_options(handle, first, second, options)
}
pub fn mirror_entity_with_options(
&mut self,
handle: Handle,
first: Vector3,
second: Vector3,
options: MirrorOptions,
) -> bool {
self.mirror_entity_with_transform(
handle,
Transform::from_mirror_line(first, second),
options,
)
}
pub fn mirror3d_entity(&mut self, handle: Handle, plane: MirrorPlane) -> bool {
let options = MirrorOptions {
mirror_text: self.header.mirror_text,
..MirrorOptions::default()
};
self.mirror3d_entity_with_options(handle, plane, options)
}
pub fn mirror3d_entity_with_options(
&mut self,
handle: Handle,
plane: MirrorPlane,
options: MirrorOptions,
) -> bool {
self.mirror_entity_with_transform(handle, plane.transform(), options)
}
fn mirror_entity_with_transform(
&mut self,
handle: Handle,
transform: Transform,
options: MirrorOptions,
) -> bool {
if !valid_transform(&transform) {
return false;
}
let Some(source) = self.get_entity(handle) else {
return false;
};
if !crate::entities::transform::transform_invalidates_raw_record(source) {
return false;
}
let Some(entity) = self.get_entity_mut(handle) else {
return false;
};
entity.apply_mirror_with_options(&transform, options);
true
}
}