Більше

Як створити певний файл svg з даними з функції

Як створити певний файл svg з даними з функції


Я працюю в c ++/ QT4.8.5, з api qgis c ++ 2.8.2

Я повинен відобразити динамічний значок для функції. деякі дані періодично змінюються, і для того, щоб відобразити зміну, мені потрібен svg, який може отримати дані. Я не хочу мати колекцію svg -файлу, тому що також є можливості. На цей момент мені потрібні лише два параметри, але кількість параметр буде більше Моя функція має два атрибути швидкість і колір, кожен змінює швидкість, визначаючи розмір стрілки різного кольору. Колір встановлюється у об'єкті, це результат алгоритму. на даний момент є восьмий колір і 3 типи швидкості (повільна, середня, швидка)

чи маєте ви уявлення про те, як я можу продовжити створення файлу та застосувати його до свого символу?


Ось рішення, для якого потрібно створити конкретний файл svg залежно від даних даних Мова c ++ / QT4.8.5, qgis api c ++ 2.8.2

Файл svg містить код xml У цьому прикладі ми ставимо певний колір і змінюємо використання на основі параметра "vitesse" функції. Цей зразок коду малює 3 різні стрілки: малу середню та велику матрицю розміром 30x30 пікселів

тут функція:

void createTrackIco (QgsFeature pFeature, int pTrackId, bool pUpdateIco) {QString lColorIco; QString lUseIco; подвійний lVitesse; if (pUpdateIco) {// отримуємо дані функції lColorIco = pFeature.attribute ("COLOR"). toString (); lVitesse = pFeature.attribute ("VITESSE"). toDouble (); if (lVitesse <10) lUseIco = "позичено"; else if (lVitesse <20) lUseIco = "moyen"; else lUseIco = "rapide"; qDebug () << "Update Icone Type =" << lUseIco << "couleur =" << lColorIco << "vitesse =" << lVitesse; } else {// тип створення icone par defaut lColorIco = "чорний"; lUseIco = "позичено"; } QString fileXmlName = "… /data/Icones/iconeS52/track_"+QString::number(pTrackId)+".svg"; QFile fileXml (fileXmlName); // крета файл. if (! fileXml.open (QFile :: WriteOnly | QFile :: Text)) qDebug () << "помилка"; Записувач QXmlStreamWriter (& fileXml); write.setAutoFormatting (true); script.setCodec ("iso-8859-1"); // Вставити норму кодифікації xml: writer.writeStartDocument (); // корінь файлу XML writer.writeStartElement ("svg"); write.writeAttribute ("ширина", "30"); write.writeAttribute ("висота", "30"); writer.writeAttribute ("xmlns", "http://www.w3.org/2000/svg"); // Додати елемент write.writeStartElement ("defs"); // маленький письменник.writeStartElement ("g"); write.writeAttribute ("id", "lent"); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "0"); write.writeAttribute ("y1", "0"); write.writeAttribute ("x2", "15"); write.writeAttribute ("y2", "15"); write.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "0"); write.writeAttribute ("y1", "30"); write.writeAttribute ("x2", "15"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "15"); write.writeAttribute ("x2", "21"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "10"); write.writeAttribute ("x2", "20"); write.writeAttribute ("y2", "15"); write.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); script.writeAttribute ("y1", "20"); write.writeAttribute ("x2", "20"); write.writeAttribute ("y2", "15"); write.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); // кінець g тегу write.writeEndElement (); // середній письменник.writeStartElement ("g"); script.writeAttribute ("id", "moyen"); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "0"); write.writeAttribute ("y1", "0"); write.writeAttribute ("x2", "15"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); script.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "0"); write.writeAttribute ("y1", "30"); write.writeAttribute ("x2", "15"); write.writeAttribute ("y2", "15"); write.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); script.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "15"); write.writeAttribute ("x2", "25"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); script.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "10"); write.writeAttribute ("x2", "25"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); script.writeAttribute ("y1", "20"); write.writeAttribute ("x2", "25"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); // кінець g тегу write.writeEndElement (); // великий письменник.writeStartElement ("g"); script.writeAttribute ("id", "rapide"); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "0"); write.writeAttribute ("y1", "0"); write.writeAttribute ("x2", "15"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "0"); write.writeAttribute ("y1", "30"); write.writeAttribute ("x2", "15"); write.writeAttribute ("y2", "15"); write.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "15"); write.writeAttribute ("x2", "30"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "10"); write.writeAttribute ("x2", "30"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); script.writeStartElement ("рядок"); write.writeAttribute ("x1", "15"); write.writeAttribute ("y1", "20"); write.writeAttribute ("x2", "30"); write.writeAttribute ("y2", "15"); script.writeAttribute ("стиль", "обведення:"+lColorIco+"; ширина обведення: 2"); // письменник кінця рядка.writeEndElement (); // кінець g тегу write.writeEndElement (); // кінець автора тегів defs.writeEndElement (); // почати використання write.writeStartElement ("використання"); riter.writeAttribute ("xlink: href", "#"+lUseIco); write.writeAttribute ("x", "0"); write.writeAttribute ("y", "0"); // кінець писателя тегів svg.writeEndElement (); // записуємо дані у файл запису XML.writeEndDocument (); // закрити файл і закрити кореневий елемент fileXml.close (); }

Ви можете вивчити цей зразок, вдосконалити його або просто отримати допомогу.


Перегляньте відео: Урок 3 - Управление персонажем клавиатурой в Скретч Scratch