以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 SVG/GML/VRML/X3D/XAML 』  (http://bbs.xml.org.cn/list.asp?boardid=21)
----  为什么用USE 后就不能全部显示内容?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=21&rootid=&id=38959)


--  作者:collar_lu
--  发布时间:10/16/2006 1:26:00 PM

--  为什么用USE 后就不能全部显示内容?
我定义了一个SYMBOL 然后在后面USE里调用,由于SYMBOL中的一些图元坐标超出正常视图范围,所以,USE时就不能显示出超出的那部分。

但不用SYMBOL 和 USE 直接绘制,通过鼠标拖动图形,还是能看到图形的全貌的。

如下:

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" version="1.1"  
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<symbol id="two">
 <g transform ="scale(1, -1)" >
<circle fill="none" cx="1" cy="14" stroke="black" r="15" />
<circle fill="none" cx="-15" cy="0" stroke="black" r="15" />
<circle fill="none" cx="16" cy="0" stroke="black" r="19" />
<circle fill="none" cx="0" cy="-16" stroke="black" r="15" />
<line stroke="black" y1="30" x1="0" y2="14" x2="0" />
<line stroke="black" y1="14" x1="0" y2="10" x2="-4" />
<line stroke="black" y1="14" x1="0" y2="10" x2="4" />
<line stroke="black" y1="0" x1="-30" y2="0" x2="-12" />
<line stroke="black" y1="0" x1="-12" y2="4" x2="-8" />
<line stroke="black" y1="0" x1="-12" y2="-4" x2="-8" />
<line stroke="black" y1="-30" x1="0" y2="-12" x2="0" />
<line stroke="black" y1="-12" x1="0" y2="-8" x2="4" />
<line stroke="black" y1="-12" x1="0" y2="-8" x2="-4" />
<line stroke="black" y1="4" x1="12" y2="-6" x2="12" />
<line stroke="black" y1="4" x1="12" y2="0" x2="16" />
<line stroke="black" y1="-6" x1="12" y2="-4" x2="16" />
<line stroke="black" y1="30" x1="0" y2="40" x2="0" />
</g>
</symbol>
</def>
<use x="0" y="0" width="600" height="600" xlink:href="#two" />
</svg>


注意,只要把上面的SYMBOL 和 USE 去掉,直接绘制是没问题,只不过有部分绘制内容要通过鼠标拖动才能看见。


--  作者:collar_lu
--  发布时间:10/16/2006 3:19:00 PM

--  
怎么没人回答?举个简单的例子

<?xml version="1.0" encoding="UTF-8"?>
<svg width="100%" version="1.2" xmlns="http://www.w3.org/2000/svg" height="100%" baseProfile="tiny" >
<symbol id="two">
<circle fill="red" cx="100" cy="100" stroke="black" r="100" />
</symbol>
<use x="0" y="0" width="600" height="600" xlink:href="#two" />
</svg>

能完美的显示出来,但如果把 CX CY都改成 “-10”, 则只显示一个圆的四分之一,即使用鼠标拖动也只有四分之一。


--  作者:vachin
--  发布时间:10/18/2006 3:21:00 PM

--  
在symbol节点加入overflow="visible"
--  作者:collar_lu
--  发布时间:10/18/2006 4:43:00 PM

--  
谢谢,我还有个问题:
由于我现在在做一个图形转换器(将自定义格式文件转换成SVG文件),该自定义文件中的坐标的原点是在“左下角”, 而转换后浏览器的坐标是默认的“左上角”,于是,我在每个G元素上加上transform="scale(1,-1)"(用来将Y轴翻转朝上),可是带来的问题是,画出来的图形形状是对的,但坐标偏离了,有的偏到了视图范围之外,有什么办法解决吗?

我试着使用tanslate,但这个要给每个G 元素指定tanslate的参数,很麻烦,有什么好的办法吗?
就是让不在IE浏览器视图范围之内的图形全部显示出来,有好办法吗?


--  作者:vachin
--  发布时间:10/19/2006 9:59:00 AM

--  
<?xml version="1.0" encoding="UTF-8"?>
<svg>
<g transform="translate(100,100),scale(1,-1)">
<rect transform="scale(1,-1)" x="20" y="20" width="100" height="60" fill="red"/>
<circle transform="translate(20,-80)" cx="50" cy="80" r="20" fill="blue">
<g>
</svg>

对g元素使用transform,translate的值为(图高度,0)


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
78.125ms