修复色域拖拽回弹、网格 GX 拖拽重排、均值滤波多阶与逐信号条目
1. 自定义颜色面板:拖动时鼠标移出控件不再"弹回去"
- 根因是选点位置每帧都从 RGB 反推:色相 1 与 0 是同一个颜色(红),拖到色相条底部
下一帧反推回 0,指示条弹到顶部;拖到色域方块右下角之外时明度为 0(黑色),
黑色的饱和度无定义,反推得 0,选点弹到最左边。
- 现在把"选点位置(饱和度/明度)与色相"作为独立状态保存,只由对应控件与外部改色维护;
越界一律夹取到最近边界,因此鼠标离开控件后选点停在边界上。
- 统一色域方块、色相条、预览色块与色号框的圆角;RGB 滑块适当加粗;
色域选点去掉外圈深色描边(只保留白色描边),色相指示器改为白色描边的圆角长方条、
底色取该位置的颜色;色相条改用分段线性渐变绘制。
2. 网格 GX 编号支持拖拽重排
- 按住网格图例左侧的 GX 徽标即可上下拖动,整块网格(连同波形与标尺)跟随鼠标移动;
途经的网格保持自身大小、整体让出一格,目标槽位有吸附高亮提示。
- 松开后真正重排并从下到上/从上到下重新编号,信号列表徽标、图例徽标、菜单与浮动面板
中所有 GX 编号同步更新;手动排布后切换为自定义划分,后续重建网格不会打乱次序。
- 拖动期间复用静态场景缓存,按网格条带平移贴图,因此大文件下依然流畅。
3. 均值滤波升级为"均值点数 X + 阶数 N"
- 原"均值点数 N"更名"均值点数 X",新增"阶数 N":预览曲线以 X 点均值滤波的结果为蓝本,
再重复同样的滤波共 N 阶(1 阶即与原来的单次滤波逐位一致)。
- 浮动面板改为逐信号条目:第一排是信号名与复选框,第二排是均值点数与阶数输入;
只有勾选的信号才绘制预览曲线,未勾选时不显示第二排;启用功能时默认只勾选第一个信号。
- 参数按信号保存(同一网格内不同信号可用不同参数),「构建为新信号」按各自参数构建。
This commit is contained in:
1 parent
2d029fb09b
commit
bc8db72f18
8 files changed
+1138
-181
No files matched your search
@@ -254,9 +254,9 @@ namespace jdi
|
||||
double CurrentHue() const;
|
||||
|
||||
/**
|
||||
* @brief RGB 分量变化后刷新记忆色相(仅在饱和度足够大时更新)。
|
||||
* @brief RGB 分量变化后刷新派生的色相与饱和度/明度选择状态。
|
||||
*/
|
||||
void RefreshHueFromChannels();
|
||||
void RefreshSelectionFromChannels();
|
||||
|
||||
/**
|
||||
* @brief 销毁色域方块缓存位图(尺寸或色相变化时重建)。
|
||||
@@ -281,6 +281,14 @@ namespace jdi
|
||||
DragTarget m_drag = DragTarget::NONE; /**< 正在拖拽的控件。 */
|
||||
std::array<double, 3> m_channels = {0.0, 0.0, 0.0}; /**< RGB 分量(0-1,唯一数据源)。 */
|
||||
double m_hue = 0.0; /**< 记忆色相(0-1);灰度/黑色时保留上次取值。 */
|
||||
/**
|
||||
* @brief 色域方块上的选点位置(饱和度/明度,均为 0-1)。
|
||||
*
|
||||
* 必须**与 RGB 分开保存**:黑色/灰色的饱和度无定义,若每帧都从 RGB 反推,
|
||||
* 把选点拖到方块右边界之外(明度归零)时选点会瞬间弹回最左侧。
|
||||
*/
|
||||
double m_sat = 0.0;
|
||||
double m_val = 0.0;
|
||||
|
||||
gd::RectF m_rect; /**< 面板整体矩形。 */
|
||||
gd::RectF m_titleRect; /**< 标题区域。 */
|
||||
|
||||
Reference in new issue
Block a user