When using Reality Capture, sometimes I’ve needed to break apart the model into smaller sections. This may be useful if you want to process smaller chunks, or if you can’t texture a full mesh, or… whatever specific need you may have.
Anyway, here’s the python script.
Change the parameters in the INPUTS section and change the filename (the script uses a file called “for-test02.rcbox” but that can be any text you saved your file as.
import sysfrom bs4 import BeautifulSoup
### INPUTSoverlap = 2 # Percentage overlappartsX = 4 # dividepartsY = 4 # divide
# Read XML file created by Reality CapturercboxFile = BeautifulSoup(open("for-test02.rcbox"), "xml")
whd = str(rcboxFile.widthHeightDepth)whd = (whd[18:(len(whd)-19)])whd = whd.split(' ')originalSizeX = float(whd[0])originalSizeY = float(whd[1])originalSizeZ = float(whd[2])
center = str(rcboxFile.CentreEuclid)center = (center[22:(len(center)-3)])center = center.split(' ')centerX = float(center[0])centerY = float(center[1])centerZ = float(center[2])
# Output base filenameoutBaseFileName = "boundingBox"
newSizeX = originalSizeX / partsXnewSizeY = originalSizeY / partsYoffsetX = centerX - (originalSizeX / 2)offsetY = centerY - (originalSizeY / 2)
for j in range(1, partsY + 1): for i in range(1, partsX + 1): #print ("Part x={}, y={}". format(i, j)) newCenterX = offsetX + ((i - 0.5) * newSizeX) newCenterY = offsetY + ((j - 0.5) * newSizeY)
newOverlapSizeX = newSizeX * (1 + (overlap / 100)) newOverlapSizeY = newSizeY * (1 + (overlap / 100)) #print ("New Center x={}, y={}".format(newCenterX, newCenterY))
fileName = outBaseFileName + "_{}_{}.rcbox".format(i, j)
line1 = '<ReconstructionRegion globalCoordinateSystem="+proj=geocent +ellps=WGS84 +no_defs" globalCoordinateSystemName="local:1 - Euclidean"\n' line2 = ' isGeoreferenced="0" isLatLon="0" yawPitchRoll="0 -0 -0">\n' line3 = ' <widthHeightDepth>{} {} {}</widthHeightDepth>\n'.format(newOverlapSizeX,newOverlapSizeY, originalSizeZ) line4 = ' <Header magic="5395016" version="2"/>\n' line5 = ' <CentreEuclid centre="{} {} {}"/>\n'.format(newCenterX, newCenterY, centerZ) line6 = ' <Residual R="1 0 0 0 1 0 0 0 1" t="0 0 0" s="1"/>\n' line7 = '</ReconstructionRegion>\n' fileContent = line1 + line2 + line3 + line4 + line5 + line6 + line7
fileHandle = open(fileName, 'w') fileHandle.write(fileContent) fileHandle.close