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文件的路径[关闭]的主要内容,如果未能解决你的问题,请参考以下文章