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