diff --git a/app/fdsa4_test/test0531.cpp b/app/fdsa4_test/test0531.cpp deleted file mode 100644 index eb0fd3c..0000000 --- a/app/fdsa4_test/test0531.cpp +++ /dev/null @@ -1,430 +0,0 @@ -#include "memrdwt.h" -#include "math.h" -#include "basefun.h" -#include "DepthProgress.h" -#include -//#include"cloudalgorithmaccess.h" -#include -#include -#include -#include -#include -#include "pythonhandler.h" - -// #undef slots -// #if defined(_DEBUG) -// #define IS_DEBUG -// #undef _DEBUG//防止加载python312_d.lib 先取消掉_DEBUG -// #endif -// #include -// #include -// #if defined(IS_DEBUG) -// #define _DEBUG -// #endif -// #define slots -#include -/****************************************************数据定义**************************************************************** - ******************************begin****************************/ -extern "C"{ - _declspec (dllexport) struct INC_STRU INC={6, - "FWGN_W:波名1,raw;;\ - NWGN_W:波名2,raw;;\ - RWGN_W:波名3,raw;;\ - GR:伽马,API;;\ - NWGN_C:曲线名2,raw;;\ - RWGN_C:曲线名3,raw;;\ - " - };//输入曲线定义 6:输入6条数据, "数据英文:数据中文,数据单位;;" - _declspec (dllexport) struct INP_STRU INP; ///使用GetINValue(RGN_C, 6, 1);函数需要定义该变量 - - _declspec (dllexport) struct OUTC_STRU OUTC={2, - "ATT:波名1,raw;;\ - THCAV:曲线名1,raw;;\ - " - };//输出曲线定义 2:输出2条数据, "数据英文:数据中文,数据单位;;"(注:先写波形数据,再写曲线数据) - //_declspec (dllexport) struct OUTP_STRU OUTP; - - _declspec (dllexport) struct HD_STRU HD={0.0,9999.0,0.0,0.0,0.0,0.0,0.0,"test0531.INP","test0531.TLP"};//改成自己的工程名 - - __declspec (dllexport) struct CONC_STRU CONC={4, - "CTH:参数名1,mm;;;;10.5;\ - CT:参数名2,%;;;;1;\ - IT:参数名3,mm;;;;9.7;\ - MT:参数名4,%;;;;1;" - };//常量参数定义 4:4个参数, "数据英文:数据中文,单位;;;;参数默认值;" - _declspec (dllexport) struct CON_STRU CON={10.5, 1, 9.7, 1};//再次设置默认值(需要与前面相同) - - _declspec (dllexport) struct ErrorInf errorinf; - - //定义输出数据类型(注:需要与前面输出定义一一对应) - __declspec (dllexport) struct LogType LogType={WAVE_OBJECT, CURVE_OBJECT};//{WAVE_OBJECT, CURVE_OBJECT} - - __declspec( dllexport ) CMemRdWt MemRdWt; - _declspec (dllexport) int test0531();//改成自己的工程名 -} -/****************************************************end****************************************************************/ - - - -struct Process_Struct{ - int Process(); -}; - -//DLL入口函数 -int test0531()//改成自己的工程名 -{ - Process_Struct Process; - return Process.Process(); -} - -//固井结构体(注:此处为表格输出示例) -typedef struct ss_struct -{ - int GNO; - float GSDEP,GEDEP; - int GRESULT; -} GUJING; -//结论结构体 -typedef struct s2_struct -{ - int NO; - float SDEP,EDEP; - QString R; -} JIELUN; - -void callPython(float FGN_C, float NGN_C, float RGN_C, float* FGN_W, float* NGN_W, float* Att0all, int nlen) -{ - QVariantList args; -// args << 0.77; -// args << 2.93; -// args << 50; -// PythonHandler::getInstance()->executeScript("UCS_test_0330", "get_UCS_Horsrud_correlation_shale", args, NULL, nlen); -// return; - - QVariantList arg1; - QVariantList arg2; - // 填充列表 - for (int i = 0; i < nlen; ++i) { - arg1 << (double)FGN_W[i]; - arg2 << (double)NGN_W[i]; - } - args.append(QVariant::fromValue(arg1)); // 直接将 innerList1 作为元素添加 - args.append(QVariant::fromValue(arg2)); // 使用 << 操作符 - args << (double)FGN_C << (double)NGN_C << (double)RGN_C; - PythonHandler::getInstance()->executeScript("fdsa4_test", "process_arrays", args, Att0all, nlen); - - // static PyObject * pmodule = NULL; - // static PyObject * pmodule2 = NULL; - // if (!pmodule) // 防止重复加载报错cannot load module more than once per process - // { - // Py_Initialize(); - // if(!Py_IsInitialized()) - // { - // qDebug() << "init err"; - // } - // PyRun_SimpleString("import os"); - // PyRun_SimpleString("import sys"); - // // PyRun_SimpleString("sys.path.append('./app/fdsa4_test')");// 设置运行路径 - // PyRun_SimpleString("sys.path.append('D:/jiayl0909/logPlus/build/Bin/app/fdsa4_test')");// 设置运行路径 - // PyRun_SimpleString("sys.path.append(os.path.dirname(os.path.dirname(os.getcwd())))"); - // PyRun_SimpleString("print(os.getcwd())"); - // PyRun_SimpleString("print(os.path.dirname(os.path.dirname(os.getcwd())))"); - // PyRun_SimpleString("print(sys.path)"); - - // // pmodule2 = PyImport_ImportModule("math_algorithm"); - // pmodule = PyImport_ImportModule("math_algorithm"); - - // } - // if(PyErr_Occurred()){ - // PyObject*pType,*pValue,*pTraceback; - // PyErr_Fetch(&pType,&pValue,&pTraceback);PyErr_NormalizeException(&pType,&pValue,&pTraceback); - // PyObject* pstr=PyObject_Str(pValue); - // const char* pstrErrorMessage =PyUnicode_AsUTF8(pstr); - // printf("Error message:%s\n",pstrErrorMessage); - // } - - // if(!pmodule) - // { - // qDebug() << "can not open the file"; - // return; - // } - - // // return; - // PyObject* pFunc2 = PyObject_GetAttrString(pmodule, "process_arrays"); - - // // 创建两个Python列表(数组) - // PyObject* pArgs = PyTuple_New(5);//五个参数 - // PyObject* pList1 = PyList_New(0); - // PyObject* pList2 = PyList_New(0); - - // // 填充列表 - // for (int i = 0; i < nlen; ++i) { - // PyList_Append(pList1, PyFloat_FromDouble(FGN_W[i])); // 可以调用GetINValue(AC,1,1);添加曲线数据 - // PyList_Append(pList2, PyFloat_FromDouble(NGN_W[i])); - // } - - // // 将列表放入参数元组中 - // PyTuple_SetItem(pArgs, 0, pList1); - // PyTuple_SetItem(pArgs, 1, pList2); - // PyTuple_SetItem(pArgs, 2, PyFloat_FromDouble(FGN_C)); - // PyTuple_SetItem(pArgs, 3, PyFloat_FromDouble(NGN_C)); - // PyTuple_SetItem(pArgs, 4, PyFloat_FromDouble(RGN_C)); - - // // 调用函数 - // PyObject* pValue = PyObject_CallObject(pFunc2, pArgs); - // if (pValue != NULL) { - // // // 处理结果或打印结果(例如,转换为C++数据类型) - // // for (Py_ssize_t i = 0; i < PyList_Size(pValue); ++i) { - // // PyObject* item = PyList_GetItem(pValue, i); - // // printf("%ld ", PyLong_AsLong(item)); // 对于Python 3,使用 PyLong_AsLong - // // } - // // printf("\n"); - // // 处理返回的元组,这里有两个数组元素 - // PyObject* array1 = PyTuple_GetItem(pValue, 0); - // double dR = PyFloat_AsDouble(PyTuple_GetItem(pValue, 1)); // 获取double - - // // // 将numpy数组转换为C++数组(例如使用numpy的API) - // // PyArrayObject* arr1 = (PyArrayObject*)PyArray_FromAny(array1, NULL, 0, 0, NPY_ARRAY_CARRAY, NULL); - // PyArrayObject* arr1 = (PyArrayObject*)array1; - // double* data1 = (double*)PyArray_DATA(arr1); - - // int len = PyArray_DIM(arr1, 0); // 获取数组长度 - // if (len>nlen) - // len = nlen; - // for (int i = 0; i < len; i++) { - // Att0all[i] = data1[i]; - // } - // Py_DECREF(arr1); - // } else { - // PyErr_Print(); - // } - - // // 清理资源 - // Py_DECREF(pValue); - // Py_DECREF(pArgs); - - // // while(Py_REFCNT(pmodule)>0) - // // Py_DECREF(pmodule); - // // Py_Finalize(); -} - -//核心处理逻辑 -int Process_Struct::Process() -{ - if(HD.Sdep >= HD.EndDep) - { - // AfxMessageBox("当前处理井段深度有误!\n已停止计算"); - AfxMessageBox("The current depth of the processing interval is incorrect!\n Calculation has been stopped"); - return 0; - } - - /*******************************************************写数据前的准备操作******************************************************* - ******************************begin****************************/ - //(1)初始化参数、输入 - MemRdWt.Const(); - MemRdWt.In(); - - //(2)波形类型的输出数据初始化检查 - char outname[2][16]; - int OUTindex = 0, WaveIndex = 0; - MemRdWt.GetOutCurveName(OUTindex, outname[OUTindex]);//获取输出数据名称,参数1是序列值(从0开始)(注:波形/曲线均使用GetOutCurveName函数) - - int index1 = MemRdWt.OpenWave(outname[OUTindex]);//检查是否存在outname[OUTindex]波形 - if(index1 < 0) //返回索引小于0说明没有该波形,需要创建 - { - //创建方式: - Slf_WAVE myWave; - strcpy(myWave.Name, outname[OUTindex]); - strcpy(myWave.AliasName, outname[OUTindex]); - strcpy(myWave.DepthUnit, "m"); - myWave.CodeLen = 4; - myWave.RepCode = 4; - myWave.DefVal = 0; - myWave.StartDepth = HD.Sdep; - myWave.EndDepth = HD.Edep; - myWave.DepLevel = HD.Rlev; - strcpy(myWave.DepthUnit, "m"); - myWave.StartTime = 0; //起始记录时间 - myWave.TimeLevel = 5; //时间采样间隔 - myWave.ArrayNum = 1; //阵列数 - myWave.TimeSamples = 36; //时间采样总数 - strcpy(myWave.TimeUnit, "ns"); //时间单位 - - index1 = MemRdWt.OpenWave((Slf_WAVE *)&myWave); //创建波形(注:此时返回索引应>1,代表创建成功) - } - if(index1 < 0) - { - // AfxMessageBox("阵列数据创建失败!\n已停止计算"); - AfxMessageBox("Array data creation failed!\nCalculation stopped"); - return 0; - }else{ - WaveIndex = index1; - } - - //(3)曲线类型的输出数据初始化检查 - OUTindex = 1;//按extern "C"中定义的输出数据顺序设置 - MemRdWt.GetOutCurveName(OUTindex, outname[OUTindex]);//获取输出数据名称,参数1是序列值(从0开始) - index1 = MemRdWt.OpenCurve(outname[1]);//index1 = MemRdWt.OpenCurve("EEE");//检查数据是否存在//outname[OUTindex] - if(index1 < 0) //返回索引小于0说明没有这条曲线,需要创建 - { - //创建方式: - Slf_CURVE myCurve; //定义曲线对象 - strcpy(myCurve.Name, outname[1]); //设置名称 - strcpy(myCurve.AliasName, outname[1]); //设置别名 - strcpy(myCurve.Unit, "m"); //设置数据单位 - myCurve.CodeLen = 4; //设置字节长度(注:4float) - myCurve.RepCode = 4; //设置数据类型(注:4float) - myCurve.DefVal = 0; //设置默认值 - myCurve.StartDepth = HD.Sdep; //设置起始深度 - myCurve.EndDepth = HD.Edep; //设置结束深度 - myCurve.DepLevel = HD.Rlev; //设置采样间隔 - strcpy(myCurve.DepthUnit, "m"); //设置深度单位 - - index1 = MemRdWt.OpenCurve((Slf_CURVE *)&myCurve); //创建曲线(注:此时返回索引应>1,代表创建成功) - - } - if(index1 < 0) - { - // AfxMessageBox("波形数据创建失败!\n已停止计算"); - AfxMessageBox("Array data creation failed!\nCalculation stopped"); - return 0; - } - /*********************************************************end************************************************************/ - - - - //(4)平台进度条设置 - DepthProgress mmProgress; - mmProgress.CreatProgress(HD.Stdep, HD.EndDep, "程序处理中..."); - - //(5)深度循环 - while(HD.Dep <= HD.EndDep)//逐深度处理 - { - mmProgress.SetDepth(HD.Dep);//设置平台进度条 - - /********************************************************获取常量参数示例*************************************************** - ******************************begin****************************/ - - //GetPosValue函数的参数3为序列值,要和extern "C"的CONC内容对应上(从1开始) - float CTH, CT, IT, MT; - GetPosValue(CTH, CON, 1, 1); - GetPosValue(CT, CON, 2, 1); - GetPosValue(IT, CON, 3, 1); - GetPosValue(MT, CON, 4, 1); - /***************************************************************end*************************************************************/ - - - /********************************************************读数据示例*************************************************************** - *****************************begin****************************/ - - //(1)读wave数据 - char inname[3][36]; - int index[4] = {-1}; - //获取输入数据对应的波列名称,,参数1是序列值(从0开始) - MemRdWt.GetInCurveName(0, inname[0]); - MemRdWt.GetInCurveName(1, inname[1]); - MemRdWt.GetInCurveName(2, inname[2]); - //获取波列数据对应的index,再读数据 - index[0] = MemRdWt.OpenWave(inname[0]); - index[1] = MemRdWt.OpenWave(inname[1]); - index[2] = MemRdWt.OpenWave(inname[2]); - if(index[0] < 0 || index[1] < 0 || index[2] < 0){ - // AfxMessageBox("波列数据获取失败\n已停止计算"); - AfxMessageBox("Waveform data acquisition failed\nCalculation stopped"); - return 0; - } - float FGN_W[60], NGN_W[60], RGN_W[60]; //必须根据wave数据的大小声明! - int a = 0; - int b = 0; int c = 0; - c = MemRdWt.ReadWaveToFloatBuf(index[2], HD.Dep, 1, RGN_W); - b = MemRdWt.ReadWaveToFloatBuf(index[1], HD.Dep, 1, NGN_W); - a = MemRdWt.ReadWaveToFloatBuf(index[0], HD.Dep, 1, FGN_W);//读取wave数据,从HD.Dep深度开始,读1个深度位置的wave数据至FGN_W中 - - //(2)读曲线数据 - //GetINValue函数的参数2为序列值,要和extern "C"的INC内容的顺序对应上 - float FGN_C, NGN_C, RGN_C; - GetINValue(FGN_C, 4, 1); - GetINValue(NGN_C, 5, 1); - GetINValue(RGN_C, 6, 1); - /********************************************************end*************************************************************/ - - /*******************************************处理程序示例(注:改成自己的算法)****************************************** - *****************************begin****************************/ - float Att0all[36]; - float THCAV = 0.0; - bool bPython = true; - if (bPython) - { - callPython(FGN_C, NGN_C, RGN_C, FGN_W, NGN_W, Att0all, 36); - } - else - { - for(int i = 0; i < 36; i++) - Att0all[i] = FGN_W[i] + NGN_W[i]; - THCAV = FGN_C + NGN_C + RGN_C; - } - /********************************************************end********************************************************/ - - - /*******************************************************向平台写数据示例********************************************** - *****************************begin****************************/ - - //(1)写wave数据 - MemRdWt.WriteWave(WaveIndex, HD.Dep, 1, &Att0all); - - //(2)写curve数据 - int THCAV_index = MemRdWt.OpenCurve(outname[1]);//outname[1] - if(THCAV_index > 0) - MemRdWt.WriteCurve(THCAV_index, HD.Dep, 1, &THCAV); - /*******************************************************end**********************************************************/ - MemRdWt.In(); //继续深度循环 - } - - /*************************************************向平台写表格示例************************************************************* - *****************************begin****************************/ - - //(1)固井结论表格 - int itable1 = MemRdWt.OpenOG_RESULT("固井质量");//例如表格取名为“固井质量” - MemRdWt.SetTableRecordCount(itable1, 0); //清空原有表格数据 - - GUJING *CCNN2 = new GUJING[5]; - for(int i = 0; i < 5; i++) - { - CCNN2[i].GNO = i + 1; - CCNN2[i].GSDEP = 2000 + i * 10; - CCNN2[i].GEDEP = 2000 + (i + 1) * 10; - CCNN2[i].GRESULT = 1; - - int temp = MemRdWt.WriteTable(itable1, i + 1, &CCNN2[i]); - } - - //(2)其他表格 - struct Slf_RST{ - int Order; - float Depth; - float CorrDepth; - }; - struct Slf_RST m_Result; - itable1 = MemRdWt.OpenTable("ABCD"); - if (itable1 < 0) - { - itable1 = MemRdWt.Open_Set_Table("ABCD",0,3, - "NO,DEPTH,DDEP", - "4,4,4",//字段长度 - "1,4,4",//字段类型 - "0,0,0");//字段备注,1-枚举 - } - MemRdWt.SetTableRecordCount(itable1,3); //设置表格有3行数据 - for(int j = 0; j < 3; j++) - { - memset(&m_Result, 0, sizeof(Slf_RST)); - m_Result.Order = j + 1; - m_Result.Depth = 10; - m_Result.CorrDepth = 20 + j; - MemRdWt.WriteTable(itable1, j + 1, &m_Result); - - } - MemRdWt.CloseTable(itable1); - /******************************************************end*************************************************************/ - return 1; -} diff --git a/logPlus/PropertyWidget.cpp b/logPlus/PropertyWidget.cpp index bc10943..074adc7 100644 --- a/logPlus/PropertyWidget.cpp +++ b/logPlus/PropertyWidget.cpp @@ -2421,13 +2421,19 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant CommonPropertyChanged(pProperty, variant); changedDcaProperty(m_propertyData[pProperty], variant); } - + else if (m_strCurrentProperty == DrawImage_Property)//图像 + { + // 先处理通用属性 + CommonPropertyChanged(pProperty, variant); + changedDrawImageProperty(m_propertyData[pProperty], variant); + } } void PropertyWidget::SlotPropertyChanged(QtProperty *property, const int &val, bool islinestyle) { QString str = m_propertyData[property]; - if (m_strCurrentProperty == Wave_Property) + if (m_strCurrentProperty == Wave_Property + || m_strCurrentProperty == DrawImage_Property) { m_formInfo->setInfoProperty(str, val); @@ -2727,7 +2733,7 @@ void PropertyWidget::_CreateEnumPropertyItem(QString strGroup, QString strProper } -void PropertyWidget::_CreateColorSchemePropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue) +QtProperty* PropertyWidget::_CreateColorSchemePropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int nclr) { QtProperty *pGroupItem = NULL; { @@ -2745,7 +2751,34 @@ void PropertyWidget::_CreateColorSchemePropertyItem(QString strGroup, QString st } QtProperty *colorSchemeProperty = m_pColorSchemeManager->addProperty(strPropertyCaption); - m_pColorSchemeManager->setLinear(colorSchemeProperty); + +// QVector qvFiles; +// int n = getColorConfig(qvFiles); +// if (n > 0) +// { +// CGradient m_GraInfo; +// QList listSColor; +// for (int i = 0; i < qvFiles.size(); i++) +// { +// m_GraInfo.Serialize(qvFiles[i]); +// +// //获取颜色数组 +// int iColorNum = 256; +// COLORREF pColorArr[256]; +// int nret = m_GraInfo.GetColorArray(pColorArr); +// +// QtSchemeColor sc; +// sc.schemeName = qvFiles.at(i); +// for (int k = 0; k < nret; k++) +// { +// sc.colorList.push_back(QtColorItem(QColor(pColorArr[k]))); +// } +// listSColor << sc; +// } +// m_pColorSchemeManager->setLinear(colorSchemeProperty, listSColor); +// } +// else + m_pColorSchemeManager->setLinear(colorSchemeProperty, nclr); if (colorSchemeProperty) { m_propertyData[colorSchemeProperty] = strPropertyCaption; @@ -2756,6 +2789,7 @@ void PropertyWidget::_CreateColorSchemePropertyItem(QString strGroup, QString st // m_mapProperty[colorSchemeProperty] = pMetaProperty; //} } + return colorSchemeProperty; } void PropertyWidget::initWidgetProperty(QString strUuid, int iScale) @@ -3318,7 +3352,11 @@ void PropertyWidget::initProperty(FormInfo *formInfo) { // this->initDcaProperty(formInfo); - } + } + else if (formInfo->m_strType == "DrawImageObject") + { + this->initDrawImageProperty(formInfo); + } } void PropertyWidget::initWaveProperty(FormInfo *formInfo, int nType) @@ -3398,7 +3436,7 @@ void PropertyWidget::initWaveProperty(FormInfo *formInfo, int nType) if (nType == 2) { - _CreateColorSchemePropertyItem("调色板参数设置", "色板", formInfo->m_nSchemeIndex); + _CreateColorSchemePropertyItem("调色板参数设置", "色板", formInfo->m_nSchemeIndex, 0); _CreateVariantPropertyItem("调色板参数设置", "变密度颜色级数", formInfo->m_nColorNum, QVariant::Int); } // _CreateVariantPropertyItem("调色板参数设置", "图例置顶", false, QVariant::Bool); @@ -5937,43 +5975,84 @@ void PropertyWidget::changedMCalsProperty(QString strProperty, QVariant varVal) void PropertyWidget::initDrawImageProperty(FormInfo *formInfo) { + //初始化,清空 + InitCurrentViewInfo(); + + m_formInfo = formInfo; + + m_strUuid = formInfo->m_strUuid; + m_strTrackUuid = formInfo->m_strTrackUuid; + // + m_strSlfName = formInfo->m_strSlfName; + m_strWellName = formInfo->m_strWellName; + m_strTrackName = formInfo->m_strTrackName; + m_strLineName = formInfo->m_strLineName; + _CreateVariantPropertyItem("数据", "名称", formInfo->m_strAliasName, QVariant::String); _CreateVariantPropertyItem("数据", "选择曲线", formInfo->m_strSlfName, QVariant::String); - _CreateVariantPropertyItem("数据", "显示单位", formInfo->m_strUnit, QVariant::String); - _CreateVariantPropertyItem("数据", "最小值", formInfo->m_strUnit, QVariant::String); - _CreateVariantPropertyItem("数据", "最大值", formInfo->m_strUnit, QVariant::String); + _CreateVariantPropertyItem("数据", "显示单位", "(°)", QVariant::String); + _CreateVariantPropertyItem("数据", "最小值", formInfo->m_ImgMinVal, QVariant::String); + _CreateVariantPropertyItem("数据", "最大值", formInfo->m_ImgMaxVal, QVariant::String); - _CreateVariantPropertyItem("通常", "例区高度(cm)", formInfo->m_strUnit, QVariant::String); + //_CreateVariantPropertyItem("通常", "例区高度(cm)", formInfo->m_strUnit, QVariant::String); - _CreateVariantPropertyItem("字体", "曲线名称", formInfo->m_strAliasNameFont, QVariant::Font); + _CreateVariantPropertyItem("字体", "曲线名称", formInfo->m_curveNameFont, QVariant::Font); _CreateVariantPropertyItem("字体", "曲线单位", formInfo->m_strUnitFont, QVariant::Font); - _CreateVariantPropertyItem("字体", "颜色", formInfo->m_pl_fontScale, QVariant::Font); + _CreateVariantPropertyItem("字体", "颜色", formInfo->m_lineColor, QVariant::Color); - _CreateVariantPropertyItem("三维", "三维显示", formInfo->m_pl_fontScale, QVariant::Font); - _CreateVariantPropertyItem("三维", "俯视角度", formInfo->m_pl_fontScale, QVariant::Font); - _CreateVariantPropertyItem("三维", "微调旋转角度", formInfo->m_pl_fontScale, QVariant::Font); - _CreateVariantPropertyItem("三维", "显示方位", formInfo->m_pl_fontScale, QVariant::Font); + _CreateVariantPropertyItem("三维", "三维显示", formInfo->m_bShow3D, QVariant::Bool); + _CreateVariantPropertyItem("三维", "俯视角度", formInfo->m_nOverlook, QVariant::Int); + _CreateVariantPropertyItem("三维", "微调旋转角度", formInfo->m_nRotAng, QVariant::Int); + _CreateVariantPropertyItem("三维", "显示方位", formInfo->m_nAzimuth, QVariant::Int); QStringList listType; listType.append("线性"); listType.append("对数"); - _CreateEnumPropertyItem("显示设置", "坐标类型", formInfo->m_pl_fontScale, listType); - QStringList listType2; - listType2.append("线性"); - listType2.append("对数"); - _CreateEnumPropertyItem("显示设置", "配色方案", formInfo->m_pl_fontScale, listType2); - _CreateVariantPropertyItem("显示设置", "背景值", formInfo->m_pl_fontScale, QVariant::Font); - _CreateVariantPropertyItem("显示设置", "滤波方式", formInfo->m_pl_fontScale, QVariant::Font); - _CreateVariantPropertyItem("显示设置", "NxN(N取奇数)", formInfo->m_pl_fontScale, QVariant::Font); - + _CreateEnumPropertyItem("显示设置", "坐标类型", formInfo->m_nCoord, listType); + _CreateColorSchemePropertyItem("显示设置", "配色方案", formInfo->m_nSchemeIndex, 1); +// _CreateVariantPropertyItem("显示设置", "背景值", formInfo->m_pl_fontScale, QVariant::Font); +// _CreateVariantPropertyItem("显示设置", "滤波方式", formInfo->m_pl_fontScale, QVariant::Font); +// _CreateVariantPropertyItem("显示设置", "NxN(N取奇数)", formInfo->m_pl_fontScale, QVariant::Font); + m_strCurrentProperty = DrawImage_Property; } void PropertyWidget::changedDrawImageProperty(QString strProperty, QVariant varVal) { + bool bDraw = false; + QStringList slist; + slist << "最小值" << "最大值" << "曲线名称" << "曲线单位" << "颜色" + << "三维显示" << "俯视角度" << "微调旋转角度" << "显示方位" + << "坐标类型" << "配色方案" << "背景值" << "滤波方式" << "NxN(N取奇数)"; + for (int i = 0; i < slist.length(); i++) + { + if (slist.at(i) == strProperty) + { + bDraw = m_formInfo->setInfoProperty(strProperty, varVal); + break; + } + } + if ("颜色" == strProperty) + return; + + if (!slist.contains(strProperty)) + bDraw = true; + + if (bDraw) + { + QVariantList listCond; + listCond << m_strUuid; + listCond << m_strSlfName; + listCond << m_strWellName; + listCond << m_strTrackName; + listCond << m_strLineName; + listCond << strProperty; + listCond << varVal; + emit CallManage::getInstance()->sig_changeDrawProperty(listCond); + } } void PropertyWidget::initDcaProperty(FormInfo *formInfo) diff --git a/logPlus/PropertyWidget.h b/logPlus/PropertyWidget.h index b025118..67214f5 100644 --- a/logPlus/PropertyWidget.h +++ b/logPlus/PropertyWidget.h @@ -85,6 +85,8 @@ #define MCals_Property "MCals_Property" //多臂井径 +#define DrawImage_Property "DrawImage_Property" //图像 + #pragma execution_character_set("utf-8") /** @@ -173,7 +175,7 @@ public: void _CreateVariantPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int propertyType, double dMin, double dMax); void _CreateEnumPropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, QStringList listValue); - void _CreateColorSchemePropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue); + QtProperty* _CreateColorSchemePropertyItem(QString strGroup, QString strPropertyCaption, QVariant vtPropertyValue, int nclr); void InitCurrentViewInfo(bool bAll = true); //初始化属性,清空 void initWidgetProperty(QString strUuid, int iScale); //可视解释整体属性 @@ -296,6 +298,7 @@ public: void initMCalsProperty(FormInfo *formInfo); void changedMCalsProperty(QString strProName, QVariant val); + public slots: void SlotPropertyChanged(QtProperty *property, const QVariant &variant); void SlotPropertyChanged(QtProperty *property, const int &val, bool islinestyle); diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index 4a1cd2b..2285602 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -8,7 +8,6 @@ #include "TransparentDraggableRect.h" #include "TransparentGroupResult.h" #include -#include "Gradient.h" #include "PickFrac.h" #include "formline.h" #include "PropertyWidget.h" @@ -3321,7 +3320,7 @@ void FormDraw::s_AddLine_Property(QString strUuid, QString strSlfName, QString s AppendConsole(PAI_INFO, "FormDraw s_AddLine_Property end"); } - +//#include "CylinderImagePlot.h" void FormDraw::s_addWave(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strWaveName) { //井名&道名不一致 @@ -3366,6 +3365,18 @@ void FormDraw::s_addWave(QString strUuid, QString strSlfName, QString strWellNam curv->m_bX2Y = false; curv->initWave(strSlfName, strWaveName); + + // 圆柱渲染器 + // CylindricalImageMap* cylinderMap = new CylindricalImageMap(curv->xAxis, curv->yAxis); + // cylinderMap->setData(curv->m_colorMap->data()); + // cylinderMap->setCylinderRadius(2.0); + // cylinderMap->setSourceColorMap(curv->m_colorMap); // 共享梯度 + // cylinderMap->setAzimuth(45); + // cylinderMap->setElevation(30); + // // 隐藏原始的矩形色图 + // curv->m_colorMap->setVisible(false); + //cylinderMap->rescaleAxes(); + _nSamples = curv->getScaleV(); } curv->replot(); @@ -4005,12 +4016,18 @@ void FormDraw::s_addDrawImage(QString strUuid, QString strSlfName, QString strWe QMyCustomPlot *curv = new QMyCustomPlot(this, strSlfName, strWellName, strTrackName, strLineName); //绑定m_formTrack,方便关联formInfo curv->m_formTrack = m_formTrack; - curv->show(); + curv->setDepthY(m_iY1, m_iY2); + if (nW <= 0) + nW = g_iOneWidth; + curv->initGeometry(m_strUuid, m_iScale, nW); + curv->m_bX2Y = false; + curv->show(); - //图像 成像 - QString strWaveName = ""; - int _nSamples = 0; - DrawImageNew_NoFilter(curv, strSlfName, strWaveName, _nSamples); + //图像 成像 + QString strWaveName = ""; + int _nSamples = 0; + curv->initImage(strSlfName, strWaveName); + //DrawImageNew_NoFilter(curv, strSlfName, strWaveName, _nSamples); // connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); @@ -4024,7 +4041,7 @@ void FormDraw::s_addDrawImage(QString strUuid, QString strSlfName, QString strWe double width=2; QString strScaleType = ""; //道-对象 - m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, _nSamples, 0, strScaleType, "DrawImageObject"); + m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strLineName, strAliasName, strUnit, newlineColor, width, _nSamples, 0, strScaleType, "DrawImageObject"); } @@ -5048,202 +5065,6 @@ void FormDraw::initWave_3D(QMyCustomPlot *widget, QString strSlfName, QString st colorMap->rescaleDataRange(); } -// 搜索所有配色方案名 -int FormDraw::getColorConfig(QVector &qFiles) -{ - char str[256],*buffer; - int i,nRet=0; - QString qstr; - QByteArray ba; - - //GetBinDir(str); - qstr = QCoreApplication::applicationDirPath();//QString(QLatin1String(str)); //char*=>QString - qstr+="\\color\\colorConfig.list"; - qFiles.clear(); - QFile f(qstr); - if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) - { - //cout << "Open failed." << endl; - return 0; - } - - QTextStream txtInput(&f); - qstr = txtInput.readLine(); - //QString==>char * - ba = qstr.toLatin1(); // must - buffer=ba.data(); - sscanf(buffer,"%d",&nRet); - for (i=0;iOpen(strSlfName.toStdString().c_str(), CSlfIO::modeRead); - // - int index=logio->OpenWave(strWaveName.toStdString().c_str()); - if(index<0) { - delete logio; - return; - } - - Slf_WAVE _wave; - logio->GetWaveInfo(index, &_wave); - float _SDep,_EDep,_Rlev; - _SDep = _wave.StartDepth; - _EDep = _wave.EndDepth; - // _SDep = 0.0 - m_iY2; - // _EDep = 0.0 - m_iY1; - _Rlev = _wave.DepLevel; - int m_Record=(float)(fabs((_EDep-_SDep)/_Rlev+0.5)); - - _nSamples = _wave.TimeSamples; - - char *value=new char[(_nSamples+1)*m_Record*_wave.CodeLen+1]; - logio->ReadWave(index,_SDep,m_Record,(void *)value); - logio->CloseWave(index); - delete logio; - - bool bFistValue=false; - float vmax = -9999;//(float)_nSamples; - float vmin = -9999; - // - double** wavedata; - wavedata = new double*[_nSamples]; - for(int kk = 0;kk<_nSamples;kk++){ - wavedata[kk] = new double[m_Record]; - } - - for (int i=0; ival)vmin=val; - } - } - delete[] value; - - widget->setScaleX(vmin, vmax); - widget->setDepthY(m_iY1, m_iY2); - widget->initGeometry(m_strUuid, m_iScale, g_iOneWidth); - widget->axisRect()->setupFullAxesBox(); - // - widget->xAxis->ticker()->setTickCount(10);//x个主刻度 - widget->yAxis->ticker()->setTickCount(60);//y个主刻度 - - //对调XY轴,在最前面设置 - QCPAxis *yAxis = widget->yAxis; - QCPAxis *xAxis = widget->xAxis; - widget->xAxis = yAxis; - widget->yAxis = xAxis; - - //------------------- - // set up the QCPColorMap: - QCPColorMap *colorMap = new QCPColorMap(widget->xAxis, widget->yAxis); - int nx = m_Record; - int ny = _nSamples; - colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点 - //colorMap->data()->setRange(QCPRange(m_iY1, m_iY2), QCPRange(vmin, vmax)); // 并在键(x)和值(y)维上跨越坐标范围-4..4 - colorMap->data()->setRange(QCPRange(0-_EDep, 0-_SDep), QCPRange(vmin, vmax)); - // :现在,我们通过访问颜色贴图的QCPColorMapData实例来分配一些数据: - double x, y, z; - for (int xIndex=0; xIndexdata()->setCell(nx-xIndex-1, yIndex, vmin); - continue; - } - //colorMap->data()->setCell(xIndex, yIndex, wavedata[yIndex][xIndex]); - colorMap->data()->setCell(nx-xIndex-1, yIndex, wavedata[yIndex][xIndex]); - } - } - - // 添加色标: - QCPColorScale *colorScale = new QCPColorScale(widget); - colorMap->setColorScale(colorScale); // 将颜色图与色标关联 - // 将颜色贴图的“颜色渐变”设置为其中一个预设 - //colorMap->setGradient(QCPColorGradient::gpPolar);//gpJet); - // 我们还可以创建一个QCPColorGradient实例并向其中添加自己的颜色 - // 渐变,请参阅QCPColorGradient的文档以获取可能的效果. - // int nIndex=11; - // QVector colorList; - // bool inpolation = true; - // int iColorNum = getSystemColor(nIndex, colorList, inpolation); - // // - // QCPColorGradient gradient; - // for(int i=0; isetGradient(gradient); - - QVector m_qvFiles; - int n=getColorConfig(m_qvFiles); - if(n<=0)return; - - //获取配色方案 - int nIndex=0; - CGradient m_GraInfo; - m_GraInfo.Serialize(m_qvFiles[nIndex]); - - //获取颜色数组 - int iColorNum = 256; - COLORREF pColorArr[256]; - m_GraInfo.GetColorArray(pColorArr); - - // - QCPColorGradient gradient; - for(int i=0; isetGradient(gradient); - // 重新缩放数据维度(颜色),以使所有数据点都位于颜色渐变显示的范围内: - colorMap->rescaleDataRange(); - - //----调色板-------- - // widget->plotLayout()->addElement(0, 1, colorScale); // 将其添加到主轴矩形的右侧 - // colorScale->setType(QCPAxis::atRight); // 刻度应为垂直条,刻度线/坐标轴标签右侧(实际上,右侧已经是默认值) - // colorScale->axis()->setLabel("Magnetic Field Strength"); - // //确保轴rect和色标同步其底边距和顶边距(以便它们对齐): - // QCPMarginGroup *marginGroup = new QCPMarginGroup(widget); - // widget->axisRect()->setMarginGroup(QCP::msBottom|QCP::msTop, marginGroup); - // colorScale->setMarginGroup(QCP::msBottom|QCP::msTop, marginGroup); - - // 重新缩放键(x)和值(y)轴,以便可以看到整个颜色图: - //widget->rescaleAxes(); -} - //蝌蚪图 void FormDraw::initKedou(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QJsonObject listOtherProperty) { diff --git a/logPlus/formdraw.h b/logPlus/formdraw.h index 7c3a298..137a2ec 100644 --- a/logPlus/formdraw.h +++ b/logPlus/formdraw.h @@ -150,10 +150,6 @@ public: //波列 void initWave_3D(QMyCustomPlot *widget, QString strSlfName, QString strWaveName, int &_nSamples); - //图像-3d成图 - int getColorConfig(QVector &qFiles); - void DrawImageNew_NoFilter(QMyCustomPlot *widget, QString strSlfName, QString &strWaveName, int &_nSamples); - //蝌蚪图 void initKedou(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName = "蝌蚪图", QColor newlineColor=QColor(0,0,0), QJsonObject listOtherProperty={}); //杆状图 diff --git a/logPlus/forminfo.cpp b/logPlus/forminfo.cpp index b3d3d45..67366e2 100644 --- a/logPlus/forminfo.cpp +++ b/logPlus/forminfo.cpp @@ -1421,67 +1421,77 @@ void FormInfo::paintEvent(QPaintEvent* event) //painter.drawText(rect.left(), rect.top(), rect.width(), rect.height()/3, Qt::AlignCenter, strAliasNameTmp); } - if(m_strType=="waveObject") + + if(m_strType=="waveObject" || m_strType == "DrawImageObject") { - painter.drawText(rect.left(), rect.top(), rect.width(), 30, Qt::AlignCenter, m_strLineName); + int nUseTag = -1; + if (m_strType == "DrawImageObject") + { + painter.drawText(rect.left(), rect.top(), rect.width(), 30, Qt::AlignCenter, strShowTxt); + nUseTag = 1; + strShowTxt = ""; + } + + if (m_strType == "waveObject") + { + painter.drawText(rect.left(), rect.top(), rect.width(), 30, Qt::AlignCenter, m_strLineName); + if (m_nDrawType == 0 || m_nDrawType == 1) + { + int nbot = rect.bottom() - rect.height() / 3.0; + QVector pts; + int i = 0; + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 15.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 12.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 9.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 6.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 3.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 9.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 15.0)); + pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot)); + pts.append(QPointF(rect.left() + rect.width() / 3.0, nbot)); - if (m_nDrawType == 0 || m_nDrawType == 1) - { - int nbot = rect.bottom()- rect.height() / 3.0; - QVector pts; - int i = 0; - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 15.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 12.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 9.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 6.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 3.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 9.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot - rect.height() / 15.0)); - pts.append(QPointF(rect.left() + rect.width() / 3.0 + (i++)*rect.width() / 3.0 / 8.0, nbot)); - pts.append(QPointF(rect.left() + rect.width() / 3.0, nbot)); + if (m_nDrawType == 1) { + QPolygonF cRgn; + for (int j = 0; j < pts.size(); j++) { + cRgn.push_back(pts[j]); + } + QPainterPath path; + path.addPolygon(cRgn); + painter.fillPath(path, QBrush(m_lineColor)); + } + else + { + painter.drawPolygon(pts); + } + } + else + { + nUseTag = 0; + } + } + if (nUseTag >= 0) + { + QList rgbList = QtColorTableData::getInstance()->GetRgb_UseTag(nUseTag, m_nSchemeIndex, m_nColorNum); + int iColorNum = rgbList.size(); - if (m_nDrawType == 1) { - QPolygonF cRgn; - for (int j = 0; j < pts.size(); j++) { - cRgn.push_back(pts[j]); - } - QPainterPath path; - path.addPolygon(cRgn); - painter.fillPath(path, QBrush(m_lineColor)); - } - else - { - painter.drawPolygon(pts); - } - } - else - { - QtColorTableData::getInstance()->SetCurrentSchemeIndex(m_nSchemeIndex); - //ColorTableIndex = ind; - - QtColorTableData::getInstance()->ChangeColorNum(m_nColorNum); - QList rgbList = QtColorTableData::getInstance()->GetRgb(); - int iColorNum = rgbList.size(); - - //头部绘制调色板 - float scale = (float)(rect.width() - 4) / (float)iColorNum; - QRectF rt7 = QRectF(rect.left() + 2, rect.top() + rect.height() / 3, rect.width() - 4, rect.height() / 3); - for (int i = 0; i < iColorNum; i++) - { - QColor acolor = rgbList.at(i); - float temp = (float)i * scale; - if (i)rt7.setLeft(rect.left() + 2 + temp); - else rt7.setLeft(rect.left() + 2 + temp + 1); - temp = (float)(i + 1) * scale; - rt7.setRight(rect.left() + 2 + temp); - QBrush HeadBrush = QBrush(acolor); - painter.fillRect(rt7, HeadBrush); - } - } + //头部绘制调色板 + float scale = (float)(rect.width() - 4) / (float)iColorNum; + QRectF rt7 = QRectF(rect.left() + 2, rect.top() + rect.height() / 3, rect.width() - 4, rect.height() / 3); + for (int i = 0; i < iColorNum; i++) + { + QColor acolor = rgbList.at(i); + float temp = (float)i * scale; + if (i)rt7.setLeft(rect.left() + 2 + temp); + else rt7.setLeft(rect.left() + 2 + temp + 1); + temp = (float)(i + 1) * scale; + rt7.setRight(rect.left() + 2 + temp); + QBrush HeadBrush = QBrush(acolor); + painter.fillRect(rt7, HeadBrush); + } + } } - if(m_strLineName=="RESULT") { //解释结论,不绘制左右范围 @@ -2532,12 +2542,10 @@ bool FormInfo::setInfoProperty(QString strProName, QVariant val, QString strGp) else if ("色板" == strProName) { this->m_nSchemeIndex = val.toInt(); - return true; } else if ("变密度颜色级数" == strProName) { this->m_nColorNum = val.toInt(); - return true; } else if ("垂向绘制" == strProName) { @@ -2573,6 +2581,50 @@ bool FormInfo::setInfoProperty(QString strProName, QVariant val, QString strGp) { this->m_bConBackAndForth = val.toBool(); } + else if ("最小值" == strProName) + { + this->m_ImgMinVal = val.toInt(); + } + else if ("最大值" == strProName) + { + this->m_ImgMaxVal = val.toInt(); + } + else if ("三维显示" == strProName) + { + this->m_bShow3D = val.toBool(); + } + else if ("俯视角度" == strProName) + { + this->m_nOverlook = val.toInt(); + } + else if ("微调旋转角度" == strProName) + { + this->m_nRotAng = val.toInt(); + } + else if ("显示方位" == strProName) + { + this->m_nAzimuth = val.toInt(); + } + else if ("坐标类型" == strProName) + { + this->m_nCoord = val.toInt(); + } + else if ("配色方案" == strProName) + { + this->m_nSchemeIndex = val.toInt(); + } +// else if ("背景值" == strProName) +// { +// +// } +// else if ("滤波方式" == strProName) +// { +// +// } +// else if ("NxN(N取奇数)" == strProName) +// { +// +// } this->update(); return bDraw; diff --git a/logPlus/forminfo.h b/logPlus/forminfo.h index 247b52b..72e0bf9 100644 --- a/logPlus/forminfo.h +++ b/logPlus/forminfo.h @@ -431,6 +431,15 @@ public: int m_nVLineWidth =1; //纵格线宽度 QColor m_VLineColor = QColor(0,0,0);//纵格线颜色 + // 图像 + float m_ImgMinVal = 0; // 最小值 + float m_ImgMaxVal = 128; // 最大值 + bool m_bShow3D = false; // 三维显示 + int m_nOverlook = 20; // 俯视角度 + int m_nRotAng = 3; // 微调旋转角度 + int m_nAzimuth = 0; // 显示方位 + int m_nCoord = 0; // 坐标类型 + public: void setLineWidth(double dWidth); double getLineWidth(); diff --git a/logPlus/logplus.vcxproj b/logPlus/logplus.vcxproj index fbe80be..4b6519b 100644 --- a/logPlus/logplus.vcxproj +++ b/logPlus/logplus.vcxproj @@ -11,6 +11,7 @@ + @@ -19,7 +20,6 @@ - @@ -41,9 +41,11 @@ + + @@ -51,7 +53,6 @@ - @@ -104,7 +105,6 @@ - @@ -152,11 +152,13 @@ + + @@ -174,7 +176,6 @@ - @@ -206,6 +207,7 @@ + diff --git a/logPlus/logplus.vcxproj.filters b/logPlus/logplus.vcxproj.filters index 8b97628..cfa533f 100644 --- a/logPlus/logplus.vcxproj.filters +++ b/logPlus/logplus.vcxproj.filters @@ -27,9 +27,6 @@ {1f2b53b3-aa5f-43c7-8ab9-93f4396930b7} - - {01484347-5324-4654-80c8-0972752803c6} - {90fce5ea-3cd6-47d8-9400-aea11137b079} @@ -65,9 +62,6 @@ Header Files - - Header Files - Header Files @@ -274,9 +268,6 @@ 3rd_qcustomplot\v2_1 - - CallManage - Header Files @@ -319,6 +310,15 @@ Header Files + + Header Files + + + Header Files + + + Header Files + @@ -378,9 +378,6 @@ Source Files - - Source Files - Source Files @@ -492,9 +489,6 @@ 3rd_qcustomplot - - CallManage - common @@ -666,6 +660,15 @@ Source Files + + Source Files + + + Source Files + + + Source Files + diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index e332892..785da1b 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -4000,7 +4000,7 @@ void MainWindowCurve::s_DrawImage() QString strSlfName = sret.at(1); //新建道 - emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "成像", "DrawImageObject", nW); + emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, "DYNIMAGE", "DrawImageObject", nW); } //地质层位道 diff --git a/logPlus/qmycustomplot.cpp b/logPlus/qmycustomplot.cpp index 88b4902..b7b1463 100644 --- a/logPlus/qmycustomplot.cpp +++ b/logPlus/qmycustomplot.cpp @@ -406,21 +406,21 @@ void QMyCustomPlot::initWave(QString strSlfName, QString strWaveName) widget->m_fmin = vmin; widget->m_fmax = vmax; // - if (!widget->m_bX2Y) - { + // if (!widget->m_bX2Y) + // { widget->setScaleX(0, 264); - widget->xAxis->setVisible(false); - widget->xAxis2->setVisible(false); - widget->yAxis->setVisible(false); - widget->yAxis2->setVisible(false); + // widget->xAxis->setVisible(false); + // widget->xAxis2->setVisible(false); + // widget->yAxis->setVisible(false); + // widget->yAxis2->setVisible(false); - //对调XY轴,在最前面设置 - QCPAxis *yAxis = widget->yAxis; - QCPAxis *xAxis = widget->xAxis; - widget->xAxis = yAxis; - widget->yAxis = xAxis; - widget->m_bX2Y = true; - } + // //对调XY轴,在最前面设置 + // QCPAxis *yAxis = widget->yAxis; + // QCPAxis *xAxis = widget->xAxis; + // widget->xAxis = yAxis; + // widget->yAxis = xAxis; + // widget->m_bX2Y = true; + // } //------------------- // set up the QCPColorMap: @@ -633,6 +633,151 @@ void QMyCustomPlot::initCurve(QString strSlfName, QString strLineName) } +void QMyCustomPlot::initImage(QString strSlfName, QString strWaveName) +{ + if (strSlfName.isEmpty()) return; + if (strWaveName == "" || strWaveName == "AC") strWaveName = "DYNIMAGE"; + + CLogIO *logio = new CLogIO(); + logio->Open(strSlfName.toStdString().c_str(), CSlfIO::modeRead); + // + int index = logio->OpenWave(strWaveName.toStdString().c_str()); + if (index < 0) { + delete logio; + return; + } + + m_nUseColor = 1; + QMyCustomPlot* widget = this; + Slf_WAVE _wave; + logio->GetWaveInfo(index, &_wave); + float _SDep, _EDep, _Rlev; + _SDep = _wave.StartDepth; + _EDep = _wave.EndDepth; + m_SDep = _SDep; + m_EDep = _EDep; + // _SDep = 0.0 - m_iY2; + // _EDep = 0.0 - m_iY1; + _Rlev = _wave.DepLevel; + int m_Record = (float)(fabs((_EDep - _SDep) / _Rlev + 0.5)); + + int _nSamples = _wave.TimeSamples; + m_nSamples = _nSamples; + if (m_fScaleV <= 0.0f) + m_fScaleV = _nSamples; + char *value = new char[(_nSamples + 1)*m_Record*_wave.CodeLen + 1]; + logio->ReadWave(index, _SDep, m_Record, (void *)value); + logio->CloseWave(index); + delete logio; + + bool bFistValue = false; + float vmax = -9999;//(float)_nSamples; + float vmin = -9999; + + float detp = _SDep; + float edepc = _EDep; + if (m_nWaveJg < 10) + m_nWaveJg = 10; + float m_r = _Rlev * m_nWaveJg; + float m_MoveDep = 0.0f; + + float yscale = 1; + if (m_nWaveHei > 1) + { + float DifBase = 1; + if (m_nDrawType == 2 || m_nDrawType == 6 || m_nDrawType == 10) { + DifBase = (m_MaxRange - m_Base) / m_nColorNum; + } + else { + DifBase = (m_MaxRange - m_Base) / 1; + } + if (fabs(DifBase) <= 1e-6) DifBase = 1; + + yscale = m_nWaveHei + DifBase; + yscale = yscale / DifBase; + } + + //QVector< QVector > vecWave; + m_vecWaveData.clear(); + for (float dep1 = detp - 10 * m_r; dep1 < edepc + m_MoveDep + 10 * m_r; dep1 += m_r) + { + int iIndex = Slf_Int(dep1 + m_MoveDep, _SDep, _Rlev); + if (iIndex < 0) { + continue; + } + + if (iIndex >= m_Record) + break; + + QVector ve(_nSamples); + for (int kk = 0; kk < _nSamples; kk++) + { + double val = GetData(_wave.RepCode, (char *)&value[iIndex * _nSamples*_wave.CodeLen + kk * _wave.CodeLen]); + ve[kk] = val;// 256 * (val - m_LeftVal) / (m_RightVal - m_LeftVal); + //ve[kk] = (int)((val - m_Base)*yscale); + if (val == -9999) + { + continue; + } + + if (bFistValue == false) + { + //最大值,最小值默认采用第一个有效值 + bFistValue = true; + vmax = vmin = val; + } + // + if (vmax < val)vmax = val; + if (vmin > val)vmin = val; + } + m_vecWaveData << ve; + } + + delete[] value; + + widget->m_fmin = vmin; + widget->m_fmax = vmax; + // + if (!widget->m_bX2Y) + { + widget->setScaleX(0, 264); + widget->xAxis->setVisible(false); + widget->xAxis2->setVisible(false); + widget->yAxis->setVisible(false); + widget->yAxis2->setVisible(false); + + //对调XY轴,在最前面设置 + QCPAxis *yAxis = widget->yAxis; + QCPAxis *xAxis = widget->xAxis; + widget->xAxis = yAxis; + widget->yAxis = xAxis; + widget->m_bX2Y = true; + } + + //------------------- + // set up the QCPColorMap: + if (widget->m_colorMap == NULL) + { + QCPColorMap *colorMap = new QCPColorMap(widget->xAxis, widget->yAxis); + widget->m_colorMap = colorMap; + // 添加色标: + QCPColorScale *colorScale = new QCPColorScale(widget); + colorMap->setColorScale(colorScale); // 将颜色图与色标关联 + + // :现在,我们通过访问颜色贴图的QCPColorMapData实例来分配一些数据: + this->updateImageWave(); + + // 重新缩放数据维度(颜色),以使所有数据点都位于颜色渐变显示的范围内: + //colorMap->rescaleDataRange(); + + this->setSchemeIndex(m_nSchemeIndex, m_nColorNum); + } + else + { + this->updateImageWave(); + } +} + void QMyCustomPlot::initColorTable() { this->setSchemeIndex(m_nSchemeIndex, m_nColorNum); @@ -649,8 +794,8 @@ void QMyCustomPlot::setSchemeIndex(int nidx, int colorNum) QtColorTableData::getInstance()->SetCurrentSchemeIndex(nidx); //ColorTableIndex = ind; - QtColorTableData::getInstance()->ChangeColorNum(colorNum); - QList rgbList = QtColorTableData::getInstance()->GetRgb(); + //QtColorTableData::getInstance()->ChangeColorNum(colorNum); + QList rgbList = QtColorTableData::getInstance()->GetRgb_UseTag(m_nUseColor, nidx, colorNum); int iColorNum = rgbList.size(); QCPColorGradient gradient; @@ -667,48 +812,89 @@ void QMyCustomPlot::setSchemeIndex(int nidx, int colorNum) QCPColorMap * QMyCustomPlot::updateWave() { - int nx = m_vecWaveData.size(); - int ny = m_nSamples; + int ny = m_vecWaveData.size(); + int nx = m_nSamples; - m_colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点 + m_colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点 float f = 0.99;// 264 / 269.0f; - m_colorMap->data()->setRange(QCPRange(0 - m_EDep, 0 - m_SDep), QCPRange(this->m_iX1, this->m_iX2*f)); + m_colorMap->data()->setRange(QCPRange(this->m_iX1, this->m_iX2*f), QCPRange(0 - m_EDep, 0 - m_SDep)); - for (int xIndex = 0; xIndex < nx; ++xIndex) - { - for (int yIndex = 0; yIndex < ny; ++yIndex) - { - double dz = m_vecWaveData[xIndex][yIndex]; - if (m_nMode == 0) - { - if (dz == -9999) - { - dz = m_fmax; - } - } - else if (m_nMode == 1) - { - if (dz == -9999) - { - dz = m_fmin; - } - } - else if (m_nMode == 2) - { - if (dz == -9999) - { - dz = m_fmax; - } - else - { - dz = m_fmin; - } - } - m_colorMap->data()->setCell(nx - xIndex - 1, yIndex, dz); - } - } + for (int yIndex = 0; yIndex < ny; ++yIndex) + { + for (int xIndex = 0; xIndex < nx; ++xIndex) + { + double dz = m_vecWaveData[yIndex][xIndex]; + if (m_nMode == 0) + { + if (dz == -9999) + { + dz = m_fmax; + } + } + else if (m_nMode == 1) + { + if (dz == -9999) + { + dz = m_fmin; + } + } + else if (m_nMode == 2) + { + if (dz == -9999) + { + dz = m_fmax; + } + else + { + dz = m_fmin; + } + } + m_colorMap->data()->setCell(xIndex, ny - yIndex - 1, dz); + } + } //m_colorMap->setDataRange(QCPRange(m_fmin, m_fmax)); - return m_colorMap; + return m_colorMap; +} + +QCPColorMap * QMyCustomPlot::updateImageWave() +{ + int nx = m_vecWaveData.size(); + int ny = m_nSamples; + + m_colorMap->data()->setSize(nx, ny); // 我们希望彩色地图有nx*ny的数据点 + float f = 0.99;// 264 / 269.0f; + m_colorMap->data()->setRange(QCPRange(0 - m_EDep, 0 - m_SDep), QCPRange(this->m_iX1, this->m_iX2*f)); + + int nbs = 1024; + + float fLeftVal = 0; + float fRightVal = 128; + FormInfo* pInfo = m_formTrack->getFormInfoByParameters(m_strUuid, m_strWellName, m_strTrackName, m_strLineName); + if (pInfo) + { + fLeftVal = pInfo->m_ImgMinVal; + fRightVal = pInfo->m_ImgMaxVal; + } + + for (int xIndex = 0; xIndex < nx; ++xIndex) + { + for (int yIndex = 0; yIndex < ny; ++yIndex) + { + double dz = m_vecWaveData[xIndex][yIndex]; + if (dz == -9999) + { + dz = m_fmin; + } + dz = dz * nbs/ (fRightVal - fLeftVal); + if (dz > m_fmax) + { + dz = m_fmax; + } + m_colorMap->data()->setCell(nx - xIndex - 1, yIndex, dz); + } + } + m_colorMap->setDataRange(QCPRange(m_fmin, m_fmax)); + return m_colorMap; } float QMyCustomPlot::getScaleV() @@ -5484,7 +5670,7 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) { m_iX1 = varVal.toFloat(); float f = 264 / m_fScaleV; - m_colorMap->data()->setValueRange(QCPRange(m_iX1, m_iX2*f)); + m_colorMap->data()->setKeyRange(QCPRange(m_iX1, m_iX2*f)); } } else if ("右刻度" == strProperty) @@ -5493,7 +5679,7 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) { m_fScaleV = varVal.toFloat(); float f = 264 / m_fScaleV; - m_colorMap->data()->setValueRange(QCPRange(m_iX1, m_iX2*f)); + m_colorMap->data()->setKeyRange(QCPRange(m_iX1, m_iX2*f)); } } else if ("最大振幅" == strProperty) @@ -5501,7 +5687,8 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) m_MaxRange = varVal.toDouble(); this->changePropertyWaveUpdate(); } - else if ("色板" == strProperty) + else if ("色板" == strProperty + || "配色方案" == strProperty) { this->setSchemeIndex(varVal.toInt(), m_nColorNum); } @@ -5567,6 +5754,11 @@ void QMyCustomPlot::s_changeDrawProperty(QVariantList vlist) { this->changeCurveValSetting(); } + else if ("最小值" == strProperty + || "最大值" == strProperty) + { + this->updateImageWave(); + } this->replot(); } @@ -11174,6 +11366,11 @@ void QMyCustomPlot::changeCurveValSetting() updateCurveTwoBackAndForth(); } +void QMyCustomPlot::setUseColor(int nUse) +{ + m_nUseColor = nUse; +} + //道宽改变后,避免井壁取心等组件变形,需要重新刷新 void QMyCustomPlot::resetPosition() { diff --git a/logPlus/qmycustomplot.h b/logPlus/qmycustomplot.h index 64f5fb4..ea0a69c 100644 --- a/logPlus/qmycustomplot.h +++ b/logPlus/qmycustomplot.h @@ -94,9 +94,13 @@ public: // 曲线绘制 void initCurve(QString strSlfName, QString strLineName); + void initImage(QString strSlfName, QString strWaveName); + void initColorTable(); void setSchemeIndex(int nidx, int colorNum); - QCPColorMap * updateWave(); + + QCPColorMap * updateWave(); + QCPColorMap * updateImageWave(); float getScaleV(); @@ -152,6 +156,7 @@ public: // 曲线数值设置 void changeCurveValSetting(); + void setUseColor(int nUse); protected: @@ -230,6 +235,7 @@ public: float m_MaxRange = 1023.0f; int m_nWaveJg = 1; int m_nWaveHei = 1; + int m_nUseColor = 0; // 色板颜色标志 // 深度 第三个轴 QCPAxis *m_yAxis2 = nullptr; diff --git a/qtpropertybrowser/ColorSchemeComboBox.cpp b/qtpropertybrowser/ColorSchemeComboBox.cpp index 0e62bd9..95be9a5 100644 --- a/qtpropertybrowser/ColorSchemeComboBox.cpp +++ b/qtpropertybrowser/ColorSchemeComboBox.cpp @@ -86,9 +86,12 @@ QWidget *QtColorSchemeComboBoxFactory::createEditor(QtColorSchemeComboBoxPropert //QtColorSchemeComboBox * m_pColorSchemeBox = new QtColorSchemeComboBox(); //return m_pColorSchemeBox; QtColorSchemeComboBox * pColorSchemeCombox = d_ptr->createEditor(property,parent); - QtColorTableData colorMap("Color Scheme",true); - colorMap.SetCurrentSchemeIndex(manager->value(property)); - pColorSchemeCombox->setSchemeColor(colorMap.GetSchemeList()); +// QtColorTableData colorMap("Color Scheme",true); +// colorMap.SetCurrentSchemeIndex(manager->value(property)); + int useclr= manager->useColorTag(property); + QList colorList = QtColorTableData::getInstance()->GetSchemeList(useclr); + //QList schemeColor = manager->schemeColor(property); + pColorSchemeCombox->setSchemeColor(colorList); pColorSchemeCombox->setCurrentIndex(manager->value(property)); //QComboBox *editor = d_ptr->createEditor(property, parent); @@ -258,6 +261,11 @@ QMap QtColorSchemeComboBoxPropertyManager::enumIcons(const QtPropert return getData >(d_ptr->m_values, &QtColorSchemeComboBoxPropertyManagerPrivate::Data::enumIcons, property, QMap()); } +int QtColorSchemeComboBoxPropertyManager::useColorTag(const QtProperty *property) const +{ + return getData(d_ptr->m_values, &QtColorSchemeComboBoxPropertyManagerPrivate::Data::nUseColorTag, property, 0); +} + /*! \reimp */ @@ -388,8 +396,19 @@ void QtColorSchemeComboBoxPropertyManager::setEnumIcons(QtProperty *property, co emit enumIconsChanged(property, it.value().enumIcons); - emit propertyChanged(property); + emit propertyChanged(property); } + +void QtColorSchemeComboBoxPropertyManager::setUseColorTag(QtProperty *property, int useColorTag) +{ + const QtColorSchemeComboBoxPropertyManagerPrivate::PropertyValueMap::iterator it = d_ptr->m_values.find(property); + if (it == d_ptr->m_values.end()) + return; + + QtColorSchemeComboBoxPropertyManagerPrivate::Data& data = it.value(); + data.nUseColorTag = useColorTag; +} + QPixmap QtColorSchemeComboBoxPropertyManager::getColorLabelPixmap(const QVector &colorList, int colorNumber) { int w = 64, h = 32; @@ -416,13 +435,12 @@ QPixmap QtColorSchemeComboBoxPropertyManager::getColorLabelPixmap(const QVector< painter.end(); return pixmap; } -void QtColorSchemeComboBoxPropertyManager::setLinear(QtProperty *property) +void QtColorSchemeComboBoxPropertyManager::setLinear(QtProperty *property, int nclr) { QStringList enumNames; QMap enumIcons; - - QtColorTableData colorMap("Color Scheme",true); - QList colorList = colorMap.GetSchemeList(); + //QtColorTableData colorMap("Color Scheme",true); + QList colorList = QtColorTableData::getInstance()->GetSchemeList(nclr); int nCount = colorList.size(); //样式值 @@ -447,9 +465,28 @@ void QtColorSchemeComboBoxPropertyManager::setLinear(QtProperty *property) } setEnumNames(property, enumNames); - setEnumIcons(property, enumIcons); - + setEnumIcons(property, enumIcons); + setUseColorTag(property, nclr); } + +void QtColorSchemeComboBoxPropertyManager::setLinear(QtProperty *property, QList colorList) +{ + QStringList enumNames; + QMap enumIcons; + + int nCount = colorList.size(); + + for (int i = 0; i < nCount; i++) + { + enumNames.push_back(colorList.at(i).schemeName); + QPixmap pix = getColorLabelPixmap(colorList.at(i).colorList, colorList.at(i).colorList.count()); + enumIcons[i] = QIcon(pix); + } + + setEnumNames(property, enumNames); + setEnumIcons(property, enumIcons); +} + /*! \reimp */ diff --git a/qtpropertybrowser/ColorSchemeComboBox.h b/qtpropertybrowser/ColorSchemeComboBox.h index d255f54..b1ebbe7 100644 --- a/qtpropertybrowser/ColorSchemeComboBox.h +++ b/qtpropertybrowser/ColorSchemeComboBox.h @@ -23,13 +23,15 @@ public: int value(const QtProperty *property) const; QStringList enumNames(const QtProperty *property) const; QMap enumIcons(const QtProperty *property) const; - + int useColorTag(const QtProperty *property) const; public Q_SLOTS: void setValue(QtProperty *property, int val, bool islinestyle); void setEnumNames(QtProperty *property, const QStringList &names); void setEnumIcons(QtProperty *property, const QMap &icons); - void setLinear(QtProperty *property); + void setUseColorTag(QtProperty *property, int useColorTag); + void setLinear(QtProperty *property, int nclr = 0); + void setLinear(QtProperty *property, QList colorList); Q_SIGNALS: void valueChanged(QtProperty *property, int val,bool islineStyle); void enumNamesChanged(QtProperty *property, const QStringList &names); @@ -62,8 +64,8 @@ public: Data() : val(-1) {} int val; QStringList enumNames; - QMap enumIcons; - + QMap enumIcons; + int nUseColorTag; }; typedef QMap PropertyValueMap; diff --git a/logPlus/Gradient.cpp b/qtpropertybrowser/Gradient.cpp similarity index 98% rename from logPlus/Gradient.cpp rename to qtpropertybrowser/Gradient.cpp index c53b758..2b0c15e 100644 --- a/logPlus/Gradient.cpp +++ b/qtpropertybrowser/Gradient.cpp @@ -238,10 +238,10 @@ void RGB_to_HSL (float r, float g, float b, float *h, float *s, float *l) float vm; float r2, g2, b2; - v = max(r,g); - v = max(v,b); - m = min(r,g); - m = min(m,b); + v = qMax(r,g); + v = qMax(v,b); + m = qMin(r,g); + m = qMin(m,b); if ((*l = (m + v) / 2.0f) <= 0.0f) return; if ((*s = vm = v - m) > 0.0f) { @@ -393,7 +393,7 @@ COLORREF CGradient::InterpolateHSLShortest(COLORREF first, COLORREF second, floa return RGB((BYTE)(r*255.0f), (BYTE)(g*255.0f), (BYTE)(b*255.0f)); } -void CGradient::GetColorArray(COLORREF colorArr[]) +int CGradient::GetColorArray(COLORREF colorArr[]) { float pos; @@ -410,7 +410,7 @@ void CGradient::GetColorArray(COLORREF colorArr[]) //COLORREF lastpegcolour = pegs[pegs.GetUpperBound()].colour; int curpeg; - int index; float pos2; COLORREF colour; + int index = 0; float pos2; COLORREF colour; for (index=0,pos=0.0; index<256; index++,pos+=0.003906) { if(m_Quantization != -1) @@ -435,11 +435,11 @@ void CGradient::GetColorArray(COLORREF colorArr[]) } } - + return index; } else //pegs.size == 0 { - int index; float pos2; COLORREF colour; + int index = 0; float pos2; COLORREF colour; for (index=0,pos=0.0; index<256; index++,pos+=0.003906) { if (m_Quantization != -1) @@ -449,8 +449,9 @@ void CGradient::GetColorArray(COLORREF colorArr[]) colour = Interpolate(m_StartPeg.colour, m_EndPeg.colour, pos2, 0, 1); colorArr[index] = colour; } - + return index; } + return 0; } int CGradient::IndexFromPos2(float pos) { diff --git a/logPlus/Gradient.h b/qtpropertybrowser/Gradient.h similarity index 95% rename from logPlus/Gradient.h rename to qtpropertybrowser/Gradient.h index 16a2179..20271e3 100644 --- a/logPlus/Gradient.h +++ b/qtpropertybrowser/Gradient.h @@ -3,7 +3,6 @@ #define Gradient_H #include -#include "CStringType.h" //typedef struct myRGBTRIPLE { // BYTE rgbtBlue; @@ -11,6 +10,10 @@ // BYTE rgbtRed; //} RGBTRIPLE; +typedef unsigned long DWORD; +typedef unsigned char BYTE; +typedef unsigned short WORD; + typedef DWORD COLORREF; typedef DWORD *LPCOLORREF; @@ -77,7 +80,7 @@ public: QString m_FileFlag; public: //void MakeEntries(RGBTRIPLE *lpPal, int iEntryCount); - void GetColorArray(COLORREF colorArr[]); + int GetColorArray(COLORREF colorArr[]); InterpolateFn GetInterpolationProc(); int IndexFromPos2(float pos); int IndexFromPos(float pos); diff --git a/qtpropertybrowser/qtColorSchemeComboBox.cpp b/qtpropertybrowser/qtColorSchemeComboBox.cpp index c68edf1..dd7d92f 100644 --- a/qtpropertybrowser/qtColorSchemeComboBox.cpp +++ b/qtpropertybrowser/qtColorSchemeComboBox.cpp @@ -9,7 +9,10 @@ #include #include #include +#include #include "qtColorSchemeComboBox.h" +#include "Gradient.h" + QtColorSchemeComboBox::QtColorSchemeComboBox(QWidget *parent):QtComboBox(parent), m_isShowText(true) { m_colorSchemeList.clear(); @@ -372,6 +375,8 @@ bool QtColorTableData::LoadScheme(bool IsReLoad) m_systemSchemeList.push_back(schemeItem); } m_systemShcemeNum=k; + + LoadColorConfig(); } // 读取定制的颜色方案 ReadSettings(); @@ -416,6 +421,79 @@ bool QtColorTableData::LoadScheme(bool IsReLoad) return false; } +int QtColorTableData::getColorConfig(QVector &qFiles) +{ + char str[256], *buffer; + int i, nRet = 0; + QString qstr; + QByteArray ba; + + //GetBinDir(str); + qstr = QCoreApplication::applicationDirPath();//QString(QLatin1String(str)); //char*=>QString + qstr += "\\color\\colorConfig.list"; + qFiles.clear(); + QFile f(qstr); + if (!f.open(QIODevice::ReadOnly | QIODevice::Text)) + { + //cout << "Open failed." << endl; + return 0; + } + + QTextStream txtInput(&f); + qstr = txtInput.readLine(); + //QString==>char * + ba = qstr.toLatin1(); // must + buffer = ba.data(); + sscanf(buffer, "%d", &nRet); + for (i = 0; i < nRet; i++) + { + qstr = txtInput.readLine(); + qFiles.append(qstr); + } + f.close(); + + return nRet; +} + +bool QtColorTableData::LoadColorConfig() +{ +// FreeColorScheme(); + + QVector qvFiles; + getColorConfig(qvFiles); + + CGradient m_GraInfo; + int nRet = qvFiles.size(); + for (int i = 0; i < nRet; i++) + { + m_GraInfo.Serialize(qvFiles[i]); + + //获取颜色数组 + int iColorNum = 256; + COLORREF pColorArr[256]; + int nret = m_GraInfo.GetColorArray(pColorArr); + + QVector colorList; + for (int k = 0; k < nret; k++) + { + colorList.push_back(QtColorItem(QColor(pColorArr[k]))); + } + + QString str = qvFiles.at(i); + QStringList slist = str.split("_"); + // 构建颜色方案表 + QtSchemeColor schemeItem; + schemeItem.schemeName = slist.length() > 0 ? slist.at(0) : str; + schemeItem.colorList = colorList; + schemeItem.isDirty = false; + schemeItem.isCustom = false; + schemeItem.currentIndex = 0; + m_colorCfgList.push_back(schemeItem); + + } + return nRet; +} + bool QtColorTableData::ChangeColorNum(int colorNum) { QtSchemeColor* scheme=CurrentScheme(); @@ -458,6 +536,36 @@ QList QtColorTableData::GetRgb(int colornum) const return rgbList; } +QList QtColorTableData::GetRgb_UseTag(int nuse, int schemIndex, int colornum) const +{ + const QtSchemeColor* scheme= nullptr; + if(nuse == 0) + scheme = &m_colorSchemeList[schemIndex]; + else + scheme = &m_colorCfgList[schemIndex]; + + QList rgbList; + if(colornum<=0) + colornum=scheme->colorList.count(); + else if(colornum>SECTIONVIEW_NUM) + colornum=SECTIONVIEW_NUM; + + QVector newColorList; + + if(colornum!=scheme->colorList.count()) + newColorList=paiInpolation(scheme->colorList,colornum); + else + newColorList=scheme->colorList; + + for(int i=0;icolorList.count(); diff --git a/qtpropertybrowser/qtColorSchemeComboBox.h b/qtpropertybrowser/qtColorSchemeComboBox.h index d7abe3f..8883050 100644 --- a/qtpropertybrowser/qtColorSchemeComboBox.h +++ b/qtpropertybrowser/qtColorSchemeComboBox.h @@ -152,13 +152,18 @@ public: */ bool LoadScheme(bool IsReLoad=false); + int getColorConfig(QVector &qFiles); + bool LoadColorConfig(); /* * @brief 获取颜色方案列表 * @warning 下一部准备实现不同模块的系统保留和自定义方案 */ - QList &GetSchemeList() + QList &GetSchemeList(int nuclr) { - return m_colorSchemeList; + if (nuclr == 0) + return m_colorSchemeList; + else + return m_colorCfgList; } /** @@ -171,6 +176,9 @@ public: */ QList GetRgb(int colornum=0) const; + + QList GetRgb_UseTag(int nuse, int schemIndex, int colornum=0) const; + void ChangeDataRange(QtSchemeColor *scheme); void ReadSettings(); @@ -197,6 +205,7 @@ private: bool m_isSettingSysColor; // 当前所有的颜色方案,包括系统方案,自定义方案 QList m_colorSchemeList; + QList m_colorCfgList; // 备份的颜色方案 QList m_systemSchemeList; diff --git a/qtpropertybrowser/qtpropertybrowser.pro b/qtpropertybrowser/qtpropertybrowser.pro index 689b4e6..9cce253 100644 --- a/qtpropertybrowser/qtpropertybrowser.pro +++ b/qtpropertybrowser/qtpropertybrowser.pro @@ -42,6 +42,7 @@ SOURCES += $$PWD/qtpropertybrowser.cpp \ $$PWD/qtgroupboxpropertybrowser.cpp \ $$PWD/qtpropertybrowserutils.cpp \ ColorSchemeComboBox.cpp \ + Gradient.cpp \ qtColorSchemeComboBox.cpp \ qtComboBox.cpp @@ -54,6 +55,7 @@ HEADERS += $$PWD/qtpropertybrowser.h \ $$PWD/qtgroupboxpropertybrowser.h \ $$PWD/qtpropertybrowserutils_p.h \ ColorSchemeComboBox.h \ + Gradient.h \ qtColorSchemeComboBox.h \ qtComboBox.h