Witam!
Mam do napisania w c++ program który ma generować plik .svg z grafika zadanego układu elektronicznego.
Czy ktoś może mi pomóc i opisać schemat jak miałby wyglądać taki program?
Witam!
Mam do napisania w c++ program który ma generować plik .svg z grafika zadanego układu elektronicznego.
Czy ktoś może mi pomóc i opisać schemat jak miałby wyglądać taki program?
Tyla się da powiedzieć bo nie wiadomo co właściwie masz zrobić z jakich danych itp itd.
dzieki za odpowiedz!
W zasadzie mój problem jest na poziomie narysowania tego, bo nie moge nic o tym znaleźć.
załóżmy że ma rysowac opornik:
-podaje kolor
-grubosc linii
-skala powiekszenia (100%, 200% ....)
nasepnie zostaje wygenerowany plik .svg
SVG to plik xml, więc rozszyfrowanie go (czytanie, pisanie) nie powinno być kłopotliwe.
Poza tym jak mówiłem, żeby uprościć sobie sprawę, elementy narysuj sobie w jakimś programie graficznym, a twój program niech tylko łączy te grafiki w układy.
Może powinieneś skorzystać z framework'a Qt, który wspiera xml-a i SVG!
Masz nawet QSvgGenerator, więc nawet nie musisz się grzebać w formacie pliku!
Ja bym zrobił to w ten sosób, że robisz sobie klasę abstrakcyjną Uklad z wirtualną metodą Draw(). Potem robisz klasy Tranzystor, Kondensator, etc. dziedziczące po klasie Uklad. Przeciążasz metodę Draw w każdej klasie dziedziczącej po klasie Uklad. Metody te zawierają łańcuch znaków określający kod SVG -jeżeli nie znasz SVG to wpisz w google i rzeczy potrzebnych do tego zadania szybko się nauczysz.
Potem zrób sobie klasę ImageSVG która będzie łączyła różne grafiki.
Mniej więcej np. tak:
class Uklad {
public:
Uklad(int width, int height);
void setStyle(int color, int weight);
virtual std::string Draw() = 0;
//...
protected:
//...
int _color, _weight;
};
class Tranzystor : public Uklad {
public:
Tranzystor(int width, int height);
//metoda powinna zwracac kod SVG dla tranzystora
virtual std::string Draw();
//...
};
class Kondensator : public Uklad {
public:
Kondensator(int width, int height);
virtual std::string Draw();
//...
};
class ImageSVG {
public:
ImageSVG(int width, int height);
//...
void Add(Uklad*, int left, int top);
const std::string& toString() {
//tu przechodzisz po liscie data
//i wywolujesz metode Draw z listy data
}
void SaveToFile(const std::string& filename) {
//tu wywolujesz metode toString
//oraz metody odpowiedzialen za zapis nadysku
}
//...
private:
std::list<Uklad*> data;
};
//WYWOLANIE
//...
Uklad* tr = new Tranzystor(100,50);
Uklad* kd = new Kondensator(60,30);
ImageSVG img(800,600);
img.Add(tr,20,20);
img.Add(kd,160,30);
img.SaveToFile("C:\\file.svg");
//...