优化路径剖面,支持从"岩性符号库.lib"加载图形符号
This commit is contained in:
parent
157008bfc0
commit
6d1f4bd4db
1451
logPlus/GeoIndicatorGenerator.cpp
Normal file
1451
logPlus/GeoIndicatorGenerator.cpp
Normal file
File diff suppressed because it is too large
Load Diff
61
logPlus/GeoIndicatorGenerator.h
Normal file
61
logPlus/GeoIndicatorGenerator.h
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
#ifndef GEOINDICATORGENERATOR_H
|
||||||
|
#define GEOINDICATORGENERATOR_H
|
||||||
|
|
||||||
|
#include <qgraphicsscene.h>
|
||||||
|
#include <QXmlStreamReader>
|
||||||
|
#include <QPainter>
|
||||||
|
class GeoIndicatorGenerator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
explicit GeoIndicatorGenerator();
|
||||||
|
~GeoIndicatorGenerator();
|
||||||
|
/*Give scene items
|
||||||
|
attr:
|
||||||
|
Geo name
|
||||||
|
scene
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
符号库名称
|
||||||
|
符号名称
|
||||||
|
*QPainter
|
||||||
|
绘制区域qrectf
|
||||||
|
是否绘制单行
|
||||||
|
是否横向拉伸
|
||||||
|
是否平躺
|
||||||
|
一厘米对应的像素个数
|
||||||
|
背景色
|
||||||
|
*/
|
||||||
|
float seleGeo(QString, QString, QPainter*, QRectF rect, bool, bool, bool, float, QColor);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool initGeoInf(QString, int);
|
||||||
|
float * getWH(QXmlStreamReader*);
|
||||||
|
void calcLNum(float*, QRectF, int* p, bool);
|
||||||
|
bool FindGeoName(QString, QXmlStreamReader*);
|
||||||
|
std::map<QString, int> libMap; //符号库映射
|
||||||
|
std::map<QString, int> nameMap; //符号名称映射
|
||||||
|
std::map<QString, int> lineType; //分隔线映射
|
||||||
|
std::map<QString, int> SymbolType; //纵向拉伸映射
|
||||||
|
std::map<QString, int> reverseType; //反向绘制映射
|
||||||
|
std::map<QString, int> fillType; //填充绘制映射
|
||||||
|
std::map<QString, int> ifGeoHeight; //是否使用标准符号高度
|
||||||
|
|
||||||
|
void PolylinePainter( QXmlStreamReader*, QPainter*, int*, float*, bool, bool, bool);
|
||||||
|
void LinePainter( QXmlStreamReader*, QPainter*, int*, float*, bool, bool, bool);
|
||||||
|
void CirclePainter( QXmlStreamReader*, QPainter*, int*, float*, bool, bool, bool);
|
||||||
|
void TextPainter( QXmlStreamReader*, QPainter*, int*, float*, bool, bool, bool);
|
||||||
|
void ArcPainter( QXmlStreamReader*, QPainter*, int*, float*, bool, bool, bool);
|
||||||
|
void PolygonPainter( QXmlStreamReader*, QPainter*, int*, float*, bool, bool, bool);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QString lines[3]; //xml文本信息
|
||||||
|
QString tempLine; //缓存近期xml信息
|
||||||
|
QRectF m_Rect;
|
||||||
|
float mm; //毫米对应像素量
|
||||||
|
QStringList libStr;
|
||||||
|
float h_strechRate; //纵向拉伸比例
|
||||||
|
//QXmlStreamReader *reader;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -7,9 +7,13 @@
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include "geometryutils.h"
|
#include "geometryutils.h"
|
||||||
#include <QSvgRenderer>
|
#include <QSvgRenderer>
|
||||||
|
#include "GeoIndicatorGenerator.h"
|
||||||
|
|
||||||
#pragma execution_character_set("utf-8") // 强制指定执行字符集为 UTF-8
|
#pragma execution_character_set("utf-8") // 强制指定执行字符集为 UTF-8
|
||||||
|
|
||||||
|
extern double g_dPixelPerCm;//每厘米像素数
|
||||||
|
//static GeoIndicatorGenerator m_drawGeo;
|
||||||
|
|
||||||
class TransparentDraggableGeoLith : public QObject
|
class TransparentDraggableGeoLith : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
@ -93,21 +97,51 @@ public:
|
||||||
//设置解释结论
|
//设置解释结论
|
||||||
void setLith(QString filePath, QString colorPath){
|
void setLith(QString filePath, QString colorPath){
|
||||||
m_Lith = filePath;
|
m_Lith = filePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawLith(double left_Low, double right_Hight, double lY1, double lY2)
|
||||||
|
{
|
||||||
|
if(m_Lith=="")
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
double x1 = mPlot->xAxis->coordToPixel(left_Low);
|
||||||
|
double x2 = mPlot->xAxis->coordToPixel(right_Hight);
|
||||||
|
double y1 = mPlot->yAxis->coordToPixel(lY1+(lY2-lY1)/4);
|
||||||
|
double y2 = mPlot->yAxis->coordToPixel(lY2);
|
||||||
|
double newWidth = y2-y1;
|
||||||
|
double newHeight = x1-x2;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
QString filePath = m_Lith;
|
||||||
QString strLast = filePath.right(4);
|
QString strLast = filePath.right(4);
|
||||||
if(strLast.toLower()==".svg")
|
if(strLast.toLower()==".svg")
|
||||||
{
|
{
|
||||||
QString path,filename;
|
QString path,filename;
|
||||||
GetWellNameAndPath(filePath, filename, path);
|
GetWellNameAndPath(filePath, filename, path);
|
||||||
QString basename = filename.left(filename.size()-4);
|
QString basename = filename;
|
||||||
|
|
||||||
QString val=filePath;
|
QString val=filePath;
|
||||||
QImage image(320,160,QImage::Format_RGB32);
|
QImage image(newWidth, newHeight, QImage::Format_RGB32);
|
||||||
QPainter painter(&image);
|
QPainter painter(&image);
|
||||||
QRectF fillRect(0,0,320,160);
|
QRectF fillRect(0,0,newWidth, newHeight);
|
||||||
painter.fillRect(fillRect,Qt::white);
|
painter.fillRect(fillRect,Qt::white);
|
||||||
//
|
//
|
||||||
painter.setBrush(QBrush(QPixmap(colorPath)));
|
//painter.setBrush(QBrush(QPixmap(colorPath)));
|
||||||
|
|
||||||
|
// bool isStrech=false;
|
||||||
|
// QSvgRenderer m_SvgRenderer;
|
||||||
|
// m_SvgRenderer.load(filePath);
|
||||||
|
// if(!isStrech){
|
||||||
|
// float oil_h = fillRect.width();
|
||||||
|
// oil_h = (oil_h / 2 >= fillRect.height() / 2) ? fillRect.height() : oil_h;
|
||||||
|
// float rect_y = fillRect.y() + fillRect.height() / 2 - oil_h / 2;
|
||||||
|
// fillRect.setY(rect_y);
|
||||||
|
// fillRect.setHeight(oil_h);
|
||||||
|
// }
|
||||||
|
// fillRect.setX(fillRect.x() + 1);
|
||||||
|
// m_SvgRenderer.render(&painter, fillRect);
|
||||||
|
|
||||||
//拉伸
|
//拉伸
|
||||||
DrawSVGSteched(&painter,filePath,fillRect,0);
|
DrawSVGSteched(&painter,filePath,fillRect,0);
|
||||||
|
|
@ -153,11 +187,46 @@ public:
|
||||||
// pixmap->fill(Qt::transparent);//设置背景透明
|
// pixmap->fill(Qt::transparent);//设置背景透明
|
||||||
// mPixmap_Lith->setPixmap(*pixmap); // 设置图片
|
// mPixmap_Lith->setPixmap(*pixmap); // 设置图片
|
||||||
|
|
||||||
mPixmap_Lith->setPixmap(QPixmap(filePath)); // 设置图片
|
//mPixmap_Lith->setPixmap(QPixmap(filePath)); // 设置图片
|
||||||
|
|
||||||
|
|
||||||
|
QString path,filename;
|
||||||
|
GetWellNameAndPath(filePath, filename, path);
|
||||||
|
QString basename = filename;
|
||||||
|
|
||||||
|
QString val=filePath;
|
||||||
|
QImage image(newWidth, newHeight, QImage::Format_RGB32);
|
||||||
|
QPainter painter(&image);
|
||||||
|
QRectF fillRect(0,0,newWidth, newHeight);
|
||||||
|
painter.fillRect(fillRect,Qt::white);
|
||||||
|
//
|
||||||
|
bool isOne=true;
|
||||||
|
bool isStech=true;
|
||||||
|
bool isHorizon=false;
|
||||||
|
float cm = g_dPixelPerCm;//一厘米对应的像素个数
|
||||||
|
QColor bkColor = QColor(255,255,255,255);
|
||||||
|
|
||||||
|
float GeoResult = m_drawGeo.seleGeo("岩性符号库", basename, &painter, fillRect, isOne, isStech, isHorizon, cm, bkColor);
|
||||||
|
|
||||||
|
val=GetImagePath()+"TempNew";
|
||||||
|
QDir ss;
|
||||||
|
if(!ss.exists(val)) {
|
||||||
|
ss.mkdir(val);
|
||||||
}
|
}
|
||||||
|
val+=QDir::separator();
|
||||||
|
val+=basename+".png";
|
||||||
|
image.save(val);
|
||||||
|
|
||||||
|
//
|
||||||
|
mPixmap_Lith->setPixmap(QPixmap(val)); // 设置图片
|
||||||
|
}
|
||||||
|
mPixmap_Lith->topLeft->setCoords(mPlot->xAxis->pixelToCoord(x2+1), mPlot->yAxis->pixelToCoord(y1+1));//right_Hight
|
||||||
|
mPixmap_Lith->bottomRight->setCoords(mPlot->xAxis->pixelToCoord(x1-1), mPlot->yAxis->pixelToCoord(y2-1));//left_Low
|
||||||
|
|
||||||
mPlot->replot();
|
// mPixmap_Lith->topLeft->setCoords(right_Hight, lY1+(lY2-lY1)/4);
|
||||||
|
// mPixmap_Lith->bottomRight->setCoords(left_Low, lY2);
|
||||||
|
|
||||||
|
//mPlot->replot();
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置m_Oil
|
//设置m_Oil
|
||||||
|
|
@ -175,7 +244,7 @@ public:
|
||||||
double x1 = mPlot->xAxis->coordToPixel(left_Low);
|
double x1 = mPlot->xAxis->coordToPixel(left_Low);
|
||||||
double x2 = mPlot->xAxis->coordToPixel(right_Hight);
|
double x2 = mPlot->xAxis->coordToPixel(right_Hight);
|
||||||
double y1 = mPlot->yAxis->coordToPixel(lY1);
|
double y1 = mPlot->yAxis->coordToPixel(lY1);
|
||||||
double y2 = mPlot->yAxis->coordToPixel(lY2);
|
double y2 = mPlot->yAxis->coordToPixel(lY1+(lY2-lY1)/4);
|
||||||
|
|
||||||
bool bWidthBig = false;
|
bool bWidthBig = false;
|
||||||
double newWidth = y2-y1;
|
double newWidth = y2-y1;
|
||||||
|
|
@ -188,10 +257,10 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
float rect_xRight = x2 + newHeight/ 2 - newWidth/ 2;
|
float rect_xRight = x2 + newHeight/ 2 - newWidth/ 2;
|
||||||
double xNewRight = mPlot->xAxis->pixelToCoord(rect_xRight);
|
double xNewRight = mPlot->xAxis->pixelToCoord(rect_xRight+1);
|
||||||
//
|
//
|
||||||
float rect_xLeft = rect_xRight + newWidth;
|
float rect_xLeft = rect_xRight + newWidth;
|
||||||
double xNewLeft = mPlot->xAxis->pixelToCoord(rect_xLeft);
|
double xNewLeft = mPlot->xAxis->pixelToCoord(rect_xLeft-1);
|
||||||
|
|
||||||
//
|
//
|
||||||
QString filePath = m_Oil;
|
QString filePath = m_Oil;
|
||||||
|
|
@ -201,7 +270,7 @@ public:
|
||||||
{
|
{
|
||||||
QString path,filename;
|
QString path,filename;
|
||||||
GetWellNameAndPath(filePath, filename, path);
|
GetWellNameAndPath(filePath, filename, path);
|
||||||
QString basename = filename.left(filename.size()-4);
|
QString basename = filename;
|
||||||
|
|
||||||
QString val=filePath;
|
QString val=filePath;
|
||||||
QImage image(newWidth, newWidth,QImage::Format_RGB32);
|
QImage image(newWidth, newWidth,QImage::Format_RGB32);
|
||||||
|
|
@ -233,9 +302,9 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
mPixmap_Oil->topLeft->setCoords(xNewRight, mPlot->yAxis->pixelToCoord(y1+1)); //right_Hight, lY1
|
mPixmap_Oil->topLeft->setCoords(xNewRight, mPlot->yAxis->pixelToCoord(y1+1)); //right_Hight, lY1
|
||||||
mPixmap_Oil->bottomRight->setCoords(xNewLeft, lY2); //left_Low
|
mPixmap_Oil->bottomRight->setCoords(xNewLeft, mPlot->yAxis->pixelToCoord(y2-1)); //left_Low
|
||||||
|
|
||||||
mPlot->replot();
|
//mPlot->replot();
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置Color
|
//设置Color
|
||||||
|
|
@ -247,7 +316,7 @@ public:
|
||||||
{
|
{
|
||||||
QString path,filename;
|
QString path,filename;
|
||||||
GetWellNameAndPath(filePath, filename, path);
|
GetWellNameAndPath(filePath, filename, path);
|
||||||
QString basename = filename.left(filename.size()-4);
|
QString basename = filename;
|
||||||
|
|
||||||
QString val=filePath;
|
QString val=filePath;
|
||||||
QImage image(320,160,QImage::Format_RGB32);
|
QImage image(320,160,QImage::Format_RGB32);
|
||||||
|
|
@ -287,6 +356,7 @@ public:
|
||||||
|
|
||||||
double lY1 = mPlot->yAxis->range().lower;//+10
|
double lY1 = mPlot->yAxis->range().lower;//+10
|
||||||
double lY2 = mPlot->yAxis->range().upper;
|
double lY2 = mPlot->yAxis->range().upper;
|
||||||
|
|
||||||
mRect->topLeft->setCoords(left_Low, lY1);
|
mRect->topLeft->setCoords(left_Low, lY1);
|
||||||
mRect->bottomRight->setCoords(right_Hight, lY2);
|
mRect->bottomRight->setCoords(right_Hight, lY2);
|
||||||
|
|
||||||
|
|
@ -294,13 +364,14 @@ public:
|
||||||
mPixmap_Color->topLeft->setCoords(right_Hight, lY1+(lY2-lY1)/4);
|
mPixmap_Color->topLeft->setCoords(right_Hight, lY1+(lY2-lY1)/4);
|
||||||
mPixmap_Color->bottomRight->setCoords(left_Low, lY2);
|
mPixmap_Color->bottomRight->setCoords(left_Low, lY2);
|
||||||
//
|
//
|
||||||
mPixmap_Lith->topLeft->setCoords(right_Hight, lY1+(lY2-lY1)/4);
|
//mPixmap_Lith->topLeft->setCoords(right_Hight, lY1+(lY2-lY1)/4);
|
||||||
mPixmap_Lith->bottomRight->setCoords(left_Low, lY2);
|
//mPixmap_Lith->bottomRight->setCoords(left_Low, lY2);
|
||||||
|
drawLith(left_Low, right_Hight, lY1, lY2);
|
||||||
|
|
||||||
//位置与rect不一样,否则图像反转
|
//位置与rect不一样,否则图像反转
|
||||||
//mPixmap_Oil->topLeft->setCoords(right_Hight, lY1);
|
//mPixmap_Oil->topLeft->setCoords(right_Hight, lY1);
|
||||||
//mPixmap_Oil->bottomRight->setCoords(left_Low, lY1+(lY2-lY1)/4);
|
//mPixmap_Oil->bottomRight->setCoords(left_Low, lY1+(lY2-lY1)/4);
|
||||||
drawOil(left_Low, right_Hight, lY1, lY1+(lY2-lY1)/4);
|
drawOil(left_Low, right_Hight, lY1, lY2);
|
||||||
|
|
||||||
//mItemTitle->position->setCoords(0.5, 0.5);
|
//mItemTitle->position->setCoords(0.5, 0.5);
|
||||||
// 设置父锚点,定位点
|
// 设置父锚点,定位点
|
||||||
|
|
@ -719,6 +790,8 @@ private:
|
||||||
QString m_Oil;
|
QString m_Oil;
|
||||||
QString m_Color;
|
QString m_Color;
|
||||||
|
|
||||||
|
GeoIndicatorGenerator m_drawGeo;
|
||||||
|
|
||||||
enum DragMode { DragNone, DragLeft, DragRight, DragRect };
|
enum DragMode { DragNone, DragLeft, DragRight, DragRect };
|
||||||
DragMode mDragMode = DragNone;
|
DragMode mDragMode = DragNone;
|
||||||
//double mDragStartX = 0;
|
//double mDragStartX = 0;
|
||||||
|
|
|
||||||
|
|
@ -123,7 +123,7 @@ public:
|
||||||
{
|
{
|
||||||
QString path,filename;
|
QString path,filename;
|
||||||
GetWellNameAndPath(filePath, filename, path);
|
GetWellNameAndPath(filePath, filename, path);
|
||||||
QString basename = filename.left(filename.size()-4);
|
QString basename = filename;
|
||||||
|
|
||||||
QString val=filePath;
|
QString val=filePath;
|
||||||
QImage image(y2-y1, x1-x2,QImage::Format_RGB32);
|
QImage image(y2-y1, x1-x2,QImage::Format_RGB32);
|
||||||
|
|
|
||||||
|
|
@ -215,7 +215,7 @@ void FormInfo::paintEvent(QPaintEvent* event)
|
||||||
painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3, Qt::AlignCenter, m_strUnit);
|
painter.drawText(rect.left(), rect.top()+rect.height()/3, rect.width(), rect.height()/3, Qt::AlignCenter, m_strUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_strType=="tableObject" && (m_strLineName=="WORDS_RELUST" || m_strLineName == "RESULT"))
|
if(m_strType=="tableObject" && (m_strLineName=="WORDS_RELUST" || m_strLineName == "RESULT" || m_strLineName == "GEO_LITH"))
|
||||||
{
|
{
|
||||||
//文字结论,不绘制左右范围
|
//文字结论,不绘制左右范围
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@ void FormTrack::s_addWave(QString strSlfName, QString strWellName, QString strTr
|
||||||
|
|
||||||
void FormTrack::s_AddTableLine(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType)
|
void FormTrack::s_AddTableLine(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, QString strAliasName, QString strUnit, QColor lineColor, double dWidth, float vmax, float vmin, QString strScaleType)
|
||||||
{
|
{
|
||||||
if(strLineName == "FRAC_HOLE.TABLE" || strLineName == "WORDS_RELUST" || strLineName == "RESULT")
|
if(strLineName == "FRAC_HOLE.TABLE" || strLineName == "WORDS_RELUST" || strLineName == "RESULT" || strLineName == "GEO_LITH")
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ SOURCES += \
|
||||||
../CallManage/CallManage.cpp \
|
../CallManage/CallManage.cpp \
|
||||||
../common/geometryutils.cpp \
|
../common/geometryutils.cpp \
|
||||||
ConsoleOutputWidget.cpp \
|
ConsoleOutputWidget.cpp \
|
||||||
|
GeoIndicatorGenerator.cpp \
|
||||||
InDefTableDlg.cpp \
|
InDefTableDlg.cpp \
|
||||||
InterfaceWidget.cpp \
|
InterfaceWidget.cpp \
|
||||||
PropertyWidget.cpp \
|
PropertyWidget.cpp \
|
||||||
|
|
@ -65,6 +66,7 @@ HEADERS += \
|
||||||
../common/geometryutils.h \
|
../common/geometryutils.h \
|
||||||
ConsoleOutputWidget.h \
|
ConsoleOutputWidget.h \
|
||||||
DraggablePixmap.h \
|
DraggablePixmap.h \
|
||||||
|
GeoIndicatorGenerator.h \
|
||||||
InDefTableDlg.h \
|
InDefTableDlg.h \
|
||||||
InterfaceWidget.h \
|
InterfaceWidget.h \
|
||||||
PropertyWidget.h \
|
PropertyWidget.h \
|
||||||
|
|
|
||||||
|
|
@ -303,6 +303,7 @@ void QMyCustomPlot::addGeoLithToPlot(double left_Low, double right_Hight, const
|
||||||
TransparentDraggableGeoLith *dragRect = new TransparentDraggableGeoLith(this, strUuid);
|
TransparentDraggableGeoLith *dragRect = new TransparentDraggableGeoLith(this, strUuid);
|
||||||
//图片,提前设值,后面setRange改变
|
//图片,提前设值,后面setRange改变
|
||||||
dragRect->setOil(myOil);
|
dragRect->setOil(myOil);
|
||||||
|
dragRect->setLith(myLith, myColor);
|
||||||
|
|
||||||
// 设置初始范围
|
// 设置初始范围
|
||||||
dragRect->setRange(left_Low, right_Hight);
|
dragRect->setRange(left_Low, right_Hight);
|
||||||
|
|
@ -311,9 +312,11 @@ void QMyCustomPlot::addGeoLithToPlot(double left_Low, double right_Hight, const
|
||||||
//最小宽度
|
//最小宽度
|
||||||
dragRect->setMinWidth(0.1);
|
dragRect->setMinWidth(0.1);
|
||||||
//dragRect->setColor(myColor);
|
//dragRect->setColor(myColor);
|
||||||
dragRect->setLith(myLith,myColor);
|
|
||||||
|
|
||||||
m_mapDraggable_GeoLith[strUuid] = dragRect;
|
m_mapDraggable_GeoLith[strUuid] = dragRect;
|
||||||
|
|
||||||
|
//刷新
|
||||||
|
this->replot();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QMyCustomPlot::onResetZoom()
|
void QMyCustomPlot::onResetZoom()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user