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