Concatenating transforms to scale positions but not objects
Michael Paus
mp at jugs.org
Sat Aug 10 23:41:39 UTC 2019
Nir is right here but if you could ask your question on StackOverflow
I'd be willing to comment on it because I was facing a very similar
problem in my projects and I might provide some ideas.
Am 11.08.19 um 01:25 schrieb Nir Lisker:
> I think that this is a better question for StackOverflow. This is a
> development mailing list.
>
> - Nir
>
> On Sat, Aug 10, 2019 at 6:53 PM Mark Raynsford <org.openjdk at io7m.com> wrote:
>
>> On 2019-08-06T19:11:42 +0100
>> Mark Raynsford <org.openjdk at io7m.com> wrote:
>>
>>> Hello!
>>>
>>> I realize the subject is somewhat convoluted. I'm putting together
>>> something that bears a passing resemblance to a DAW such as Ardour:
>> Given the tumbleweeds and sounds of crickets, I'm guessing that I
>> expressed my question rather poorly.
>>
>> Here's what I'm trying to do: I'm trying to set up a pane with a
>> transform such that I can place objects inside that pane using
>> positions that don't correspond to JavaFX "scene pixels". For example,
>> 1024 units in my coordinate system might correspond to 1 "scene pixel"
>> (is there a better name for the units that JavaFX uses?). However: The
>> objects that are *inside* the objects that I add to the pane want to
>> work in "scene pixels" (for example; Labels seem to want to work in
>> pixel positions when rendering text).
>>
>> Here's a GitHub gist that gives a short example of this:
>>
>> https://gist.github.com/io7m/20b071e11da2dcd96896a43fad6df644
>>
>> I create one container group (actually a Pane) that adds a transform
>> such that 1 unit == 32 pixels. I add objects to this container. Each
>> object I add has an *external* pane with a size and position specified
>> in units, and an *internal* pane that solely exists to invert the scale
>> of the transform of the *external* pane. Inside this *internal* pane, I
>> can add Labels and so on and these all render correctly.
>>
>> I set up bindings between the transforms so that I can effectively
>> scale and pan the scene by adjusting the transform on the group
>> container. However: Something about this setup seems to be confusing
>> something inside JavaFX; the results I'm seeing onscreen don't seem to
>> match what JavaFX believes the bounds of various objects are. This
>> causes visual issues when I try to do things like set borders on
>> objects, and also seems to confuse ScenicView.
>>
>> Here's a shot with the container group selected (looks correct):
>>
>> https://ataxia.io7m.com/2019/08/10/view0.png
>>
>> Here's a shot with the *external* pane of the bottom object selected:
>>
>> https://ataxia.io7m.com/2019/08/10/view1.png
>>
>> Note that, although the object actually renders onscreen as the right
>> size (one of the pale grey boxes), ScenicView seems to believe that the
>> object's bounds are 1x1: They *are* 1x1, but they're 1x1 when expressed
>> in my custom coordinate system, not in JavaFX "scene pixels".
>>
>> Here's a shot with the *internal* pane of the bottom object selected:
>>
>> https://ataxia.io7m.com/2019/08/10/view2.png
>>
>> This looks correct in the sense that the bounds encompass the label and
>> nothing else.
>>
>> Am I doing something wrong here? I can't tell if I'm basically abusing
>> transforms or not.
>>
>> --
>> Mark Raynsford | http://www.io7m.com
>>
>>
More information about the openjfx-dev
mailing list