修复上下拖动时的绘制异常/抽搐(纵向预渲染补齐)+「弱峰增强」升级为「弱峰调整」(-200%–+200%)
一、纵向绘制异常/抽搐的根因 上一轮给图层加了「上下各半个网格高」的纵向预渲染余量,但"偏移超出余量"时仍走**排队整块重画** (一帧只补一个网格):重画生效前 BlitWideBuffer 只能贴出有像素的那一部分,其余行留在底色上 = 网格内出现空白条带("绘制错误");且重画后的锚点与"贴图偏移"不同源 = 波形"没按预期移动"。 鼠标按在最上方网格一路拖到窗口最下方(离开网格很远)时,每帧的幅值位移都远超余量 → 每帧触发整块 重画 = 抽搐;左右拖动时若鼠标同时有纵向位移,同样触发。 二、修法:与横向完全同构的纵向滚动 - RenderLaneLayerRegion 增加 stripY/stripH(纵向条带),可只补画"新暴露的一整条"。 - RollWideBuffer 新增纵向滚动:BitBlt 整块上/下移 roll 行 → 补画暴露的那一条 → layer.anchorYMax -= roll / pxPerValue(与横向 wideMin 同一套记账)。 必须在横向补条之前(横向补条会用当前 yMax 重置图层锚点,顺序反了细条会带上错的纵向偏移)。 - 滚动量量化(kLayerRollQuantum = 16 像素):不足量子的偏移不滚,交给贴图的 srcY 偏移处理, 使画布映射在拖动中保持稳定、折线缓存(键含幅值映射)得以命中。 未量化时"每帧滚 1~30 行"会让折线每帧重算(实测滚动 3~4ms + 整帧 10~14ms)。 三、「弱峰调整」(原「弱峰增强」) - 术语统一:ComputeWeakPeakAdjust、WeakPeakItem.amountPercent(-200–200,默认 150)、面板标题 「弱峰调整」、标签「调整幅度 %」、光标胶囊尾缀、构建信号名「<原信号> (弱峰调整 X% M次迭代)」。 - 滑块量程 -200% – +200%,0 在正中间(ratio = (amount/200 + 1) / 2);数值列加宽以容纳 "-200%"。 - 目标值(识别规则与旧实现完全相同;amount = 幅度/100): * 0 ≤ a ≤ 1:当前值 → 同类极值中较温和的一侧; * 1 < a ≤ 2:该侧 → 另一侧(与旧实现逐位一致); * -1 ≤ a < 0:当前值 → 相邻异类极值中较近的一个(波峰看较高的波谷、波谷看较低的波峰); * -2 ≤ a < -1:较近的异类极值 → 较远的那个(弱峰被压平甚至抹除,左右平滑过渡)。 - 负幅度不得反向增强:目标夹在"不越过当前值"的一侧。平滑偏移的逐点过渡逻辑未改动。 四、验证(全部离屏,不占用鼠标/键盘/屏幕) - uitest 443/443:[X] 正幅度 0/50/100/150/200% → 峰 550/555/560/580/600(旧值逐位保持)、 谷 450/445/440/420/400;新增负幅度 -50/-100/-200% → 峰 500/450/400、谷 500/550/560; 超范围夹取、"未反向增强"(极值点)、健康峰不动;滑块中间 = 0%、拖出两端 = ±200%; 构建信号名含「弱峰调整」;[AH] 纯竖直拖拽 16 帧仅 2 次图层重画。 - panperf:拖出网格 900px + 对角平移 31 帧,被拖网格的空白行数与整幅重绘逐帧一致(64 vs 64 → 无空白条带),帧时 10~13ms,末帧差异与水平基线同量级(已知的 ≤0.5px 整数像素残差)。 - layercheck:clobbers=0/24、pan frames wrong=0/4、居中图层 vs 整幅重绘逐像素 0 差异; cursorcheck 30/30;make clean && make all 零警告。
This commit is contained in:
1 parent
cb030573fa
commit
ff3319b842
7 files changed
+380
-224
No files matched your search
@@ -43,8 +43,8 @@ namespace jdi
|
||||
MOVE_SIGNAL, /**< 拖拽信号曲线到其它网格。 */
|
||||
EDGE_MOVE, /**< 拖动「边沿计数」的横向光标(上下移动幅值)。 */
|
||||
EDGE_PANEL_MOVE, /**< 拖动边沿计数浮动面板。 */
|
||||
PEAK_LEVEL, /**< 拖动「弱峰增强」某信号的等级滑块(0–200%)。 */
|
||||
PEAK_ITERATIONS, /**< 拖动「弱峰增强」某信号的迭代次数滑块(1 … 该信号自定义上限)。 */
|
||||
PEAK_LEVEL, /**< 拖动「弱峰调整」某信号的等级滑块(0–200%)。 */
|
||||
PEAK_ITERATIONS, /**< 拖动「弱峰调整」某信号的迭代次数滑块(1 … 该信号自定义上限)。 */
|
||||
LANE_REORDER /**< 拖动网格图例中的 GX 编号徽标:上下调整网格次序。 */
|
||||
};
|
||||
|
||||
@@ -73,7 +73,7 @@ namespace jdi
|
||||
EDGE_CENTER_ITERATIONS, /**< 编辑「中心轴边沿计数」的迭代次数 N。 */
|
||||
MEAN_FILTER_POINTS, /**< 编辑「均值滤波」的均值点数 X。 */
|
||||
MEAN_FILTER_ITERATIONS, /**< 编辑「均值滤波」的迭代次数 N。 */
|
||||
PEAK_ITERATIONS_MAX /**< 编辑「弱峰增强」某信号「迭代次数 N」滑块的**上限**(正整数)。 */
|
||||
PEAK_ITERATIONS_MAX /**< 编辑「弱峰调整」某信号「迭代次数 N」滑块的**上限**(正整数)。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -91,7 +91,7 @@ namespace jdi
|
||||
PLOT_CMD_LANE_EDGE_CENTER = 8, /**< 切换本网格的「实验性功能 → 边沿计数(中心轴)」开关。 */
|
||||
PLOT_CMD_LANE_SPLIT = 9, /**< 拆分当前网格:把网格内信号按个拆成独立网格并顺次下移编号。 */
|
||||
PLOT_CMD_LANE_MEAN_FILTER = 10, /**< 切换本网格的「实验性功能 → 均值滤波」开关。 */
|
||||
PLOT_CMD_LANE_WEAK_PEAK = 11 /**< 切换本网格的「实验性功能 → 弱峰增强」开关。 */
|
||||
PLOT_CMD_LANE_WEAK_PEAK = 11 /**< 切换本网格的「实验性功能 → 弱峰调整」开关。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -102,7 +102,7 @@ namespace jdi
|
||||
COUNT = 0, /**< 边沿计数。 */
|
||||
CENTER = 1, /**< 边沿计数(中心轴)。 */
|
||||
MEAN = 2, /**< 均值滤波。 */
|
||||
PEAK = 3 /**< 弱峰增强。 */
|
||||
PEAK = 3 /**< 弱峰调整。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -113,7 +113,7 @@ namespace jdi
|
||||
enum class DerivedCurveKind : int
|
||||
{
|
||||
MEAN_FILTER = 0, /**< 多次迭代均值滤波。 */
|
||||
WEAK_PEAK = 1 /**< 弱峰增强。 */
|
||||
WEAK_PEAK = 1 /**< 弱峰调整。 */
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -570,19 +570,19 @@ namespace jdi
|
||||
bool TakePendingMeanFilterBuild(int& laneIndex, std::vector<MeanFilterBuild>& items);
|
||||
|
||||
/**
|
||||
* @brief 「实验性功能 → 弱峰增强」的「构建为新信号」单个请求
|
||||
* @brief 「实验性功能 → 弱峰调整」的「构建为新信号」单个请求
|
||||
* (一个被勾选的信号 + **它自己的**增强等级与迭代次数,与均值滤波同构)。
|
||||
*/
|
||||
struct WeakPeakBuild
|
||||
{
|
||||
int fileIndex = -1; /**< 信号所属文件下标。 */
|
||||
int signalIndex = -1; /**< 文件内信号下标。 */
|
||||
int levelPercent = 150; /**< 弱峰增强等级(0–200)。 */
|
||||
int amountPercent = 150; /**< 弱峰调整等级(0–200)。 */
|
||||
int iterations = 1; /**< 迭代次数 N(1–10)。 */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief 取出「弱峰增强 → 构建为新信号」请求(由面板底部按钮触发)。
|
||||
* @brief 取出「弱峰调整 → 构建为新信号」请求(由面板底部按钮触发)。
|
||||
* @param [OUT] laneIndex 触发该请求的网格下标。
|
||||
* @param [OUT] items 需要构建的信号及其参数(按信号在网格内的顺序)。
|
||||
* @return 存在待处理请求返回 true(取出后清空)。
|
||||
@@ -590,7 +590,7 @@ namespace jdi
|
||||
bool TakePendingWeakPeakBuild(int& laneIndex, std::vector<WeakPeakBuild>& items);
|
||||
|
||||
/**
|
||||
* @brief 切换某网格的「弱峰增强」开关。
|
||||
* @brief 切换某网格的「弱峰调整」开关。
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @param [IN] enabled 是否开启。
|
||||
* @return 状态发生变化返回 true。
|
||||
@@ -598,44 +598,44 @@ namespace jdi
|
||||
bool SetLaneWeakPeak(int laneIndex, bool enabled);
|
||||
|
||||
/**
|
||||
* @brief 查询某网格的「弱峰增强」开关。
|
||||
* @brief 查询某网格的「弱峰调整」开关。
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @return 已开启返回 true。
|
||||
*/
|
||||
bool LaneWeakPeak(int laneIndex) const;
|
||||
|
||||
/**
|
||||
* @brief 切换某网格的「弱峰增强」开关。
|
||||
* @brief 切换某网格的「弱峰调整」开关。
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @return 切换后的状态。
|
||||
*/
|
||||
bool ToggleLaneWeakPeak(int laneIndex);
|
||||
|
||||
/**
|
||||
* @brief 获取弱峰增强曲线(按「信号 + 增强等级 + 迭代次数」缓存)。
|
||||
* @brief 获取弱峰调整曲线(按「信号 + 增强等级 + 迭代次数」缓存)。
|
||||
* @param [IN] signal 目标信号。
|
||||
* @param [IN] levelPercent 弱峰增强等级(0–200,整数百分比)。
|
||||
* @param [IN] amountPercent 弱峰调整等级(0–200,整数百分比)。
|
||||
* @param [IN] iterations 迭代次数 N(1–10)。
|
||||
* @return 曲线数值数组(长度与 `signal.values` 相同;缺失处为 NaN)。
|
||||
*/
|
||||
const std::vector<float>& WeakPeakCurveFor(const SignalData& signal, int levelPercent,
|
||||
const std::vector<float>& WeakPeakCurveFor(const SignalData& signal, int amountPercent,
|
||||
int iterations) const;
|
||||
|
||||
/**
|
||||
* @brief 取某个时刻的弱峰增强曲线取值(用于纵向光标的取值标注)。
|
||||
* @brief 取某个时刻的弱峰调整曲线取值(用于纵向光标的取值标注)。
|
||||
* @param [IN] file 信号所属文件。
|
||||
* @param [IN] signal 目标信号。
|
||||
* @param [IN] levelPercent 弱峰增强等级(0–200)。
|
||||
* @param [IN] amountPercent 弱峰调整等级(0–200)。
|
||||
* @param [IN] iterations 迭代次数 N(1–10)。
|
||||
* @param [IN] time 采样时刻。
|
||||
* @param [OUT] value 输出取值。
|
||||
* @return 取到有效值返回 true。
|
||||
*/
|
||||
bool WeakPeakValueAt(const DataFile& file, const SignalData& signal, int levelPercent, int iterations,
|
||||
bool WeakPeakValueAt(const DataFile& file, const SignalData& signal, int amountPercent, int iterations,
|
||||
double time, double& value) const;
|
||||
|
||||
/**
|
||||
* @brief 切换某个信号在「弱峰增强」面板中的预览勾选状态。
|
||||
* @brief 切换某个信号在「弱峰调整」面板中的预览勾选状态。
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @param [IN] ref 目标信号。
|
||||
* @return 切换后的勾选状态。
|
||||
@@ -643,7 +643,7 @@ namespace jdi
|
||||
bool ToggleLaneWeakPeakSignal(int laneIndex, const SignalRef& ref);
|
||||
|
||||
/**
|
||||
* @brief 查询某个信号在「弱峰增强」面板中的预览勾选状态。
|
||||
* @brief 查询某个信号在「弱峰调整」面板中的预览勾选状态。
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @param [IN] ref 目标信号。
|
||||
* @return 已勾选返回 true。
|
||||
@@ -1072,7 +1072,7 @@ namespace jdi
|
||||
const std::vector<double>& timeTicks);
|
||||
|
||||
/**
|
||||
* @brief 绘制某网格的全部**派生预览曲线**(均值滤波 / 中心轴 / 弱峰增强),叠加在原信号之上。
|
||||
* @brief 绘制某网格的全部**派生预览曲线**(均值滤波 / 中心轴 / 弱峰调整),叠加在原信号之上。
|
||||
*
|
||||
* 从 `PaintLane` 抽出,供「宽缓冲区」前台路径复用:宽缓冲只存"基底"(网格/波形),
|
||||
* 派生曲线每帧作为叠加层单独绘制,因此拖派生参数滑块时无需重画波形。
|
||||
@@ -1155,7 +1155,7 @@ namespace jdi
|
||||
std::vector<gd::RectF> rowIterations;
|
||||
std::vector<gd::RectF> rowStats;
|
||||
/**
|
||||
* @brief 「弱峰增强」每个被勾选信号自己的两行**滑块**(与 `rowRefs` 同序)。
|
||||
* @brief 「弱峰调整」每个被勾选信号自己的两行**滑块**(与 `rowRefs` 同序)。
|
||||
*
|
||||
* `rowLevelTracks/rowLevelValues` = 增强等级滑块与它右侧的数值文本;
|
||||
* `rowIterTracks/rowIterValues` = 迭代次数滑块与它右侧的数值文本
|
||||
@@ -1295,20 +1295,20 @@ namespace jdi
|
||||
* @brief 取得某个采样区间内的派生曲线(带缓存)。
|
||||
*
|
||||
* ⚠️ **性能关键**:派生曲线只用于“看得见的那一段”,而整条信号可能有数千万个采样点
|
||||
* (VERY_BIG_DATA 为 2576 万)。若每次都重算整条曲线(实测弱峰增强 ~800ms/条),
|
||||
* (VERY_BIG_DATA 为 2576 万)。若每次都重算整条曲线(实测弱峰调整 ~800ms/条),
|
||||
* 拖动等级/迭代次数滑块时每帧要花几秒钟,交互完全卡死。
|
||||
* 本函数只计算“所需区间 ± 保护带”,并按(信号 + 参数 + 对齐后的区间)缓存:
|
||||
* 实测单条降到 1~3ms,滑块拖动与平移因此恢复流畅。
|
||||
*
|
||||
* 保护带保证可见区间内的取值与“整条曲线”一致:均值滤波的核是有限宽度,
|
||||
* 弱峰增强的修正沿相邻极值向内传播(每迭代一次传一个极值),
|
||||
* 弱峰调整的修正沿相邻极值向内传播(每迭代一次传一个极值),
|
||||
* 因此只要求保护带足够宽(见 `kDerivedCurveGuard` 系列常量)。
|
||||
*
|
||||
* @param [IN] kind 曲线种类。
|
||||
* @param [IN] signal 目标信号。
|
||||
* @param [IN] points 均值点数 X(仅 `MEAN_FILTER` 使用)。
|
||||
* @param [IN] iterations 迭代次数 N。
|
||||
* @param [IN] levelPercent 弱峰增强等级(仅 `WEAK_PEAK` 使用,0–200)。
|
||||
* @param [IN] amountPercent 弱峰调整等级(仅 `WEAK_PEAK` 使用,0–200)。
|
||||
* @param [IN] begin 需要的采样区间起点(含)。
|
||||
* @param [IN] end 需要的采样区间终点(不含)。
|
||||
* @param [OUT] spanBegin 返回数组对应的首个采样下标。
|
||||
@@ -1319,7 +1319,7 @@ namespace jdi
|
||||
* @return 曲线数组指针(覆盖 `[spanBegin, spanBegin + size())`);暂无可显示曲线时返回 nullptr。
|
||||
*/
|
||||
const std::vector<float>* CurveSpanFor(DerivedCurveKind kind, const SignalData& signal,
|
||||
int points, int iterations, int levelPercent,
|
||||
int points, int iterations, int amountPercent,
|
||||
std::size_t begin, std::size_t end,
|
||||
std::size_t& spanBegin,
|
||||
bool allowAsyncCompute = false) const;
|
||||
@@ -1337,12 +1337,12 @@ namespace jdi
|
||||
int kind = 0; /**< `DerivedCurveKind`。 */
|
||||
int points = 5; /**< 均值点数 X。 */
|
||||
int iterations = 1; /**< 迭代次数 N。 */
|
||||
int levelPercent = 0; /**< 弱峰增强等级(0–200)。 */
|
||||
int amountPercent = 0; /**< 弱峰调整等级(0–200)。 */
|
||||
|
||||
bool operator==(const CurveKey& other) const
|
||||
{
|
||||
return signal == other.signal && kind == other.kind && points == other.points &&
|
||||
iterations == other.iterations && levelPercent == other.levelPercent;
|
||||
iterations == other.iterations && amountPercent == other.amountPercent;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1470,15 +1470,15 @@ namespace jdi
|
||||
int points, int iterations) const;
|
||||
|
||||
/**
|
||||
* @brief 绘制某条信号的弱峰增强曲线(与均值滤波曲线同一配色派生规则)。
|
||||
* @brief 绘制某条信号的弱峰调整曲线(与均值滤波曲线同一配色派生规则)。
|
||||
* @param [IN,OUT] g 绘图上下文。
|
||||
* @param [IN] resolved 信号视图。
|
||||
* @param [IN] lane 网格绘制信息。
|
||||
* @param [IN] levelPercent 弱峰增强等级(0–200)。
|
||||
* @param [IN] amountPercent 弱峰调整等级(0–200)。
|
||||
* @param [IN] iterations 迭代次数 N(1–10)。
|
||||
*/
|
||||
void PaintWeakPeakCurve(gd::Graphics& g, const ResolvedSignal& resolved, const LaneVisual& lane,
|
||||
int levelPercent, int iterations) const;
|
||||
int amountPercent, int iterations) const;
|
||||
|
||||
/**
|
||||
* @brief 数据点标记的位置与"越界方向"(用于决定画圆点还是贴边三角)。
|
||||
@@ -1694,9 +1694,9 @@ namespace jdi
|
||||
bool m_pendingRename = false; /**< 是否存在待应用的重命名请求。 */
|
||||
|
||||
int m_pendingMeanFilterLane = -1; /**< 待构建的均值滤波信号所属网格下标(-1 表示无请求)。 */
|
||||
int m_pendingWeakPeakLane = -1; /**< 待构建的弱峰增强信号所属网格下标(-1 表示无请求)。 */
|
||||
int m_pendingWeakPeakLane = -1; /**< 待构建的弱峰调整信号所属网格下标(-1 表示无请求)。 */
|
||||
std::vector<MeanFilterBuild> m_pendingMeanFilterItems; /**< 待构建的信号及其参数。 */
|
||||
std::vector<WeakPeakBuild> m_pendingWeakPeakItems; /**< 待构建的弱峰增强信号及其参数。 */
|
||||
std::vector<WeakPeakBuild> m_pendingWeakPeakItems; /**< 待构建的弱峰调整信号及其参数。 */
|
||||
bool m_mouseOverPanel = false; /**< 上一帧鼠标是否落在某个实验性功能面板上。 */
|
||||
int m_peakDragLane = -1; /**< 正在拖动弱峰滑块的面板所属网格。 */
|
||||
SignalRef m_peakDragRef; /**< 正在拖动弱峰滑块的**信号**(每个信号一套参数)。 */
|
||||
@@ -1769,18 +1769,18 @@ namespace jdi
|
||||
};
|
||||
mutable std::deque<MeanCurveEntry> m_meanCurveCache;
|
||||
|
||||
/** 弱峰增强曲线缓存项(按「信号指针 + 增强等级百分比 + 迭代次数」标识)。 */
|
||||
/** 弱峰调整曲线缓存项(按「信号指针 + 增强等级百分比 + 迭代次数」标识)。 */
|
||||
struct WeakPeakCurveEntry
|
||||
{
|
||||
const SignalData* signal = nullptr;
|
||||
int levelPercent = 150; /**< 弱峰增强等级(0–200)。 */
|
||||
int amountPercent = 150; /**< 弱峰调整等级(0–200)。 */
|
||||
int iterations = 1; /**< 迭代次数 N(1–10)。 */
|
||||
std::vector<float> values; /**< 与 signal->values 等长;缺失处为 NaN。 */
|
||||
};
|
||||
mutable std::deque<WeakPeakCurveEntry> m_weakPeakCurveCache;
|
||||
|
||||
// ---- 异步派生曲线计算(后台线程 + 双缓冲)----
|
||||
// 设计:预览曲线(均值滤波 / 弱峰增强)在窗口很大时**不在绘制线程里计算**,而是交给后台
|
||||
// 设计:预览曲线(均值滤波 / 弱峰调整)在窗口很大时**不在绘制线程里计算**,而是交给后台
|
||||
// 线程;绘制线程本帧先用上一条已算好的曲线顶替(双缓冲),后台算完后通过
|
||||
// `kMessagePlotDerivedReady` 通知宿主重绘,从而切换为最新曲线。这样滑块 / 光标 / 视界 /
|
||||
// 缩放等交互的反馈始终跟手,不会被计算拖住,同时把重计算放到后台充分利用多核。
|
||||
@@ -1979,7 +1979,7 @@ namespace jdi
|
||||
/**
|
||||
* @brief 装饰层(图例 + Y 轴刻度)的指纹:含外观样式,但**不含派生曲线参数**。
|
||||
*
|
||||
* 拖弱峰增强等级/迭代次数滑块时,图例与 Y 轴刻度不变,仅网格内预览曲线变化;
|
||||
* 拖弱峰调整等级/迭代次数滑块时,图例与 Y 轴刻度不变,仅网格内预览曲线变化;
|
||||
* 因此装饰层缓存不应因参数变化而失效(否则拖滑块每帧都要重绘图例与刻度)。
|
||||
*
|
||||
* @return 指纹值。
|
||||
@@ -2009,14 +2009,14 @@ namespace jdi
|
||||
*
|
||||
* 它**只影响网格内容的绘制**(不影响网格结构/视图几何),因此不进入
|
||||
* `SceneGeometryHash`,而是与外观样式一起作为“局部重画”的判据:
|
||||
* 拖动弱峰增强的等级/迭代次数滑块时,只需重画受影响的网格,
|
||||
* 拖动弱峰调整的等级/迭代次数滑块时,只需重画受影响的网格,
|
||||
* 不必整幅重绘(也不会把静态场景缓存整体作废)。
|
||||
*/
|
||||
struct SceneDerivedEntry
|
||||
{
|
||||
int edgeCenter = 0; /**< 中心轴边沿计数开关。 */
|
||||
int meanFilter = 0; /**< 均值滤波开关。 */
|
||||
int weakPeak = 0; /**< 弱峰增强开关。 */
|
||||
int weakPeak = 0; /**< 弱峰调整开关。 */
|
||||
/** 各条目展开为 [文件, 信号, 参数…],按原顺序(稳定)。 */
|
||||
std::vector<int> edgeCenterItems;
|
||||
std::vector<int> meanFilterItems;
|
||||
@@ -2313,14 +2313,16 @@ namespace jdi
|
||||
* @param [IN] laneIndex 网格下标。
|
||||
* @param [IN,OUT] layer 目标图层(会被写入尺寸 / 时间映射 / 指纹)。
|
||||
* @param [IN] stripX 只渲染位图的这一段 x 区间(滚动时补画细条用)。
|
||||
* @param [IN] stripW 该区间的宽度;传 0 表示渲染整块。
|
||||
* @param [IN] stripW 该区间的宽度;传 0 表示横向整块。
|
||||
* @param [IN] stripY 只渲染位图的这一段 y 区间(纵向滚动补条用)。
|
||||
* @param [IN] stripH 该区间的高度;传 0 表示纵向整块。
|
||||
* @param [IN] wideMin 位图 `x=0` 对应的时间。
|
||||
* **必须与调用方的意图一致**:整块重画传 `LayerDefaultWideMin()`(以当前视界居中);
|
||||
* 滚动补细条则传 `layer.wideMin`(与该图层已有像素同一映射,否则会留下接缝)。
|
||||
* @return 渲染成功返回 true。
|
||||
*/
|
||||
bool RenderLaneLayerRegion(int laneIndex, LaneLayer& layer, int stripX, int stripW,
|
||||
double wideMin);
|
||||
bool RenderLaneLayerRegion(int laneIndex, LaneLayer& layer, int stripX, int stripW, int stripY,
|
||||
int stripH, double wideMin);
|
||||
/**
|
||||
* @brief 前台补画各网格的**分界线**(网格顶部那条较重的横线)。
|
||||
*
|
||||
|
||||
Reference in new issue
Block a user