This Page

lvid247ΒΆ

  • looks to be another CSG bbox bug
12005.8
near_rock0xc04ba08 lvidx 247
amn ( -25000.000-25000.000-25000.000)
bmn ( -25000.000-25000.000-12994.200)  <-- would expect -12995.0 for min.z
dmn (      0.000     0.000-12005.800)

amx (  25000.000 25000.000 25000.000)
bmx (  25000.000 25000.000 25000.000)
dmx (      0.000     0.000     0.000)
opticks-nnt-vi 247

17     // generated by nnode_test_cpp.py : 20170705-1227
18     nbox a = make_box3( 50000.000,50000.000,50000.000,0.000 ) ; a.label = "a" ;
19     nbox b = make_box3( 50010.000,50010.000,12010.000,0.000 ) ; b.label = "b" ;
20     b.transform = nmat4triple::make_transform(1.000,0.000,0.000,0.000,  0.000,1.000,0.000,0.000,  0.000,0.000,1.000,0.000,  0.000,0.000,-19000.000,1.000) ;
21     ndifference ab = make_difference( &a, &b ) ; ab.label = "ab" ; a.parent = &ab ; b.parent = &ab ;
22

## subtracting thin box thats bigger in xy but offset -ve

In [3]: 12010./2. - 19000., -12010./2. - 19000.
Out[3]: (-12995.0, -25005.0)   ##  <-- chops off bottom of big cube

In [5]: 50000./2., -50000./2.
Out[5]: (25000.0, -25000.0)



opticks-tbool-vi 247

75 # generated by tboolean.py : 20170705-1141
76
77 a = CSG("box3", param = [50000.000,50000.000,50000.000,0.000],param1 = [0.000,0.000,0.000,0.000])
78 b = CSG("box3", param = [50010.000,50010.000,12010.000,0.000],param1 = [0.000,0.000,0.000,0.000])
79 b.transform = [[1.000,0.000,0.000,0.000],[0.000,1.000,0.000,0.000],[0.000,0.000,1.000,0.000],[0.000,0.000,-19000.000,1.000]]
80 ab = CSG("difference", left=a, right=b)
81

Visualize both boxes rather than difference shows that have a whopper cube with a small skirt chopped off the bottom.:

86 con = CSG("sphere",  param=[0,0,0,10], container="1", containerscale="2", boundary=args.container , poly="IM", resolution="20" )
87 CSG.Serialize([con, a, b], args.csgpath )
simon:opticksnpy blyth$ opticks-nnt 247
opticks-nnt : compiling /usr/local/opticks/opticksdata/export/DayaBay_VGDX_20140414-1300/extras/247/NNodeTest_247.cc
/usr/local/opticks/lib/NNodeTest_247
 du [ 0:di ab] OPER  v:1 2017-07-05 12:34:39.815 INFO  [3314820] [nnode::bbox@408] nnode::bbox [ 0:di ab]
nbbox::CombineCSG  BB(A - B)  -> BB(A)
 L  mi  (-25000.00 -25000.00 -25000.00)  mx  (25000.00 25000.00 25000.00)  si  (50000.00 50000.00 50000.00)
 R  mi  (-25005.00 -25005.00 -25005.00)  mx  (25005.00 25005.00 -12995.00)  si  (50010.00 50010.00 12010.00)
 C  mi  (-25000.00 -25000.00 -25000.00)  mx  (25000.00 25000.00 25000.00)  si  (50000.00 50000.00 50000.00)
nnode::composite_bbox  left [ 0:bo a]  right [ 0:bo b]  bb  mi  (-25000.00 -25000.00 -25000.00)  mx  (25000.00 25000.00 25000.00)  si  (50000.00 50000.00 50000.00)
 bb  mi  (-25000.00 -25000.00 -25000.00)  mx  (25000.00 25000.00 25000.00)  si  (50000.00 50000.00 50000.00)

 du [ 0:bo a]  PRIM  v:0  bb  mi  (-25000.00 -25000.00 -25000.00)  mx  (25000.00 25000.00 25000.00)  si  (50000.00 50000.00 50000.00)
 gt [ 0:bo a]  NO gtransform
 du [ 0:bo b]  PRIM  v:0  bb  mi  (-25005.00 -25005.00 -25005.00)  mx  (25005.00 25005.00 -12995.00)  si  (50010.00 50010.00 12010.00)
 gt [ 0:bo b]       gt.t
            1.000   0.000   0.000   0.000
            0.000   1.000   0.000   0.000
            0.000   0.000   1.000   0.000
            0.000   0.000 -19000.000   1.000

 gt [ 0:di ab] NO gtransform
 gt [ 0:bo a]  NO gtransform
 gt [ 0:bo b]       gt.t
            1.000   0.000   0.000   0.000
            0.000   1.000   0.000   0.000
            0.000   0.000   1.000   0.000
            0.000   0.000 -19000.000   1.000

simon:opticksnpy blyth$

Following implementation of bbox::SubtractOverlap in nbbox::CombineCSG that chops bboxes:

337     else if( op == CSG_DIFFERENCE )
338     {
339         if(!a.invert && !b.invert)
340         {
341             expr = " BB(A - B)  -> BB(A)  " ;  // hmm can do better than this by considering A - B ->  A*!B
342             //comb.include(a);
343
344             nbbox a_overlap ;
345             FindOverlap(a_overlap, a, b );
346             SubtractOverlap(comb, a, a_overlap);
347         }
simon:opticks blyth$ opticks-nnt 247
opticks-nnt : compiling /usr/local/opticks/opticksdata/export/DayaBay_VGDX_20140414-1300/extras/247/NNodeTest_247.cc
/usr/local/opticks/lib/NNodeTest_247
 du [ 0:di ab] OPER  v:1 2017-07-05 20:54:06.586 INFO  [3484843] [nnode::bbox@408] nnode::bbox [ 0:di ab]
 i 0 j 1 k 2 jk_match N omax_i_inside N omin_i_inside N a.min[i] -25000.000 a.max[i]  25000.000 o.min[i] -25000.000 o.max[i]  25000.000
 i 1 j 2 k 0 jk_match N omax_i_inside N omin_i_inside N a.min[i] -25000.000 a.max[i]  25000.000 o.min[i] -25000.000 o.max[i]  25000.000
 i 2 j 0 k 1 jk_match Y omax_i_inside Y omin_i_inside N a.min[i] -25000.000 a.max[i]  25000.000 o.min[i] -25000.000 o.max[i] -12995.000
pulling up a.min ie chopping off below
nbbox::CombineCSG  BB(A - B)  -> BB(A)
 L  mi ( -25000.000-25000.000-25000.000) mx (  25000.000 25000.000 25000.000) si (  50000.000 50000.000 50000.000)
 R  mi ( -25005.000-25005.000-25005.000) mx (  25005.000 25005.000-12995.000) si (  50010.000 50010.000 12010.000)
 C  mi ( -25000.000-25000.000-12995.000) mx (  25000.000 25000.000 25000.000) si (  50000.000 50000.000 37995.000)
nnode::composite_bbox  left [ 0:bo a]  right [ 0:bo b]  bb  mi ( -25000.000-25000.000-12995.000) mx (  25000.000 25000.000 25000.000) si (  50000.000 50000.000 37995.000)
 bb  mi ( -25000.000-25000.000-12995.000) mx (  25000.000 25000.000 25000.000) si (  50000.000 50000.000 37995.000)

 du [ 0:bo a]  PRIM  v:0  bb  mi ( -25000.000-25000.000-25000.000) mx (  25000.000 25000.000 25000.000) si (  50000.000 50000.000 50000.000)
 gt [ 0:bo a]  NO gtransform
 du [ 0:bo b]  PRIM  v:0  bb  mi ( -25005.000-25005.000-25005.000) mx (  25005.000 25005.000-12995.000) si (  50010.000 50010.000 12010.000)
 gt [ 0:bo b]       gt.t
            1.000   0.000   0.000   0.000
            0.000   1.000   0.000   0.000
            0.000   0.000   1.000   0.000
            0.000   0.000 -19000.000   1.000

 gt [ 0:di ab] NO gtransform
 gt [ 0:bo a]  NO gtransform
 gt [ 0:bo b]       gt.t
            1.000   0.000   0.000   0.000
            0.000   1.000   0.000   0.000
            0.000   0.000   1.000   0.000
            0.000   0.000 -19000.000   1.000