Code: Select all
****************************************************************************************************************************************
*** 3.7.1. Поиск и удаление артефактов (робастная процедура)
*** Строится частотное распределение абсолютных частот встреч признаков в классах по матрице сопряженности Abs.dbf
*** и пользователю предоставляется возможность удалить редко встречающиеся факты (сочетания), как случайные выбросы или артефакты
****************************************************************************************************************************************
FUNCTION F3_7_1()
LOCAL GetList[0], GetOptions, oRmChart, oRegion1, oRegion2, oRegion3, ;
oRegion4, oRegion5, oRegion6, aBarGroup[0], aLineGroup[0], aPie[0], ;
aDonut[0], aBarGroupFloat[0], aBarGroupIndus[0], aLineGroupIndus[0], ;
aDataAxis1[0], aDataAxis5[0], aDataAxis6[0], cRegSvr, ;
cRmChart, cClsId, cRegQuery, nWhich, oStatus
******* Проверка возможности работать в системе ******************************************
IF M_KodAdmAppls = 0 // Выйти из системы если нет авторизации
LB_Warning("Вы не авторизовались в системе и не можете ей пользоваться!")
RETURN NIL
ENDIF
IF ApplChange() // Перейти в папку выбранного приложения или выйти из системы
LB_Warning("Необходимо задать (выбрать) хотя бы одно текущее приложение !!!")
RETURN NIL
ENDIF
IF .NOT. FILE("Abs.dbf") // Нет БД Abs.dbf
LB_Warning("В текущем приложении нет БД Abs.dbf. Необходимо ее создать в 3-й подсистеме !!!")
ENDIF
Mess := {}
DO CASE
CASE OSVER() = "3.1"
AADD(Mess, 'На комьютере установлена MS Windows NT 3.1')
CASE OSVER() = "3.5"
AADD(Mess, 'На комьютере установлена MS Windows NT 3.5')
CASE OSVER() = "3.51"
AADD(Mess, 'На комьютере установлена MS Windows NT 3.51')
CASE OSVER() = "4.0"
AADD(Mess, 'На комьютере установлена MS Windows NT 4.0')
CASE OSVER() = "5.0"
AADD(Mess, 'На комьютере установлена MS Windows 2000')
CASE OSVER() = "5.1"
AADD(Mess, 'На комьютере установлена MS Windows XP')
CASE OSVER() = "5.2"
AADD(Mess, 'На комьютере установлена MS Server 2003')
ENDCASE
IF LEN(Mess) > 0
AADD(Mess, 'А для работы профессиональной графики нужна:')
AADD(Mess, 'MS Windows Vista / MS Windows Server 2008 или') // OSVER() = "6.0"
AADD(Mess, 'MS Windows 7 / MS Windows Server 2008 R2') // OSVER() = "6.1"
LB_Warning(Mess, 'Сообщение о неудачном завершении операции')
RETURN NIL
ENDIF
// Еще сделать проверку на то, проинсталлирован ли ActiveX
******* Подготовка данных (расчет частотного распределения абсолютых частот) *************
CLOSE ALL
USE ABS EXCLUSIVE NEW
SELECT ABS
N_Rec = RECCOUNT()
N_Col = FCOUNT()
nMax = 2*(N_Rec-2)
Mess = '3.7.1. Подготовка данных для визуализации частотного распределения абс.частот'
@ 4,5 DCPROGRESS oProgress SIZE 95,1.1 MAXCOUNT nMax COLOR GRA_CLR_BLUE PERCENT EVERY 100
DCREAD GUI TITLE Mess PARENT @oDialog FIT EXIT
oDialog:show()
nTime = 0
mMinX = 0
mMaxX = 0
DC_GetProgress(oProgress,0,nMax)
FOR i=1 TO N_Rec-2
DBGOTO(i)
FOR j=1 TO N_Col-3
Fv = FIELDGET(2+j)
mMinX = MIN(mMinX, Fv)
mMaxX = MAX(mMaxX, Fv)
NEXT
DC_GetProgress(oProgress, ++nTime, nMax)
NEXT
PRIVATE aData[mMaxX]
PRIVATE aLabelText[mMaxX]
AFILL(aData,0)
AFILL(aLabelText,' ')
mMinY = 0
mMaxY = 0
FOR i=1 TO N_Rec-2
DBGOTO(i)
FOR j=1 TO N_Col-3
Fv = FIELDGET(2+j)
IF Fv > 0
aData[Fv] = aData[Fv] + 1
aLabelText[Fv] = ALLTRIM(STR(Fv))
mMinY = MIN(mMinY, aData[Fv])
mMaxY = MAX(mMaxY, aData[Fv])
ENDIF
NEXT
DC_GetProgress(oProgress, ++nTime, nMax)
NEXT
DC_GetProgress(oProgress,nMax,nMax)
oDialog:Destroy()
***** ВИЗУАЛИЗАЦИЯ ГРАФИКА *************************************************************
***** Размер окна для отображения графика **********************************************
* --- RMChart ActiveX Control --
@ 0,0 DCRMCHART oRmChart SIZE 1140, 640 RESIZE DCGUI_RESIZE_RESIZEONLY
***** Линейный график: исходные данные *************************************************
IF LEN(aData) < 20
DcAddLineGroup TO aLineGroupIndus ;
DATA aData ;
WHICHDATAAXIS 2 ;
STYLE RMC_LINE_CABLE ;
COLOR Green ;
LINESTYLE RMC_LSTYLE_LINE ;
SYMBOLSTYLE RMC_SYMBOL_BULLET ;
VALUELABEL 1
ELSE
DcAddLineGroup TO aLineGroupIndus ;
DATA aData ;
WHICHDATAAXIS 2 ;
STYLE RMC_LINE_CABLE ;
COLOR Green ;
LINESTYLE RMC_LSTYLE_LINE ;
SYMBOLSTYLE RMC_SYMBOL_BULLET
ENDIF
****************************************************************************************
*GraStringAt( oRMChart, { 275, 10 }, "Частота события" )
DcAddDataAxis TO aDataAxis6 ;
AXISTEXT "Количество встреч определенной частоты событий" ;
ALIGN RMC_DATAAXISLEFT ;
MINVALUE mMinY MAXVALUE mMaxY
@ 10,10 DcChartRegion oRegion6 ; // Координаты нижнего левого угла поля построения графика в окне
PARENT oRMChart ;
SIZE 1100, 550 PIXEL ; // Размер поля построения графика в окне 1100 x 600
CAPTION TITLE UPPER(ALLTRIM(M_NameAppl)) BACKCOLOR White TEXTCOLOR Black FONTSIZE 10 BOLD ;
GRID ;
DATAAXIS aDataAxis6 ;
LABELAXIS LABELARRAY aLabelText ALIGN RMC_LABELAXISBOTTOM ;
LINEGROUP aLineGroupIndus
****************************************************************************************
***** Кнопки визу **********************************************************************
@ 620, 0 DCPUSHBUTTON CAPTION 'Помощь' SIZE 50,25 ;
ACTION {||Help3_7_1()}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Удаление артефактов' SIZE 150,25 ;
ACTION {||Razrab()}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Записать графический файл' SIZE 170,25 ;
ACTION {||SaveChartToBitmap(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Записать графический файл' SIZE 170,25 ;
ACTION {||SaveChartToBitmap(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Копировать в буфер обмена' SIZE 170,25 ;
ACTION {||SaveChartToClipboard(oRMChart)}
@ DCGUI_ROW, DCGUI_COL + 10 DCPUSHBUTTON CAPTION 'Печать' SIZE 50,25 ;
ACTION {||PrintChart(oRMChart)}
DCGETOPTIONS RESIZE PIXEL
DCREAD GUI ;
SETAPPWINDOW ;
FIT ;
TITLE '3.7.1. Частотное распределение абсолютных частот по Abs.dbf. (C) Универсальная когнитивная аналитическая система "Эйдос-Х++"' ;
OPTIONS GetOptions ;
EVAL {||oRMChart:RMCToolTipWidth := 100, ;
oRMChart:RMCUserWatermark := '(C) Универсальная когнитивная аналитическая система "Эйдос-Х++"', ;
oRMChart:RMCUserWMAlignment := RMC_TEXTRIGHT, ;
oRMChart:RMCUserWMFontSize := 20, ;
oRMChart:RMCUserWMLucent := 40, ;
oRmChart:mouseDown := ;
{|a,b,c,d,e,o|aData := e,nWhich := a,o:=Thread():new(),o:start({||BrowseCallbackData(nWhich,aData,oRMChart)})}, ;
oRmChart:mouseMove := ;
{|nMouseButton,b,nX,nY,aData|oRMChart:showToolTip( nMouseButton, nX, nY, aData )}, ;
oRmChart:draw(), ;
ShowDebugInfo(oRMChart)}
CLOSE ALL
RETURN NIL