//прорисовка
void CUI3dStatic::Draw()
{
if(m_pCurrentItem)
{
//Msg("Start draw 3d model");
Frect rect;
GetAbsoluteRect(rect);
Fmatrix translate_matrix;
translate_matrix.identity();
Fmatrix scale_matrix;
scale_matrix.identity();
Fmatrix rx_m;
rx_m.identity();
Fmatrix ry_m;
ry_m.identity();
Fmatrix rz_m;
rx_m.identity();
Fmatrix matrix;
matrix.identity();
//поместить объект в центр сферы
translate_matrix.translate( - m_pCurrentItem->Visual()->getVisData().sphere.P.x,
- m_pCurrentItem->Visual()->getVisData().sphere.P.y,
- m_pCurrentItem->Visual()->getVisData().sphere.P.z);
matrix.mulA_44(translate_matrix);
rx_m.rotateX(m_x_angle);
ry_m.rotateY(m_y_angle);
rz_m.rotateZ(m_z_angle);
matrix.mulA_44(rx_m);
matrix.mulA_44(ry_m);
matrix.mulA_44(rz_m);
float x1, y1, x2, y2;
FromScreenToItem(rect.left, rect.top, x1, y1);
FromScreenToItem(rect.right, rect.bottom, x2, y2);
float normal_size;
normal_size =_abs(x2-x1)<_abs(y2-y1)?_abs(x2-x1):_abs(y2-y1);
float radius = m_pCurrentItem->Visual()->getVisData().sphere.R;
float scale = normal_size/(radius*2);
scale_matrix.scale( scale, scale,scale);
matrix.mulA_44(scale_matrix);
float right_item_offset, up_item_offset;
///////////////////////////////
FromScreenToItem(rect.left + iFloor(GetWidth()/2),rect.top + iFloor(GetHeight()/2), right_item_offset, up_item_offset);
translate_matrix.identity();
translate_matrix.translate(right_item_offset,up_item_offset,dist);
matrix.mulA_44(translate_matrix);
Fmatrix camera_matrix;
camera_matrix.identity();
camera_matrix = Device.mView;
camera_matrix.invert();
matrix.mulA_44(camera_matrix);
::Render->set_Transform(&matrix);
::Render->add_Visual(m_pCurrentItem->Visual());
}
else
{
//Msg("not item for draw");
}
//inherited::Draw ();
}