配合QET将margin改为0的代码,转换后的坐标为对齐点坐标

master
liaoxianglian 4 months ago
parent 7c6d79bfc0
commit 82cccec6f3

@ -148,20 +148,32 @@ impl From<&DynamicText> for XMLElement {
println!("对齐方式:{}, {}", txt.h_alignment, txt.v_alignment);
println!("文本宽度: {}", txt_width);
println!("文本高度:{}", pt_size);
println!("初始位置: x={}, y={}", txt.align_x, txt.align_y);
println!("初始左下角位置: x={}, y={}", txt.x, txt.y);
println!("初始对齐位置: x={}, y={}", txt.align_x, txt.align_y);
println!("旋转角度: {}", txt.rotation);
// println!("cjk_char_count: {}", cjk_char_count);
// 计算基础位置(不考虑旋转)
// txt.x和txt.y现在是对齐点坐标需要根据对齐方式计算出左上角位置
// 首先根据水平对齐方式计算左边界的x坐标
let left_x = txt.x;
// let left_x = txt.x;
let left_x = match txt.h_alignment {
HAlignment::Left => txt.x - 0.5,
HAlignment::Center => txt.align_x - 1.0,
HAlignment::Right => txt.align_x - 2.0
};
// 根据垂直对齐方式计算顶部的y坐标
// let top_y = match txt.v_alignment {
// VAlignment::Top => txt.y + pt_size / 2.0,
// VAlignment::Center => txt.y - pt_size / 2.0,
// VAlignment::Bottom => txt.y - pt_size + pt_size / 2.0,
// };
let top_y = match txt.v_alignment {
VAlignment::Top => txt.y + pt_size / 2.0,
VAlignment::Center => txt.y - pt_size / 2.0,
VAlignment::Bottom => txt.y - pt_size + pt_size / 2.0,
VAlignment::Top => txt.align_y - 0.5,
VAlignment::Center => txt.align_y + 0.5,
VAlignment::Bottom => txt.y + 1.0
};
println!("左上角位置: x={}, y={}", left_x, top_y);
@ -170,14 +182,16 @@ impl From<&DynamicText> for XMLElement {
let cjk_offset:f64 = (cjk_char_count as f64) * pt_size * 0.75;
// 左对齐是不需要中文偏移的,居中对齐需要偏移,右对齐要偏移
let base_x = left_x + 0.5 - (pt_size / 8.0) - 4.05;
let base_x = left_x;// + 0.5 - (pt_size / 8.0) - 4.05;
// - match txt.h_alignment {
// HAlignment::Left => 0.0,
// HAlignment::Center => cjk_offset / 2.0,
// HAlignment::Right => cjk_offset,
// };
let base_y = top_y + 0.5 - (7.0 / 5.0 * pt_size + 26.0 / 5.0) + pt_size;
// let base_y = top_y + 0.5 - (7.0 / 5.0 * pt_size + 26.0 / 5.0) + pt_size;
let base_y = top_y;
// 如果有旋转角度,应用旋转变换
let (x_pos, y_pos) = if txt.rotation != 0.0 {
@ -244,6 +258,8 @@ impl ScaleEntity for DynamicText {
fn scale(&mut self, fact_x: f64, fact_y: f64) {
self.x *= fact_x;
self.y *= fact_y;
self.align_x *= fact_x;
self.align_y *= fact_y;
//self.font.pixel_size *= fact;
self.font.point_size *= fact_x;
}

Loading…
Cancel
Save