Search in sources :

Example 1 with SVGMatrix

use of org.w3c.dom.svg.SVGMatrix in project elki by elki-project.

the class SVGUtil method elementCoordinatesFromEvent.

/**
 * Convert the coordinates of an DOM Event from screen into element
 * coordinates.
 *
 * @param doc Document context
 * @param tag Element containing the coordinate system
 * @param evt Event to interpret
 * @return coordinates
 */
public static SVGPoint elementCoordinatesFromEvent(Document doc, Element tag, Event evt) {
    try {
        DOMMouseEvent gnme = (DOMMouseEvent) evt;
        SVGMatrix mat = ((SVGLocatable) tag).getScreenCTM();
        SVGMatrix imat = mat.inverse();
        SVGPoint cPt = ((SVGDocument) doc).getRootElement().createSVGPoint();
        cPt.setX(gnme.getClientX());
        cPt.setY(gnme.getClientY());
        return cPt.matrixTransform(imat);
    } catch (Exception e) {
        LoggingUtil.warning("Error getting coordinates from SVG event.", e);
        return null;
    }
}
Also used : SVGPoint(org.w3c.dom.svg.SVGPoint) SVGLocatable(org.w3c.dom.svg.SVGLocatable) SVGMatrix(org.w3c.dom.svg.SVGMatrix) DOMMouseEvent(org.apache.batik.dom.events.DOMMouseEvent)

Example 2 with SVGMatrix

use of org.w3c.dom.svg.SVGMatrix in project elki by elki-project.

the class BatikUtil method getRelativeCoordinates.

/**
 * Get the relative coordinates of a point within the coordinate system of a
 * particular SVG Element.
 *
 * @param evt Event, needs to be a DOMMouseEvent
 * @param reference SVG Element the coordinate system is used of
 * @return Array containing the X and Y values
 */
public static double[] getRelativeCoordinates(Event evt, Element reference) {
    if (evt instanceof DOMMouseEvent && reference instanceof SVGLocatable && reference instanceof SVGElement) {
        // Get the screen (pixel!) coordinates
        DOMMouseEvent gnme = (DOMMouseEvent) evt;
        SVGMatrix mat = ((SVGLocatable) reference).getScreenCTM();
        SVGMatrix imat = mat.inverse();
        SVGPoint cPt = ((SVGElement) reference).getOwnerSVGElement().createSVGPoint();
        cPt.setX(gnme.getClientX());
        cPt.setY(gnme.getClientY());
        // Have Batik transform the screen (pixel!) coordinates into SVG element
        // coordinates
        cPt = cPt.matrixTransform(imat);
        return new double[] { cPt.getX(), cPt.getY() };
    }
    return null;
}
Also used : SVGPoint(org.w3c.dom.svg.SVGPoint) SVGLocatable(org.w3c.dom.svg.SVGLocatable) SVGElement(org.w3c.dom.svg.SVGElement) SVGMatrix(org.w3c.dom.svg.SVGMatrix) DOMMouseEvent(org.apache.batik.dom.events.DOMMouseEvent)

Aggregations

DOMMouseEvent (org.apache.batik.dom.events.DOMMouseEvent)2 SVGLocatable (org.w3c.dom.svg.SVGLocatable)2 SVGMatrix (org.w3c.dom.svg.SVGMatrix)2 SVGPoint (org.w3c.dom.svg.SVGPoint)2 SVGElement (org.w3c.dom.svg.SVGElement)1