eRedrawFlag updateSelectedSnapPoint(TransInfo *t) { eRedrawFlag status = TREDRAW_NOTHING; if (t->tsnap.status & MULTI_POINTS) { TransSnapPoint *p, *closest_p = NULL; float dist_min_sq = TRANSFORM_SNAP_MAX_PX; const float mval_fl[2] = {t->mval[0], t->mval[1]}; float screen_loc[2]; for (p = t->tsnap.points.first; p; p = p->next) { float dist_sq; if (ED_view3d_project_float_global(t->region, p->co, screen_loc, V3D_PROJ_TEST_NOP) != V3D_PROJ_RET_OK) { continue; } dist_sq = len_squared_v2v2(mval_fl, screen_loc); if (dist_sq < dist_min_sq) { closest_p = p; dist_min_sq = dist_sq; } } if (closest_p) { if (t->tsnap.selectedPoint != closest_p) { status = TREDRAW_HARD; } t->tsnap.selectedPoint = closest_p; } } return status; }什么意思
时间: 2024-04-23 21:26:07 浏览: 126
ATM课程设计报告---ATM交易管理系统.doc
这是一段 C++ 代码,大概的意思是:
这个函数用于更新选中的捕捉点,并返回需要重绘的标志。如果捕捉点的状态是 MULTI_POINTS,那么对于每个捕捉点,我们会计算它在屏幕上的位置和当前鼠标位置的距离,找到距离最近的捕捉点,然后将其设置为选中的捕捉点。如果选中的捕捉点发生了变化,就会返回需要进行硬重绘的标志。如果没有选中的捕捉点,就返回不需要重绘的标志。
阅读全文