【问题标题】:Path of an SVG file [closed]SVG文件的路径[关闭]
【发布时间】: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 来说明层次结构。

标签: java svg processing


【解决方案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())它是为了能够得到有用的结果)
猜你喜欢
  • 2012-07-16
  • 2012-04-30
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 1970-01-01
  • 2020-04-18
相关资源
最近更新 更多