美文网首页
可视化拖拽画布布局、标尺(3)

可视化拖拽画布布局、标尺(3)

作者: 大乔是个美少女 | 来源:发表于2021-03-29 09:50 被阅读0次

需求一:计算完成标尺前后位置,在缩放条件下要保持缩放总长度相同。

scale = 0.57
scale=1.0

解决:


计算完成坐标数组

在渲染坐标数组时,{((x / props.store.scale) * 100).toFixed(0)} 对坐标数值除以缩放比,还原为真实数值。

需求二:实现标尺基准线和标线效果

image.png
image.png
基准标线的位置 = 屏幕位置 - 画布左上角坐标 + 滚动条位移
#  (屏幕位置 - 画布左上角坐标 - 0点偏移量) 是画布上真实的长度数值,除以缩放比还原为真实数据
基准标线显示数值 =  (屏幕位置 - 画布左上角坐标 - 0点偏移量) / 缩放比
# 存储标线的坐标位置时,按照基准标线显示数值计算逻辑,存储真实数值。
标线位置 = 真实数值 * 缩放比 + 0点偏移量 + padding width
标线显示数值 = 真实数值

需求三:当有画布元素超出画布宽高,重新计算画布宽度,和居中位置

当图表超出画布宽高时,应该按照画布元素最左顶点和画布最左边最小值,画布最右顶点和画布最右边最大值,计算画布宽度。
因为画布总是居中于中间层画布,需要对(新计算宽度 - 原始画布宽度)* 2,保证两边增加相同距离,画布对称。


image.png
// 最大宽高
export const getMaxWidgetsLength = (
    canvas_width: number,
    canvas_height: number,
    widgets?: WidgetPC[],
) => {
    const wrapper_padding = 200; // 边框

    let max_left = 0,
        max_right = canvas_width,
        max_top = 0,
        max_bottom = canvas_height;

    if (widgets) {
        widgets.map((w) => {
            if (w.x) {
                max_left = max_left < w.x ? max_left : w.x; // 最左边最小值
                max_right = max_right < w.x + w.w ? w.x + w.w : max_right; // 最大值
                max_top = max_top < w.y ? max_top : w.y; // 最上边最小值
                max_bottom = max_bottom < w.y + w.h ? w.y + w.h : max_bottom; // 最大值
            }
        });
    }

    /* 因为画位于中间层画布的中心位置,所以添加宽度和高度的时候,需要增加两倍的大小 */
    const offset_x = max_right - max_left - canvas_width;
    const offset_y = max_bottom - max_top - canvas_height;

    return {
        calc_width: canvas_width + 2 * offset_x + wrapper_padding,
        calc_height: canvas_height + 2 * offset_y + wrapper_padding,
    };
};

相关文章

  • 可视化拖拽画布布局、标尺(3)

    需求一:计算完成标尺前后位置,在缩放条件下要保持缩放总长度相同。 解决: 在渲染坐标数组时,{((x / prop...

  • 可视化拖拽画布布局、标尺(2)

    最近对之前的可视化布局页面进行了优化:1.对画布编辑条件下,增加边栏,方便用户对拖出画布部分的内容进行查看。2.优...

  • 可视化拖拽画布布局、标尺(1)

    最近对之前的可视化布局页面进行了优化:1.对画布编辑条件下,增加边栏,方便用户对拖出画布部分的内容进行查看。2.优...

  • 如何实现一款轻量级的可视化画布引擎

    在很多定制化的可视化场景中,拖拽、缩放、全屏操作必不可少,尤其对于业务复杂的可视化需求,当画布内容足够多,可视区域...

  • Vue-grid-layout实现web拖拽布局功能

    最近在完成web端在线绘图功能时,需要开发一个从左侧拖拽一种图标到画布中。调研了非常多种现在做拖拽布局的组件,调研...

  • ps

    command + r 显示隐藏标尺在标尺上可以拖拽参考线可以通过移动工具拖拽回去,也可以通过在视图菜单中选择清...

  • Android开发 - UI

    虽然Android Studio提供了可视化编辑工具来让你通过拖拽的方式进行页面布局,但是这不利于真正了解界面背后...

  • 低代码平台和BPMS

    目前工作环境中涉及到的低代码平台,常规意义上被称之为流程中心,即围绕着可视化拖拽的画布,用户可以通过流程编排的方式...

  • 我的PS学习之路(3)—表盘绘制

    一、新建画布,设好标尺和网格 1.新建画布:设置宽度:800像素,高度:600像素;分辨率72像素/英寸,RGB格...

  • ConstraintLayout_1:可视化拖拽布局

    前言 ConstraintLayout是安卓后期推出的一个优秀的布局组件,它最主要的一个优点,就是可以有效地解决布...

网友评论

      本文标题:可视化拖拽画布布局、标尺(3)

      本文链接:https://www.haomeiwen.com/subject/qyivhltx.html