This commit is contained in:
DESKTOP-450PEFP\mainc 2026-04-21 09:01:28 +08:00
commit 25c314dbac
12 changed files with 793 additions and 581 deletions

View File

@ -2355,7 +2355,13 @@ void PropertyWidget::SlotPropertyChanged( QtProperty *pProperty, const QVariant
this->CommonPropertyChanged(pProperty, variant);
this->changedCrackProperty(m_propertyData[pProperty], variant);
}
else if (m_strCurrentProperty == Kedou_Property)//蝌蚪图
{
//先处理通用属性
CommonPropertyChanged(pProperty, variant);
//
changedKedouProperty(m_propertyData[pProperty], variant);
}
}
@ -3178,6 +3184,11 @@ void PropertyWidget::initProperty(FormInfo *formInfo)
// 岩心分析
this->initCorePhysicsProperty(formInfo);
}
else if (m_strLineName == "FRAC_HOLE.TABLE")
{
//蝌蚪图
this->initKedouProperty(formInfo);
}
else
{
this->initTableProperty(formInfo);
@ -5176,3 +5187,272 @@ void PropertyWidget::changedRoseProperty(QString strProperty, QVariant varVal)
emit CallManage::getInstance()->sig_changeRoseProperty(variantMap);
}
}
void PropertyWidget::initKedouProperty(FormInfo *formInfo)
{
_CreateVariantPropertyItem("曲线图名", "显示名称", formInfo->m_strAliasName, QVariant::String);
_CreateVariantPropertyItem("字体", "名称", formInfo->m_curveNameFont, QVariant::Font);
_CreateVariantPropertyItem("字体", "单位", formInfo->m_strUnitFont, QVariant::Font);
_CreateVariantPropertyItem("字体", "刻度", formInfo->m_pl_fontScale, QVariant::Font);
_CreateVariantPropertyItem("井文件名", "井文件名称", m_strSlfName, QVariant::String);
QStringList listType;
listType.append("曲线型数据");
listType.append("表格型数据");
_CreateEnumPropertyItem("数据类型选择", "数据类型", formInfo->m_pl_dataType, listType);
//
_CreateVariantPropertyItem("曲线选择", "方位曲线", formInfo->m_pl_azimuthCurve, QVariant::String);
_CreateVariantPropertyItem("曲线选择", "倾角曲线", formInfo->m_pl_inclinationCurve, QVariant::String);
_CreateVariantPropertyItem("曲线选择", "可信度曲线", formInfo->m_pl_GradCurve, QVariant::String);
//
_CreateVariantPropertyItem("字段选择(数据表)", "深度字段", formInfo->m_rose_depth_field, QVariant::String);
_CreateVariantPropertyItem("字段选择(数据表)", "方位字段", formInfo->m_rose_azimuth_field, QVariant::String);
_CreateVariantPropertyItem("字段选择(数据表)", "倾角字段", formInfo->m_rose_dip_field, QVariant::String);
_CreateVariantPropertyItem("字段选择(数据表)", "属性字段", formInfo->m_rose_attribute_field, QVariant::String);
//
_CreateVariantPropertyItem("蝌蚪符号", "圆半径", formInfo->m_nRadius, QVariant::Double);
_CreateVariantPropertyItem("蝌蚪符号", "圆线宽度", formInfo->m_nCircleWidth, QVariant::Double);
_CreateVariantPropertyItem("蝌蚪符号", "尾线长度", formInfo->m_nTailLen, QVariant::Double);
_CreateVariantPropertyItem("蝌蚪符号", "尾线宽度", formInfo->m_nTailWidth, QVariant::Double);
_CreateVariantPropertyItem("蝌蚪符号", "圆线颜色", formInfo->m_crCircle, QVariant::Color);
_CreateVariantPropertyItem("蝌蚪符号", "尾线颜色", formInfo->m_crTail, QVariant::Color);
//
_CreateVariantPropertyItem("显示控制", "最小倾角", formInfo->m_pl_minInclination, QVariant::Double);
_CreateVariantPropertyItem("显示控制", "最大倾角", formInfo->m_pl_maxInclination, QVariant::Double);
_CreateVariantPropertyItem("显示控制", "可信度1", formInfo->m_flGrad1, QVariant::Double);
_CreateVariantPropertyItem("显示控制", "可信度2", formInfo->m_flGrad2, QVariant::Double);
//
_CreateVariantPropertyItem("显示控制(数据表)", "小数位数", formInfo->m_crack_decimal_digits, QVariant::Int);
// 分类
this->loadClassifyProperty(formInfo);
m_strCurrentProperty = Kedou_Property;
}
void PropertyWidget::changedKedouProperty(QString strProperty, QVariant varVal)
{
bool flag = false;
// 字体
if ("名称" == strProperty)
{
QFont newFont = varVal.value<QFont>();
// this->m_formInfo->m_strAliasNameFont = newFont;
// this->m_formInfo->repaint();
m_formInfo->m_curveNameFont = newFont;
m_formInfo->update();
}
else if ("单位" == strProperty)
{
QFont temp = varVal.value<QFont>();
this->m_formInfo->m_strUnitFont = temp;
this->m_formInfo->repaint();
}
else if ("刻度" == strProperty)
{
this->m_formInfo->m_pl_fontScale = varVal.value<QFont>();
flag = true;
}
// 数据
else if ("数据类型" == strProperty)
{
this->m_formInfo->m_pl_dataType = varVal.toInt();
flag = true;
}
else if ("方位曲线" == strProperty)
{
this->m_formInfo->m_pl_azimuthCurve = varVal.toString();
flag = true;
}
else if ("倾角曲线" == strProperty)
{
this->m_formInfo->m_pl_inclinationCurve = varVal.toString();
flag = true;
}
else if ("可信度曲线" == strProperty)
{
this->m_formInfo->m_pl_GradCurve = varVal.toString();
flag = true;
}
// 蝌蚪符号
else if ("圆半径" == strProperty)
{
this->m_formInfo->m_nRadius = varVal.toDouble();
flag = true;
}
else if ("圆线宽度" == strProperty)
{
this->m_formInfo->m_nCircleWidth = varVal.toDouble();
flag = true;
}
else if ("尾线长度" == strProperty)
{
this->m_formInfo->m_nTailLen = varVal.toDouble();
flag = true;
}
else if ("尾线宽度" == strProperty)
{
this->m_formInfo->m_nTailWidth = varVal.toDouble();
flag = true;
}
else if ("圆线颜色" == strProperty)
{
this->m_formInfo->m_crCircle = varVal.value<QColor>();
flag = true;
}
else if ("尾线颜色" == strProperty)
{
this->m_formInfo->m_crTail = varVal.value<QColor>();
flag = true;
}
//
else if ("最小倾角" == strProperty)
{
this->m_formInfo->m_pl_minInclination = varVal.toDouble();
flag = true;
}
else if ("最大倾角" == strProperty)
{
this->m_formInfo->m_pl_maxInclination = varVal.toDouble();
flag = true;
}
else if ("可信度1" == strProperty)
{
this->m_formInfo->m_flGrad1 = varVal.toDouble();
flag = true;
}
else if ("可信度2" == strProperty)
{
this->m_formInfo->m_flGrad2 = varVal.toDouble();
flag = true;
}
//显示控制(数据表)
else if ("小数位数" == strProperty)
{
this->m_formInfo->m_crack_decimal_digits = varVal.toInt();
}
// 表数据
else if ("深度字段" == strProperty)
{
this->m_formInfo->m_rose_depth_field = varVal.toString();
flag = true;
}
else if ("方位字段" == strProperty)
{
this->m_formInfo->m_rose_azimuth_field = varVal.toString();
flag = true;
}
else if ("倾角字段" == strProperty)
{
this->m_formInfo->m_rose_dip_field = varVal.toString();
flag = true;
}
else if ("属性字段" == strProperty)
{
this->m_formInfo->m_rose_attribute_field = varVal.toString();
flag = true;
}
// 分类
else if ("高导缝" == strProperty)
{
this->m_formInfo->m_pl_highGap = varVal.toBool();
}
else if ("高阻缝" == strProperty)
{
this->m_formInfo->m_pl_highReservoir = varVal.toBool();
}
else if ("网状缝" == strProperty)
{
this->m_formInfo->m_pl_reticularFracture = varVal.toBool();
}
else if ("诱导缝" == strProperty)
{
this->m_formInfo->m_pl_inducedFracture = varVal.toBool();
}
else if ("层理" == strProperty)
{
this->m_formInfo->m_pl_bedLayer = varVal.toBool();
}
else if ("侵蚀面" == strProperty)
{
this->m_formInfo->m_pl_erosionSurface = varVal.toBool();
}
else if ("孔洞" == strProperty)
{
this->m_formInfo->m_pl_pore = varVal.toBool();
}
else if ("气孔" == strProperty)
{
this->m_formInfo->m_pl_vesicle = varVal.toBool();
}
else if ("砾石" == strProperty)
{
this->m_formInfo->m_pl_gravel = varVal.toBool();
}
else if ("结核" == strProperty)
{
this->m_formInfo->m_pl_nodule = varVal.toBool();
}
else if ("团块" == strProperty)
{
this->m_formInfo->m_pl_lumps = varVal.toBool();
}
else if ("断层" == strProperty)
{
this->m_formInfo->m_pl_fault = varVal.toBool();
}
else if ("垂直缝" == strProperty)
{
this->m_formInfo->m_pl_verticalFracture = varVal.toBool();
}
else if ("自定义1" == strProperty)
{
this->m_formInfo->m_pl_custom1 = varVal.toBool();
}
else if ("自定义2" == strProperty)
{
this->m_formInfo->m_pl_custom2 = varVal.toBool();
}
if(flag)
{
QVariantMap variantMap;
// 必须用来判断当前道
variantMap["m_strTrackName"] = this->m_formInfo->m_strTrackName;
// 数据
variantMap["m_pl_dataType"] = this->m_formInfo->m_pl_dataType;
variantMap["m_pl_azimuthCurve"] = this->m_formInfo->m_pl_azimuthCurve;
variantMap["m_pl_inclinationCurve"] = this->m_formInfo->m_pl_inclinationCurve;
// 表数据
variantMap["m_rose_depth_field"] = this->m_formInfo->m_rose_depth_field;
variantMap["m_rose_azimuth_field"] = this->m_formInfo->m_rose_azimuth_field;
variantMap["m_rose_dip_field"] = this->m_formInfo->m_rose_dip_field;
variantMap["m_rose_attribute_field"] = this->m_formInfo->m_rose_attribute_field;
// 控制曲线
variantMap["m_pl_controlCurveName"] = this->m_formInfo->m_pl_controlCurveName;
variantMap["m_pl_controlMinValue"] = this->m_formInfo->m_pl_controlMinValue;
variantMap["m_pl_controlMaxValue"] = this->m_formInfo->m_pl_controlMaxValue;
// 字体
variantMap["m_pl_fontScale"] = this->m_formInfo->m_pl_fontScale;
// 蝌蚪图
variantMap["m_rose_sector_enabled"] = this->m_formInfo->m_rose_sector_enabled;
variantMap["m_rose_circle_radius_cm"] = this->m_formInfo->m_rose_circle_radius_cm;
variantMap["m_rose_radiation_circle_enabled"] = this->m_formInfo->m_rose_radiation_circle_enabled;
variantMap["m_rose_azimuth_print_interval"] = this->m_formInfo->m_rose_azimuth_print_interval;
variantMap["m_rose_circle_line_color"] = this->m_formInfo->m_rose_circle_line_color;
variantMap["m_rose_circle_line_width"] = this->m_formInfo->m_rose_circle_line_width;
variantMap["m_rose_stress_line_color"] = this->m_formInfo->m_rose_stress_line_color;
variantMap["m_rose_collapse_line_color"] = this->m_formInfo->m_rose_collapse_line_color;
variantMap["m_rose_draw_radiation_line"] = this->m_formInfo->m_rose_draw_radiation_line;
variantMap["m_rose_draw_wellbore_collapse"] = this->m_formInfo->m_rose_draw_wellbore_collapse;
variantMap["m_rose_fill_enabled"] = this->m_formInfo->m_rose_fill_enabled;
variantMap["m_rose_draw_annotation"] = this->m_formInfo->m_rose_draw_annotation;
//
variantMap["m_pl_minInclination"] = this->m_formInfo->m_pl_minInclination;
variantMap["m_pl_maxInclination"] = this->m_formInfo->m_pl_maxInclination;
variantMap["m_strUuid"] = this->m_formInfo->m_strUuid;
//emit CallManage::getInstance()->sig_changeRoseProperty(variantMap);
}
}

View File

@ -77,6 +77,8 @@
#define Tubing_Property "Tubing_Property" //套管组件
#define TubingItem_Property "TubingItem_Property" //套管组件item
#define Kedou_Property "Kedou_Property" //蝌蚪图
#pragma execution_character_set("utf-8")
/**
@ -256,6 +258,10 @@ public:
void initRoseProperty(FormInfo *formInfo);
void changedRoseProperty(QString strProName, QVariant val);
//蝌蚪图
void initKedouProperty(FormInfo *formInfo);
void changedKedouProperty(QString strProName, QVariant val);
public slots:
void SlotPropertyChanged(QtProperty *property, const QVariant &variant);
void SlotPropertyChanged(QtProperty *property, const int &val, bool islinestyle);

View File

@ -2873,8 +2873,11 @@ QMyCustomPlot* FormDraw::addTableLine(QString strUuid, QString strSlfName, QStri
//隐藏网格
curv->xAxis->grid()->setVisible(false);
curv->yAxis->grid()->setVisible(false);
initTableLine(curv, strSlfName, strLineName);
//
curv->m_bRowGridVisible = false;
curv->m_bColGridVisible = false;
//
initKedou(curv, strSlfName, strLineName);
}
else if (strLineName == "WORDS_RELUST")
{
@ -5047,99 +5050,8 @@ void FormDraw::DrawImageNew_NoFilter(QMyCustomPlot *widget, QString strSlfName,
}
//表格曲线
void FormDraw::initTableLine(QMyCustomPlot *widget, QString strSlfName, QString strLineName)
void FormDraw::initKedou(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName, QColor newlineColor, QStringList listOtherProperty)
{
m_Value=NULL;
m_Value2=NULL;
m_Value3=NULL;
//m_csUnit = "(°)";
m_bTableData=0;//表格或曲线
m_LeftVal2=0;
m_RightVal2=360;
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
m_nTailWidth=2;
m_crTail=qRgb(0,0,0);
m_crPointFill=qRgb(0,0,0);
m_crGridSmall=qRgb(100,100,100);
m_nRadius = 6;
m_nTailLen = 10;
m_nCircleWidth=1;
m_flGrad1 = 10;
m_flGrad2 = 50;
//Table dip
m_qsTable="FRAC_HOLE.TABLE";
m_qsDIR=("DIR"); // 方位 曲线名
m_qsDIP=("DIPorS");//倾角
m_qsDepth="DEP";
m_qsID = "ID";
m_qsProperty=("ID");
m_iPrecision = 3;
//
// ReadFracDef();
// for (int i = 0 ; i < iFracType ; i++)
// {
// m_bTypeDraw[i] = true;
// }
if (m_bTableData)
{
//
m_qsDIR=("DDIR"); // 方位 曲线名
m_qsDIP=("DANG");//倾角
m_qsDepth="DEPT";
m_qsID = "ID";
ReadData(strSlfName, strLineName);
//------------------------
// int nPointNum = m_FracTabList.count();
// if ( nPointNum < 1 )return ;
// FRAC_TABLE frac = m_FracTabList.at(0);
}
else
{
//
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
this->ReadData(strSlfName, m_csCurveDDIR, 0, &m_Curve);
this->ReadData(strSlfName, m_csCurveDANG, 1, &m_Curve2);
this->ReadData(strSlfName, m_csCurveGrad, 2, &m_Curve3);
}
// bool bFistValue=false;
// float vmax = -9999;
// float vmin = -9999;
// //最大值,最小值
// vmax=vmin=frac.DIR;
// //slf文件读取曲线
// for(int i=0; i<nPointNum; i++)
// {
// frac = m_FracTabList.at(i);
// if(frac.DIR==-9999)
// {
// continue;
// }
// if(bFistValue==false)
// {
// //最大值,最小值默认采用第一个有效值
// bFistValue=true;
// vmax = vmin = frac.DIR;
// }
// if(vmax<frac.DIR)vmax=frac.DIR;
// if(vmin>frac.DIR)vmin=frac.DIR;
// }
// widget->m_iX1 = vmin;
// widget->m_iX2 = vmax;
int iMyWidth = widget->axisRect(0)->width();
float vmax = iMyWidth;
float vmin = 0;
@ -5168,19 +5080,41 @@ void FormDraw::initTableLine(QMyCustomPlot *widget, QString strSlfName, QString
widget->xAxis2->setVisible(false);
widget->yAxis->setVisible(false);
widget->yAxis2->setVisible(false);
//
if (m_bTableData)
{
DrawTabDip(widget);
}
else
{
DrawDip(widget);
}
QString strAliasName = "";
//-----------------------------------
widget->m_Value=NULL;
widget->m_Value2=NULL;
widget->m_Value3=NULL;
//m_csUnit = "(°)";
widget->m_bTableData=0;//表格或曲线
widget->m_LeftVal2=0;
widget->m_RightVal2=360;
widget->m_csCurveDDIR = "DDIR"; // 方位 曲线名
widget->m_csCurveDANG = "DANG";//倾角
widget->m_csCurveGrad = "GRAD";
widget->m_nTailWidth=2;
widget->m_crTail=qRgb(0,0,0);
widget->m_crPointFill=qRgb(0,0,0);
//
widget->m_crGridSmall=qRgb(100,100,100);
widget->m_nRadius = 6;
widget->m_nTailLen = 10;
widget->m_nCircleWidth=1;
widget->m_flGrad1 = 10; //可信度
widget->m_flGrad2 = 50;
//Table dip
widget->m_qsTable="FRAC_HOLE.TABLE";
widget->m_qsDIR=("DIR"); // 方位 曲线名
widget->m_qsDIP=("DIPorS");//倾角
widget->m_qsDepth="DEP";
widget->m_qsID = "ID";
widget->m_qsProperty=("ID");
widget->m_iPrecision = 3;
//蝌蚪图
widget->Draw_Kedou();
//------
QString strUnit = "";
QColor newlineColor=QColor(0,0,0);
double width=2;
QString strScaleType = "";
//道-对象
@ -6562,157 +6496,6 @@ void FormDraw::CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x
}
}
void FormDraw::DrawDip(QMyCustomPlot *widget)
{
float flWidth[50];
int l;
float dep;
int m_nScaleThinGrid=10;
// 计算位置
int iMyWidth = widget->axisRect(0)->width();
float x1 = 0;
float x2 = iMyWidth;
float x=0,y=0;
int j=0,i=0,k=0;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
//绘制网格线,注意颜色、宽度属性
QPen pPenStraightLine(m_crTail, m_nTailWidth);
QPen pPenStraightLineSmall(m_crGridSmall, m_nTailWidth/2);
for(i=0;i<m_nScaleThinGrid;i++)
{
if ( i == 0 ) x =1;
else x = x1;
x1 = x + flWidth[i];
if ( (x1-x) <= 7) {
l = 2; // 小于1厘米
}
else l = 5;
for ( j=0; j<l; j++)
{
flTemp = (x + j*(x1 - x)/l);
double dtick=flTemp;
if(i==0&&j==0) continue;
{
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(widget);
qcpItemLine->point1->setCoords(-m_SDep, dtick);//位置
qcpItemLine->point2->setCoords(-m_EDep, dtick);//位置
if(j==0)
{
qcpItemLine->setPen(pPenStraightLine);
}
else
{
qcpItemLine->setPen(pPenStraightLineSmall);
}
}
}
}
QPen pPen(m_crTail,m_nTailWidth);
QBrush cBrushFill(m_crPointFill);
float flDepthScale,tempf,flVal;
int nPointNum=0,tempi;
QRectF rt,rtRect;
float dgtord,dr;
for(int i=0;i<50;i++) flWidth[i]=0;
if(m_Value==0 || m_Value2==0)
{
Refurbish();
}
if ( m_Value==0 || m_Value2==0 )
return ;
dgtord=3.14159265/180.;
CalcDipWidth(9, flWidth, 1.2, 0, iMyWidth, 1);
while ( 1)
{
dep = m_SDep + k * m_Rlev;
if ( dep >m_EDep )
break;
if(dep<m_SDep)
{
k++;
continue;
}
i=(dep-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(i<0)
{
k++;
continue;
}
flVal = GetData(m_Curve2.RepCode,(char *)&m_Value2[i*m_Curve2.CodeLen]);//DANG
if ( flVal > m_RightVal || flVal < m_LeftVal )
{
k++;
continue;
}
tempi = (int)( flVal /10.);
tempf = 0.;
for (j=0; j<tempi; j++)
{
tempf += flWidth[j];
}
x = tempf + (flVal-tempi*10.)*(flWidth[j+1]/10.);
y = -dep;//起始深度
// pDC->setPen(pPen);// [5/22/2019 9:43 hxb]
// rtRect.setLeft(x - GetLineWidth(pDC,m_nRadius));
// rtRect.setRight(x + GetLineWidth(pDC,m_nRadius));
// rtRect.setBottom(y +GetLineWidth(pDC,m_nRadius));
// rtRect.setTop(y -GetLineWidth(pDC,m_nRadius));
// pDC->setPen(PenCircle);
// pDC->drawEllipse(rtRect.center(),m_nRadius,m_nRadius);
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
qcpItemEllipse->setPen(pPen);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrushFill);//填充圆的颜色
//方位
flVal = GetData(m_Curve.RepCode,(char *)&m_Value[i*m_Curve.CodeLen]);//DDIR
dr=flVal*dgtord;
// // 注意映射方式
// x +=GetLineWidth(pDC,m_nRadius)*sin(dr);
// y -=GetLineWidth(pDC,m_nRadius)*cos(dr);
// float x1=x +GetLineWidth(pDC,m_nTailLen)*sin(dr);
// float y1=y -GetLineWidth(pDC,m_nTailLen)*cos(dr);
// pDC->setPen(pPen);
// pDC->drawLine(QPointF(x,y),QPointF(x1,y1));
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPen);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
//移动对象
// widget->mSizeHandleManager->addItem(qcpItemEllipse, true);
// widget->mSizeHandleManager->addItem(qcpItemLine, true);
k++;
}
}
void FormDraw::DrawJykt(QMyCustomPlot *widget, QString strSlfName)
{
@ -7073,207 +6856,7 @@ void FormDraw::DrawStck(QMyCustomPlot *widget)
k++;
}
}
void FormDraw::DrawTabDip(QMyCustomPlot *widget)
{
float flDepthScale,tempf,flVal;
int i,j,n,nPointNum=0,tempi;
QRectF rt,rtRect;
float x,y;
float dgtord,dr;
float flWidth[50];
FRAC_TABLE frac;
bool bDraw;
FRAC_DEF fd;
//CString cs;
if(m_iPrecision<0) m_iPrecision=0;
nPointNum = m_FracTabList.count();
if ( nPointNum < 1 )return ;
dgtord=3.14159265/180.;
//
m_nCircleWidth = 1;
m_nRadius = 6;
m_crCircle = QColor(0,0,0);
//
m_nTailWidth = 2;
m_nTailLen = 10;
m_crTail = QColor(0,0,0);
int iMyWidth = widget->axisRect(0)->width(); //setSizeConstraintRect()
int iMyHeight = widget->axisRect(0)->height(); //setSizeConstraintRect()
qDebug() << "iMyWidth=" << QString::number(iMyWidth) << ", iMyHeight=" << QString::number(iMyHeight);
//-----------
int l;
float x1 = 0;
float x2 = iMyWidth;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
int m_nScaleThinGrid=10;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
//绘制网格线,注意颜色、宽度属性
QPen pPenStraightLine(m_crTail, m_nTailWidth);
QPen pPenStraightLineSmall(m_crGridSmall, m_nTailWidth/2);
for(i=0;i<m_nScaleThinGrid;i++)
{
if ( i == 0 ) x =1;
else x = x1;
x1 = x + flWidth[i];
if ( (x1-x) <= 7) {
l = 2; // 小于1厘米
}
else l = 5;
for ( j=0; j<l; j++)
{
flTemp = (x + j*(x1 - x)/l);
double dtick=flTemp;
if(i==0&&j==0) continue;
{
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(widget);
qcpItemLine->point1->setCoords(-m_iY2, dtick);//位置
qcpItemLine->point2->setCoords(-m_iY1, dtick);//位置
if(j==0)
{
qcpItemLine->setPen(pPenStraightLine);
}
else
{
qcpItemLine->setPen(pPenStraightLineSmall);
}
}
}
}
CalcDipWidth(9,flWidth, 1.2, 0, iMyWidth, 1.);
n = m_FracDefList.count();
for (i=0; i<nPointNum; i++)
{
frac = m_FracTabList.at(i);
// if ( frac.DEP < -m_iY2 || frac.DEP > -m_iY1)
// {
// continue;
// }
// bDraw = false;
// for (j=0; j<n; j++)
// {
// fd = m_FracDefList.at(j);
// // 裂缝描述表中未保存裂缝名称:
// //比较裂缝名称比较准确,代码更改,如果比较代码会引起不一致性
// if ( (int)(frac.ID) == fd.iCode )
// {
// bDraw = m_bTypeDraw[j];//fd.bDraw;
// break;
// }
// }
//if ( bDraw )
{
QBrush cBrush(fd.crColor);
//圆圈
QPen pPen(m_crCircle);
pPen.setWidth(m_nCircleWidth);
//尾巴
QPen pPenTail(m_crTail);
pPenTail.setWidth(m_nTailWidth);
// 角度
flVal = frac.DIPorS;
tempf = flVal /10.;
tempi = tempf;
x = fmod(flVal,(float)(10.));
if ( x == 0 )
{
tempi=0;//tempi --;
}
tempf = 0.;
for (j=0; j<tempi; j++)
tempf += flWidth[j];
x = tempf+(flVal-tempi*10.)*(flWidth[tempi]/10.);
//x = frac.DIPorS;
y = -frac.DEP;
// int LineWidth = m_nRadius;
// rtRect.setLeft(x - LineWidth);
// rtRect.setRight( x + LineWidth);
// rtRect.setBottom( y + LineWidth);
// rtRect.setTop(y - LineWidth);
// pDC->setPen(pPen);
// pDC->drawEllipse(rtRect.left(),rtRect.top(),rtRect.width(),rtRect.height());
// QPainterPath myPath;
// myPath.addEllipse(rtRect);
// pDC->fillPath(myPath,cBrush);
//CustomEllipse *qcpitemellipse = new CustomEllipse(widget);
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(widget);
qcpItemEllipse->setPen(pPen);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrush);//填充圆的颜色
//方位
dr=frac.DIR *dgtord;
// QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(widget);
// qcpItemLine->point1->setCoords(y, x);//圆心位置
// qcpItemLine->point2->setCoords(y, x);//圆心位置
QCPItemLine *qcpItemLine = new QCPItemLine(widget);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPenTail);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
//break;
// x += m_nRadius*sin(dr);
// // 注意映射方式
// y -=m_nRadius*cos(dr);
// //pDC->moveto(x,y);
// float x1=x +m_nTailLen*sin(dr);
// // 注意映射方式
// float y1= y-m_nTailLen*cos(dr);
// pDC->setPen(pPenTail);
// pDC->drawLine(x,y,x1,y1);
// if ( m_bDrawValue ) //显示倾角、方位
// {
// rtRect.setTop(rtRect.top()-GetLineWidth(pDC,objViewInfo->GetLogUnitFont().pointSize()));
// rtRect.setBottom(rtRect.bottom()+GetLineWidth(pDC,objViewInfo->GetLogUnitFont().pointSize()));
// QString cs1 = QString::number(frac.DIPorS,'f',m_iPrecision);
// QString cs2 = QString::number(frac.DIR,'f',m_iPrecision);
// cs=cs1+"//"+cs2;
// cs.Replace((" "),"");
// if ( frac.DIPorS >= 30 )
// {
// x = 2.*(float)(GetLineWidth(pDC,m_nRadius));
// rtRect.setRight(rtRect.center().x() - x);
// rtRect.setLeft(mrt.left());
// pDC->drawText(rtRect,Qt::AlignVCenter|Qt::AlignHCenter,cs.GetString());
// }
// else
// {
// x = 2.*(float)(GetLineWidth(pDC,m_nRadius));
// rtRect.setLeft(rtRect.center().x() + x);
// rtRect.setRight(mrt.right());
// pDC->drawText(rtRect,Qt::AlignVCenter,cs.GetString());
// }
// }
}
}
}
//read config file: FRAC.CFG,save info into m_FracDef
void FormDraw::ReadFracDef()

View File

@ -16,29 +16,6 @@
#pragma execution_character_set("utf-8")
//const int iFracType=15;
//蝌蚪图
typedef struct FRACDEF
{
int iCode; //代码
QString csName; // 名称
int iType; //形状代码(1:正弦曲线 2:连线 3:封闭区域)
QColor crColor; //颜色(红 绿 蓝)
int nLineWidth; //线宽度
int bDraw; // 是否显示
}FRAC_DEF;
typedef struct FRACTABLE
{
float DEP; //深度
float AorX;
float XETAorH;
float W;
float DIPorS; //倾角
float DIR; //方位
float ID; //裂缝代码/可信度
float NUM;
float X[16],Y[16];//X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,X7,Y7,X8,Y8,X9,Y9;
}FRAC_TABLE;
namespace Ui {
class FormDraw;
@ -175,13 +152,11 @@ public:
void DrawImageNew_NoFilter(QMyCustomPlot *widget, QString strSlfName, QString &strWaveName, int &_nSamples);
//表格曲线
void initTableLine(QMyCustomPlot *widget, QString strSlfName, QString strLineName);
void initKedou(QMyCustomPlot *widget, QString strSlfName, QString strLineName, QString strAliasName = "蝌蚪图", QColor newlineColor=QColor(0,0,0), QStringList listOtherProperty={});
void ReadFracDef();
void ReadData(QString strSlfName, QString strLineName);//表格
void ReadData(QString strSlfName, QString strLineName, int iCurve, Slf_CURVE *curve);//曲线
void DrawDip(QMyCustomPlot *widget);
void DrawStck(QMyCustomPlot *widget);
void DrawTabDip(QMyCustomPlot *widget);
void CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x2,float flHoriRatio);
void Refurbish();
void DrawJykt(QMyCustomPlot *widget, QString strSlfName);

View File

@ -954,11 +954,6 @@ void FormInfo::paintEvent(QPaintEvent* event)
//岩心分析,不绘制左右范围
// strShowTxt = "岩心实验数据";
}
else if(m_strLineName=="FRAC_HOLE.TABLE" && m_strType=="tableObject")
{
//蝌蚪图,不绘制左右范围
strShowTxt = "蝌蚪图";
}
if(this->m_strType == "plObject" || this->m_strType == "roseObject" || this->m_strType == "CrackObject")
{
strShowTxt = " ";

View File

@ -362,6 +362,12 @@ public:
int cpLineWidth() const;
void setCpLineWidth(int cpLineWidth);
//蝌蚪图
QString m_pl_GradCurve = "GRAD"; // 可信度曲线
float m_flGrad1,m_flGrad2; // 可信度
float m_nRadius,m_nCircleWidth; // 半径,圆线宽度
float m_nTailWidth,m_nTailLen; // 尾宽度、尾长
QColor m_crTail,m_crCircle;//颜色
public:
void setLineWidth(double dWidth);
double getLineWidth();

View File

@ -90,7 +90,7 @@ MainWindow::MainWindow(QWidget *parent) :
//关联信号槽,打开项目
connect(CallManage::getInstance(), SIGNAL(sig_Open()), this, SLOT(s_Open()));
//关联信号槽,关闭项目
connect(CallManage::getInstance(), SIGNAL(sig_CloseProject()), this, SLOT(s_CloseProject()));
//connect(CallManage::getInstance(), SIGNAL(sig_CloseProject()), this, SLOT(s_CloseProject()));
//参数卡
connect(CallManage::getInstance(), SIGNAL(sig_ShowParameterCard(QString, QString)), this, SLOT(s_ShowParameterCard(QString, QString)));
@ -216,6 +216,13 @@ void MainWindow::initTitleBar()
//
QMenu* m_projectMenu = this->menuBar()->addMenu(tr("工区管理(&F)"));
//添加子菜单
m_projectMenu->addAction(QIcon( ::GetImagePath() + "newproject.png"), tr("&新建项目"), this, SLOT(s_New()));
m_projectMenu->addAction(QIcon( ::GetImagePath() + "openprojectIcon.png"), tr("&打开项目"), this, SLOT(s_Open()));
m_projectMenu->addAction(QIcon( ::GetImagePath() + "closeprojectIcon.png"), tr("&关闭项目"), this, SLOT(s_CloseProject()));
m_projectMenu->addSeparator();
m_projectMenu->addAction(QIcon( ::GetImagePath() + "icon/Exit.png"), tr("&退出"), this, SLOT(slotExitSystem()));
//
QMenu* m_dataMenu = this->menuBar()->addMenu(tr("数据管理(&D)"));
//
@ -228,6 +235,11 @@ void MainWindow::initTitleBar()
QMenu* m_helpMenu = this->menuBar()->addMenu(tr("帮助(&H)"));
}
void MainWindow::slotExitSystem()
{
closeEvent(NULL);
}
//初始化工具栏
void MainWindow::initToolBar()
@ -235,49 +247,23 @@ void MainWindow::initToolBar()
QSize toolIconSize(18, 18);
ui->mainToolBar->setIconSize(toolIconSize); //设置工具栏图标大小
QIcon newprojectIcon(::GetImagePath()+"newproject.png");
QIcon openprojectIcon(::GetImagePath()+"openproject.png");
QIcon saveprojectIcon(::GetImagePath()+"saveproject.png");
//
QIcon wellogIcon(::GetImagePath()+"wellog.png");
QIcon outcurvesIcon(::GetImagePath()+"outcurves.png");
//
QIcon wellsectionwindowIcon(::GetImagePath()+"wellsectionwindow.png");
QIcon developmentIcon(::GetImagePath()+"development.png");
m_newprojectAc = new QAction(newprojectIcon, "新建项目", this);
m_openprojectAc = new QAction(openprojectIcon, "打开项目", this);
m_saveprojectAc = new QAction(saveprojectIcon, "保存项目", this);
m_wellsectionwindowAc = new QAction(wellsectionwindowIcon, "可视解释", this);
m_wellogAc = new QAction(wellogIcon, "数据导入", this);
m_outcurvesAc = new QAction(outcurvesIcon, "数据导出", this);
m_developmentAc = new QAction(developmentIcon, "开发工具", this);
//工具栏
ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); //此种方式为文字显示在图标右侧
//add QAction to Widget.
ui->mainToolBar->addAction(m_newprojectAc);
ui->mainToolBar->addAction(m_openprojectAc);
//ui->mainToolBar->addAction(m_saveprojectAc);
ui->mainToolBar->addAction(QIcon( ::GetImagePath() + "newproject.png"), tr("&新建项目"), this, SLOT(s_New()));
ui->mainToolBar->addAction(QIcon( ::GetImagePath() + "openproject.png"), tr("&打开项目"), this, SLOT(s_Open()));
ui->mainToolBar->addSeparator();//添加分隔符
//
ui->mainToolBar->addAction(m_wellogAc);
ui->mainToolBar->addAction(m_outcurvesAc);
ui->mainToolBar->addAction(QIcon( ::GetImagePath() + "wellog.png"), tr("&数据导入"), this, SLOT(s_wellog()));
ui->mainToolBar->addAction(QIcon( ::GetImagePath() + "outcurves.png"), tr("&数据导出"), this, SLOT(s_outcurves()));
ui->mainToolBar->addSeparator();//添加分隔符
//
ui->mainToolBar->addAction(m_wellsectionwindowAc);
ui->mainToolBar->addAction(m_developmentAc);
ui->mainToolBar->addAction(QIcon( ::GetImagePath() + "wellsectionwindow.png"), tr("&可视解释"), this, SLOT(s_showView()));
ui->mainToolBar->addAction(QIcon( ::GetImagePath() + "development.png"), tr("&开发工具"), this, SLOT(s_development()));
connect(m_newprojectAc, &QAction::triggered, this, &MainWindow::s_New);
connect(m_openprojectAc, &QAction::triggered, this, &MainWindow::s_Open);
connect(m_saveprojectAc, &QAction::triggered, this, &MainWindow::s_SaveProject);
connect(m_wellsectionwindowAc, &QAction::triggered, this, &MainWindow::s_showView);
connect(m_developmentAc, &QAction::triggered, this, &MainWindow::s_development);
// connect(m_compileAc, &QAction::triggered, this, &MainWindow::s_AddOne);
// connect(m_runAc, &QAction::triggered, this, &MainWindow::s_SaveImage);
// connect(m_debugAc, &QAction::triggered, this, &MainWindow::s_DrawImg);
// connect(m_loadAc, &QAction::triggered, this, &MainWindow::s_DrawLine);
QTimer::singleShot(500, this, [=]() {
QString fileFull = GetProjectFolder() + "例子.wwl";
QFileInfo fileInfo(fileFull);
@ -584,13 +570,13 @@ void MainWindow::s_showView()
void MainWindow::s_development()
{
//暂时用作切换3d绘制波列图的切换按钮
if(g_iSupport3D==0)
{
g_iSupport3D=1;
}
else {
g_iSupport3D=0;
}
// if(g_iSupport3D==0)
// {
// g_iSupport3D=1;
// }
// else {
// g_iSupport3D=0;
// }
}
void MainWindow::s_Risize()
@ -636,16 +622,15 @@ void MainWindow::s_DrawLine()
void MainWindow::s_CloseProject()
{
if(m_centerWidgets)
{
int iCount = m_centerWidgets->count();
for(int i=0; i<iCount; i++)
{
m_centerWidgets->removeTab(0);
}
}
//关闭老项目
g_prjname="";
bool bClosed = closeProject();
if(!bClosed)
{
return;
}
//关闭
emit CallManage::getInstance()->sig_CloseProject();
}
//参数卡数据查看

View File

@ -35,16 +35,6 @@ private:
Ui::MainWindow *ui;
public:
//工具栏
QAction* m_newprojectAc = nullptr; //新建
QAction* m_openprojectAc = nullptr; //打开
QAction* m_saveprojectAc = nullptr; //保存
//
QAction* m_wellogAc = nullptr; //数据导入
QAction* m_outcurvesAc = nullptr; //数据导出
QAction* m_wellsectionwindowAc = nullptr;//可视解释
QAction* m_developmentAc = nullptr; //开发工具
//停靠栏
QStackedWidget *m_stackedWidget_Center = nullptr;//中间工作区stack
//QDockWidget *m_projectView = nullptr; //左侧工程区
@ -80,6 +70,7 @@ public slots:
void s_Open();
void s_SaveProject();
void s_CloseProject();
void slotExitSystem();
void s_Risize();
void s_AddOne();

View File

@ -9004,8 +9004,50 @@ bool QMyCustomPlot::getIsEditor()
return true;
}
//读取高导缝配置
void QMyCustomPlot::ReadFracDef_gaodaofeng()
{
m_FracDefList.clear();
FRAC_DEF fd;
//char path[MAX_PATH+1];
char str[512],name[512];
int r,g,b,id;
FILE *fp;
QString qs;
//sprintf(str,"%sconf\\FRAC.CFG",path);
// QString fracFilePath = GetConfPath() + "FRAC_New.CFG";
QString fracFilePath = GetConfPath() + "FRAC.CFG";
fp = fopen(fracFilePath.toStdString().c_str(),"r");
if ( fp !=NULL )
{
fgets(str,256,fp); // 跳过第一行
while (!feof(fp))
{
fgets(str,256,fp);
qs = str; qs.trimmed();
if (qs.length() < 8) break ;
//代码 名称 形状代码(1:正弦曲线 2:连线 3:封闭区域) 颜色(红 绿 蓝) 线宽度
sscanf(str,"%d %s %d %d %d %d %d",&fd.iCode, name, &fd.iType, &r, &g, &b, &fd.nLineWidth);
fd.crColor = QColor(r,g,b);//RGB(r,g,b);
fd.csName = name;
fd.csName = fd.csName.trimmed();//.Trim();
fd.bDraw = 0;
m_FracDefList.append(fd);
if ( feof(fp))
break;
}
fclose(fp);
}
else
{
sprintf(name,"打开裂缝参数配置文件错误:%s!",str);
QMessageBox::information(nullptr, "读取文件失败", name);
}
}
//沉积相
void QMyCustomPlot::ReadFracDef()
void QMyCustomPlot::ReadFracDef_Fac()
{
m_FracDef.clear();
@ -9256,7 +9298,7 @@ bool QMyCustomPlot::LoadFromSLF_Fac(QString strSlfName, QString csCurve, bool bA
m_qcpItemLine2->point2->setCoords(-2, 3*iMyWidth/4);//位置
}
ReadFracDef();
ReadFracDef_Fac();
ReadData_Fac(strSlfName, csCurve, bAdd);
DrawFac(1);//相
@ -11093,6 +11135,7 @@ bool QMyCustomPlot::Refurbish()
bool flag = true;
if (m_bTableData)
{
//
ReadData(m_strSlfName, "");
}
else
@ -11383,7 +11426,7 @@ void QMyCustomPlot::drawRose(bool bTableData, QString csCurveDDIR, QString csCur
if (m_bTableData)
{
ReadFracDef();
ReadFracDef_gaodaofeng();
for (int i = 0 ; i < iFracType ; i++)
{
m_bTypeDraw[i] = true;
@ -11744,3 +11787,327 @@ void QMyCustomPlot::vertScrollBarChanged(QString strUuid, int value)
}
}
}
void QMyCustomPlot::Draw_Kedou()
{
if (m_bTableData)
{
ReadFracDef_gaodaofeng();
for (int i = 0 ; i < iFracType ; i++)
{
m_bTypeDraw[i] = true;
}
//
m_qsDIR="DDIR"; // 方位 曲线名
m_qsDIP="DANG";//倾角
m_qsDepth="DEPT";
m_qsID = "ID";
ReadData(m_strSlfName, m_strLineName);
}
else
{
//
m_csCurveDDIR = "DDIR"; // 方位 曲线名
m_csCurveDANG = "DANG";//倾角
m_csCurveGrad = "GRAD";
this->ReadData(m_strSlfName, m_csCurveDDIR, 0, &m_Curve);
this->ReadData(m_strSlfName, m_csCurveDANG, 1, &m_Curve2);
this->ReadData(m_strSlfName, m_csCurveGrad, 2, &m_Curve3);
}
if (m_bTableData)
{
this->DrawTabDip_Kedou();
}
else
{
this->DrawDip_Kedou();
}
}
void QMyCustomPlot::CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x2,float flHoriRatio)
{
float scale ;
int k;
scale = flWidth[0]=1.;
for(k=1;k<nColumn;k++)
{
flWidth[k] = flWidth[k-1] / factor;
scale += flWidth[k];
}
scale = /*100. **/flHoriRatio*(x2 - x1) / scale;
for(k=0;k<nColumn;k++)
{
flWidth[k] = flWidth[k] * scale;
}
}
void QMyCustomPlot::DrawTabDip_Kedou()
{
float flDepthScale,tempf,flVal;
int i,j,n,nPointNum=0,tempi;
QRectF rt,rtRect;
float x,y;
float dgtord,dr;
float flWidth[50];
FRAC_TABLE frac;
bool bDraw;
FRAC_DEF fd;
if(m_iPrecision<0) m_iPrecision=0;//小数位数
nPointNum = m_FracTabList.count();
if ( nPointNum < 1 )return ;
dgtord=3.14159265/180.;
//
m_nCircleWidth = 1;
m_nRadius = 6;
m_crCircle = QColor(0,0,0);
//
m_nTailWidth = 2;
m_nTailLen = 10;
m_crTail = QColor(0,0,0);
int iMyWidth = this->axisRect(0)->width(); //setSizeConstraintRect()
int iMyHeight = this->axisRect(0)->height(); //setSizeConstraintRect()
qDebug() << "iMyWidth=" << QString::number(iMyWidth) << ", iMyHeight=" << QString::number(iMyHeight);
//-----------
int l;
float x1 = 0;
float x2 = iMyWidth;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
int m_nScaleThinGrid=10;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
//绘制网格线,注意颜色、宽度属性
QPen pPenStraightLine(m_crTail, m_nTailWidth);
QPen pPenStraightLineSmall(m_crGridSmall, m_nTailWidth/2);
for(i=0;i<m_nScaleThinGrid;i++)
{
if ( i == 0 ) x =1;
else x = x1;
x1 = x + flWidth[i];
if ( (x1-x) <= 7) {
l = 2; // 小于1厘米
}
else l = 5;
for ( j=0; j<l; j++)
{
flTemp = (x + j*(x1 - x)/l);
double dtick=flTemp;
if(i==0&&j==0) continue;
{
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(this);
qcpItemLine->point1->setCoords(-m_iY2, dtick);//位置
qcpItemLine->point2->setCoords(-m_iY1, dtick);//位置
if(j==0)
{
qcpItemLine->setPen(pPenStraightLine);
}
else
{
qcpItemLine->setPen(pPenStraightLineSmall);
}
}
}
}
CalcDipWidth(9,flWidth, 1.2, 0, iMyWidth, 1.);
n = m_FracDefList.count();
for (i=0; i<nPointNum; i++)
{
frac = m_FracTabList.at(i);
//
bool bDraw = false;
for (int j=0; j<n; j++)
{
const FRAC_DEF& fd = m_FracDefList.at(j);
if ( (int)(frac.ID) == fd.iCode)
{
bDraw = m_bTypeDraw[j];//fd.bDraw;
break;
}
}
if(bDraw)
{
QBrush cBrush(fd.crColor);
//圆圈
QPen pPen(m_crCircle);
pPen.setWidth(m_nCircleWidth);
//尾巴
QPen pPenTail(m_crTail);
pPenTail.setWidth(m_nTailWidth);
// 角度
flVal = frac.DIPorS;
tempf = flVal /10.;
tempi = tempf;
x = fmod(flVal,(float)(10.));
if ( x == 0 )
{
tempi=0;//tempi --;
}
tempf = 0.;
for (j=0; j<tempi; j++)
tempf += flWidth[j];
x = tempf+(flVal-tempi*10.)*(flWidth[tempi]/10.);
y = -frac.DEP;
//
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(this);
qcpItemEllipse->setPen(pPen);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrush);//填充圆的颜色
//方位
dr=frac.DIR *dgtord;
//
QCPItemLine *qcpItemLine = new QCPItemLine(this);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPenTail);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
}
}
}
void QMyCustomPlot::DrawDip_Kedou()
{
float flWidth[50];
int l;
float dep;
int m_nScaleThinGrid=10;
// 计算位置
int iMyWidth = this->axisRect(0)->width();
float x1 = 0;
float x2 = iMyWidth;
float x=0,y=0;
int j=0,i=0,k=0;
float flTemp=0;
for(int i=0;i<50;i++) flWidth[i]=0;
CalcDipWidth(m_nScaleThinGrid, flWidth, 1.2, x1, x2, 1.);
//绘制网格线,注意颜色、宽度属性
QPen pPenStraightLine(m_crTail, m_nTailWidth);
QPen pPenStraightLineSmall(m_crGridSmall, m_nTailWidth/2);
for(i=0;i<m_nScaleThinGrid;i++)
{
if ( i == 0 ) x =1;
else x = x1;
x1 = x + flWidth[i];
if ( (x1-x) <= 7) {
l = 2; // 小于1厘米
}
else l = 5;
for ( j=0; j<l; j++)
{
flTemp = (x + j*(x1 - x)/l);
double dtick=flTemp;
if(i==0&&j==0) continue;
{
QCPItemStraightLine *qcpItemLine = new QCPItemStraightLine(this);
qcpItemLine->point1->setCoords(-m_SDep, dtick);//位置
qcpItemLine->point2->setCoords(-m_EDep, dtick);//位置
if(j==0)
{
qcpItemLine->setPen(pPenStraightLine);
}
else
{
qcpItemLine->setPen(pPenStraightLineSmall);
}
}
}
}
QPen pPen(m_crTail,m_nTailWidth);
QBrush cBrushFill(m_crPointFill);
float flDepthScale,tempf,flVal;
int nPointNum=0,tempi;
QRectF rt,rtRect;
float dgtord,dr;
for(int i=0;i<50;i++) flWidth[i]=0;
if(m_Value==0 || m_Value2==0)
{
Refurbish();
}
if ( m_Value==0 || m_Value2==0 )
return ;
dgtord=3.14159265/180.;
CalcDipWidth(9, flWidth, 1.2, 0, iMyWidth, 1);
while ( 1)
{
dep = m_SDep + k * m_Rlev;
if ( dep >m_EDep )
break;
if(dep<m_SDep)
{
k++;
continue;
}
i=(dep-m_Curve2.StartDepth)/m_Curve2.DepLevel+0.5;
if(i<0)
{
k++;
continue;
}
//
flVal = GetData(m_Curve2.RepCode,(char *)&m_Value2[i*m_Curve2.CodeLen]);//DANG
if ( flVal > m_flGrad2 || flVal < m_flGrad1 )
{
k++;
continue;
}
tempi = (int)( flVal /10.);
tempf = 0.;
for (j=0; j<tempi; j++)
{
tempf += flWidth[j];
}
x = tempf + (flVal-tempi*10.)*(flWidth[j+1]/10.);
y = -dep;//起始深度
//
QCPItemEllipse *qcpItemEllipse = new QCPItemEllipse(this);
qcpItemEllipse->setPen(pPen);
qcpItemEllipse->m_bCustom = true;
qcpItemEllipse->m_nRadius = m_nRadius;
qcpItemEllipse->topLeft->setCoords(y, x);//圆心位置
qcpItemEllipse->bottomRight->setCoords(y, x);//圆心位置
qcpItemEllipse->setBrush(cBrushFill);//填充圆的颜色
//方位
flVal = GetData(m_Curve.RepCode,(char *)&m_Value[i*m_Curve.CodeLen]);//DDIR
dr=flVal*dgtord;
//
QCPItemLine *qcpItemLine = new QCPItemLine(this);
qcpItemLine->start->setCoords(y, x);//圆心位置
qcpItemLine->end->setCoords(y, x);//圆心位置
qcpItemLine->setPen(pPen);
qcpItemLine->m_bCustom = true;
qcpItemLine->m_nTailLen = m_nTailLen; //尾长
qcpItemLine->m_nRadius = m_nRadius; //半径
qcpItemLine->m_dr = dr;
k++;
}
}

View File

@ -27,6 +27,7 @@ struct Slf_JIEGUPOS {
char Dest[64];
};
//沉积相
typedef struct
{
int iCode; //代码
@ -34,7 +35,6 @@ typedef struct
QString Phase; //亚相
QString mFac; //微相
}FAC_DEF;
typedef struct
{
int no;
@ -46,6 +46,29 @@ typedef struct
char Dest[32];
}FAC_TABLE;
//蝌蚪图
typedef struct FRACDEF
{
int iCode; //代码
QString csName; // 名称
int iType; //形状代码(1:正弦曲线 2:连线 3:封闭区域)
QColor crColor; //颜色(红 绿 蓝)
int nLineWidth; //线宽度
int bDraw; // 是否显示
}FRAC_DEF;
typedef struct FRACTABLE
{
float DEP; //深度
float AorX;
float XETAorH;
float W;
float DIPorS; //倾角
float DIR; //方位
float ID; //裂缝代码/可信度
float NUM;
float X[16],Y[16];//X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,X7,Y7,X8,Y8,X9,Y9;
}FRAC_TABLE;
class FormTrack;
class FormDraw;
class TransparentGroupResult;
@ -338,14 +361,14 @@ public:
bool m_bDrawFac = true; // 绘制相
bool m_bDrawPhase = true; // 绘制亚相
bool m_bDrawMFacName = true; // 微相名称
void ReadFracDef();
void ReadFracDef_Fac();
void ReadData_Fac(QString strSlfName, QString csCurve, bool bAdd=true);
void DrawFac(int iType);
bool LoadFromSLF_Fac(QString strSlfName, QString csCurve, bool bAdd=true);
//保存
void SaveToSLF_Fac();
//套管
//套管
bool m_bDrawStruct_Tubing = true; //绘制结构
bool m_bDrawTubing_Tubing = true; //绘制管柱
bool m_bDrawTools_Tubing = true; //绘制工具
@ -669,32 +692,8 @@ public:
virtual void contextMenuEvent(QContextMenuEvent *event);
typedef struct FRACTABLE
{
float DEP; //深度
float AorX;
float XETAorH;
float W;
float DIPorS; //倾角
float DIR; //方位
float ID; //裂缝代码/可信度
float NUM;
float X[16],Y[16];//X0,Y0,X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5,X6,Y6,X7,Y7,X8,Y8,X9,Y9;
}FRAC_TABLE;
//蝌蚪图
typedef struct FRACDEF
{
int iCode; //代码
QString csName; // 名称
int iType; //形状代码(1:正弦曲线 2:连线 3:封闭区域)
QColor crColor; //颜色(红 绿 蓝)
int nLineWidth; //线宽度
int bDraw; // 是否显示
}FRAC_DEF;
QList<FRAC_TABLE> m_FracTabList; // --
QList<FRAC_DEF> m_FracDefList;
QList<FRAC_TABLE> m_FracTabList;
QList<FRAC_DEF> m_FracDefList;// 高导缝...
bool m_bTypeDraw[iFracType]; // --
int m_bTableData = 0;
QString m_csCurveDDIR,m_csCurveDANG,m_csCurveGrad;
@ -729,6 +728,22 @@ public:
bool m_rose_fill_enabled, bool m_rose_draw_annotation, int nstep, float m_LeftVal, float m_RightVal);
void addQCPItemLine(QMyCustomPlot *widget, float cx, float cy, const QPointF& p1, const QPointF& p2, const QPen& wPen);
//蝌蚪
float m_LeftVal2,m_RightVal2; //最小倾角、最大倾角
float m_flGrad1,m_flGrad2; // 可信度
int m_iPrecision; //小数位数
float m_nRadius,m_nCircleWidth; // 半径,圆线宽度
float m_nTailWidth,m_nTailLen; // 尾宽度、尾长
QColor m_crPointFill,m_crTail,m_crCircle;//颜色
QColor m_crGridSmall; //
void CalcDipWidth(int nColumn,float *flWidth,float factor,int x1,int x2,float flHoriRatio);
void Draw_Kedou();
void DrawDip_Kedou();
void DrawTabDip_Kedou();
void ReadFracDef_gaodaofeng();
private:
};

View File

@ -55,6 +55,9 @@ QtProjectWidgets::QtProjectWidgets(QWidget *parent)
connect(CallManage::getInstance(), SIGNAL(sig_NewProject()), this, SLOT(s_NewProject()));
//关联信号槽,打开评估工程
connect(CallManage::getInstance(), SIGNAL(sig_OpenProject(QString)), this, SLOT(s_OpenProject(QString)));
//关联信号槽,关闭项目
connect(CallManage::getInstance(), SIGNAL(sig_CloseProject()), this, SLOT(s_CloseProject()));
//向左侧树图,追加固井结论表格
connect(CallManage::getInstance(), SIGNAL(sig_AddGujingToTree(QString,QString,QString)), this, SLOT(s_AddGujingToTree(QString,QString,QString)));
@ -1081,6 +1084,11 @@ void QtProjectWidgets::s_OpenProject(QString fileFull)
s_loadTreeWidget(fileFull);
}
void QtProjectWidgets::s_CloseProject()
{
ui->treeWidget->clear();//清理数据
}
//参数表数据查看
void QtProjectWidgets::onShowParameterCard(bool checked)
{

View File

@ -45,6 +45,7 @@ public slots:
//
void s_NewProject(); //新建项目
void s_OpenProject(QString fileFull); //打开项目
void s_CloseProject(); //关闭项目
//参数表
void onShowParameterCard(bool checked = false);//数据查看
//曲线