Greatly simplify extractSchematicFromIter

This commit is contained in:
David Vierra 2015-10-03 00:09:22 -10:00
parent 911aa28470
commit 63d02760f0

View File

@ -1,7 +1,7 @@
""" """
export.py export.py
Extracting schematic files of diffeerent formats Extracting schematic files of different formats
""" """
from __future__ import absolute_import, division, print_function, unicode_literals from __future__ import absolute_import, division, print_function, unicode_literals
import atexit import atexit
@ -15,20 +15,15 @@ from mceditlib.util import exhaust
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
def extractSchematicFrom(sourceDim, box, entities=True):
return exhaust(extractSchematicFromIter(sourceDim, box, entities)) def extractSchematicFrom(sourceDim, box, *a, **kw):
return exhaust(extractSchematicFromIter(sourceDim, box, *a, **kw))
def extractSchematicFromIter(sourceDim, box, entities=True): def extractSchematicFromIter(sourceDim, box, *a, **kw):
p = adjustExtractionParameters(sourceDim, box)
if p is None:
yield None
return
newbox, destPoint = p
editor = createSchematic(shape=box.size, blocktypes=sourceDim.blocktypes) editor = createSchematic(shape=box.size, blocktypes=sourceDim.blocktypes)
dim = editor.getDimension() dim = editor.getDimension()
for i in copyBlocksIter(dim, sourceDim, newbox, destPoint, entities=entities, biomes=True): for i in copyBlocksIter(dim, sourceDim, box, (0, 0, 0), *a, **kw):
yield i yield i
yield editor yield editor
@ -76,70 +71,3 @@ def extractSchematicFromIter(sourceDim, box, entities=True):
# for i in level.extractZipSchematicIter(box): # for i in level.extractZipSchematicIter(box):
# yield i # yield i
def adjustExtractionParameters(dim, box):
"""
Shrink `box` to fit within the bounds of `dim` and return the shrunken
box and the new destination point within the extracted schematic.
Should not be needed as copyBlocks should just skip those chunk sections
that are not present or outside of `dim`'s bounds.
:param dim:
:type dim:
:param box:
:type box:
:return:
:rtype:
"""
x, y, z = box.origin
w, h, l = box.size
destX = destY = destZ = 0
bounds = dim.bounds
if y < 0:
destY -= y
h += y
y = 0
if y >= bounds.maxy:
return
if y + h >= bounds.maxy:
h -= y + h - bounds.maxy
y = bounds.maxy - h
if h <= 0:
return
#if dim.Width:
if x < 0:
w += x
destX -= x
x = 0
if x >= bounds.maxx:
return
if x + w >= bounds.maxx:
w = bounds.maxx - x
if w <= 0:
return
if z < 0:
l += z
destZ -= z
z = 0
if z >= bounds.maxz:
return
if z + l >= bounds.maxz:
l = bounds.maxz - z
if l <= 0:
return
box = BoundingBox((x, y, z), (w, h, l))
return box, (destX, destY, destZ)