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 浏览: 7
这是一段 C++ 代码,大概的意思是:
这个函数用于更新选中的捕捉点,并返回需要重绘的标志。如果捕捉点的状态是 MULTI_POINTS,那么对于每个捕捉点,我们会计算它在屏幕上的位置和当前鼠标位置的距离,找到距离最近的捕捉点,然后将其设置为选中的捕捉点。如果选中的捕捉点发生了变化,就会返回需要进行硬重绘的标志。如果没有选中的捕捉点,就返回不需要重绘的标志。
相关问题
static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, const double mval[2], float output[3]) { struct InputAngle_Data *data = mi->data; float dir_prev[2], dir_curr[2], mi_center[2]; copy_v2_v2(mi_center, mi->center); sub_v2_v2v2(dir_prev, (const float[2]){UNPACK2(data->mval_prev)}, mi_center); sub_v2_v2v2(dir_curr, (const float[2]){UNPACK2(mval)}, mi_center); if (normalize_v2(dir_prev) && normalize_v2(dir_curr)) { float dphi = angle_normalized_v2v2(dir_prev, dir_curr); if (cross_v2v2(dir_prev, dir_curr) > 0.0f) { dphi = -dphi; } data->angle += ((double)dphi) * (mi->precision ? (double)mi->precision_factor : 1.0); data->mval_prev[0] = mval[0]; data->mval_prev[1] = mval[1]; } output[0] = data->angle; }每行是什么意思
这段代码是一个函数 `InputAngle` 的实现,用于处理鼠标输入对旋转角度的影响。下面是每一行的具体意思:
1. `static void InputAngle(TransInfo *UNUSED(t), MouseInput *mi, const double mval[2], float output[3]) {`:定义函数 `InputAngle`,该函数有四个参数:`t`(未使用)、`mi`(鼠标输入信息)、`mval`(鼠标输入的值)、`output`(输出结果)。
2. `struct InputAngle_Data *data = mi->data;`:从鼠标输入信息中获取指向 `InputAngle_Data` 结构的指针 `data`,该结构体中保存了旋转角度的信息。
3. `float dir_prev[2], dir_curr[2], mi_center[2];`:定义三个长度为 2 的浮点数数组,分别表示前一次和当前鼠标指针的方向向量以及鼠标指针的中心。
4. `copy_v2_v2(mi_center, mi->center);`:将鼠标输入信息中的中心坐标拷贝到 `mi_center` 数组中。
5. `sub_v2_v2v2(dir_prev, (const float[2]){UNPACK2(data->mval_prev)}, mi_center);`:计算前一次鼠标指针的方向向量 `dir_prev`,使用了一个宏 `UNPACK2` 将 `data->mval_prev` 展开成两个参数,然后通过 `sub_v2_v2v2` 函数实现向量相减。
6. `sub_v2_v2v2(dir_curr, (const float[2]){UNPACK2(mval)}, mi_center);`:计算当前鼠标指针的方向向量 `dir_curr`。
7. `if (normalize_v2(dir_prev) && normalize_v2(dir_curr)) {`:判断前一次和当前鼠标指针的方向向量是否归一化成功,如果都成功,则继续进行下一步操作。
8. `float dphi = angle_normalized_v2v2(dir_prev, dir_curr);`:计算前一次鼠标指针和当前鼠标指针之间的夹角 `dphi`。
9. `if (cross_v2v2(dir_prev, dir_curr) > 0.0f) { dphi = -dphi; }`:如果前一次鼠标指针和当前鼠标指针之间的夹角是逆时针旋转的,则将 `dphi` 取反,以保证旋转方向正确。
10. `data->angle += ((double)dphi) * (mi->precision ? (double)mi->precision_factor : 1.0);`:根据鼠标输入的精度值 `mi->precision` 和精度因子 `mi->precision_factor` 计算旋转角度的增量,并加到旋转角度 `data->angle` 上。
11. `data->mval_prev[0] = mval[0]; data->mval_prev[1] = mval[1];`:更新前一次鼠标输入的值。
12. `output[0] = data->angle;`:将计算出的旋转角度保存到输出数组 `output` 中。
如何向transInfo 表添加一条数据:用户10010002,存入,数额
你可以使用INSERT INTO语句向transInfo表中添加一条数据,具体操作步骤如下:
1. 打开Navicat for MySql并连接到你的数据库。
2. 在左侧面板中点击transInfo表,以确保你将在正确的表中添加数据。
3. 在SQL编辑器中编写INSERT INTO语句,语法如下:
```
INSERT INTO transInfo (用户, 类型, 数额) VALUES ('10010002', '存入', 数额);
```
其中,用户表示用户编号,类型表示交易类型,数额表示交易金额。
4. 将INSERT INTO语句复制到SQL编辑器中,并将数额替换为具体数值,然后执行该语句。
5. 检查transInfo表中是否已经成功添加了一条新数据。