public class InArea extends Object implements ExternalConstraint
InArea constraint allows on to define an area within which objects should be contained, as well as a collection of "holes" within the area
TODO implement the use of a subset of objects only. In some applications, classes of objects may need to be placed in different portions of the space. Possibly, create class InAreaSetOfObjects extending from InArea to allow specification of the objects in the focus of the constraint.
Modifier and Type | Field and Description |
---|---|
DBox |
allowedArea
It specifies the allowed area in which the objects can reside.
|
Set<InternalConstraint> |
constraints
It holds all the constraints which have been generated from this external constraints.
|
Collection<DBox> |
holes
It specifies the holes within the allowed area in which
the objects can not be placed.
|
Constructor and Description |
---|
InArea(DBox area,
Collection<DBox> holes)
It constructs an external constraint to enforce that all objects
within Geost constraint are placed within a specified area with
holes in that area specfied as well.
|
Modifier and Type | Method and Description |
---|---|
boolean |
addPrunableObjects(GeostObject o,
SimpleHashSet<GeostObject> accumulator)
It adds to the accumulator collection the objects that are likely to be pruned if the given object
changes.
|
String |
checkInvariants()
It checks whether the InArea is consistent.
|
Collection<InternalConstraint> |
genInternalConstraints(Geost geost)
It generates internal constraints which will be used by Geost's sweeping
algorithm.
|
Collection<? extends InternalConstraint> |
getObjectConstraints(GeostObject o)
It provides the collection of internal constraints that the given object has to satisfy.
|
GeostObject[] |
getObjectScope()
Provides the collection of objects that this constraint applies to
|
boolean |
isInternalConstraintApplicableTo(InternalConstraint ic,
GeostObject o)
Returns true if the external constraint generated the supplied internal constraint ic, and that ic
applies to object o.
|
void |
onObjectUpdate(GeostObject o)
Handler method called by the Geost kernel when the domain of the object changes.
|
public DBox allowedArea
public Collection<DBox> holes
public Set<InternalConstraint> constraints
public InArea(DBox area, Collection<DBox> holes)
area
- the specification of the area within which the objects have to be placed.holes
- the holes in which the objects can not be placed.public String checkInvariants()
public Collection<InternalConstraint> genInternalConstraints(Geost geost)
ExternalConstraint
The generation of internal constraints is done only once per search, implying that it is possible to do costly operations in order to generate internal constraints. However, another implication of this one-time use is that the internal constraints generated have to remain valid during the whole search.
genInternalConstraints
in interface ExternalConstraint
geost
- the geost kernel that will use the generated constraintpublic boolean addPrunableObjects(GeostObject o, SimpleHashSet<GeostObject> accumulator)
ExternalConstraint
TODO, optimize all the code around this functionality, avoid situation when accumulator has all objects anyway and external constraints are continuously queried to add objects and keep adding objects which are already in the set.
addPrunableObjects
in interface ExternalConstraint
o
- the object that was prunedaccumulator
- the set of objects to add the object topublic void onObjectUpdate(GeostObject o)
ExternalConstraint
onObjectUpdate
in interface ExternalConstraint
o
- the objectpublic Collection<? extends InternalConstraint> getObjectConstraints(GeostObject o)
ExternalConstraint
This method is used by the kernel only once per object, at the beginning of the search, to collect the set of constraints to use for each object.
getObjectConstraints
in interface ExternalConstraint
o
- the geost object that needs to be constrainedpublic boolean isInternalConstraintApplicableTo(InternalConstraint ic, GeostObject o)
ExternalConstraint
isInternalConstraintApplicableTo
in interface ExternalConstraint
ic
- internal constraint being checkedo
- object to which internal constrain should apply topublic GeostObject[] getObjectScope()
ExternalConstraint
getObjectScope
in interface ExternalConstraint
Copyright © 2022. All rights reserved.