#include "ROI.h" #include "ROICircle.h" #include "ROICircularArc.h" #include "ROILine.h" #include "ROIRect1.h" #include"ROIRect2.h" #include "MyStream.h" using namespace HalconCpp; ROI::ROI() { numHandles = 0; activeHandleIdx = 0; roiType = ROIType::Point; operatorFlag = ROIOperation::None; } void ROI::setOperatorFlag(ROIOperation flag) { operatorFlag = flag; switch (operatorFlag) { case ROIOperation::Positive: flagLineStyle = HTuple(); break; case ROIOperation::Negative: flagLineStyle = HTuple(8, 8); break; default: flagLineStyle = HTuple(1,1); break; } } void ROI::setTitle(QString title) { m_strTitle = title; } void ROI::setHandleWidth(int width) { handleWidth=width; } void ROI::save(QDataStream &dataStream) { int x = (int)operatorFlag; dataStream << x; dataStream << flagLineStyle; } void ROI::load(QDataStream &dataStream) { int x; dataStream >> x; dataStream >> flagLineStyle; operatorFlag = ROIOperation(x); } //#ifndef QT_NO_DATASTREAM QDataStream & operator<<(QDataStream &dataStream, ROI &roi) { dataStream << QString(roi.metaObject()->className());//将对象的类名写入流中 roi.save(dataStream); return dataStream; } QDataStream & operator>>(QDataStream &dataStream, ROI **roi) { QString str; dataStream >> str; *roi = NULL; if (str ==QString("ROILine")) //根据类名字符串生成相应类的对象 { *roi = new ROILine; (*roi)->load(dataStream); return dataStream; } if (str == QString("ROICircle")) { *roi = new ROICircle; (*roi)->load(dataStream); return dataStream; } if (str == QString("ROICircularArc")) { *roi = new ROICircularArc; (*roi)->load(dataStream); return dataStream; } if (str == QString("ROIRect1")) { *roi = new ROIRect1; (*roi)->load(dataStream); return dataStream; } if (str == QString("ROIRect2")) { *roi = new ROIRect2; (*roi)->load(dataStream); return dataStream; } if (str == QString("ROIPoint")) { *roi = new ROIPoint; (*roi)->load(dataStream); return dataStream; } return dataStream; } //#endif