--- a/svghmi/gen_index_xhtml.xslt Fri Feb 28 16:09:21 2020 +0100
+++ b/svghmi/gen_index_xhtml.xslt Fri Feb 28 17:52:35 2020 +0100
@@ -75,7 +75,10 @@
<xsl:when test="$d0 and not($d1)">
<func:result select="2"/>
- <xsl:when test="$d0 = $d1 and $b0 < $a1">
+ <xsl:when test="$d0 and $d1 and $a0 < $b1"> + <func:result select="1"/> + <xsl:when test="not($d0) and not($d1) and $b0 < $a1"> <func:result select="1"/>
@@ -89,7 +92,7 @@
<xsl:variable name="x_intersect" select="func:intersect_1d($a/@x, $a/@x+$a/@w, $b/@x, $b/@x+$b/@w)"/>
<xsl:when test="$x_intersect != 0">
- <xsl:variable name="y_intersect" select="func:intersect_1d($a/@y, $a/@y+$a/@w, $b/@y, $b/@y+$b/@w)"/>
+ <xsl:variable name="y_intersect" select="func:intersect_1d($a/@y, $a/@y+$a/@h, $b/@y, $b/@y+$b/@h)"/> <func:result select="$x_intersect * $y_intersect"/>
@@ -100,7 +103,8 @@
<func:function name="func:overlapping_geometry">
<xsl:variable name="g" select="$geometry[@Id = $elt/@id]"/>
- <func:result select="$geometry[@Id != $elt/@id and func:intersect(., $g) = 4]"/>
+ <xsl:variable name="candidates" select="$geometry[@Id != $elt/@id]"/> + <func:result select="$candidates[func:intersect($g, .) = 9]"/> <func:function name="func:sumarized_elements">
<xsl:param name="elements"/>
--- a/svghmi/gen_index_xhtml.ysl2 Fri Feb 28 16:09:21 2020 +0100
+++ b/svghmi/gen_index_xhtml.ysl2 Fri Feb 28 17:52:35 2020 +0100
@@ -78,6 +78,7 @@
const "descend", "$elems/descendant-or-self::svg:*";
const "clones", "$descend[self::svg:use]";
+ // TODO optimize using Xpath' id() const "originals", "//svg:*[concat('#',@id) = $clones/@xlink:href]";
@@ -98,16 +99,89 @@
const "d1", "$a1 >= $b1";
- result "3"; /* a included in b */
- result "2"; /* b included in a */
- when "$d0 = $d1 and $b0 < $a1"
- result "1"; /* a and b are overlapped */
+ when "$d0 and $d1 and $a0 < $b1" + // a and b are overlapped + when "not($d0) and not($d1) and $b0 < $a1" + // a and b are overlapped result "0"; /* no intersection*/
+ // 4 - a contained in b + // 9 - b contained in a @@ -116,20 +190,26 @@
when "$x_intersect != 0"{
- const "y_intersect", "func:intersect_1d($a/@y, $a/@y+$a/@w, $b/@y, $b/@y+$b/@w)";
+ const "y_intersect", "func:intersect_1d($a/@y, $a/@y+$a/@h, $b/@y, $b/@y+$b/@h)"; result "$x_intersect * $y_intersect";
- // return overlapping geometry a given element
+ // return overlapping geometry for a given element + // all intersercting element are returned + // except groups, that must be contained to be counted in def "func:overlapping_geometry" {
- /* only included groups are returned */
- /* all other elemenst are returne when overlapping*/
const "g", "$geometry[@Id = $elt/@id]";
- result """$geometry[@Id != $elt/@id and func:intersect(., $g) = 4]""";
+ const "candidates", "$geometry[@Id != $elt/@id]"; + result "$candidates[func:intersect($g, .) = 9]"; + const "groups", "$candidates[@Id = //svg:g/@id]"; + const "graphic", "$candidates[@Id != $groups/@Id]"; + result "$groups[func:intersect($g, .) = 9] | $graphic[func:intersect($g, .) > 0]"; def "func:sumarized_elements" {