in data/question-gen/house_parse.py [0:0]
def getNearbyPairs(self,
availableEnts,
hthreshold=0.005,
vthreshold=0.005):
assert len(availableEnts) != 0
nearbyPairs = {'on': [], 'next_to': []}
for i in range(len(availableEnts) - 1):
for j in range(i + 1, len(availableEnts)):
if availableEnts[i].name != availableEnts[j].name:
# next to
dist = self.getClosestDistance(
availableEnts[i].meta,
availableEnts[j].meta,
axes=[0, 2])
if dist < hthreshold and (self.isContained(
availableEnts[i].meta,
availableEnts[j].meta,
axis=0) & self.isContained(
availableEnts[i].meta,
availableEnts[j].meta,
axis=2)) == False:
if availableEnts[i].type == 'room' and availableEnts[j].type == 'room':
nearbyPairs['next_to'].append(
(availableEnts[i], availableEnts[j], dist))
elif self.isContained(
availableEnts[i].meta,
availableEnts[j].meta,
axis=1) == True:
nearbyPairs['next_to'].append(
(availableEnts[i], availableEnts[j], dist))
# on / below
if availableEnts[i].type == 'object' and availableEnts[j].type == 'object':
dist = self.getClosestDistance(
availableEnts[i].meta,
availableEnts[j].meta,
axes=[1])
if dist < vthreshold and (self.isContained(
availableEnts[i].meta,
availableEnts[j].meta,
axis=0) & self.isContained(
availableEnts[i].meta,
availableEnts[j].meta,
axis=2)) == True and self.isContained(
availableEnts[i].meta,
availableEnts[j].meta,
axis=1) == False:
# higher first
if self.isHigher(
availableEnts[i].meta,
availableEnts[j].meta,
axis=1):
nearbyPairs['on'].append(
(availableEnts[i], availableEnts[j], dist))
elif self.isHigher(
availableEnts[i].meta,
availableEnts[j].meta,
axis=1):
nearbyObjectPairs['on'].append(
(availableEnts[j], availableEnts[i], dist))
return nearbyPairs