processing / processing/processing4

PShape does not provide getters for rectMode / ellipseMode

Open
#1,359 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
Java
Stars
494
Forks
183
Avg merge
4h 39m
Merged PRs (30d)
3

Description

Most relevant area for this enhancement?

Core/Environment/Rendering

Feature to enhance

The PShape class

Enhancement details
Enhancement description

I was half way developing some classes to convert between PShapes and OPENRNDR Shapes but got stuck.

When dealing with PShape.PRIMITIVE types, PShape.getKind() returns what kind of shape is it (rect, ellipse, ...) and the PShape.getParams() returns an array of float values (x, y, width...) One needs to know the kind to know what the float values mean. But it's not sufficient, because if one called ellipseMode before, the values may mean center x and y, or corner x and y, either width or radius.

I didn't find a way to query ellipseMode or rectMode.

Benefits

Adding a way to query this information would help cross framework use of the PShape data structures.

Challenges

I think adding two getters to PShape shouldn't have any negative impact, but I'm not very familiar with the code base to be sure.

Additional context

Here a wip function where I try to convert an ELLIPSE PShape to an OPENRNDR Shape. This is incomplete, because the meaning of params 0, 1, 2 and 3 depend on the ellipseMode used, and there's no way to figure this out (I think).

        PShape.PRIMITIVE -> {
            listOf( // 101
                when (kind) {
                    PShape.RECT -> Rectangle( // 30
                        params[0] * 1.0, params[1] * 1.0,
                        params[2] * 1.0, params[3] * 1.0
                    ).contour

                    PShape.ELLIPSE -> Ellipse( // 31
                        params[0] * 1.0, params[1] * 1.0,
                        params[2] * 0.5, params[3] * 0.5
                    ).contour

                    PShape.LINE -> LineSegment(
                        params[0] * 1.0, params[1] * 1.0,
                        params[2] * 1.0, params[3] * 1.0
                    ).contour

                    // ARC, TRIANGLE, QUAD, SPHERE, BOX
                    else -> error("unsupported primitive kind: $kind")
                }
            )

PShape holds ellipseMode and rectMode variables, but they are protected and without getters.

Would you like to help implement this enhancement?

I’m not sure yet

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in the PShape class and inspect the protected ellipseMode and rectMode fields alongside its existing public API. Add a way for callers to query both modes, then verify that primitive-shape conversion code can distinguish the meanings of the parameters for each mode.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
computer-graphics
Issue type
Feature
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.