generowanie pliku .svg

0

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?

0
  1. narysuj sobie wszystkie elementy wraz z doprowadzaniami: rezystor, kondensator, tranzystor, itd itp. Nie zapomnij o połączeniach (krzyżyk z kropką - połączone przewody) lub przeplotach (dwa skrzyżowane i niepołączone przewody).
  2. potem będziesz po prostu łączył te grafiki SVG odpowiednio łącząc liniami

Tyla się da powiedzieć bo nie wiadomo co właściwie masz zrobić z jakich danych itp itd.

0

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

0

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!

1

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");

//...

1 użytkowników online, w tym zalogowanych: 0, gości: 1