/** * Zapisuje celou petriho síť ze scény do QXmlStreamWriteru * @param writer streamwriter, do kterého bude zapisováno */ void XMLHandler::writePetriNet(QXmlStreamWriter *writer) { QList<PetriNetItem *> list = myPetriNet->items(); writer->writeStartElement("petrinet"); writer->writeAttribute("name",myPetriNet->getName()); writer->writeAttribute("version",myPetriNet->getVersion()); writer->writeAttribute("author",myPetriNet->getAuthor()); writer->writeTextElement("description",myPetriNet->getDescription()); foreach(PetriNetItem * item, list) { if(item->type() == PetriNetPlace::Type) { PetriNetPlace * place = (PetriNetPlace *)item; writePlace(writer,place); } else if(item->type() == PetriNetTransition::Type) { PetriNetTransition * transition = (PetriNetTransition *)item; writeTransition(writer,transition); } } //zapisuji se az posledni aby se posledni cetly -> vsechny objekty vytvořené foreach(PetriNetItem * item, list) { if(item->type() == PetriNetArrow::Type) { PetriNetArrow * arrow = (PetriNetArrow *) item; writeArc(writer,arrow); } } writer->writeEndElement();// petrinet }
void LC_MakerCamSVG::writeEntity(RS_Entity* entity) { RS_DEBUG->print("RS_MakerCamSVG::writeEntity: Found entity ..."); switch (entity->rtti()) { case RS2::EntityInsert: writeInsert((RS_Insert*)entity); break; case RS2::EntityPoint: writePoint((RS_Point*)entity); break; case RS2::EntityLine: writeLine((RS_Line*)entity); break; case RS2::EntityPolyline: writePolyline((RS_Polyline*)entity); break; case RS2::EntityCircle: writeCircle((RS_Circle*)entity); break; case RS2::EntityArc: writeArc((RS_Arc*)entity); break; case RS2::EntityEllipse: writeEllipse((RS_Ellipse*)entity); break; default: RS_DEBUG->print("RS_MakerCamSVG::writeEntity: Entity with type '%d' not yet implemented", (int)entity->rtti()); break; } }
/** writes a polyline value. */ void iom_file::writePolyline(XmlWriter &out, IomObject &obj,bool hasLineAttr) { /* object: POLYLINE [INCOMPLETE] lineattr object: Model.Topic.LineAttr attr00 11 sequence // if incomplete; multi sequence values object: SEGMENTS segment object: COORD C1 102.0 C2 402.0 segment object: ARC C1 103.0 C2 403.0 A1 104.0 A2 404.0 segment object: Model.SplineParam SegmentEndPoint object: COORD C1 103.0 C2 403.0 p0 1.0 p1 2.0 <POLYLINE> <LINEATTR> <Model.Topic.LineAttr> <attr00>11</attr00> </Model.Topic.LineAttr> </LINEATTR> <COORD> <C1>101.0</C1> <C2>401.0</C2> </COORD> <COORD> <C1>102.0</C1> <C2>402.0</C2> </COORD> <Model.SplineParam> <SegmentEndPoint> <COORD> <C1>103.0</C1> <C2>403.0</C2> </COORD> </SegmentEndPoint> <p0>1.0</p0> <p1>2.0</p1> </Model.SplineParam> </POLYLINE> */ out.startElement(tags::get_POLYLINE(),0,0); if(hasLineAttr){ IomObject lineattr=obj->getAttrObj(tags::get_lineattr(),0); if(!lineattr.isNull()){ out.startElement(tags::get_LINEATTR(),0,0); out.startElement(lineattr->getTag(),0,0); writeAttrs(out,lineattr); out.endElement(/*lineattr*/); out.endElement(/*LINEATTR*/); } } bool clipped=obj->getConsistency()==IOM_INCOMPLETE; for(int sequencei=0;sequencei<obj->getAttrValueCount(tags::get_sequence());sequencei++){ if(clipped){ out.startElement(tags::get_CLIPPED(),0,0); }else{ // an unclipped polyline should have only one sequence element if(sequencei>0){ iom_issueerr("unclipped polyline with multi 'sequence' elements"); break; } } IomObject sequence=obj->getAttrObj(tags::get_sequence(),sequencei); for(int segmenti=0;segmenti<sequence->getAttrValueCount(tags::get_segment());segmenti++){ IomObject segment=sequence->getAttrObj(tags::get_segment(),segmenti); if(segment->getTag()==tags::get_COORD()){ // COORD writeCoord(out,segment); }else if(segment->getTag()==tags::get_ARC()){ // ARC writeArc(out,segment); }else{ // custum line form out.startElement(segment->getTag(),0,0); writeAttrs(out,segment); out.endElement(/*segment*/); } } if(clipped){ out.endElement(/*CLIPPED*/); } } out.endElement(/*POLYLINE*/); }