CSG Coincidence Speckle ========================== FIXED : Very Thin Cylinder Speckles in CSG difference holes --------------------------------------------------------------- * ~/opticks_refs/speckle_lvTopESR.png * FIXED using new primitive CSG_DISC Complex box cuts from hollowed cylinder speckles ---------------------------------------------------- * ~/opticks_refs/edge_speckle.png * ~/opticks_refs/speckle_lvSstTopCirRibBase * how to generalize nudges to avoid subtractions that lead to ghost speckle coincidence ??? * have implemeted bileaf uncoincidence detection and nudge fixing for box3 - box3, but thats not directly applicable as the box cuts from an already composite: cy - cy (for cylinder with inner radius) * could reorder this inner subtraction ?? ie cut out the boxes from the cylinder endcap * suspect this situation is rather rare, so fixing it via metadata labelled nudge hints seems appropriate * could add inner radius param handling to cylinder primitive, but thats significant work, will probably eventually do this but not a priority :: tboolean-;tboolean-rip sc In [3]: target.lv.solid Out[3]: [259] Subtraction SstTopCirRibBase0xc264f78 l:[257] Subtraction SstTopCirRibPri-ChildForSstTopCirRibBase0xc264e78 l:[255] Subtraction SstTopCirRibPri-ChildForSstTopCirRibBase0xbf755c0 l:[253] Subtraction SstTopCirRibPri-ChildForSstTopCirRibBase0xc354ef8 l:[251] Tube SstTopCirRibPri0xc2648b8 mm rmin 1200.0 rmax 1220.0 x 0.0 y 0.0 z 231.89 r:[252] Box Cutbox10xc264960 mm rmin 0.0 rmax 0.0 x 2460.0 y 20.0 z 231.89 r:[254] Box Cutbox20xc265a38 mm rmin 0.0 rmax 0.0 x 2460.0 y 100.0 z 20.0 r:[256] Box Cutbox30xc265b98 mm rmin 0.0 rmax 0.0 x 2460.0 y 20.0 z 231.89 r:[258] Box Cutbox40xc265cf8 mm rmin 0.0 rmax 0.0 x 2460.0 y 100.0 z 20.0 In [6]: obj.dump(detailed=True) [2017-06-16 20:34:57,767] p44626 {/Users/blyth/opticks/analytic/csg.py:712} INFO - CSG.dump name:SstTopCirRibBase0xc264f78_balanced in(in(in(cy,!cy),in(!bo,!bo)),in(!bo,!bo)) height:3 totnodes:15 intersection;SstTopCirRibBase0xc264f78_balanced : None None intersection;treebuilder_midop : None None intersection;treebuilder_bileaf : None None cylinder;SstTopCirRibPri0xc2648b8_outer : array([ 0., 0., 0., 1220.], dtype=float32) array([-115.945, 115.945, 0. , 0. ], dtype=float32) cylinder;SstTopCirRibPri0xc2648b8_inner : array([ 0., 0., 0., 1200.], dtype=float32) array([-117.1044, 117.1044, 0. , 0. ], dtype=float32) intersection;treebuilder_bileaf : None None box3;Cutbox10xc264960 : array([ 2460. , 20. , 231.89, 0. ], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) box3;Cutbox20xc265a38 : array([ 2460., 100., 20., 0.], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) intersection;treebuilder_bileaf : None None box3;Cutbox30xc265b98 : array([ 2460. , 20. , 231.89, 0. ], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) box3;Cutbox40xc265cf8 : array([ 2460., 100., 20., 0.], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) in in in in in !bo !bo cy !cy !bo !bo :: In [7]: 231.89/2. Out[7]: 115.945 In [9]: 1.01*231.89/2. Out[9]: 117.10445 # z size Tube subtraction inner is nudged up by 1% In [10]: 1220*2. # 2460 is more than the diameter, each subtracted does cuts on both sides Out[10]: 2440.0 :: [2017-06-16 20:58:34,978] p45431 {/Users/blyth/opticks/analytic/csg.py:712} INFO - BALANCED name:SstTopCirRibBase0xc264f78_balanced in(in(in(cy,!cy),in(!bo,!bo)),in(!bo,!bo)) height:3 totnodes:15 intersection;SstTopCirRibBase0xc264f78_balanced : None None None intersection;treebuilder_midop : None None None intersection;treebuilder_bileaf : None None None cylinder;SstTopCirRibPri0xc2648b8_outer : array([ 0., 0., 0., 1220.], dtype=float32) array([-115.945, 115.945, 0. , 0. ], dtype=float32) None cylinder;SstTopCirRibPri0xc2648b8_inner : array([ 0., 0., 0., 1200.], dtype=float32) array([-117.1044, 117.1044, 0. , 0. ], dtype=float32) None intersection;treebuilder_bileaf : None None None box3;Cutbox10xc264960 : array([ 2460. , 20. , 231.89, 0. ], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) array([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]], dtype=float32) box3;Cutbox20xc265a38 : array([ 2460., 100., 20., 0.], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) array([[ 1. , 0. , 0. , 0. ], [ 0. , 1. , 0. , 0. ], [ 0. , 0. , 1. , 0. ], [ 0. , 0. , -105.945, 1. ]], dtype=float32) intersection;treebuilder_bileaf : None None None box3;Cutbox30xc265b98 : array([ 2460. , 20. , 231.89, 0. ], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) array([[ 0.7071, -0.7071, 0. , 0. ], [ 0.7071, 0.7071, 0. , 0. ], [ 0. , 0. , 1. , 0. ], [ 0. , 0. , 0. , 1. ]], dtype=float32) box3;Cutbox40xc265cf8 : array([ 2460., 100., 20., 0.], dtype=float32) array([ 0., 0., 0., 0.], dtype=float32) array([[ 0.7071, -0.7071, 0. , 0. ], [ 0.7071, 0.7071, 0. , 0. ], [ 0. , 0. , 1. , 0. ], [ 0. , 0. , -105.945 , 1. ]], dtype=float32) in in in in in !bo !bo cy !cy !bo !bo [2017-06-16 20:58:34,983] p45431 {/Users/blyth/opticks/analytic/csg.py:321} INFO - CSG.Serialize : writing 2 trees to directory /tmp/blyth/opticks/tboolean-sc-- analytic=1_csgpath=/tmp/blyth/opticks/tboolean-sc--_name=tboolean-sc--_mode=PyCsgInBox