ich brauche mal Hilfe von erfahreneren Leuten. Ich programmiere Momentan ein Skript, um via Python und der Erweiterung "PyZDDE" für das Optiksimulationsprogramm Zemax OpticStudio Werte aus einer .csv zu lesen, mit diesen dann zu simulieren, um die Ergebnisse wieder in einer .csv auszugeben. Den Großteil des Codes habe ich mir aus Beispielen zusammengesucht, deswegen ist das Verständnis noch nicht so gegeben. Schonmal Vorweg: der Code funktionierte bisher - erst seitdem ich Zeile 48 bis 59 eingefügt habe hakt es.
Den Quelltext der PyZDDE-Erweiterung findet ihr hier: https://github.com/indranilsinharoy/PyZ ... de/zdde.py
Ich möchte die Funktion in Zeile 5461 "zSetNSCProperty" benutzen, habe aber die Syntax nicht ganz verstanden. Bisher habe ich die die Funktion ganz Stumpf wie im Quelltext aufgebaut:
Code: Alles auswählen
import sys
PyZDDEPath = 'C:\PyZDDE' # Assuming PyZDDE was unzipped here!
if PyZDDEPath not in sys.path:
sys.path.append(PyZDDEPath)
import os as os
import pyzdde.arraytrace as at
import pyzdde.zdde as pyz
import csv
ln = pyz.createLink()
ln.zGetRefresh()
zmxfile = os.path.split(ln.zGetFile())[1]
# Get maximum number of segments
maxSeg = ln.zGetNSCSettings().maxSeg
# limit the number maximum number of segments to 50
nMaxSeg = maxSeg if maxSeg < 50 else 50
# read Phosphor Data
dateihandler = open('Phosphor_Kennwerte.csv')
inhalt = dateihandler.read()
werte = []
zeilen = inhalt.split('\n')
for i in range(len(zeilen)):
spalten = zeilen[i].split(';')
werte.append(spalten)
density = werte[3][2]
particleindex = werte[4][2]
size = werte[5][2]
minthresh = werte[6][2]
bluemin = werte[7][2]
bluemax = werte[8][2]
fluorescenttrans = werte[9][2]
scattertrans = werte[10][2]
power = werte[11][2]
# set NSC Property
setscattermode = at.zSetNSCProperty(surfNum=1, objNum=2, code=81, value=2)
setmeanpath = at.zSetNSCProperty(surfNum=1, objNum=2, code=82, value=2)
setdllname = at.zSetNSCProperty(surfNum=1, objNum=2, code=84, value=Phosphor.dll)
setparticleindex = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=1 , code=85, value=particleindex)
setsize = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=2, code=85, value=size)
setdensity = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=3, code=85, value=density)
setmintresh = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=4, code=85, value=minthresh)
setbluemin = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=5, code=85, value=bluemin)
setmax = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=6, code=85, value=bluemax)
setfluorescenttrans = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=7, code=85, value=fluorescenttrans)
setscattertrans = at.zSetNSCProperty(surfNum=1, objNum=2, faceNum=8, code=85, value=scattertrans)
setwaveshift = at.zSetNSCProperty(surfNum=1, objNum=2, code=86, value=1,2,1)
# Trace a single in NSC mode with polarization and splitting, but no scattering.
rayData = at.zGetNSCTraceArray(n=1, Eyr=1.0, intensity=1, surf=1, usePolar=1,
split=1, nMaxSegments=50)
outputfile = "H:\\Listing of Array trace data.csv"
with open(outputfile, 'w') as f:
f.write("Listing of Array trace data\n")
f.write("{:^4}; {:^4}; {:^4}; {:^6}; {:^4}; {:^14}; {:^14}; {:^14}; {:^12}\n"
.format('seg#', 'Prnt', 'Levl', 'In', 'Hit', 'X', 'Y', 'Z', 'Intensity'))
for i, seg in enumerate(rayData):
segLevel = seg.segment_level
segParent = seg.segment_parent
insideOf = seg.inside_of
hitObj = seg.hit_object
x, y, z, l, m, n = seg.x, seg.y, seg.z, seg.l, seg.m, seg.n
intensity = seg.intensity
opl = seg.opl
line = ("{:4d}; {:4d}; {:4d}; {:4d}; {:4d}; {:15.6E}; {:15.6E}; {:15.6E}; {:8.4f}\n"
.format(i+1, segParent, segLevel, insideOf, hitObj, x, y, z, intensity))
f.write(line)
ln.close()
Code: Alles auswählen
Traceback (most recent call last):
File "H:\Testordner\test.py", line 48, in <module>
setscattermode = at.zSetNSCProperty(surfNum=1, objNum=2, code=81, value=2)
AttributeError: 'module' object has no attribute 'zSetNSCProperty'
Vielleicht kann mir ja jemand helfen... :K