.. meta:: :description: Code snippets logical operation ROI MultiROI How to do logical operation on ROI and MultiROI =============================================== In this example we will use multiple ROIs and MultiROIs to show boolean operation. First create some ROIs:: from ORSModel import ROI, MultiROI, orsVect, orsColor roiA = ROI() roiA.setTitle('roiA') roiA.setXYZTSize(1000, 1000, 1000, 1) roiA.setXSpacing(0.0001) roiA.setYSpacing(0.0001) roiA.setZSpacing(0.0001) roiA.setInitialColor(orsColor(1,0,0,1)) roiA.paintSphere(roiA.getBox().getOrigin(), roiA.getBox().getDirection0Size(), 1, 0) roiA.publish() roiB = ROI() roiB.setTitle('roiB') roiB.copyShapeFromStructuredGrid(roiA) roiB.setInitialColor(orsColor(0,1,0,1)) roiB.paintSphere(roiB.getBox().getOriginOpposite(), roiB.getBox().getDirection0Size(), 1, 0) roiB.publish() roiC = ROI() roiC.setTitle('roiC') roiC.copyShapeFromStructuredGrid(roiA) roiC.setInitialColor(orsColor(0,0,1,1)) roiBox = roiC.getBox() roiBox.grow(orsVect(-roiBox.getDirection0Size()*0.5, -roiBox.getDirection1Size()*0.5, -roiBox.getDirection2Size()*0.5)) roiC.paintBox(roiBox, 1, 0) roiC.publish() multiROIa= MultiROI() multiROIa.setTitle('multiROIa') multiROIa.copyShapeFromStructuredGrid(roiA) multiROIBox = multiROIa.getBox() multiROIa.setLabelCount(3) multiROIBox.grow(orsVect(-multiROIBox.getDirection0Size()*0.5, -multiROIBox.getDirection1Size()*0.5, -multiROIBox.getDirection2Size()*0.5)) multiROIBox.setOrigin(multiROIa.getOrigin()) multiROIa.paintBox(multiROIBox, 1, 0) multiROIBox.setOrigin(multiROIa.getBox().getCenter()) multiROIa.paintBox(multiROIBox, 2, 0) multiROIBox.setOrigin((multiROIa.getBox().getOriginOpposite() - multiROIa.getBox().getOrigin())*0.25) multiROIa.paintBox(multiROIBox, 3, 0) multiROIa.publish() Now let's do some intersection:: roiIntersect = roiA.getIntersectionWithROI(roiB, None) roiIntersect.setTitle('intersection of roiA, roiB and roiC') roiIntersect = roiIntersect.getIntersectionWithROI(roiC, roiIntersect) roiIntersect.setInitialColor(orsColor(1,1,0,1)) roiIntersect.publish() multiROIb = multiROIa.getIntersectionWithROI(roiIntersect, None) multiROIb.setTitle('intersection of roiA, roiB, roiC and multiROia') multiROIb.removeEmptyLabelsAndRenumber() multiROIb.setDataDirty() multiROIb.publish() Now let's do some subtraction:: roiAMinusB = roiA.copy() roiAMinusB.removeROI(roiB) roiAMinusB.setTitle('roiAMinusB') roiAMinusB.publish() roiBMinusA = roiB.copy() roiBMinusA.removeROI(roiA) roiBMinusA.setTitle('roiBMinusA') roiBMinusA.publish() Now let's do some addition:: roiAPlusB = roiA.copy() roiAPlusB.addROI(roiB) roiAPlusB.setTitle('roiAPlusB') roiAPlusB.publish() roiBPlusA = roiB.copy() roiBPlusA.addROI(roiA) roiBPlusA.setTitle('roiBPlusA') roiBPlusA.publish()