-
-
Notifications
You must be signed in to change notification settings - Fork 17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PShape.getVertexCount() always outputs 0 #896
Comments
@dtplsongithub , can you check if your shape is a group shape? I just tested this on the Processing example "LoadDisplayOBJ", which shows a rotating rocket. The vertex count was zero but I could use the below code to get the vertices for the object's children: rocket = loadShape("rocket.obj");
println(rocket.getVertexCount());
int count = 0;
for (PShape shape : rocket.getChildren()) {
count += shape.getVertexCount();
}
println(count); The output is: 0
1101 I would argue that a call to |
the code you provided me works, i guess i was using the method wrong... |
No, I think the code you originally wrote should work. Let's keep this open so we can use this as an opportunity to improve Processing. It would likely be an easy PR, so I'll add some tags so a first-time contributor can fix it. |
And @dtplsongithub , if you, or anyone else reading this would like some help working through the PR, I'm available to assist! |
Adding a warning message, that groups are ignored in the count would also be helpful. Maybe even a |
@hx2A For 2D shapes the best approach would be follow the model described by Well-known text representation for geometries. |
Well, much of PShape isn't that accessible. It's very much a custom data structure that has evolved over time to work well with Processing. Overhauling PShape would probably need to wait for #881 as PShapeOpenGL is fairly complex and nobody should touch it if it is going to go away eventually. I like the idea of using WKT for 2D geometry. There is a Java library called JTS that Processing could incorporate or at least learn from, and I believe it uses WKT. This library is closely related to GEOS, which is used by the Python library shapely. |
It was within JTS that I came across that format! |
Hmmm, if PShape was more closely aligned with JTS, there are a lot of nice computational geometry features we could add to Processing. |
Hi @hx2A , I want to fix this bug ,how should i approach this problem ? Any insights or suggestions on where to start would be really helpful! |
Hi @inteqam and thanks for your interest in contributing to Processing 💙 Here are a few things you can do to get started:
@hx2A suggested:
How would you go about this? Once you've done this, feel free to ask if you have specific questions. We're happy to help! |
Hi @inteqam ! Thank you for your interest in pursing this bug. I've been swamped and can't reply to things as quickly. The basic problem with You might need to test and implement this fix in more than one place. The OpenGL renderers I suggest that after you get the development environment working, as @SableRaf suggested, you build a few test Sketches to verify and explore the problem. Then you can start fiddling with the code to understand how it works and explore solutions. |
Thanks @hx2A and @SableRaf for taking the time to explain! After reproducing this issue I have traced the code for each classes and I found After Updating I have tested Is there anything important I should consider or might have missed? For now, I'm adding it to the PR. |
Sorry for interruption, but I am afraid that some people may expect void disturbShape(PShape shape, float amp) {
int vcount = shape.getVertexCount();
PVector vec = new PVector();
for(int i = 0; i < vcount; ++i) {
shape.getVertex(i, vec);
vec.x += randomGaussian() * amp;
vec.y += randomGaussian() * amp;
vec.z += randomGaussian() * amp;
shape.setVertex(i, vec);
}
} Also, be aware that the meaning of "vertices" changes in the "Tessellation Update Mode"; see my comments in #902. |
I would rather suggest implementing the feature of counting all the vertices as a new function, e.g. as |
@Junology , this is an excellent point. A common use case of
I do like this suggestion. We can add a new method that recurses through the PShape's children to get the total number of vertices in the shape. @SableRaf and @Stefterv , what is the process for proposing new methods? Do you think it is worth it in this case? |
I agree that it should not be changing existing functionality, especially regarding the use case @Junology provided. I wonder if we can instead add an extra optional parameter to the function, e.g. |
Thanks everyone for your thoughtfulness 😃 Overall, I think the solution proposed by @Stefterv makes the most sense for its simplicity, and discoverability of the feature. Bonus points for requiring only minor changes to @inteqam's existing PR 😉 @hx2A Thanks for your question. I don’t think we have a strict process for adding functions, methods, or classes to the API. It’s mostly based on discussion and community consensus. Backwards compatibility is a big priority, so anything that breaks or changes existing functionality would need more justification. We also try to keep the core small and maintainable, so small, local changes are easier to approve than larger ones, or even small ones that have a broader impact on functionality. |
Excellent idea, @Stefterv ! That's perfect!
I do like these discussions and taking the time to think through changes. It's so important for the long term success of the library. |
Most appropriate sub-area of Processing 4?
Core/Environment/Rendering
Processing version
4.3.1
Operating system
Windows 11 (24H2)
Steps to reproduce this
PShape.getVertexCount()
always seems to output 0. (tried 1 .svg file and 4 .obj files, even included the .mtl files)snippet
Additional context
No response
The text was updated successfully, but these errors were encountered: