forked from linmingchih/HowtoSim_Script
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSweepExcitation.py
107 lines (81 loc) · 4.08 KB
/
SweepExcitation.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
oProject = oDesktop.GetActiveProject()
oDesign = oProject.GetActiveDesign()
oEditor = oDesign.SetActiveEditor("3D Modeler")
import collections, os
class CatchView():
def __init__(self, path, report_name):
self.path=path
self.pages=collections.OrderedDict()
self.v=self.initViews()
self.dir='{}/{}'.format(path,report_name)
try:
os.mkdir(self.dir)
except:
pass
self.html='{}/{}.html'.format(path, report_name)
def saveSection(self, title):
self.pages[title]=[]
for v in self.v:
oEditor.SetTopDownViewDirectionForActiveView(v)
image_path='{}/{}_{}.png'.format(self.dir, title, v)
self.saveImage(image_path)
self.pages[title].append((v,image_path))
def initViews(self):
tostr=lambda *args: tuple(str(i) for i in args)
views=collections.OrderedDict()
views['front']=tostr(0,0,-1,0,1,0)
views['back']=tostr(0,0,-1,0,-1,0)
views['top']=tostr(1,0,0,0,1,0)
views['bottom']=tostr(-1,0,0,0,1,0)
views['left']=tostr(0,0,-1,-1,0,0)
views['right']=tostr(0,0,-1,1,0,0)
exsistingCS=oEditor.GetRelativeCoordinateSystems()
for k in views:
if k not in exsistingCS: self.createCS(k, views[k])
return views.keys()
def createCS(self, name, u):
oEditor.SetWCS(["NAME:Set WCSParameter","Working Coordinate System:=","Global","RegionDepCSOk:=",False])
cs=oEditor.CreateRelativeCS(["NAME:RelativeCSParameters","Mode:=","Axis/Position","OriginX:=","0mm","OriginY:=","0mm","OriginZ:=","0mm","XAxisXvec:=",u[0],"XAxisYvec:=",u[1],"XAxisZvec:=",u[2],"YAxisXvec:=",u[3],"YAxisYvec:=",u[4],"YAxisZvec:=",u[5]],["NAME:Attributes","Name:=",name])
def saveImage(self, path):
oEditor.FitAll()
options=['NAME:SaveImageParams','ShowAxis:=','Default','ShowGrid:=','Default','ShowRuler:=','Default']
oEditor.ExportModelImageToFile(path, 300,240, options)
def genhtml(self):
with open(self.html, 'w') as f:
f.writelines('<style>H2{background: blue;color: #fff;padding: 5px 5px;}</style>\n')
for k in self.pages:
f.writelines('<H2>{}</H2>\n'.format(k))
for i, j in self.pages[k]:
f.writelines('<img src="{}">\n'.format(j))
import webbrowser, os
webbrowser.open('file://' + os.path.realpath(self.html))
class excitation():
def __init__(self, weighting):
'''
weighting( {'p1':(1,0), 'p2':(1,5), 'p3':(1,10), 'p4':(1,20)}
'''
self.oModule=oDesign.GetModule("Solutions")
self.dic={i:(0,0) for i in self.oModule.GetAllSources()}
for key in weighting:
if key not in self.dic:
raise Exception('Key "{}" does not exist in this project!'.format(key))
else:
self.dic[key] = weighting[key]
def set(self):
def single_port(name, exc):
mag, phase=exc
return ["Name:=","{}:1".format(name),"Magnitude:=","{}W".format(mag),"Phase:=","{}deg".format(phase)]
allport=[single_port(i, self.dic[i]) for i in self.dic]
self.oModule.EditSources([["IncludePortPostProcessing:=",False,"SpecifySystemPower:=",False]]+allport)
modes=collections.OrderedDict()
modes['mode0 0 deg']={'p1':(1,0),'p2':(1,0),'p3':(1,0),'p4':(1,0)}
modes['mode1 20deg']={'p1':(1,0),'p2':(1,20),'p3':(1,40),'p4':(1,60)}
modes['mode2 40deg']={'p1':(1,0),'p2':(1,40),'p3':(1,80),'p4':(1,120)}
modes['mode3 60deg']={'p1':(1,0),'p2':(1,60),'p3':(1,120),'p4':(1,180)}
modes['mode4 80deg']={'p1':(1,0),'p2':(1,80),'p3':(1,160),'p4':(1,240)}
cv=CatchView('d:/demo2', 'FarField')
for m in modes:
exc=excitation(modes[m])
exc.set()
cv.saveSection(m)
cv.genhtml()