|
|
|
|
@ -12,6 +12,7 @@
|
|
|
|
|
|
|
|
|
|
#include "nmObjLineCrack.h"
|
|
|
|
|
|
|
|
|
|
#include "nmPlotGraphicBinder.h"
|
|
|
|
|
#include "nmDataAnalyzeManager.h"
|
|
|
|
|
|
|
|
|
|
ZX_DEFINE_DYNAMIC(nObjLineFracture, nmObjLineCrack)
|
|
|
|
|
@ -32,8 +33,6 @@ nmObjLineCrack::nmObjLineCrack(const QString& sName, \
|
|
|
|
|
|
|
|
|
|
nmObjLineCrack::~nmObjLineCrack()
|
|
|
|
|
{
|
|
|
|
|
// 裂缝数据由DataManager统一释放,图元只保存引用。
|
|
|
|
|
m_fractureData = nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::init(const QString& sName, \
|
|
|
|
|
@ -47,13 +46,13 @@ void nmObjLineCrack::init(const QString& sName, \
|
|
|
|
|
m_oPen = QPen(QBrush(Qt::red), \
|
|
|
|
|
0.3f, Qt::SolidLine);
|
|
|
|
|
|
|
|
|
|
m_fractureData = nullptr;
|
|
|
|
|
// 业务属性本地默认值
|
|
|
|
|
m_sFlowModel = tr("Infinite Conductivity");
|
|
|
|
|
m_dDfc = 0;
|
|
|
|
|
m_dDw = 0;
|
|
|
|
|
m_pGraphicBinder = nullptr;
|
|
|
|
|
|
|
|
|
|
loadTempl();
|
|
|
|
|
|
|
|
|
|
// 连接图元可见性信号和槽
|
|
|
|
|
connect(this, SIGNAL(sigObjVisibleChanged(bool)),
|
|
|
|
|
this, SLOT(onObjVisibleChanged(bool)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::initTools()
|
|
|
|
|
@ -121,7 +120,8 @@ bool nmObjLineCrack::_runHitTest(const QPointF& pt, int& nOption, int& nSubIndex
|
|
|
|
|
m_vecPoints = getValueOf(pts);
|
|
|
|
|
nOption = (int)OHO_Point;
|
|
|
|
|
nSubIndex = i + 1;
|
|
|
|
|
|
|
|
|
|
// 点集变更
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -155,8 +155,10 @@ bool nmObjLineCrack::runMove(const QPointF& pt1,
|
|
|
|
|
if(m_oHitOption == OHO_Point && m_nHitIndex >= 0) {
|
|
|
|
|
// 如果是点,不用计算偏移量,直接将该点移动到鼠标抬起的位置即可
|
|
|
|
|
vecPts[m_nHitIndex] = pt2;
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
return moveToPos(vecPts);
|
|
|
|
|
bool bRet = moveToPos(vecPts);
|
|
|
|
|
// 移动后通知点集变更
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
return bRet;
|
|
|
|
|
} else if(m_oHitOption == OHO_Bound && m_nHitIndex >= 0) {
|
|
|
|
|
for(int i = 0; i < nCount; i++) {
|
|
|
|
|
vecPts[i] = offsetPoint(vecPts[i], pt1, pt2);
|
|
|
|
|
@ -164,8 +166,10 @@ bool nmObjLineCrack::runMove(const QPointF& pt1,
|
|
|
|
|
|
|
|
|
|
m_dOffsetX = pt2.x() - pt1.x();
|
|
|
|
|
m_dOffsetY = pt2.y() - pt1.y();
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
return moveToPos(vecPts);
|
|
|
|
|
bool bRet = moveToPos(vecPts);
|
|
|
|
|
// 移动后通知点集变更
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
return bRet;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
@ -184,12 +188,6 @@ void nmObjLineCrack::paintBack(QPainter* painter, const ZxPaintParam& param)
|
|
|
|
|
painter->save();
|
|
|
|
|
QVector<QPointF> pts = getPosOf(m_vecPoints);
|
|
|
|
|
|
|
|
|
|
// 动态更新裂缝基础数据
|
|
|
|
|
if(m_fractureData != nullptr) {
|
|
|
|
|
m_fractureData->setFractureName(m_sName);
|
|
|
|
|
m_fractureData->setFracturePoints(m_vecPoints);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 不选中的状态
|
|
|
|
|
if(!pts.empty()) {
|
|
|
|
|
|
|
|
|
|
@ -289,7 +287,7 @@ void nmObjLineCrack::paintBack(QPainter* painter, const ZxPaintParam& param)
|
|
|
|
|
|
|
|
|
|
int nmObjLineCrack::getCrackFlowModel()
|
|
|
|
|
{
|
|
|
|
|
if(m_fractureData->getFractureFlowModel().getValue() == tr("Infinite Conductivity"))
|
|
|
|
|
if(m_sFlowModel == tr("Infinite Conductivity"))
|
|
|
|
|
return 0;
|
|
|
|
|
else
|
|
|
|
|
return 1;
|
|
|
|
|
@ -297,56 +295,44 @@ int nmObjLineCrack::getCrackFlowModel()
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setCrackFlowModel(int newCrackFlowModel)
|
|
|
|
|
{
|
|
|
|
|
nmDataAttribute tempAttr = m_fractureData->getFractureFlowModel();
|
|
|
|
|
|
|
|
|
|
if(newCrackFlowModel == 0) {
|
|
|
|
|
tempAttr.setValue(tr("Infinite Conductivity"));
|
|
|
|
|
m_sFlowModel = tr("Infinite Conductivity");
|
|
|
|
|
} else {
|
|
|
|
|
tempAttr.setValue(tr("Finite Conductivity"));
|
|
|
|
|
m_sFlowModel = tr("Finite Conductivity");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_fractureData->setFractureFlowModel(tempAttr);
|
|
|
|
|
emit sigFlowModelChanged(newCrackFlowModel);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjLineCrack::getCrackDfc()
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData->getFractureDfc().getValue().toDouble();
|
|
|
|
|
return m_dDfc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setCrackDfc(double newCrackDfc)
|
|
|
|
|
{
|
|
|
|
|
// 从Data中取数据
|
|
|
|
|
nmDataAttribute tempAttr = m_fractureData->getFractureDfc();
|
|
|
|
|
tempAttr.setValue(newCrackDfc);
|
|
|
|
|
m_fractureData->setFractureDfc(tempAttr);
|
|
|
|
|
m_dDfc = newCrackDfc;
|
|
|
|
|
emit sigDfcChanged(newCrackDfc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjLineCrack::getCrackDw()
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData->getFractureDw().getValue().toDouble();
|
|
|
|
|
return m_dDw;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setCrackDw(double newCrackDw)
|
|
|
|
|
{
|
|
|
|
|
// 从Data中取数据
|
|
|
|
|
nmDataAttribute tempAttr = m_fractureData->getFractureDw();
|
|
|
|
|
tempAttr.setValue(newCrackDw);
|
|
|
|
|
m_fractureData->setFractureDw(tempAttr);
|
|
|
|
|
m_dDw = newCrackDw;
|
|
|
|
|
emit sigDwChanged(newCrackDw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::onSerialize(ZxSerializer* ser)
|
|
|
|
|
{
|
|
|
|
|
nmObjBase::onSerialize(ser);
|
|
|
|
|
int flowModel;
|
|
|
|
|
|
|
|
|
|
if(m_fractureData->getFractureFlowModel().getValue() == tr("Infinite Conductivity"))
|
|
|
|
|
flowModel = 0;
|
|
|
|
|
else
|
|
|
|
|
flowModel = 1;
|
|
|
|
|
int flowModel = getCrackFlowModel();
|
|
|
|
|
|
|
|
|
|
ser->write("FlowModel", flowModel);
|
|
|
|
|
ser->write("dFc", m_fractureData->getFractureDfc().getValue().toDouble());
|
|
|
|
|
ser->write("dW", m_fractureData->getFractureDw().getValue().toDouble());
|
|
|
|
|
ser->write("dFc", m_dDfc);
|
|
|
|
|
ser->write("dW", m_dDw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::onDeserialize(ZxSerializer* ser)
|
|
|
|
|
@ -367,16 +353,11 @@ void nmObjLineCrack::onDeserialize(ZxSerializer* ser)
|
|
|
|
|
void nmObjLineCrack::onSaveTempl(ZxSerializer* ser)
|
|
|
|
|
{
|
|
|
|
|
nmObjBase::onSaveTempl(ser);
|
|
|
|
|
int flowModel;
|
|
|
|
|
|
|
|
|
|
if(m_fractureData->getFractureFlowModel().getValue() == tr("Infinite Conductivity"))
|
|
|
|
|
flowModel = 0;
|
|
|
|
|
else
|
|
|
|
|
flowModel = 1;
|
|
|
|
|
int flowModel = getCrackFlowModel();
|
|
|
|
|
|
|
|
|
|
ser->write("FlowModel", flowModel);
|
|
|
|
|
ser->write("dFc", m_fractureData->getFractureDfc().getValue().toDouble());
|
|
|
|
|
ser->write("dW", m_fractureData->getFractureDw().getValue().toDouble());
|
|
|
|
|
ser->write("dFc", m_dDfc);
|
|
|
|
|
ser->write("dW", m_dDw);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::onLoadTempl(ZxSerializer* ser)
|
|
|
|
|
@ -419,75 +400,72 @@ void nmObjLineCrack::fillPtyPano(IxPtyPano* sheet)
|
|
|
|
|
ZX_PROP("ObjLineCrackEndPos.EndPointY", getEndY, setEndY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setFractureData(nmDataFracture* newFractureData)
|
|
|
|
|
{
|
|
|
|
|
m_fractureData = newFractureData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nmDataFracture* nmObjLineCrack::getFractureData() const
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::afterCreated()
|
|
|
|
|
{
|
|
|
|
|
m_fractureData = nmDataAnalyzeManager::getCurrentInstance()->createFracture();
|
|
|
|
|
m_fractureData->setFractureName(m_sName);
|
|
|
|
|
m_fractureData->setFracturePoints(m_vecPoints);
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::removeData()
|
|
|
|
|
{
|
|
|
|
|
if(m_fractureData) {
|
|
|
|
|
// 从数据中心移除该数据
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->removeFractureData(m_fractureData);
|
|
|
|
|
m_fractureData = nullptr;
|
|
|
|
|
if(m_pGraphicBinder) {
|
|
|
|
|
return m_pGraphicBinder->getCrackDataFor(const_cast<nmObjLineCrack*>(this));
|
|
|
|
|
}
|
|
|
|
|
return nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjLineCrack::getStartX()
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData->getFracturePoints().first().x();
|
|
|
|
|
if(!m_vecPoints.isEmpty())
|
|
|
|
|
return m_vecPoints.first().x();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setStartX(double newValue)
|
|
|
|
|
{
|
|
|
|
|
m_vecPoints.first().setX(newValue);
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
if(!m_vecPoints.isEmpty()) {
|
|
|
|
|
m_vecPoints.first().setX(newValue);
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjLineCrack::getStartY()
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData->getFracturePoints().first().y();
|
|
|
|
|
if(!m_vecPoints.isEmpty())
|
|
|
|
|
return m_vecPoints.first().y();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setStartY(double newValue)
|
|
|
|
|
{
|
|
|
|
|
m_vecPoints.first().setY(newValue);
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
if(!m_vecPoints.isEmpty()) {
|
|
|
|
|
m_vecPoints.first().setY(newValue);
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjLineCrack::getEndX()
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData->getFracturePoints().last().x();
|
|
|
|
|
if(!m_vecPoints.isEmpty())
|
|
|
|
|
return m_vecPoints.last().x();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setEndX(double newValue)
|
|
|
|
|
{
|
|
|
|
|
m_vecPoints.last().setX(newValue);
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
if(!m_vecPoints.isEmpty()) {
|
|
|
|
|
m_vecPoints.last().setX(newValue);
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
double nmObjLineCrack::getEndY()
|
|
|
|
|
{
|
|
|
|
|
return m_fractureData->getFracturePoints().last().y();
|
|
|
|
|
if(!m_vecPoints.isEmpty())
|
|
|
|
|
return m_vecPoints.last().y();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setEndY(double newValue)
|
|
|
|
|
{
|
|
|
|
|
m_vecPoints.last().setY(newValue);
|
|
|
|
|
nmDataAnalyzeManager::getCurrentInstance()->notifyDataChanged();
|
|
|
|
|
if(!m_vecPoints.isEmpty()) {
|
|
|
|
|
m_vecPoints.last().setY(newValue);
|
|
|
|
|
emit sigPointsChanged();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::setLockForDFN()
|
|
|
|
|
@ -496,10 +474,3 @@ void nmObjLineCrack::setLockForDFN()
|
|
|
|
|
setLockSize(true);
|
|
|
|
|
setReadOnly(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void nmObjLineCrack::onObjVisibleChanged(bool bIsVisible)
|
|
|
|
|
{
|
|
|
|
|
if(m_fractureData != nullptr) {
|
|
|
|
|
m_fractureData->setPlotVisible(bIsVisible);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|