#encoding=utf-8
import json
import math
class Point(object):
def __init__(self, x, z):
self.x = x
self.z = z
def ToString(self):
return "{ x:"+ str(self.x) + " z:" + str(self.z) + "}"
def Equal(self, point):
return self.x == point.x and self.z == point.z
class Line(object):
def __init__(self, point1, point2):
self.v0 = point1
self.v1 = point2
self.status = False
if self.v0.x == self.v1.x and self.v0.z != self.v1.z:
self.direction = 1
elif self.v0.x != self.v1.x and self.v0.z == self.v1.z:
self.direction = 2
else:
self.direction = 3
def Equal(self, Line):
return self.v0.Equal(Line.v1) and self.v1.Equal(Line.v0) or self.v0.Equal(Line.v0) and self.v1.Equal(Line.v1)
def Length(self):
return math.sqrt(pow(self.v0.x - self.v1.x, 2) + pow(self.v0.z - self.v1.z, 2))
def ToString(self):
return "{ v0 :"+ self.v0.ToString() + ", v1 :" + self.v1.ToString() +"}"
def GetLengthDir(self):
return " len :"+ str(self.Length()) + ", direction :" + str(self.direction)
class EdgeHandle(object):
def __init__(self):
self.msgId = 0
self.edges = None
self.edgeList = None
self.lineList = []
def loadJson(self):
f = open("edges.json", "r")
self.edges = json.load(f)
self.edgeList = self.edges["edge"]
for i in self.edgeList:
point1 = Point(i["v0"]["x"], i["v0"]["z"])
point2 = Point(i["v1"]["x"], i["v1"]["z"])
lineObj = Line(point1, point2)
if lineObj.direction == 3:
print "exception line ***********" + lineObj.ToString()
self.lineList.append(lineObj)
def ToString(self):
for i in self.lineList:
print i.ToString()
def handleEdge(self, ):
listLen = len(self.lineList)
join = False
newlineList = []
for i in self.lineList:
for j in self.lineList:
if i.Equal(j):
continue
if i.status or j.status:
continue
(canjoin , newline) = self.canjoinLine(i,j)
if canjoin:
join = True
newlineList.append(newline)
i.status = True
j.status = True
#print i.ToString(), j.ToString(), newline.ToString()
self.lineList = [i for i in self.lineList if i.status == False]
self.lineList = self.lineList + newlineList
return join
def canjoinLine(self, line1, line2):
if line1.direction != line2.direction:
return False, line1
elif line1.v0.Equal(line2.v0):
return True, Line(line1.v1 , line2.v1)
elif line1.v1.Equal(line2.v0):
return True, Line(line1.v0 , line2.v1)
elif line1.v0.Equal(line2.v1):
return True, Line(line1.v1 , line2.v0)
elif line1.v1.Equal(line2.v1):
return True, Line(line1.v0 , line2.v0)
else:
return False, line1
edgeHandle = EdgeHandle()
edgeHandle.loadJson()
handleTime = 0
while edgeHandle.handleEdge():
handleTime = handleTime +1
print "******************************************************handleTime: " , handleTime
edgeHandle.ToString()
xlen = 0
zlen = 0
for i in edgeHandle.lineList:
print i.GetLengthDir()
{
"edge": [
{
"v0": {
"x": -675,
"z": -165
},
"v1": {
"x": -675,
"z": -150
}
},
{
"v0": {
"x": -660,
"z": -165
},
"v1": {
"x": -675,
"z": -165
}
},
{
"v0": {
"x": -645,
"z": -165
},
"v1": {
"x": -660,
"z": -165
}
},
{
"v0": {
"x": -630,
"z": -165
},
"v1": {
"x": -645,
"z": -165
}
},
{
"v0": {
"x": -615,
"z": -165
},
"v1": {
"x": -630,
"z": -165
}
},
{
"v0": {
"x": -600,
"z": -165
},
"v1": {
"x": -615,
"z": -165
}
},
{
"v0": {
"x": -585,
"z": -165
},
"v1": {
"x": -600,
"z": -165
}
},
{
"v0": {
"x": -570,
"z": -165
},
"v1": {
"x": -585,
"z": -165
}
},
{
"v0": {
"x": -555,
"z": -165
},
"v1": {
"x": -570,
"z": -165
}
},
{
"v0": {
"x": -540,
"z": -165
},
"v1": {
"x": -555,
"z": -165
}
},
{
"v0": {
"x": -525,
"z": -165
},
"v1": {
"x": -540,
"z": -165
}
},
{
"v0": {
"x": -510,
"z": -165
},
"v1": {
"x": -525,
"z": -165
}
},
{
"v0": {
"x": -495,
"z": -165
},
"v1": {
"x": -510,
"z": -165
}
},
{
"v0": {
"x": -480,
"z": -165
},
"v1": {
"x": -495,
"z": -165
}
},
{
"v0": {
"x": -465,
"z": -165
},
"v1": {
"x": -480,
"z": -165
}
},
{
"v0": {
"x": -450,
"z": -165
},
"v1": {
"x": -465,
"z": -165
}
},
{
"v0": {
"x": -435,
"z": -165
},
"v1": {
"x": -450,
"z": -165
}
},
{
"v0": {
"x": -420,
"z": -165
},
"v1": {
"x": -435,
"z": -165
}
},
{
"v0": {
"x": -405,
"z": -165
},
"v1": {
"x": -420,
"z": -165
}
},
{
"v0": {
"x": -390,
"z": -165
},
"v1": {
"x": -405,
"z": -165
}
},
{
"v0": {
"x": -375,
"z": -165
},
"v1": {
"x": -390,
"z": -165
}
},
{
"v0": {
"x": -360,
"z": -165
},
"v1": {
"x": -375,
"z": -165
}
},
{
"v0": {
"x": -345,
"z": -165
},
"v1": {
"x": -360,
"z": -165
}
},
{
"v0": {
"x": -330,
"z": -165
},
"v1": {
"x": -345,
"z": -165
}
},
{
"v0": {
"x": -315,
"z": -165
},
"v1": {
"x": -330,
"z": -165
}
},
{
"v0": {
"x": -300,
"z": -165
},
"v1": {
"x": -315,
"z": -165
}
},
{
"v0": {
"x": -285,
"z": -165
},
"v1": {
"x": -300,
"z": -165
}
},
{
"v0": {
"x": -270,
"z": -165
},
"v1": {
"x": -285,
"z": -165
}
},
{
"v0": {
"x": -255,
"z": -165
},
"v1": {
"x": -270,
"z": -165
}
},
{
"v0": {
"x": -240,
"z": -165
},
"v1": {
"x": -255,
"z": -165
}
},
{
"v0": {
"x": -225,
"z": -165
},
"v1": {
"x": -240,
"z": -165
}
},
{
"v0": {
"x": -210,
"z": -165
},
"v1": {
"x": -225,
"z": -165
}
},
{
"v0": {
"x": -195,
"z": -165
},
"v1": {
"x": -210,
"z": -165
}
},
{
"v0": {
"x": -180,
"z": -165
},
"v1": {
"x": -195,
"z": -165
}
},
{
"v0": {
"x": -165,
"z": -165
},
"v1": {
"x": -180,
"z": -165
}
},
{
"v0": {
"x": -150,
"z": -165
},
"v1": {
"x": -165,
"z": -165
}
},
{
"v0": {
"x": -135,
"z": -165
},
"v1": {
"x": -150,
"z": -165
}
},
{
"v0": {
"x": -120,
"z": -150
},
"v1": {
"x": -120,
"z": -165
}
},
{
"v0": {
"x": -120,
"z": -165
},
"v1": {
"x": -135,
"z": -165
}
},
{
"v0": {
"x": -675,
"z": -150
},
"v1": {
"x": -675,
"z": -135
}
},
{
"v0": {
"x": -120,
"z": -135
},
"v1": {
"x": -120,
"z": -150
}
},
{
"v0": {
"x": -675,
"z": -135
},
"v1": {
"x": -675,
"z": -120
}
},
{
"v0": {
"x": -120,
"z": -120
},
"v1": {
"x": -120,
"z": -135
}
},
{
"v0": {
"x": -675,
"z": -120
},
"v1": {
"x": -675,
"z": -105
}
},
{
"v0": {
"x": -120,
"z": -105
},
"v1": {
"x": -120,
"z": -120
}
},
{
"v0": {
"x": -675,
"z": -105
},
"v1": {
"x": -675,
"z": -90
}
},
{
"v0": {
"x": -120,
"z": -90
},
"v1": {
"x": -120,
"z": -105
}
},
{
"v0": {
"x": -675,
"z": -90
},
"v1": {
"x": -675,
"z": -75
}
},
{
"v0": {
"x": -120,
"z": -75
},
"v1": {
"x": -120,
"z": -90
}
},
{
"v0": {
"x": -675,
"z": -75
},
"v1": {
"x": -675,
"z": -60
}
},
{
"v0": {
"x": -120,
"z": -60
},
"v1": {
"x": -120,
"z": -75
}
},
{
"v0": {
"x": -675,
"z": -60
},
"v1": {
"x": -675,
"z": -45
}
},
{
"v0": {
"x": -105,
"z": -60
},
"v1": {
"x": -120,
"z": -60
}
},
{
"v0": {
"x": -90,
"z": -60
},
"v1": {
"x": -105,
"z": -60
}
},
{
"v0": {
"x": -75,
"z": -60
},
"v1": {
"x": -90,
"z": -60
}
},
{
"v0": {
"x": -60,
"z": -60
},
"v1": {
"x": -75,
"z": -60
}
},
{
"v0": {
"x": -45,
"z": -60
},
"v1": {
"x": -60,
"z": -60
}
},
{
"v0": {
"x": -30,
"z": -60
},
"v1": {
"x": -45,
"z": -60
}
},
{
"v0": {
"x": -15,
"z": -60
},
"v1": {
"x": -30,
"z": -60
}
},
{
"v0": {
"x": 0,
"z": -60
},
"v1": {
"x": -15,
"z": -60
}
},
{
"v0": {
"x": 15,
"z": -60
},
"v1": {
"x": 0,
"z": -60
}
},
{
"v0": {
"x": 30,
"z": -60
},
"v1": {
"x": 15,
"z": -60
}
},
{
"v0": {
"x": 45,
"z": -60
},
"v1": {
"x": 30,
"z": -60
}
},
{
"v0": {
"x": 60,
"z": -60
},
"v1": {
"x": 45,
"z": -60
}
},
{
"v0": {
"x": 75,
"z": -45
},
"v1": {
"x": 75,
"z": -60
}
},
{
"v0": {
"x": 75,
"z": -60
},
"v1": {
"x": 60,
"z": -60
}
},
{
"v0": {
"x": -675,
"z": -45
},
"v1": {
"x": -675,
"z": -30
}
},
{
"v0": {
"x": 75,
"z": -30
},
"v1": {
"x": 75,
"z": -45
}
},
{
"v0": {
"x": -675,
"z": -30
},
"v1": {
"x": -675,
"z": -15
}
},
{
"v0": {
"x": 75,
"z": -15
},
"v1": {
"x": 75,
"z": -30
}
},
{
"v0": {
"x": -675,
"z": -15
},
"v1": {
"x": -675,
"z": 0
}
},
{
"v0": {
"x": 75,
"z": 0
},
"v1": {
"x": 75,
"z": -15
}
},
{
"v0": {
"x": -675,
"z": 0
},
"v1": {
"x": -675,
"z": 15
}
},
{
"v0": {
"x": 75,
"z": 15
},
"v1": {
"x": 75,
"z": 0
}
},
{
"v0": {
"x": -675,
"z": 15
},
"v1": {
"x": -675,
"z": 30
}
},
{
"v0": {
"x": 75,
"z": 30
},
"v1": {
"x": 75,
"z": 15
}
},
{
"v0": {
"x": -675,
"z": 30
},
"v1": {
"x": -675,
"z": 45
}
},
{
"v0": {
"x": 75,
"z": 45
},
"v1": {
"x": 75,
"z": 30
}
},
{
"v0": {
"x": -675,
"z": 45
},
"v1": {
"x": -675,
"z": 60
}
},
{
"v0": {
"x": 75,
"z": 60
},
"v1": {
"x": 75,
"z": 45
}
},
{
"v0": {
"x": -675,
"z": 60
},
"v1": {
"x": -675,
"z": 75
}
},
{
"v0": {
"x": 75,
"z": 75
},
"v1": {
"x": 75,
"z": 60
}
},
{
"v0": {
"x": -675,
"z": 75
},
"v1": {
"x": -675,
"z": 90
}
},
{
"v0": {
"x": 75,
"z": 90
},
"v1": {
"x": 75,
"z": 75
}
},
{
"v0": {
"x": -675,
"z": 90
},
"v1": {
"x": -675,
"z": 105
}
},
{
"v0": {
"x": 75,
"z": 105
},
"v1": {
"x": 75,
"z": 90
}
},
{
"v0": {
"x": -675,
"z": 105
},
"v1": {
"x": -675,
"z": 120
}
},
{
"v0": {
"x": 75,
"z": 120
},
"v1": {
"x": 75,
"z": 105
}
},
{
"v0": {
"x": -675,
"z": 120
},
"v1": {
"x": -675,
"z": 135
}
},
{
"v0": {
"x": 75,
"z": 135
},
"v1": {
"x": 75,
"z": 120
}
},
{
"v0": {
"x": -675,
"z": 135
},
"v1": {
"x": -675,
"z": 150
}
},
{
"v0": {
"x": 75,
"z": 150
},
"v1": {
"x": 75,
"z": 135
}
},
{
"v0": {
"x": -675,
"z": 150
},
"v1": {
"x": -675,
"z": 165
}
},
{
"v0": {
"x": 75,
"z": 165
},
"v1": {
"x": 75,
"z": 150
}
},
{
"v0": {
"x": -675,
"z": 165
},
"v1": {
"x": -675,
"z": 180
}
},
{
"v0": {
"x": 75,
"z": 180
},
"v1": {
"x": 75,
"z": 165
}
},
{
"v0": {
"x": -675,
"z": 180
},
"v1": {
"x": -675,
"z": 195
}
},
{
"v0": {
"x": 75,
"z": 195
},
"v1": {
"x": 75,
"z": 180
}
},
{
"v0": {
"x": -675,
"z": 195
},
"v1": {
"x": -675,
"z": 210
}
},
{
"v0": {
"x": 75,
"z": 210
},
"v1": {
"x": 75,
"z": 195
}
},
{
"v0": {
"x": -675,
"z": 210
},
"v1": {
"x": -675,
"z": 225
}
},
{
"v0": {
"x": 75,
"z": 225
},
"v1": {
"x": 75,
"z": 210
}
},
{
"v0": {
"x": -675,
"z": 225
},
"v1": {
"x": -675,
"z": 240
}
},
{
"v0": {
"x": 75,
"z": 240
},
"v1": {
"x": 75,
"z": 225
}
},
{
"v0": {
"x": -675,
"z": 240
},
"v1": {
"x": -675,
"z": 255
}
},
{
"v0": {
"x": 75,
"z": 255
},
"v1": {
"x": 75,
"z": 240
}
},
{
"v0": {
"x": -675,
"z": 255
},
"v1": {
"x": -675,
"z": 270
}
},
{
"v0": {
"x": 75,
"z": 270
},
"v1": {
"x": 75,
"z": 255
}
},
{
"v0": {
"x": -675,
"z": 270
},
"v1": {
"x": -675,
"z": 285
}
},
{
"v0": {
"x": 75,
"z": 285
},
"v1": {
"x": 75,
"z": 270
}
},
{
"v0": {
"x": -675,
"z": 285
},
"v1": {
"x": -675,
"z": 300
}
},
{
"v0": {
"x": 75,
"z": 300
},
"v1": {
"x": 75,
"z": 285
}
},
{
"v0": {
"x": -675,
"z": 300
},
"v1": {
"x": -675,
"z": 315
}
},
{
"v0": {
"x": 75,
"z": 315
},
"v1": {
"x": 75,
"z": 300
}
},
{
"v0": {
"x": -675,
"z": 315
},
"v1": {
"x": -675,
"z": 330
}
},
{
"v0": {
"x": 75,
"z": 330
},
"v1": {
"x": 75,
"z": 315
}
},
{
"v0": {
"x": -675,
"z": 330
},
"v1": {
"x": -675,
"z": 345
}
},
{
"v0": {
"x": 75,
"z": 345
},
"v1": {
"x": 75,
"z": 330
}
},
{
"v0": {
"x": -675,
"z": 345
},
"v1": {
"x": -675,
"z": 360
}
},
{
"v0": {
"x": 75,
"z": 360
},
"v1": {
"x": 75,
"z": 345
}
},
{
"v0": {
"x": -675,
"z": 360
},
"v1": {
"x": -675,
"z": 375
}
},
{
"v0": {
"x": -675,
"z": 375
},
"v1": {
"x": -660,
"z": 375
}
},
{
"v0": {
"x": -660,
"z": 375
},
"v1": {
"x": -645,
"z": 375
}
},
{
"v0": {
"x": -645,
"z": 375
},
"v1": {
"x": -630,
"z": 375
}
},
{
"v0": {
"x": -630,
"z": 375
},
"v1": {
"x": -615,
"z": 375
}
},
{
"v0": {
"x": -615,
"z": 375
},
"v1": {
"x": -600,
"z": 375
}
},
{
"v0": {
"x": -600,
"z": 375
},
"v1": {
"x": -585,
"z": 375
}
},
{
"v0": {
"x": -585,
"z": 375
},
"v1": {
"x": -570,
"z": 375
}
},
{
"v0": {
"x": 75,
"z": 375
},
"v1": {
"x": 75,
"z": 360
}
},
{
"v0": {
"x": -570,
"z": 375
},
"v1": {
"x": -570,
"z": 390
}
},
{
"v0": {
"x": 75,
"z": 390
},
"v1": {
"x": 75,
"z": 375
}
},
{
"v0": {
"x": -570,
"z": 390
},
"v1": {
"x": -570,
"z": 405
}
},
{
"v0": {
"x": 75,
"z": 405
},
"v1": {
"x": 75,
"z": 390
}
},
{
"v0": {
"x": -570,
"z": 405
},
"v1": {
"x": -570,
"z": 420
}
},
{
"v0": {
"x": 75,
"z": 420
},
"v1": {
"x": 75,
"z": 405
}
},
{
"v0": {
"x": -570,
"z": 420
},
"v1": {
"x": -570,
"z": 435
}
},
{
"v0": {
"x": 75,
"z": 435
},
"v1": {
"x": 75,
"z": 420
}
},
{
"v0": {
"x": -570,
"z": 435
},
"v1": {
"x": -570,
"z": 450
}
},
{
"v0": {
"x": 75,
"z": 450
},
"v1": {
"x": 75,
"z": 435
}
},
{
"v0": {
"x": -570,
"z": 450
},
"v1": {
"x": -570,
"z": 465
}
},
{
"v0": {
"x": -570,
"z": 465
},
"v1": {
"x": -555,
"z": 465
}
},
{
"v0": {
"x": -555,
"z": 465
},
"v1": {
"x": -540,
"z": 465
}
},
{
"v0": {
"x": -540,
"z": 465
},
"v1": {
"x": -525,
"z": 465
}
},
{
"v0": {
"x": -525,
"z": 465
},
"v1": {
"x": -510,
"z": 465
}
},
{
"v0": {
"x": -510,
"z": 465
},
"v1": {
"x": -495,
"z": 465
}
},
{
"v0": {
"x": -495,
"z": 465
},
"v1": {
"x": -480,
"z": 465
}
},
{
"v0": {
"x": -480,
"z": 465
},
"v1": {
"x": -465,
"z": 465
}
},
{
"v0": {
"x": -465,
"z": 465
},
"v1": {
"x": -450,
"z": 465
}
},
{
"v0": {
"x": -450,
"z": 465
},
"v1": {
"x": -435,
"z": 465
}
},
{
"v0": {
"x": -435,
"z": 465
},
"v1": {
"x": -420,
"z": 465
}
},
{
"v0": {
"x": -420,
"z": 465
},
"v1": {
"x": -405,
"z": 465
}
},
{
"v0": {
"x": -405,
"z": 465
},
"v1": {
"x": -390,
"z": 465
}
},
{
"v0": {
"x": -390,
"z": 465
},
"v1": {
"x": -375,
"z": 465
}
},
{
"v0": {
"x": -375,
"z": 465
},
"v1": {
"x": -360,
"z": 465
}
},
{
"v0": {
"x": -360,
"z": 465
},
"v1": {
"x": -345,
"z": 465
}
},
{
"v0": {
"x": -345,
"z": 465
},
"v1": {
"x": -330,
"z": 465
}
},
{
"v0": {
"x": -330,
"z": 465
},
"v1": {
"x": -315,
"z": 465
}
},
{
"v0": {
"x": -315,
"z": 465
},
"v1": {
"x": -300,
"z": 465
}
},
{
"v0": {
"x": -300,
"z": 465
},
"v1": {
"x": -285,
"z": 465
}
},
{
"v0": {
"x": -285,
"z": 465
},
"v1": {
"x": -270,
"z": 465
}
},
{
"v0": {
"x": -270,
"z": 465
},
"v1": {
"x": -255,
"z": 465
}
},
{
"v0": {
"x": -255,
"z": 465
},
"v1": {
"x": -240,
"z": 465
}
},
{
"v0": {
"x": -240,
"z": 465
},
"v1": {
"x": -225,
"z": 465
}
},
{
"v0": {
"x": -225,
"z": 465
},
"v1": {
"x": -210,
"z": 465
}
},
{
"v0": {
"x": -210,
"z": 465
},
"v1": {
"x": -195,
"z": 465
}
},
{
"v0": {
"x": -195,
"z": 465
},
"v1": {
"x": -180,
"z": 465
}
},
{
"v0": {
"x": -180,
"z": 465
},
"v1": {
"x": -165,
"z": 465
}
},
{
"v0": {
"x": -165,
"z": 465
},
"v1": {
"x": -150,
"z": 465
}
},
{
"v0": {
"x": -150,
"z": 465
},
"v1": {
"x": -135,
"z": 465
}
},
{
"v0": {
"x": -135,
"z": 465
},
"v1": {
"x": -120,
"z": 465
}
},
{
"v0": {
"x": -120,
"z": 465
},
"v1": {
"x": -105,
"z": 465
}
},
{
"v0": {
"x": -105,
"z": 465
},
"v1": {
"x": -90,
"z": 465
}
},
{
"v0": {
"x": -90,
"z": 465
},
"v1": {
"x": -75,
"z": 465
}
},
{
"v0": {
"x": -75,
"z": 465
},
"v1": {
"x": -60,
"z": 465
}
},
{
"v0": {
"x": -60,
"z": 465
},
"v1": {
"x": -45,
"z": 465
}
},
{
"v0": {
"x": -45,
"z": 465
},
"v1": {
"x": -30,
"z": 465
}
},
{
"v0": {
"x": -30,
"z": 465
},
"v1": {
"x": -15,
"z": 465
}
},
{
"v0": {
"x": -15,
"z": 465
},
"v1": {
"x": 0,
"z": 465
}
},
{
"v0": {
"x": 0,
"z": 465
},
"v1": {
"x": 15,
"z": 465
}
},
{
"v0": {
"x": 15,
"z": 465
},
"v1": {
"x": 30,
"z": 465
}
},
{
"v0": {
"x": 30,
"z": 465
},
"v1": {
"x": 45,
"z": 465
}
},
{
"v0": {
"x": 45,
"z": 465
},
"v1": {
"x": 60,
"z": 465
}
},
{
"v0": {
"x": 75,
"z": 465
},
"v1": {
"x": 75,
"z": 450
}
},
{
"v0": {
"x": 60,
"z": 465
},
"v1": {
"x": 75,
"z": 465
}
}
]
}