-
Notifications
You must be signed in to change notification settings - Fork 43
Clarify restrictions on fill patterns. #3789
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
base: master
Are you sure you want to change the base?
Conversation
maltelenz
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are libraries out there that use this, and it is clearly useful, so removing this feature is not reasonable.
Example usage of HorizontalCylinder on a Polygon:
model Package
annotation(
Icon(
coordinateSystem(extent = {{-100, -100}, {100, 100}}, grid = {10, 10}),
graphics = {
Polygon(origin = {0.248, 0.044}, lineColor = {56, 56, 56}, fillColor = {128, 202, 255}, fillPattern = FillPattern.Solid, points = {{99.752, 100}, {99.752, 59.956}, {99.752, -50}, {100, -100}, {49.752, -100}, {-19.752, -100.044}, {-100.248, -100}, {-100.248, -50}, {-90.248, 29.956}, {-90.248, 79.956}, {-40.248, 79.956}, {-20.138, 79.813}, {-0.248, 79.956}, {19.752, 99.956}, {39.752, 99.956}, {59.752, 99.956}}, smooth = Smooth.Bezier),
Polygon(origin = {0, -13.079}, lineColor = {192, 192, 192}, fillColor = {255, 255, 255}, pattern = LinePattern.None, fillPattern = FillPattern.HorizontalCylinder, points = {{100, -86.921}, {50, -86.921}, {-50, -86.921}, {-100, -86.921}, {-100, -36.921}, {-100, 53.079}, {-100, 103.079}, {-50, 103.079}, {0, 103.079}, {20, 83.079}, {50, 83.079}, {100, 83.079}, {100, 33.079}, {100, -36.921}}, smooth = Smooth.Bezier),
Polygon(origin = {0, -10.704}, lineColor = {113, 113, 113}, fillColor = {255, 255, 255}, points = {{100, -89.296}, {50, -89.296}, {-50, -89.296}, {-100, -89.296}, {-100, -39.296}, {-100, 50.704}, {-100, 100.704}, {-50, 100.704}, {0, 100.704}, {20, 80.704}, {50, 80.704}, {100, 80.704}, {100, 30.704}, {100, -39.296}}, smooth = Smooth.Bezier)
}
)
);
end Package;
|
The best way to proceed might then be to let the tools that have implemented this describe what they do, so that we can see if the implementations have something in common that we can agree upon? |
|
We have libraries using these fill patterns on polygons. Why would we restrict/remove something that clearly is useful? |
Ok, making a table based on what I assume:
It seems that the only potentially missing feature is spherical gradient for polygons, and it shouldn't be that difficult to support. |
|
System Modeler also supports sphere fills on Polygons. |
|
For sphere fill on polygons, System Modeler does: |
|
Just wondering, but wouldn't it make sense if the center and radius of the If the center is defined so that it transforms naturally with the shape, it is natural to define the radius as the distance from the center to the controlling point furtherest away (simpler math compared to the distance to the point furtherest away on the curve delimiting the shape). One simple definition of the center is to use the origin in the local coordinates of the shape. This also has the advantage that the user can select where to put the center. Another option is to define the center as the center of mass of the polygon with vertices at the controlling points (simpler math compared to the center of mass of the curve delimiting the shape). For @d-hedberg's example of an equilateral triangle in #3789 (comment), this would result in the same color at all three corners of the triangle, no matter how it is rotated. |
|
Please don't take #3789 (comment) as a concrete proposal; it has several drawbacks:
One thing that I believe might help us reach agreement would be to introduce a However, when thinking more about how to define the "gradient length", I realized that it wasn't clear to me how Interpretations:
|
Yes, sphere-gradient and non-circles (including ellipses) is a problem. I say that "A", i.e., sphere-gradient on a circle stretched to make it an ellipse is the most intuitive - but I have no idea how to easily generalize it to polygons. |
|
If we are not sure exactly what to do, it might also help to take a look at SVG. A Modelica
(SVG makes the interpretation A in #3789 (comment).) |
I would say that you need something equivalent to an ellipse to define the gradient, and then you can clip it to any desired shape. For a However, note that even if defining a default for the specification is a nasty problem, making the Edit: Note that in comparison to SVG, SVG has a generic |
Do you also have an easy way to find applications of |
|
Looking more I realize that there are two additional issues with gradients, with relevant icons in MSL:
|
Yes. First I thought you had implemented the generalization to draw rays with a color gradient, each ray starting at the center and ending at the periphery, but then I saw the lighter "X" pattern which proved me wrong. |
Sounds very reasonable to me. |
|
Can you made an example model of all cases which other tools can load and show how they render patterns. This is how OpenModelica renders the example given here #3789 (review) For
For
|
|
This is more or less the model I used in #3789 (comment): |
This one gives,
|
Dymola 2026x generates the following (which I like):
|
I zoomed in, and it is not an optical illusion; the level curves of equal color are bent near the left end of the cylinder. Makes you wonder what is going on behind that gray connector… Any similar effects on a rectangle without rounded corners? |
There shouldn't be. I know what could cause it specifically for rounded corners, but didn't investigate it enough. |
|
With so much variation between tools in the looks of these gradients, maybe we better just conclude that the specification failed pretty badly this time by introducing all these underspecified ways of filling shapes. Instead of seeking agreement about how extend and clarify the specification, isn't it better that we make a plan to deprecate all these underspecified fills, and instead spend our efforts on strengthening the support for SVG? For example, these are all things that would seem more worthwhile standardizing:
|
Co-authored-by: Henrik Tidefelt <henrikt@wolfram.com>
|
I have tried to reformulate based on this, but without introducing "band". |
Sure, that seems workable. |
Co-authored-by: Henrik Tidefelt <henrikt@wolfram.com>
henrikt-ma
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now this looks very reasonable to me, but I'd like to leave it to others working closer to the graphical user interfaces to provide approving reviews.
|
Sounds good to me, but wouldn't it make sense to include some visual examples complementing the text? It would decrease the risk of different (mis)interpretations of the text. |
I can promise to provide one or two examples with tool-independent scalable vector graphics, but it would be most convenient for me to do this in a separate pull request initiated by me. With this promise, I suggest that we accept the present PR without examples. |
Here they are (but I made them three figures start with): #3802 |
Co-authored-by: Henrik Tidefelt <henrikt@wolfram.com>
|
Regarding @HansOlsson's comment, I wouldn't find this PR a satisfactory fix for #1826 if didn't clarify how to draw the combination of |
|
In case there are concerns regarding the implementation effort for the current proposal, I have some notes and observations to share:
About the minimal area ellipse enclosing a
|
I still think the current state of the proposal is still a major step forward, and the intent wasn't to leave it unspecified - but only to leave room for different gradients for the time being, and for rectangle with spherical gradient allow both: Basically it specifies how to handle rotations, which color is at the center (point or line) and border (and defines how to compute the border), and the obvious symmetry for horizontal/vertical, but doesn't specify the exact details of the gradient (see also the discussion about conical vs spherical in #1826 ). |
That looks ok-ish. Compared to HorizontalCylinder it goes to dark also at the outer edge of the wheel; so it more a balloon tire where that part is in shadow than a more usual cylindrical car tire with a sharp shadow. That is consistent with the polygon-outline that is rounded at the top. |
A big problem with this would be that the only supported way of getting somewhat predictable results for a rectangle would be to use |
I can understand the general idea, but:
|
I am not saying it is a great-looking wheel, I am just showing what the current proposal would mean for this icon in its current state. In order to work on the looks – if anyone would feel the urge – a first step must be to improve the specification so that the icon designer at least can have a rough idea of what to expect when using different combinations of shapes and fills. |
And I was just analyzing the look to confirm that it actually makes a bit of sense (even if not "great"); and not just an accident. |
|
Language group: Seems ok - shouldn't over-specify. SimulationX has somewhat similar gradient for wheel. |











Closes #1826