【问题标题】:SVG: paths inside a polygonSVG:多边形内的路径
【发布时间】:2022-01-20 18:04:33
【问题描述】:

我有一个形状的 SVG,定义为多边形。多边形是否可以包含另一个 SVG?

<polygon class="st6" points="" fill="#7A5852" stroke="#000" stroke-width="1">

<path style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 1.929352,294.56951 c 1.2122153,-1.12193 2.2223419,-0.25968 2.4054258,0.43431" id="path1400" />

</polygon>

上面多边形内部的路径不渲染。

谢谢

更新:这是浏览器的完整组装输出。它在 IE 中显示为带有黑色边框的棕色十六进制,但元素之后的路径不会呈现静止。我还是做错了:)

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 2410 1192" style="enable-background:new 0 0 2410 1192;" xml:space="preserve">
<g id="NEW" class="st5">
<polygon class="st5" points="247.8,37.9 223.8,37.9 211.7,58.9 223.8,79.9 247.8,79.9 259.8,58.9" fill="#7A5852" stroke="#000" stroke-width="1"/>

    <path style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 1.929352,294.56951 c 1.2122153,-1.12193 2.2223419,-0.25968 2.4054258,0.43431"/>    
    <path style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 0.19209997,295.56342 c 1.15764233,-1.7538 2.25748843,-1.04164 3.34922123,0.0167"/>
    <path style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 0.7349912,293.93474 c 0.9089636,-1.1574 1.6844633,-0.98694 2.372017,0.0585" />
    
</g></svg>

看起来路径上的“d”属性不在其中,因此它在其他地方渲染了山丘……需要找出如何让这些数字自动排列,可以将它们分组还是建立它们的东西要渲染的区域?

最终更新: 好的,我一直在跟进上面堆叠元素的想法。我遇到的问题是我的路径是与我的多边形分开制作的。不了解点和路径“d”属性会导致混乱。这是一个尝试有一个空白的六边形(多边形),里面有变化的图标(路径),但是,它们从来没有排成一行。相反,我将它们合并到inkscape(svg编辑器)中,然后将生成的3行(十六进制和图标更正)现在一起使用......这样点和其他值都对齐。在我看来,这并不是完全最优的,但这确实有效,而且不是非常笨重。

if($land_rand  == 1){
    //Mountains
  
}elseif($land_rand  >= 2 AND $land_rand  <= 3){
    //Hills
    echo "<polygon class='st5' points='{$points}' fill='#7a5852' 
    stroke='#000000' stroke-width='1'/>";
    echo "<path style='fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.17463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' 
    d='m 234.07215,60.015884 c 8.88334,-10.342263 16.28579,-2.393802 17.62744,4.003591'/>";
    echo "<path style='fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.17463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' 
    d='m 221.34114,69.178024 c 8.48351,-16.167017 16.54337,-9.602128 24.54388,0.153945'/>";
    echo "<path style='fill:none;stroke:#000000;stroke-width:2.17463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' 
    d='m 225.31963,54.164398 c 6.66105,-10.669236 12.34408,-9.097888 17.3826,0.539269' />";            
}else{
    //Blank Land
    echo "<polygon class='st5' points='{$points}' fill='#7a5852' 
    stroke='#000000' stroke-width='1'/>";
    echo "<path style='fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.17463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' 
    d='m 234.07215,60.015884 c 8.88334,-10.342263 16.28579,-2.393802 17.62744,4.003591'/>";
    echo "<path style='fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.17463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' 
    d='m 221.34114,69.178024 c 8.48351,-16.167017 16.54337,-9.602128 24.54388,0.153945'/>";
    echo "<path style='fill:none;stroke:#000000;stroke-width:2.17463px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1' 
    d='m 225.31963,54.164398 c 6.66105,-10.669236 12.34408,-9.097888 17.3826,0.539269' />";
}

【问题讨论】:

  • 不,形状不能包含其他形状。您希望在这里实现什么目标?
  • 多边形是一个十六进制,我希望在十六进制多边形内添加图标(我也有自己的 svgs)......所以这可能是一个代表土地的十六进制,并且在十六进制将是...例如山图标...
  • 听起来您想创建一个模式并将其应用于多边形。或者,也可以先画一个大多边形,然后在上面画一些较小的东西作为兄弟。

标签: svg vector polygon


【解决方案1】:

正如罗伯特所说。只需将一件事画在另一件事上。 SVG 文档中较晚的元素绘制在文档中较早的元素之后(以此类推)。

svg {
  width: 100px;
  background-color: linen;
}
<svg viewBox="1 293 4 4" width="100">

  <polygon class="st6" points="3,293, 5,294, 5,296, 3,297, 1,296, 1,294" fill="#7A5852" stroke="#000" stroke-width="0.1"/>

  <path style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 1.929352,294.56951 c 1.2122153,-1.12193 2.2223419,-0.25968 2.4054258,0.43431" id="path1400" />

</svg>

【讨论】:

  • 由于点与路径的“d”属性不同,路径不在上述多边形中...需要路径以某种方式位于多边形的中间。跨度>
  • 好的,我一直在跟进上面堆叠元素的想法。我遇到的问题是我的路径是与我的多边形分开制作的。不了解点和路径“d”属性会导致混乱。
  • @DavidWhite 多边形只是我制作的一个大致六边形,并且比路径大。
猜你喜欢
  • 2019-12-09
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2016-10-23
  • 2018-12-16
  • 2013-04-21
相关资源
最近更新 更多