//--------------------------------------------------------- void CWKSP_Layer_Legend::Draw(wxDC &dc, double Zoom, double Zoom_Map, wxPoint Position, wxSize *pSize, bool bVertical) { //----------------------------------------------------- m_Zoom = Zoom > 0.0 ? Zoom : 1.0; m_Position = Position; m_Size = wxSize(BOX_WIDTH, 0); m_Zoom_Map = Zoom_Map; m_bVertical = bVertical; //----------------------------------------------------- m_oldPen = dc.GetPen(); m_oldBrush = dc.GetBrush(); m_oldFont = dc.GetFont(); //----------------------------------------------------- m_xBox = m_Position.x; m_dxBox = BOX_WIDTH; m_xTick = m_xBox + m_dxBox; m_dxTick = TICK_WIDTH; m_xText = m_xTick + m_dxTick; //----------------------------------------------------- _Draw_Title(dc, FONT_TITLE, m_pLayer->Get_Object()->Get_Name()); //----------------------------------------------------- switch( m_pLayer->Get_Type() ) { case WKSP_ITEM_Shapes: switch( ((CWKSP_Shapes *)m_pLayer)->Get_Shapes()->Get_Type() ) { case SHAPE_TYPE_Point: case SHAPE_TYPE_Points: _Draw_Point (dc, (CWKSP_Shapes_Point *)m_pLayer); break; case SHAPE_TYPE_Line: _Draw_Line (dc, (CWKSP_Shapes_Line *)m_pLayer); break; case SHAPE_TYPE_Polygon: _Draw_Polygon (dc, (CWKSP_Shapes_Polygon *)m_pLayer); break; default: break; } break; case WKSP_ITEM_TIN: _Draw_TIN (dc, (CWKSP_TIN *)m_pLayer); break; case WKSP_ITEM_PointCloud: // _Draw_TIN (dc, (CWKSP_PointCloud *)m_pLayer); break; case WKSP_ITEM_Grid: _Draw_Grid (dc, (CWKSP_Grid *)m_pLayer); break; default: break; } //----------------------------------------------------- dc.SetPen (m_oldPen); dc.SetBrush (m_oldBrush); dc.SetFont (m_oldFont); //----------------------------------------------------- if( pSize ) { *pSize = m_Size; } }
//--------------------------------------------------------- void CGrid_3D_Image::_Draw_Triangle(T3DPoint p[3]) { int i, j, k, y, y_j; double x[2], dx[2], dy, z[2], dz[2], r[2], dr[2], g[2], dg[2], b[2], db[2]; T3DPoint pp; //----------------------------------------------------- if( !p[0].bOk || !p[1].bOk || !p[2].bOk ) { return; } //----------------------------------------------------- SORT_POINTS_Y(1, 0); SORT_POINTS_Y(2, 0); SORT_POINTS_Y(2, 1); //----------------------------------------------------- if( p[2].y == p[0].y ) { if( p[0].y >= 0 && p[0].y < m_pRGB->Get_NY() ) { SORT_POINTS_X(1, 0); SORT_POINTS_X(2, 0); SORT_POINTS_X(2, 1); //--------------------------------------------- if( p[2].x == p[0].x ) { if( p[0].x >= 0 && p[0].x < m_pRGB->Get_NX() ) { i = p[0].z > p[1].z ? (p[0].z > p[2].z ? 0 : 2) : (p[1].z > p[2].z ? 1 : 2); _Draw_Pixel(p[0].x, p[0].y, p[i].z, p[i].r, p[i].g, p[i].b); } } //--------------------------------------------- else { _Draw_Line(p[0].x, p[1].x, p[0].y, p[0].z, p[1].z, p[0].r, p[1].r, p[0].g, p[1].g, p[0].b, p[1].b); _Draw_Line(p[1].x, p[2].x, p[0].y, p[1].z, p[2].z, p[1].r, p[2].r, p[1].g, p[2].g, p[1].b, p[2].b); } } } //----------------------------------------------------- else if( !((p[0].y < 0 && p[2].y < 0) || (p[0].y >= m_pRGB->Get_NY() && p[2].y >= m_pRGB->Get_NY())) ) { dy = p[2].y - p[0].y; dx[0] = (p[2].x - p[0].x) / dy; dz[0] = (p[2].z - p[0].z) / dy; dr[0] = (p[2].r - p[0].r) / dy; dg[0] = (p[2].g - p[0].g) / dy; db[0] = (p[2].b - p[0].b) / dy; x [0] = p[0].x; z [0] = p[0].z; r [0] = p[0].r; g [0] = p[0].g; b [0] = p[0].b; for(i=0, j=1; i<2; i++, j++) { if( (dy = p[j].y - p[i].y) > 0.0 ) { dx[1] = (p[j].x - p[i].x) / dy; dz[1] = (p[j].z - p[i].z) / dy; dr[1] = (p[j].r - p[i].r) / dy; dg[1] = (p[j].g - p[i].g) / dy; db[1] = (p[j].b - p[i].b) / dy; x [1] = p[i].x; z [1] = p[i].z; r [1] = p[i].r; g [1] = p[i].g; b [1] = p[i].b; if( (y = p[i].y) < 0 ) { x[1] -= y * dx[1]; z[1] -= y * dz[1]; r[1] -= y * dr[1]; g[1] -= y * dg[1]; b[1] -= y * db[1]; y = 0; x[0] = p[0].x - p[0].y * dx[0]; z[0] = p[0].z - p[0].y * dz[0]; r[0] = p[0].r - p[0].y * dr[0]; g[0] = p[0].g - p[0].y * dg[0]; b[0] = p[0].b - p[0].y * db[0]; } if( (y_j = p[j].y) > m_pRGB->Get_NY() ) { y_j = m_pRGB->Get_NY(); } for( ; y<y_j; y++) { if( x[1] < x[0] ) { _Draw_Line((int)x[1], (int)x[0], y, z[1], z[0], r[1], r[0], g[1], g[0], b[1], b[0]); } else { _Draw_Line((int)x[0], (int)x[1], y, z[0], z[1], r[0], r[1], g[0], g[1], b[0], b[1]); } for(k=0; k<=1; k++) { x[k] += dx[k]; z[k] += dz[k]; r[k] += dr[k]; g[k] += dg[k]; b[k] += db[k]; } } } } } }