当鼠标移动的时候,产生的是屏幕坐标的变化。
若是要使得三维空间选中的某个体/面/线也随着移动,就需要将二维点向三维空间投影。
投影时候需要被投向的面的信息:点+面法线
获取具体如下:
HPoint _Compute_Proj_Point(const SPAposition& plane_pt,
const SPAunit_vector& plane_v,HEventInfo& event)
{
HC_KEY key = event.GetView()->GetSceneKey();
HPoint new_pos = event.GetMouseWorldPos();
float x,y,z;
float tx,ty,tz;
HC_Open_Segment_By_Key(key);
{
HC_Show_Net_Camera_Position(&x,&y,&z);
HC_Show_Net_Camera_Target(&tx,&ty,&tz);
}
HC_Close_Segment();
//获取camera的方向 ,即射线的方向
SPAposition line_point(new_pos.x,new_pos.y,new_pos.z);
SPAvector line_vector(tx-x,ty-y,tz-z);
SPAposition intersect;
double line_param;
HPoint result(0,0,0);
//线面交点
if (intersect_line_plane(line_point,line_vector,plane_pt,plane_v,
line_param,intersect)==1)
{
result.x = (float)intersect.x();
result.y = (float)intersect.y();
result.z = (float)intersect.z();
}
return result;
}
------------------
用HC_Compute_Selection(...) 获取经过的对象,move到某个segment下,便高亮显示了。
-----------------