You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+23-20Lines changed: 23 additions & 20 deletions
Original file line number
Diff line number
Diff line change
@@ -77,35 +77,37 @@ keeps a *private* global dictionary of all `WorldObject` instances and users are
77
77
This is due to garbage collection. This may be quite complicated for beginners, for more details see this PR: https://github.com/fastplotlib/fastplotlib/pull/160 .
78
78
If you are curious or have more questions on garbage collection in fastplotlib you're welcome to post an issue :D.
79
79
80
-
#### Graphic Features
80
+
#### Graphic properties
81
81
82
-
There is one important thing that `fastplotlib` uses which we call "graphic features".
82
+
Graphic properties are all evented, and internally we called these "graphic features". They are the various
83
+
aspects of a graphic that the user can change.
83
84
The "graphic features" subpackage can be found at `fastplotlib/graphics/_features`. As we can see this
84
-
is a private subpackage and never meant to be accessible to users. In `fastplotlib` "graphic features" are the various
85
-
aspects of a graphic that the user can change. Users can also run callbacks whenever a graphic feature changes.
85
+
is a private subpackage and never meant to be accessible to users..
86
86
87
87
##### LineGraphic
88
88
89
89
For example let's look at `LineGraphic` in `fastplotlib/graphics/line.py`. Every graphic has a class variable called
90
-
`feature_events` which is a set of all graphic features. It has the following graphic features: "data", "colors", "cmap", "thickness", "present".
90
+
`_features` which is a set of all graphic properties that are evented. It has the following evented properties:
91
+
`"data", "colors", "cmap", "thickness"` in addition to properties common to all graphics, such as `"name", "offset", "rotation", and "visible"`
91
92
92
-
Now look at the constructor for `LineGraphic`, it first creates an instance of `PointsDataFeature`. This is basically a
93
-
class that wraps the positions buffer, the vertex positions that define the line, and provides additional useful functionality.
94
-
For example, every time that the `data` is changed event handlers will be called (if any event handlers are registered).
93
+
Now look at the constructor for the `LineGraphic` base class `PositionsGraphic`, it first creates an instance of `VertexPositions`.
94
+
This is a class that manages vertex positions buffer. It defines the line, and provides additional useful functionality.
95
+
For example, every time that the `data` is changed, the new data will be marked for upload to the GPU before the next draw.
96
+
In addition, event handlers will be called if any event handlers are registered.
95
97
96
-
`ColorFeature`behaves similarly, but it can perform additional parsing that can create the colors buffer from different forms of user input. For example if a user runs:
97
-
`line_graphic.colors = "blue"`, then `ColorFeature.__setitem__()` will create a buffer that corresponds to what `pygfx.Color` thinks is "blue".
98
-
Users can also take advantage of fancy indexing, ex: `line_graphics.colors[bool_array] = "red"`:smile:
98
+
`VertexColors`behaves similarly, but it can perform additional parsing that can create the colors buffer from different
99
+
forms of user input. For example if a user runs: `line_graphic.colors = "blue"`, then `VertexColors.__setitem__()` will
100
+
create a buffer that corresponds to what `pygfx.Color` thinks is "blue". Users can also take advantage of fancy indexing,
0 commit comments