[ 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)