//--------------------------------------------------------- bool CWKSP_Shapes::Edit_Set_Index(int Index) { m_Edit_Attributes.Del_Records(); if( Index > Get_Shapes()->Get_Selection_Count() ) { Index = Get_Shapes()->Get_Selection_Count(); } CSG_Table_Record *pSelection = Get_Shapes()->Get_Selection(Index); if( pSelection ) { m_Edit_Index = Index; for(int i=0; i<Get_Shapes()->Get_Field_Count(); i++) { CSG_Table_Record *pRecord = m_Edit_Attributes.Add_Record(); pRecord->Set_Value(0, pSelection->Get_Table()->Get_Field_Name(i)); pRecord->Set_Value(1, pSelection->asString(i)); } } else { m_Edit_Index = 0; } return( true ); }
void CCreateChartLayer::AddBarChart(CSG_Shape* pShape, int iType){ int i; int iSizeField; int iField; int iValidFields = 0; float fMax; float fMin; float fSize; float fBarHeight, fBarWidth; double dX, dY; CSG_Shape *pSector; CSG_Table_Record *pRecord; TSG_Point Point; iSizeField = Parameters("SIZE")->asInt(); pRecord = pShape; pRecord = pShape; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ if (!iValidFields){ fMin = fMax = pRecord->asFloat(i); } else{ if (pRecord->asFloat(i) > fMax){ fMax = pRecord->asFloat(i); }//if if (pRecord->asFloat(i) < fMin){ fMin = pRecord->asFloat(i); }//if }//else iValidFields++; }//if }//for if (fMax > 0 && fMin > 0){ fMin = 0; }//if if (fMax < 0 && fMin < 0){ fMax = 0; }//if fSize = pRecord->asFloat(iSizeField); fSize = m_fMinSize + (m_fMaxSize - m_fMinSize)/(m_fMaxValue - m_fMinValue) * (fSize - m_fMinValue); switch (iType){ case SHAPE_TYPE_Polygon: Point = ((CSG_Shape_Polygon*) pShape)->Get_Centroid(); break; case SHAPE_TYPE_Line: Point = GetLineMidPoint((CSG_Shape_Line*)pShape); break; case SHAPE_TYPE_Point: Point = pShape->Get_Point(0); break; default: break; }//switch dX = Point.x; dY = Point.y; fBarWidth = fSize / (float)iValidFields; iField = 1; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ fBarHeight = pRecord->asFloat(i) / (fMax - fMin) * fSize; pSector = m_pOutput->Add_Shape(); pSector->Add_Point(dX - fSize / 2. + fBarWidth * (iField - 1) , dY); pSector->Add_Point(dX - fSize / 2. + fBarWidth * iField, dY); pSector->Add_Point(dX - fSize / 2. + fBarWidth * iField, dY + fBarHeight); pSector->Add_Point(dX - fSize / 2. + fBarWidth * (iField - 1) , dY + fBarHeight); pSector->Set_Value(0,iField); pSector->Set_Value(1,pRecord->Get_Table()->Get_Field_Name(i)); iField++; }//if }//for }//method
void CCreateChartLayer::AddPieChart(CSG_Shape* pShape, int iType){ int i,j; int iSteps; int iSizeField; int iField; float fSum = 0; float fPartialSum = 0; float fSize; float fSectorSize; double dX, dY; CSG_Shape *pSector; CSG_Table_Record *pRecord; TSG_Point Point; iSizeField = Parameters("SIZE")->asInt(); pRecord = pShape; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ fSum += pRecord->asFloat(i); }//if }//for fSize = pRecord->asFloat(iSizeField); fSize = m_fMinSize + (m_fMaxSize - m_fMinSize)/(m_fMaxValue - m_fMinValue) * (fSize - m_fMinValue); switch (iType){ case SHAPE_TYPE_Polygon: Point = ((CSG_Shape_Polygon*) pShape)->Get_Centroid(); break; case SHAPE_TYPE_Line: Point = GetLineMidPoint((CSG_Shape_Line*)pShape); break; case SHAPE_TYPE_Point: Point = pShape->Get_Point(0); break; default: break; }//switch dX = Point.x; dY = Point.y; fPartialSum = 0; iField = 1; for (i = 0; i < pRecord->Get_Table()->Get_Field_Count(); i++){ if (m_bIncludeParam[i]){ fSectorSize = pRecord->asFloat(i) / fSum; pSector = m_pOutput->Add_Shape(); pSector->Add_Point(dX,dY); iSteps = (int) (fSectorSize * 200.); for (j = 0; j < iSteps; j++){ pSector->Add_Point(dX + fSize * sin((fPartialSum + (float)j / 200.) * PI2), dY + fSize * cos((fPartialSum + (float)j / 200.) * PI2)); }//for fPartialSum +=fSectorSize; pSector->Add_Point(dX + fSize * sin(fPartialSum * PI2), dY + fSize * cos(fPartialSum * PI2)); pSector->Set_Value(0,iField); pSector->Set_Value(1,pRecord->Get_Table()->Get_Field_Name(i)); iField++; }//if }//for }//method