TlačiťTlačiť Slovenčina English Hľadať RSS

© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 1. 5. 2024.

Stránka sa načítava, prosím čakajte…

Dátum: 23. 12. 2020, pred štyrmi rokmi

Táto jednoduchá utilita ukazuje ako sa dá SVG podpora programovacieho rámca GRobot využiť na odstránenie transformácií z (XML/SVG) definícií SVG tvarov. Keďže sú pri tom používané vnútorné mechanizmy Javy, transformácia poruší pôvodnú jednoduchosť tvaru a vytvorí aj z pôvodne jednoduchých tvarov (ako elipsa alebo obdĺžnik) cesty a polygóny. No i tak sa dá niekedy výsledok použiť na zjednodušenie alebo urýchlenie procesu ručného odstraňovania transformácií z jednoduchších tvarov a na cesty/polygóny sa dá použiť priamo.

  
obrázok 
Okno utility. 
 

Zdrojový kód

~

import java.awt.Shape;

import knižnica.*;
import static knižnica.Svet.*;

public class TransformujSVGTvar extends GRobot
{
	private final SVGPodpora svgCieľ = new SVGPodpora();
	private final StringBuffer textCieľa = new StringBuffer();
	private final PoznámkovýBlok zdroj = new PoznámkovýBlok();
	private final Tlačidlo tlačidlo = new Tlačidlo("Konvertuj");
	private final PoznámkovýBlok cieľ = new PoznámkovýBlok();

	private TransformujSVGTvar()
	{
		super(480, 580, "Transformuj SVG tvar");
		Svet.písmo("Cambria", 10);
		farbaTextu(tmavošedá);
		farbaPozadia(snehová);
		skry();

		zdroj.šírka(400);
		zdroj.výška(200);
		zdroj.skoč(0, 150);

		obkresliBlok(zdroj);

		cieľ.šírka(400);
		cieľ.výška(200);
		cieľ.skoč(0, -150);

		obkresliBlok(cieľ);
		svet.setAlwaysOnTop(true);
	}

	private void obkresliBlok(PoznámkovýBlok blok)
	{
		skočNa(blok);

		farba(papierová);
		vyplňObdĺžnik(blok.šírka() / 2 + 10, blok.výška() / 2 + 10);

		farba(svetlošedá);
		kresliObdĺžnik(blok.šírka() / 2 + 10, blok.výška() / 2 + 10);
	}

	@Override public void voľbaTlačidla()
	{
		vymažTexty();
		svgPodpora.vymaž();

		try
		{
			if (svgPodpora.pridajSVG(zdroj.text()) > 0)
			{
				textCieľa.setLength(0);

				int počet = svgPodpora.počet();
				for (int i = 0; i < počet; ++i)
				{
					Shape tvar = svgPodpora.dajVýsledný(i);

					svgCieľ.vymaž();
					svgCieľ.pridaj(tvar);

					textCieľa.append(svgCieľ.dajSVG(0));
					textCieľa.append("\n\n");
				}

				cieľ.text(textCieľa.toString());
			}
		}
		catch (GRobotException e)
		{
			textCieľa.setLength(0);
			textCieľa.append(e.getMessage());
			textCieľa.append("\n");
			textCieľa.append(e.getCause().getMessage());
			textCieľa.append("\n");

			cieľ.text(textCieľa.toString());
			e.getCause().printStackTrace();
		}
	}

	public static void main(String[] args)
	{
		režimLadenia(true, true);
		použiKonfiguráciu("TransformujSVGTvar.cfg");
		new TransformujSVGTvar();
		vykonaťNeskôr(() -> { zbaľ(); upevni(); });
	}
}