-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathshifl_wire.py
116 lines (108 loc) · 3.76 KB
/
shifl_wire.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
#Функция для уменьшения количества проводников при конвертации форматов
import string
def shifl (wire,n,wirs):
out=[]
chng=0
pnt=wire[n]
rang=0
conn=0
#~ print "########################################"
#~ print "wire"
#~ print wire
#~ print "point"
#~ print wire(n)
#~ print "wires"
#~ print wirs
for j in wirs:
if (pnt==j[0]) or (pnt==j[1]):
#~ rang=rang+1
if (j[0][0]==wire[1][0] and j[0][0]==wire[0][0] and j[1][0]==wire[0][0] and j[1][0]==wire[1][0]) or (j[0][1]==wire[1][1] and j[0][1]==wire[0][1] and j[1][1]==wire[0][1] and j[1][1]==wire[1][1])and (chng==0):
if wire[1]==j[1]:
wire=[wire[0],j[0]]
elif wire[1]==j[0]:
wire=[wire[0],j[1]]
elif wire[0]==j[1]:
wire=[wire[1],j[0]]
elif wire[0]==j[0]:
wire=[wire[1],j[1]]
wirs.remove(j)
chng=1
out.append(chng)
out.append(wire)
out.append(wirs)
return out
#271.9 мбайт,79.7
#берем первый проводник первую точку смотрим оставшиеся проводники используя счетчик совпадений
#если совпадений нет или у нас ситуация --УГОЛ ,то не делаем ничего в случае --ПРЯМОЙ производим видоизменение
#проводника и досчитываем оставшиеся проводники , если тройник или четверник добавляеться запись connection~
#далее если было произведено объединение начинаем с объединенного проводника с новой точки
#если не было объединений то проверяем другую точку проводника.
def wirecomp(address_file_wire):
wirefile=address_file_wire
outfile=address_file_wire
f=open(wirefile,'r')
A=[]
S=f.readline()
while S!='':
S=string.strip(S)
coord=string.split(S)
if coord!=['Wire', 'Wire', 'Line']:
A.append([coord[:2],coord[2:]])
S=f.readline()
f.close()
print "###############################################################"
Pts=[]
C=[]
for i in A:
C.append(i[0])
C.append(i[1])
for i in C:
a=C.count(i)
if a>2:
Pts.append(i)
for j in range(a):
C.remove(i)
a=0
while (a<(len(A)-1)):
ind=0
i=A[a]
while(ind!=2):
p=i[ind]
ost=A[:a]
C=shifl(i,ind,A[(a+1):])
if C[0]==0:
ind=ind+1
i=C[1]
ost.append(C[1])
ost=ost+C[2]
A=ost
a=a+1
#этот кусок записывает преобразованную информацию
out=open(outfile,'w')
print "Number wires ",len(A)," Node number " ,len(Pts)
for i in A:
out.write("Wire Wire Line\n")
str="\t"+i[0][0]+" "+i[0][1]+" "+i[1][0]+" "+i[1][1]+"\n"
out.write(str)
for i in Pts:
str="Connection ~ "+i[0]+" "+i[1]+"\n"
out.write(str)
out.close()
print "######################################################"
print A