#include #include #include "IxPtyPano.h" #include "ZxSubAxisX.h" #include "ZxSubAxisY.h" #include "nmObjPolygonOutlineTool.h" #include "nmObjPolygonOutline.h" #include "nmDataLogFile.h" ZX_DEFINE_DYNAMIC(nObjPolygonOutline, nmObjPolygonOutline) nmObjPolygonOutline::nmObjPolygonOutline() { m_sObjTag = "nObjPolygonOutline"; init("", NULL, NULL); } nmObjPolygonOutline::nmObjPolygonOutline(const QString& sName, \ ZxSubAxisX* pAxisX, \ ZxSubAxisY* pAxisY) { m_sObjTag = "nObjPolygonOutline"; init(sName, pAxisX, pAxisY); } nmObjPolygonOutline::~nmObjPolygonOutline() { } void nmObjPolygonOutline::init(const QString& sName, \ ZxSubAxisX* pAxisX, \ ZxSubAxisY* pAxisY) { nmObjPolygon::init(sName, pAxisX, pAxisY); } void nmObjPolygonOutline::initTools() { m_pTool = new nmObjPolygonOutlineTool(); nmObjBase::initTools(); } bool nmObjPolygonOutline::hitTest(const QPointF& pt) { return nmObjPolygon::hitTest(pt); } bool nmObjPolygonOutline::_runHitTest(const QPointF& pt, int& nOption, int& nSubIndex) { return nmObjPolygon::_runHitTest(pt, nOption, nSubIndex); } bool nmObjPolygonOutline::runMove(const QPointF& pt1, const QPointF& pt2) { return nmObjPolygon::runMove(pt1, pt2); } void nmObjPolygonOutline::fillPtyPano(IxPtyPano* sheet) { nmObjPolygon::fillPtyPano(sheet); // TODO,设置边界类型的 IxPtyItem* pProp = ZX_PROP("ObjPolygonOutline.Type", getCurOutlineFlowType, setCurOutlineFlowType); if (NULL != pProp) { QStringList listTags; listTags << tr("No Flow") << tr("Constant Pressure") << tr("Unknow"); QList listIndexes; listIndexes << 0 << 1 << 2; pProp->getPtyPano(); pProp->setOptions(listTags, listIndexes); } } void nmObjPolygonOutline::onSerialize(ZxSerializer* ser) { nmObjPolygon::onSerialize(ser); // ser->write("BackgrdColor", m_clrBackgrd); // TODO,序列化 边界类型数据 ser->write("FlowTypeList", m_vFlowTypeList); } void nmObjPolygonOutline::onDeserialize(ZxSerializer* ser) { nmObjPolygon::onDeserialize(ser); // ser->read("BackgrdColor", m_clrBackgrd); // TODO,序列化 边界类型数据 ser->read("FlowTypeList", m_vFlowTypeList); } void nmObjPolygonOutline::onSaveTempl(ZxSerializer* ser) { nmObjPolygon::onSaveTempl(ser); // ser->write("BackgrdColor", m_clrBackgrd); ser->write("FlowTypeList", m_vFlowTypeList); } void nmObjPolygonOutline::setAllPos(QVector vecPoss, QVector *pVecIndexes) { nmObjPolygon::setAllPos(vecPoss, pVecIndexes); // 根据点数确定边数,以此来初始化m_vFlowTypeList // TODO,会不会覆盖从数据库读取的边界类型值! for (int i = 0; i < vecPoss.count(); i++) { m_vFlowTypeList.append(NM_OIL_RESERVOIR_OUTLINE_TYPE::OIL_Reservoir_Outline_No_Flow); } } void nmObjPolygonOutline::onLoadTempl(ZxSerializer* ser) { nmObjPolygon::onLoadTempl(ser); // ser->read("BackgrdColor", m_clrBackgrd); ser->read("FlowTypeList", m_vFlowTypeList); } void nmObjPolygonOutline::paintBack(QPainter* painter, const ZxPaintParam& param) { nmObjPolygon::paintBack(painter, param); QVector pts = getPosOf(m_vecPoints); if (isSelected()) { //选中状态下 QPen pen(QBrush(Qt::black), 0.0f, Qt::DotLine); painter->setPen(pen); painter->drawPolygon(&pts[0], pts.count()); for (int i = 0; i < pts.count(); i++) { float w = 2.2f; QPointF pt = pts[i]; QRectF rect(pt.x() - w * 0.5f, pt.y() - w * 0.5f, w, w); // 渲染节点 painter->setPen(QColor(0, 0, 128)); painter->drawRect(rect); // 如果是选中的边,则显示绿色 if (m_nHitIndex == i && m_oHitOption == OHO_Bound) { nmDataLogFile::getInstance()->writeLog("select line " + QString::number(i)); QPen pen; pen.setWidth(1); // 设置线条宽度 pen.setColor(Qt::green); // 设置线条颜色 painter->setPen(pen); painter->drawLine(pts[i], pts[i == pts.count() - 1 ? 0 : i + 1]); // 点还是需要画框 // painter->setPen(QColor(0, 0, 128)); // painter->drawRect(rect); } } } painter->restore(); } void nmObjPolygonOutline::setCurOutlineFlowType(int flowType) { if (m_oHitOption == OHO_Bound) { m_vFlowTypeList[m_nHitIndex] = flowType; } } int nmObjPolygonOutline::getCurOutlineFlowType() { if (m_oHitOption == OHO_Bound) { return m_vFlowTypeList[m_nHitIndex]; } return (int)NM_OIL_RESERVOIR_OUTLINE_TYPE::OIL_Reservoir_Outline_UNKNOW; }