void Plugin_Entity::updateData(QHash<int, QVariant> *data){ if (entity == NULL) return; QHash<int, QVariant> hash = *data; QString str; RS_Vector vec; RS_Pen epen = entity->getPen(); // double num; if (hash.contains(DPI::LAYER)) { str = (hash.take(DPI::LAYER)).toString(); entity->setLayer(str); } if (hash.contains(DPI::LTYPE)) { str = (hash.take(DPI::LTYPE)).toString(); epen.setLineType( Converter.str2lt(str) ); } if (hash.contains(DPI::LWIDTH)) { str = (hash.take(DPI::LWIDTH)).toString(); epen.setWidth( Converter.str2lw(str) ); } if (hash.contains(DPI::COLOR)) { QColor color = hash.take(DPI::COLOR).value<QColor>(); epen.setColor(color); } entity->setPen(epen); RS2::EntityType et = entity->rtti(); switch (et) { //atomicEntity case RS2::EntityLine: { vec = static_cast<RS_Line*>(entity)->getStartpoint(); if (hash.contains(DPI::STARTX)) { vec.x = (hash.take(DPI::STARTX)).toDouble(); } if (hash.contains(DPI::STARTY)) { vec.y = (hash.take(DPI::STARTY)).toDouble(); } static_cast<RS_Line*>(entity)->setStartpoint(vec); vec = static_cast<RS_Line*>(entity)->getEndpoint(); if (hash.contains(DPI::ENDX)) { vec.x = (hash.take(DPI::ENDX)).toDouble(); } if (hash.contains(DPI::ENDY)) { vec.y = (hash.take(DPI::ENDY)).toDouble(); } static_cast<RS_Line*>(entity)->setEndpoint(vec); break;} case RS2::EntityPoint: { vec = static_cast<RS_Point*>(entity)->getPos(); if (hash.contains(DPI::STARTX)) { vec.x = (hash.take(DPI::STARTX)).toDouble(); } if (hash.contains(DPI::STARTY)) { vec.y = (hash.take(DPI::STARTY)).toDouble(); } static_cast<RS_Point*>(entity)->setPos(vec); break; } case RS2::EntityArc: { RS_Arc *arc = static_cast<RS_Arc*>(entity); vec = arc->getCenter(); if (hash.contains(DPI::STARTX)) { vec.x = (hash.take(DPI::STARTX)).toDouble(); } if (hash.contains(DPI::STARTY)) { vec.y = (hash.take(DPI::STARTY)).toDouble(); } arc->setCenter(vec); if (hash.contains(DPI::RADIUS)) { arc->setRadius( (hash.take(DPI::RADIUS)).toDouble() ); } if (hash.contains(DPI::STARTANGLE)) { arc->setAngle1( (hash.take(DPI::STARTANGLE)).toDouble() ); vec.y = (hash.take(DPI::STARTANGLE)).toDouble(); } if (hash.contains(DPI::ENDANGLE)) { arc->setAngle2( (hash.take(DPI::ENDANGLE)).toDouble() ); } break;} case RS2::EntityCircle: { RS_Circle *cir = static_cast<RS_Circle*>(entity); vec = cir->getCenter(); if (hash.contains(DPI::STARTX)) { vec.x = (hash.take(DPI::STARTX)).toDouble(); } if (hash.contains(DPI::STARTY)) { vec.y = (hash.take(DPI::STARTY)).toDouble(); } cir->setCenter(vec); if (hash.contains(DPI::RADIUS)) { cir->setRadius( (hash.take(DPI::RADIUS)).toDouble() ); } break;} case RS2::EntityEllipse: { RS_Ellipse *ellipse = static_cast<RS_Ellipse*>(entity); vec = ellipse->getCenter(); if (hash.contains(DPI::STARTX)) { vec.x = (hash.take(DPI::STARTX)).toDouble(); } if (hash.contains(DPI::STARTY)) { vec.y = (hash.take(DPI::STARTY)).toDouble(); } ellipse->setCenter(vec); vec = ellipse->getMajorP(); if (hash.contains(DPI::ENDX)) { vec.x = (hash.take(DPI::ENDX)).toDouble(); } if (hash.contains(DPI::ENDY)) { vec.y = (hash.take(DPI::ENDY)).toDouble(); } ellipse->setMajorP(vec); if (hash.contains(DPI::STARTANGLE)) { ellipse->setAngle1((hash.take(DPI::STARTANGLE)).toDouble()); } if (hash.contains(DPI::ENDANGLE)) { ellipse->setAngle2((hash.take(DPI::ENDANGLE)).toDouble()); } if (hash.contains(DPI::HEIGHT)) { ellipse->setRatio((hash.take(DPI::HEIGHT)).toDouble()); } if (hash.contains(DPI::REVERSED)) { ellipse->setReversed( (hash.take(DPI::REVERSED)).toBool()); } break;} case RS2::EntitySolid: //TODO //Only used in dimensions ? break; case RS2::EntityConstructionLine: //Unused ? break; case RS2::EntityImage: { break;} case RS2::EntityOverlayBox: //Unused ? break; //EntityContainer case RS2::EntityInsert: { break;} case RS2::EntityText: { RS_Text *txt = static_cast<RS_Text*>(entity); bool move = false; vec = txt->getInsertionPoint(); if (hash.contains(DPI::STARTX)) { vec.x = (hash.take(DPI::STARTX)).toDouble() - vec.x; move = true; } else vec.x = 0; if (hash.contains(DPI::STARTY)) { vec.y = (hash.take(DPI::STARTY)).toDouble() - vec.y; move = true; } else vec.y = 0; if (move) txt->move(vec); if (hash.contains(DPI::TEXTCONTENT)) { txt->setText( (hash.take(DPI::TEXTCONTENT)).toString() ); } if (hash.contains(DPI::STARTANGLE)) { txt->setAngle( (hash.take(DPI::STARTANGLE)).toDouble() ); } if (hash.contains(DPI::HEIGHT)) { txt->setHeight( (hash.take(DPI::HEIGHT)).toDouble() ); } break;} case RS2::EntityHatch: break; case RS2::EntitySpline: break; case RS2::EntityPolyline: { RS_Polyline *pl = static_cast<RS_Polyline*>(entity); if (hash.take(DPI::CLOSEPOLY).toBool()) { pl->setClosed(true); }else{ pl->setClosed(false); } break;} case RS2::EntityVertex: break; case RS2::EntityDimAligned: break; case RS2::EntityDimLinear: break; case RS2::EntityDimRadial: break; case RS2::EntityDimDiametric: break; case RS2::EntityDimAngular: break; case RS2::EntityDimLeader: break; case RS2::EntityUnknown: default: break; } entity->update(); }
void Plugin_Entity::getData(QHash<int, QVariant> *data){ if (entity == NULL) return; RS2::EntityType et = entity->rtti(); data->insert(DPI::EID, (qulonglong)entity->getId()); data->insert(DPI::LAYER, entity->getLayer()->getName() ); data->insert(DPI::LTYPE, Converter.lt2str(entity->getPen().getLineType()) ); data->insert(DPI::LWIDTH, Converter.lw2str(entity->getPen().getWidth()) ); data->insert(DPI::COLOR, entity->getPen().getColor() ); switch (et) { //atomicEntity case RS2::EntityLine: { data->insert(DPI::ETYPE, DPI::LINE); RS_LineData d = static_cast<RS_Line*>(entity)->getData(); data->insert(DPI::STARTX, d.startpoint.x ); data->insert(DPI::STARTY, d.startpoint.y ); data->insert(DPI::ENDX, d.endpoint.x ); data->insert(DPI::ENDY, d.endpoint.y ); break;} case RS2::EntityPoint: { data->insert(DPI::ETYPE, DPI::POINT); RS_PointData d = static_cast<RS_Point*>(entity)->getData(); data->insert(DPI::STARTX, d.pos.x ); data->insert(DPI::STARTY, d.pos.y ); break; } case RS2::EntityArc: { data->insert(DPI::ETYPE, DPI::ARC); RS_ArcData d = static_cast<RS_Arc*>(entity)->getData(); data->insert(DPI::STARTX, d.center.x ); data->insert(DPI::STARTY, d.center.y ); data->insert(DPI::RADIUS, d.radius ); data->insert(DPI::STARTANGLE, d.angle1 ); data->insert(DPI::ENDANGLE, d.angle2 ); data->insert(DPI::REVERSED, d.reversed ); break;} case RS2::EntityCircle: { data->insert(DPI::ETYPE, DPI::CIRCLE); RS_CircleData d = static_cast<RS_Circle*>(entity)->getData(); data->insert(DPI::STARTX, d.center.x ); data->insert(DPI::STARTY, d.center.y ); data->insert(DPI::RADIUS, d.radius ); break;} case RS2::EntityEllipse: { data->insert(DPI::ETYPE, DPI::ELLIPSE); // RS_EllipseData d = static_cast<RS_Ellipse*>(entity)->getData(); RS_Ellipse *dd = static_cast<RS_Ellipse*>(entity); data->insert(DPI::STARTX, dd->getCenter().x );//10 data->insert(DPI::STARTY, dd->getCenter().y );//20 data->insert(DPI::ENDX, dd->getMajorP().x );//11 endpoint major axis x data->insert(DPI::ENDY, dd->getMajorP().y );//21 endpoint major axis y data->insert(DPI::HEIGHT, dd->getRatio() );//40 major/minor axis ratio data->insert(DPI::STARTANGLE, dd->getAngle1() ); data->insert(DPI::ENDANGLE, dd->getAngle2() ); data->insert(DPI::REVERSED, dd->isReversed() ); break;} case RS2::EntitySolid: //TODO //Only used in dimensions ? data->insert(DPI::ETYPE, DPI::SOLID); break; case RS2::EntityConstructionLine: //Unused ? data->insert(DPI::ETYPE, DPI::CONSTRUCTIONLINE); break; case RS2::EntityImage: { data->insert(DPI::ETYPE, DPI::IMAGE); RS_ImageData d = static_cast<RS_Image*>(entity)->getData(); data->insert(DPI::STARTX, d.insertionPoint.x ); data->insert(DPI::STARTY, d.insertionPoint.y ); break;} case RS2::EntityOverlayBox: //Unused ? data->insert(DPI::ETYPE, DPI::OVERLAYBOX); break; //EntityContainer case RS2::EntityInsert: { data->insert(DPI::ETYPE, DPI::INSERT); RS_InsertData d = static_cast<RS_Insert*>(entity)->getData(); data->insert(DPI::STARTX, d.insertionPoint.x ); data->insert(DPI::STARTY, d.insertionPoint.y ); data->insert(DPI::BLKNAME, d.name ); data->insert(DPI::STARTANGLE, d.angle ); data->insert(DPI::XSCALE, d.scaleFactor.x ); data->insert(DPI::YSCALE, d.scaleFactor.y ); break;} case RS2::EntityText: { data->insert(DPI::ETYPE, DPI::TEXT); RS_TextData d = static_cast<RS_Text*>(entity)->getData(); data->insert(DPI::STARTX, d.insertionPoint.x ); data->insert(DPI::STARTY, d.insertionPoint.y ); data->insert(DPI::STARTANGLE, d.angle ); data->insert(DPI::HEIGHT, d.height ); data->insert(DPI::TEXTCONTENT, d.text ); break;} case RS2::EntityHatch: data->insert(DPI::ETYPE, DPI::HATCH); break; case RS2::EntitySpline: data->insert(DPI::ETYPE, DPI::SPLINE); break; case RS2::EntityPolyline: data->insert(DPI::ETYPE, DPI::POLYLINE); data->insert(DPI::CLOSEPOLY, static_cast<RS_Polyline*>(entity)->isClosed() ); break; case RS2::EntityVertex: data->insert(DPI::ETYPE, DPI::UNKNOWN); break; case RS2::EntityDimAligned: data->insert(DPI::ETYPE, DPI::DIMALIGNED); break; case RS2::EntityDimLinear: data->insert(DPI::ETYPE, DPI::DIMLINEAR); break; case RS2::EntityDimRadial: data->insert(DPI::ETYPE, DPI::DIMRADIAL); break; case RS2::EntityDimDiametric: data->insert(DPI::ETYPE, DPI::DIMDIAMETRIC); break; case RS2::EntityDimAngular: data->insert(DPI::ETYPE, DPI::DIMANGULAR); break; case RS2::EntityDimLeader: data->insert(DPI::ETYPE, DPI::DIMLEADER); break; case RS2::EntityUnknown: default: data->insert(DPI::ETYPE, DPI::UNKNOWN); break; } }