mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: additional methods/operators for boundBox (related to #196)
- Constructor for bounding box of a single point.
- add(boundBox), add(point) ...
-> Extend box to enclose the second box or point(s).
Eg,
bb.add(pt);
vs.
bb.min() = Foam::min(bb.min(), pt);
bb.max() = Foam::max(bb.max(), pt);
Also works with other bounding boxes.
Eg,
bb.add(bb2);
// OR
bb += bb2;
vs.
bb.min() = Foam::min(bb.min(), bb2.min());
bb.max() = Foam::max(bb.max(), bb2.max());
'+=' operator allows the reduction to be used in parallel
gather/scatter operations.
A global '+' operator is not currently needed.
Note: may be useful in the future to have a 'clear()' method
that resets to a zero-sized (inverted) box.
STYLE: make many bounding box constructors explicit
This commit is contained in:
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016 OpenCFD Ltd.
|
||||
\\ / A nd | Copyright (C) 2016-2017 OpenCFD Ltd.
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -40,8 +40,8 @@ boundBox cube(scalar start, scalar width)
|
||||
{
|
||||
return boundBox
|
||||
(
|
||||
point(start, start, start),
|
||||
point(start + width, start + width, start + width)
|
||||
point::uniform(start),
|
||||
point::uniform(start + width)
|
||||
);
|
||||
}
|
||||
|
||||
@ -59,10 +59,19 @@ int main(int argc, char *argv[])
|
||||
|
||||
Info<<"boundBox faces: " << boundBox::faces << endl;
|
||||
Info<<"hex faces: " << hex.modelFaces() << endl;
|
||||
Info<<"tree-bb faces: " << treeBoundBox::faces << endl;
|
||||
Info<<"tree-bb edges: " << treeBoundBox::edges << endl;
|
||||
|
||||
boundBox bb = boundBox::greatBox;
|
||||
Info<<"great box: " << bb << endl;
|
||||
|
||||
// bb.clear();
|
||||
// Info<<"zero box: " << bb << endl;
|
||||
|
||||
bb = boundBox::invertedBox;
|
||||
Info<<"invalid box: " << bb << endl;
|
||||
Info<< nl << endl;
|
||||
|
||||
if (Pstream::parRun())
|
||||
{
|
||||
bb = cube(Pstream::myProcNo(), 1.1);
|
||||
@ -71,6 +80,48 @@ int main(int argc, char *argv[])
|
||||
bb.reduce();
|
||||
Pout<<"reduced: " << bb << endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
bb = cube(0, 1);
|
||||
Info<<"starting box: " << bb << endl;
|
||||
|
||||
point pt(Zero);
|
||||
bb.add(pt);
|
||||
Info<<"enclose point " << pt << " -> " << bb << endl;
|
||||
|
||||
pt = point(0,1.5,0.5);
|
||||
bb.add(pt);
|
||||
Info<<"enclose point " << pt << " -> " << bb << endl;
|
||||
|
||||
pt = point(5,2,-2);
|
||||
bb.add(pt);
|
||||
Info<<"enclose point " << pt << " -> " << bb << endl;
|
||||
|
||||
// restart with same points
|
||||
bb = boundBox::invertedBox;
|
||||
bb.add(point(1,1,1));
|
||||
bb.add(point::zero);
|
||||
bb.add(point(0,1.5,0.5));
|
||||
bb.add(point(5,2,-2));
|
||||
|
||||
Info<<"repeated " << bb << endl;
|
||||
|
||||
boundBox box1 = cube(0, 1);
|
||||
boundBox box2 = cube(0, 0.75);
|
||||
boundBox box3 = cube(0.5, 1);
|
||||
boundBox box4 = cube(-1, 0.5);
|
||||
|
||||
Info<<"union of " << box1 << " and " << box2 << " => ";
|
||||
|
||||
box1.add(box2);
|
||||
Info<< box1 << endl;
|
||||
|
||||
box1.add(box3);
|
||||
Info<<"union with " << box3 << " => " << box1 << endl;
|
||||
|
||||
box1.add(box4);
|
||||
Info<<"union with " << box4 << " => " << box1 << endl;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user