You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整矩形大小时位置偏移问题排查

问题原因及修复方案

核心问题

偏移问题是因为切换调整角(如从RM转为LM)时,没有重新同步startPoint与当前鼠标位置的对应关系,导致后续的差值计算(diffX)基于旧的基准点,进而引发位置和尺寸的错误偏移。

代码中的具体问题

  1. 在Corner.RM分支中,当newWidth < 0切换为Corner.LM时,startPoint仍保留之前的鼠标位置,未根据新的调整逻辑重置基准——RM是基于右边缘调整,切换为LM后需以左边缘为基准,但startPoint未同步更新。
  2. 同理,Corner.LM分支切换为Corner.RM时,startPoint也未同步更新,导致后续计算基准错误。
  3. RM分支直接用newPoint.X - left设置宽度,和diffX的计算逻辑脱节,切换角时更容易出现基准混乱。

修复方案

切换调整角时,重新计算并设置startPoint,让新的调整逻辑基于正确基准点,同时统一尺寸计算逻辑:

public void HandleMouseMove(object sender, MouseEventArgs e)
{
    if (isResizing)
    {
        Point newPoint = Mouse.GetPosition(MainCanvas);

        double left = Canvas.GetLeft(editor.SelectedArea);
        double width = editor.SelectedArea.Width;

        double diffX = newPoint.X - startPoint.X;

        switch (currentCorner)
        {
            case Corner.RM:
                double newWidth = width + diffX;
                if (newWidth < 0)
                {
                    // 切换为LM时,重置startPoint为矩形左边缘的对应基准点
                    currentCorner = Corner.LM;
                    startPoint = new Point(left, startPoint.Y);
                }
                else
                {
                    editor.SelectedArea.Width = newWidth;
                }
                break;

            case Corner.LM:
                double newWidthLm = width - diffX;
                if (newWidthLm < 0)
                {
                    // 切换为RM时,重置startPoint为矩形右边缘的对应基准点
                    currentCorner = Corner.RM;
                    startPoint = new Point(left + width, startPoint.Y);
                }
                else
                {
                    Canvas.SetLeft(editor.SelectedArea, left + diffX);
                    editor.SelectedArea.Width = newWidthLm;
                }
                break;
        }
        startPoint = newPoint;
    }
}

修复说明

  • 切换调整角时,根据新逻辑重置startPoint:比如从RM切到LM时,将startPoint设为当前矩形左边缘的X坐标,确保后续diffX计算基于左边缘的偏移。
  • 统一用diffX计算新尺寸和位置,避免与基准点无关的直接计算,保证逻辑一致性。

内容的提问来源于stack exchange,提问作者White Mage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 04:35:02