Wie transformiert die Gruppe programmgesteuert in der SVG -Datei?
Posted: 12 Apr 2025, 23:34
Ich habe eine SVG -Datei mit dem folgenden Bild:
Jeder der Pfeile wird durch einen Code wie diesen dargestellt:
Ich möchte die absolute Position des Rechtecks berechnen ( Knoten). Um dies zu tun, muss ich den Ausdruck in der Transformation des Tags des G -Tags (Tag (code> () bewerten ( im obigen Beispiel).
Wie kann ich das tun?
Soweit ich weiß, kann doc auf svgdocument gegossen werden. Ich möchte diesen Code wiederverwenden).
Anrufe an m2.geta () -- Ergebnis in nullPointerexception s.
UPDATE 3
Ich muss die Methoden auf magische Weise implementieren, und die Methoden
Für Dreiecke. e. Mit der Verwendung muss ich in Java -Code berechnen. Bibliotheken, die legal für kommerzielle Zwecke verwendet werden können. Ich habe es geschafft, den Test mit der Intellij Idea Community Edition 14.1.5 zu kompilieren.
Jeder der Pfeile wird durch einen Code wie diesen dargestellt:
Code: Select all
South, 180
sodipodi:nodetypes="ccc"
inkscape:connector-curvature="0"
id="path4251"
d="m 30.022973,250.04026 4.965804,-2.91109 4.988905,2.91109"
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6855976px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
Code: Select all
rect
Code: Select all
matrix(-1,0,0,-1,149.82549,457.2455)
Wie kann ich das tun?
Code: Select all
import java.io.IOException;
import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
import org.apache.batik.util.XMLResourceDescriptor;
import org.w3c.dom.Document;
try {
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
String uri = "http://www.example.org/diagram.svg";
Document doc = f.createDocument(uri);
} catch (IOException ex) {
// ...
}
Code: Select all
public final class BatikTest {
@Test
public void test() throws XPathExpressionException {
try {
final File initialFile =
new File("src/main/resources/trailer/scene05_signs.svg");
InputStream sceneFileStream = Files.asByteSource(initialFile).openStream();
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory f = new SAXSVGDocumentFactory(parser);
String uri = "http://www.example.org/diagram.svg";
final SVGOMDocument doc = (SVGOMDocument) f.createDocument(
uri, sceneFileStream);
final NodeList nodes =
doc.getDocumentElement().getElementsByTagName("g");
SVGOMGElement signSouth = null;
for (int i=0; (i < nodes.getLength()) && (signSouth == null); i++) {
final Node curNode = nodes.item(i);
final Node id = curNode.getAttributes().getNamedItem("id");
if ("signS".equals(id.getTextContent())) {
signSouth = (SVGOMGElement) curNode;
}
System.out.println("curNode: " + nodes);
}
System.out.println("signSouth: " + signSouth);
final NodeList rectNodes = signSouth.getElementsByTagName("rect");
System.out.println("rectNodes: " + rectNodes);
SVGOMRectElement rectNode = (SVGOMRectElement) rectNodes.item(0);
System.out.println("rectNode: " + rectNode);
final SVGMatrix m2 =
signSouth.getTransformToElement(rectNode);
System.out.println("m2: " + m2);
} catch (IOException ex) {
Assert.fail(ex.getMessage());
}
}
}
Code: Select all
m2.getF()
Code: Select all
final SVGSVGElement docElem = (SVGSVGElement)
doc.getDocumentElement();
final SVGPoint svgPoint = docElem.createSVGPoint();
svgPoint.setX((float) x);
svgPoint.setY((float) y);
final SVGPoint svgPoint1 =
svgPoint.matrixTransform(signSouth.getScreenCTM()); // Line 77
System.out.println("x: " + svgPoint1.getX());
System.out.println("y: " + svgPoint1.getY());
< /code>
Ergebnis: < /p>
java.lang.NullPointerException
at org.apache.batik.dom.svg.SVGLocatableSupport$3.getAffineTransform(Unknown Source)
at org.apache.batik.dom.svg.AbstractSVGMatrix.getA(Unknown Source)
at org.apache.batik.dom.svg.SVGOMPoint.matrixTransform(Unknown Source)
at org.apache.batik.dom.svg.SVGOMPoint.matrixTransform(Unknown Source)
at [...].BatikTest.test(BatikTest.java:77)
Ich muss die Methoden auf magische Weise implementieren, und die Methoden
Für Dreiecke. e. Mit der Verwendung muss ich in Java -Code berechnen. Bibliotheken, die legal für kommerzielle Zwecke verwendet werden können. Ich habe es geschafft, den Test mit der Intellij Idea Community Edition 14.1.5 zu kompilieren.