Yes, thank you very much. I overcame the problem.
Pepping, Florian wrote:
Hi Nazar,
well on first look, everythings ok. I used your SVG in my program
and got all Bounding-Boxes as I'm used to.
Two things: First of all, you only operate on elements containing an
"activity-label"-attribute An second try to call your visit-function
with the root-Node of your SVGDocument.
visit((Node) doc.getRootElement(), 0);
Perhaps that helps
Florian
------------------------------------------------------------------------
*From:* Nazar Stasiv (Lohika, Inc) [mailto:[EMAIL PROTECTED]
*Sent:* Tuesday, August 15, 2006 2:10 PM
*To:* [email protected]
*Subject:* Re: SVGOMGElement and coordinates?
Florian see my comments inline
Pepping, Florian wrote:
Hi Nazar,
yes, simply attach the SVG-File as a normal attachment. We will see
it in the Mailing-List then.
Attached diagram.zip archive which contains svg resource
Is it possible that's something wrong with your recursion through the
DOM-Tree, because it's only the root-node that has a Bounding Box?!
Do you operate the other nodes?
well the recursion is pretty basic. Here is how I do it
public static SVGDocument installScript(SVGDocument doc,
Collection<String> labels) {
// add to dom tree element with id=background to use it in
draggable
// functions
Element parent = doc.createElement("g");
parent.setAttribute("id", "background");
Element svg = doc.getRootElement();
NodeList children = svg.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node n = children.item(i);
svg.removeChild(n);
parent.appendChild(n);
}
svg.appendChild(parent);
// Append script element with reference to library file
Element sc = doc.createElementNS(svgns, "script");
sc.setAttributeNS(svgns, "language", "text/ecmascript");
sc.setAttributeNS(xlinkns, "href", "svg-common.js");
doc.getDocumentElement().appendChild(sc);
// add onload attribute to svg element
NodeList list = doc.getElementsByTagNameNS(null, "svg");
Element svgNode = (Element) list.item(0);
svgNode.setAttributeNS(svgns, "onload", "init(evt);");
// Append array of activities to be highlighted
Element data = doc.createElementNS(svgns, "script");
data.setAttributeNS(svgns, "language", "text/ecmascript");
StringBuilder sb = new StringBuilder();
sb.append("var labels = [ ");
for (String label : labels) {
sb.append("'");
sb.append(label);
sb.append("',");
}
sb.replace(sb.length() - 1, sb.length(), "];");
CDATASection cdata = doc.createCDATASection(sb.toString());
data.appendChild(cdata);
doc.getDocumentElement().appendChild(data);
* // HERE I START WALKING THE DOM TREE*
visit(doc, 0);
return doc;
}
public static void visit(Node node, int level) {
// Process node
if (node instanceof Element) {
Element e = (Element) node;
if (e.hasAttributeNS("http://www.example.com/bpms",
"activity-label")) {
// I love painting in red
String style = e.getAttribute("style");
Pattern pattern = Pattern.compile("fill:([a-zA-Z])*;");
Matcher m = pattern.matcher(style);
e.setAttribute("style", m.replaceAll("fill:red;"));
if (e instanceof SVGLocatable) {
SVGLocatable l = (SVGLocatable) node;
if (svgTagSet.contains(node.getNodeName())) {
SVGRect r = l.getBBox();
try {
float x = r.getX();
float y = r.getY();
// setting onclick attribute is only for
testing here
e.setAttribute("onclick",
"drawMarker(evt,'sampletext','" +
x + "','" + y
+ "');");
} catch(Exception e ){
e.printStackTrace();
}
}
}
}
}
// If there are any children, visit each one
NodeList list = node.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
// Get child node
Node childNode = list.item(i);
// Visit child node
visit(childNode, level + 1);
}
}
Greets Florian
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]