[ 
https://issues.apache.org/jira/browse/GEOMETRY-32?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16800561#comment-16800561
 ] 

Gilles commented on GEOMETRY-32:
--------------------------------

Design question: Have you considered making a class for each operation?
 I.e. something like
{code:java}
public interface TreeOperator<P extends Point<P> {
    /**
     * @return a new instance.
     */
    RegionBSPTree<P> create(RegionBSPTree<P> a, RegionBSPTree<P> b);

    /**
     * @return {{@code a}}, modified in place.
     */
    RegionBSPTree<P> combine(RegionBSPTree<P> a, RegionBSPTree<P> b);
}
{code}
And perhaps the {{RegionBSPTree}} is not necessary and the interface must be 
defined in terms of {{BSPTree<P, RegionNode<P>}} (?).

And
{code:java}
public class Union<P> implements TreeOperator<P> {
    // ...
}
{code}
etc.

Or, perhaps even better, integrate within the 
[{{java.util.function}}|https://docs.oracle.com/javase/8/docs/api/java/util/function/BinaryOperator.html]
 hierarchy (incomplete generic spec):
{code:java}
public interface TreeOperator<TREE> extends BinaryOperator<TREE> {
     // Create new instance.
     TREE apply(TREE a, TREE b);
}
{code}
and
{code:java}
public interface InPlaceTreeOperator<TREE> extends BinaryOperator<TREE> {
     // Modifies "a" in place and returns it.
     TREE apply(TREE a, TREE b);
}
{code}

> BSPTree Updates
> ---------------
>
>                 Key: GEOMETRY-32
>                 URL: https://issues.apache.org/jira/browse/GEOMETRY-32
>             Project: Apache Commons Geometry
>          Issue Type: Improvement
>          Components: core
>            Reporter: Matt Juntunen
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The following updates should be made to the BSPTree class:
> - add an {{isLeaf()}} method to replace all of the {{node.getCut() == null}} 
> expressions
> - add unit tests
> _Edit [2019-02-17]:_
> Additional goals:
> - Refactor the API to split the idea of a general BSPTree and a BSPTree used 
> for defining in/out regions. This could result in a BSPTree interface and a 
> RegionBSPTree interface. The goal here is to allow end-users to create their 
> own extensions of these classes and specialize them for their own 
> applications (for example, to implement spatial sorting or other algorithms). 
> This will be one of the only planned extension points in the library.
> - Make the API easier to use and extend and reduce the necessity of casting 
> (especially unchecked casting) as much as possible.
> - Add the idea of convex subhyperplanes to allow for more efficient tree 
> construction.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to