SVG文件的路径[关闭]

Posted

技术标签:

【中文标题】SVG文件的路径[关闭]【英文标题】:Path of an SVG file [closed] 【发布时间】:2020-11-03 14:01:43 【问题描述】:

如何获取路径内的属性并编辑任何特定属性。例如,如果我想为任何选定的 id 更改该路径的颜色。我如何在处理中为此编写代码。如果可能,请提供一个例子。我尝试使用 getChildren() 但不确定我是否做得对。 这就是我试图做的事情

void setup() 
  size(1000, 800);
  background(255);
  noLoop();

  //loading the map and the csv file
  baseMap=loadShape("nepalmap.svg");
  ArrayList<String> names = new ArrayList();
  for (PShape ps : baseMap.getChildren())  //get pshape from themap
    names.add(ps.getName());
  
  
  location=loadTable("location.csv", "header");
  for (TableRow row : location.rows()) 
    String id = row.getString("district");
    float[] latlon = new float[2];
    latlon[0]=row.getFloat("Latitude"); 
    latlon[1]=row.getFloat("Longitude");
    PShape shape = baseMap.findChild(id);
    if (shape == null) 

      
       println("Unfound: " + id );

我需要能够使用地区名称获取路径。我将举例说明其中一个区域的路径是什么样的,以便更好地理解。找到地区后,我需要更改我想要的地区的颜色。

链接到 SVG 文件 https://1drv.ms/u/s!ArCqZlwbF3LRbomDBoJu3Qt0_hA?e=F5GAY1

谢谢

【问题讨论】:

您可能想在问题中添加您尝试过的任何内容、得到的任何回复、任何错误等。 我尝试使用 getChild 但我不确定如何使用它,所以我只需要一些想法来开始编码。我还没有说要编程。 请向我们提供您迄今为止尝试过的任何内容。尝试考虑一个更广泛的 svg 示例,以便其他人能够理解您的问题并开始考虑解决方案。 您使用的是哪个库? baseMap的类型是什么? @Lelouch 你也应该发布 nepalmap.svg 来说明层次结构。 【参考方案1】:

根据您的代码,假设每个区都是根 SVG 节点的直接子节点。对于您的 SVG,这可能是真的,也可能不是。

如果您不确定可以使用findChild() 代替getChild()。 不同之处在于 findChild 将遍历 SVG 层次结构,直到找到该名称的子项(如果存在)。

注意您有两个数据源:SVG 和 CSV。 确保两者使用相同的名称(密钥敏感)。如果他们与您不匹配 findChild() 可能会返回 null (顺便说一句,“未找到”检查做得很好!)

一旦您引用了 PShape 区域,您可以尝试调用 setFill()disableStyle(),这将禁用 SVG 样式并使用您在处理中设置的最新填充/描边属性。

【讨论】:

我还有最后一个问题。是否可以在 Pshape 区添加鼠标按下。例如:如果我点击那个地区,它会在画布的某处显示我想要的数据。 @Lelouch 它不是内置的,但可以使用现有的 PShape 功能编写该功能。请发布另一个问题:它会让其他人更容易找到它以及解决方案。如果此答案有用,请投票/将其标记为解决方案:)(请务必通过tour 并在您在那里时获得徽章:)) @Lelouch 查看mouseClicked() 和PShape 的contains(x,y)(注意它是什么形状类型,(参见getKind()/getFamily())它是为了能够得到有用的结果)

以上是关于SVG文件的路径[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

SVG路径上的D3.js通配符选择[关闭]

未关闭的 SVG 路径似乎已关闭

将 PDF 转换为干净的 SVG? [关闭]

相交 svg 闭合路径

从 SVG 文件中提取路径的坐标

如何一次滚动绘制每个 SVG 路径(按时间顺序)?