Half-baked API (Camera position)

Kevin Rushforth kevin.rushforth at oracle.com
Wed Oct 16 15:46:34 PDT 2013

I can see your point. There are cases where it can make sense to have a 
restriction now and relax it later, but this isn't exactly that case. 
It's really more of a case of not being currently implemented correctly 
in some modes.

I guess the other option (which Pavel also mentioned) is to continue to 
return something plausible, but not really correct, and file it as a bug 
against FX 8.

-- Kevin

Stephen F Northover wrote:
> Initial position:
> I don't really want to see any exception.  Throwing an exception is 
> unexpected and should really be reserved for when something bad 
> happens, not when we can't decide how an API works.  If the exception 
> goes in, it's API and it stays forever.
> Steve
> On 2013-10-16 5:23 PM, Kevin Rushforth wrote:
>> Steve: if Pavel throws IllegalStateException("not yet supported for 
>> parallel camera") or similar, do you think that would be OK or do you 
>> not want to see any exception?
>> -- Kevin
>> Kevin Rushforth wrote:
>>> Would IllegalStateException be better here? Usually UOE is for 
>>> operations that are simply not supported by the class in question. 
>>> In this case, the operation is only unsupported if the camera on the 
>>> scene (i.e., the state of an object) is of a certain type which can 
>>> change at runtime.
>>> I'm OK either way, just want it to be a deliberate decision.
>>> -- Kevin
>>> Pavel Safrata wrote:
>>>> As I've said, we intend to fix it in the future, so the situation 
>>>> should not be impossible. It is mostly used that way in the 
>>>> existing code, but there definitely are precedents for throwing it 
>>>> just temporarily. For instance:
>>>> nodeOrientationProperty().getCssMetaData:
>>>>         throw new UnsupportedOperationException("Not supported yet.");
>>>> or
>>>> MeshView.impl_computeContains():
>>>>         throw new UnsupportedOperationException("Not supported yet.");
>>>> (internal but directly accessible to users via contains())
>>>> Pavel
>>>> On 16.10.2013 20:10, Stephen F Northover wrote:
>>>>> I took a quick look through JavaFX to find how this exception is 
>>>>> used. It is mostly used to indicate impossible situation.  Is that 
>>>>> the situation we have here?
>>>>> Personally, for me, if we throw the exception, then we will 
>>>>> generally just leave it that way forever.
>>>>> Steve
>>>>> On 2013-10-16 11:22 AM, Pavel Safrata wrote:
>>>>>> On 16.10.2013 17:03, Stephen F Northover wrote:
>>>>>>> Could do something useful with what was there now?  We can 
>>>>>>> always fix this in future by adding another API to govern the 
>>>>>>> interpretation of the value.
>>>>>> Not much useful. Anyway, any such stuff can be quite easily done 
>>>>>> by reading the intersectedPoint's Z coordinate.
>>>>>>> Throwing the exception indicates that the call is unsupported, 
>>>>>>> but application code can be written to catch the exception and 
>>>>>>> when we implement the API, it can break (I realize that this is 
>>>>>>> unlikely).
>>>>>> The exception can tell by the message that the operation will be 
>>>>>> supported in the future.
>>>>>> Pavel
>>>>>>> Steve
>>>>>>> On 2013-10-16 10:46 AM, Richard Bair wrote:
>>>>>>>> My quick vote would be throwing the exception, but is like to 
>>>>>>>> hear from Steve and Kevin.
>>>>>>>>> On Oct 16, 2013, at 1:04 AM, Pavel Safrata 
>>>>>>>>> <pavel.safrata at oracle.com> wrote:
>>>>>>>>> Hello,
>>>>>>>>> it looks like we can't help releasing a not-fully-baked piece 
>>>>>>>>> of API with FX8. We've added bunch of new APIs for 3D and did 
>>>>>>>>> our best to make them work well. Unfortunately, there's been 
>>>>>>>>> not enough time&priority to fine-tune their behavior in 2D 
>>>>>>>>> world. Right now I'm concerned about camera position in scene. 
>>>>>>>>> It is inherent in the 3D perspective camera that it has its 
>>>>>>>>> specific position in world, but the 2D parallel camera as we 
>>>>>>>>> have it projects everything to the XY plane basically by 
>>>>>>>>> ignoring the Z coordinate, so the camera position doesn't 
>>>>>>>>> matter all that much. However, some of the newly added APIs 
>>>>>>>>> depend on it:
>>>>>>>>> 1. Near/far clip on camera. This obviously cannot work without 
>>>>>>>>> knowing where the camera is. Right now the parallel camera 
>>>>>>>>> does no clipping though, so I guess we are OK to go with it as 
>>>>>>>>> a "known limitation".
>>>>>>>>> 2. PickResult on events which reports "intersectedDistance" 
>>>>>>>>> between the camera and the picked point. This is worse because 
>>>>>>>>> we can't just "not support" it - there will be some value and 
>>>>>>>>> once somebody uses it we'll have a backward compatibility 
>>>>>>>>> issue. The state right now is that the camera is (tentatively, 
>>>>>>>>> by my arbitrary decision) at [0, 0, -1] and reports distances 
>>>>>>>>> from there (note that as the camera renders everything, for 
>>>>>>>>> nodes "in front of Z=-1" it reports negative distances). This 
>>>>>>>>> may change when the camera position is properly discussed and 
>>>>>>>>> specified.
>>>>>>>>> Note that this post is *not* meant to discuss the camera 
>>>>>>>>> position. Even if we could find the answer quickly (which I 
>>>>>>>>> doubt), it's most probably too late to apply the change for FX8.
>>>>>>>>> So finally here is my question: do you think it's OK to solve 
>>>>>>>>> this by keeping the current behavior and documenting the 
>>>>>>>>> "intersectedDistance" in a way that for parallel camera the 
>>>>>>>>> numbers are unspecified and subject to change in future 
>>>>>>>>> versions? Or would you prefer something more drastic like 
>>>>>>>>> throwing an UnsupportedOperationException (losing the 
>>>>>>>>> possibility to compare the distances)?
>>>>>>>>> Thanks,
>>>>>>>>> Pavel

More information about the openjfx-dev mailing list