« Return to Thread: a few questions..

Re: a few questions..

by shydisturbedboy :: Rate this Message:

Reply to Author | View in Thread

i am trying to program it..

here are some snippets...

this is how i draw the rect:

    private void drawCell(float x, float y, float width, float length) {
    Element g = doc.getElementById("cell");
    shape = doc.createElementNS(svgNS, "rect");
   
    shape.setAttributeNS(null, "x", x + "");
    shape.setAttributeNS(null, "y", y + "");
    shape.setAttributeNS(null, "width", width + "");
    shape.setAttributeNS(null, "height", length + "");
    shape.setAttribute("style", "fill:#7cc576; stroke:#289728; stroke-width:1.5; stroke-dasharray:3.3;fill-opacity:0.2; stroke-opacity:0.8");
    shape.setAttribute("transform", "rotate(45 " + (x+width/2) + " " + (y+length/2) + ")");
   
    g.appendChild(shape);
    }

and here is how i drag:

        private class OnDownAction implements EventListener {
        public void handleEvent(Event evt) {
            DOMMouseEvent elEvt = (DOMMouseEvent)evt;
            actionNode = elEvt.getTarget();
            Node n = ((Element)elEvt.getTarget());
            startPt = convertPt((Element)n, elEvt.getClientX(), elEvt.getClientY());
           
            if(action == "DRAG") {
            if(n.getLocalName() == "circle") {
            startX = Float.parseFloat(((Element)n).getAttribute("cx"));
            startY = Float.parseFloat(((Element)n).getAttribute("cy"));
            }
            else {
            startX = Float.parseFloat(((Element)actionNode).getAttribute("x"));
        startY = Float.parseFloat(((Element)actionNode).getAttribute("y"));
            }
            }
            else if(action == "CELL") {
            drawCell(startPt.getX(), startPt.getY(), 0, 0);
            }
        }
    }
   
    private class OnUpAction implements EventListener {
        public void handleEvent(Event evt) {
            if (actionNode != null) {
            DOMMouseEvent elEvt = (DOMMouseEvent)evt;
            Element ee = (Element)elEvt.getTarget();
            if(action == "CELL" && shape != null && endPt != null) {
            shape.setAttribute("style", "fill:#7cc576; stroke:#289728; stroke-width:1.5;fill-opacity:0.2; stroke-opacity:0.8");
            shape = null;
            }
                actionNode = null;
            }
        }
    }
   
    private class OnMoveAction implements EventListener {
    public void handleEvent(Event evt) {
            Element ee = null;
            DOMMouseEvent elEvt = (DOMMouseEvent)evt;
           
            if (actionNode == null)
            return;
           
            if (action == "DRAG") {
                ee = (Element)actionNode;
                if (ee.getParentNode() != null && ee.getParentNode() instanceof Element && ((Element)actionNode).getAttribute("id") != "mapBG") {
                    SVGPoint pt = convertPt((Element)ee.getParentNode(), elEvt.getClientX(), elEvt.getClientY());
                    moveElement(ee, pt.getX(), pt.getY());
                }
            }
            else if(action == "CELL") {
            ee = (Element)actionNode;
            endPt = convertPt((Element)ee.getParentNode(), elEvt.getClientX(), elEvt.getClientY());
            redrawCell(shape, endPt.getX(), endPt.getY());
            }
        }
    }
   
    private SVGPoint convertPt(Element elem, float x, float y) {
        SVGDocument svgDocument = svgCanvas.getSVGDocument();
        SVGMatrix mat = ((SVGLocatable)elem).getScreenCTM();
        SVGMatrix imat = mat.inverse();
        SVGPoint cPt = svgDocument.getRootElement().createSVGPoint();
        cPt.setX(x);
        cPt.setY(y);
        cPt = cPt.matrixTransform(imat);
        return cPt;
    }
   
    private void moveElement(Element ee, float x, float y) {
    if(ee.getNodeName() == "circle") {
    ee.setAttribute("cx", x - startPt.getX() + startX + "");
    ee.setAttribute("cy", y - startPt.getY() + startY + "");
    }
    else {
    ee.setAttribute("x", x - startPt.getX() + startX + "");
    ee.setAttribute("y", y - startPt.getY() + startY + "");
    System.out.println();
    }
    }

 « Return to Thread: a few questions..