Немножко переделал код и сделал пакетный экспорт, но СУТЬ проблемы НЕ ИЗМЕНИЛАСЬ.
Если вычислить не удается то vol и arимеют значение None. В этом случае записи у меня просто не будет. Повторюсь: при этом вычисления через соответствующий пункт меню программы идет без проблем. Ошибок в консоли нет.
class lineParam(object):
def __init__(self, object):
self.chunk = object
print(u"Экспорт размеров")
def export(self):
try:
print(u"Для одного блока")
path = PhotoScan.app.getExistingDirectory(u"Сохранить параметры")
paramFile = open(path+"\\"+str(self.chunk.label).split('_', 1)[0]+"_PARAMETERS.txt", 'w+')
mod=self.chunk.model
T = self.chunk.transform.matrix
saveVol=False
xo=self.lenghByAxis(mod,T,0)
print(u"xo " +str(xo))
yo=self.lenghByAxis(mod,T,1)
print(u"yo " +str(yo))
zo=self.lenghByAxis(mod,T,2)
print(u"zo " +str(zo))
try:
vol=mod.volume()
ar=mod.area()
if vol==0:
PhotoScan.app.messageBox(u"Внимание! Объем равен нулю. Проверьте герметичность модели.")
if vol!=None or ar!=None:
saveVol=True
except IOError:
print(u"Не могу вычичслить объем и площадь")
if saveVol==True:
paramFile.write("V= "+str(round(vol, 4)).replace(".", ",")+" mm^3")
paramFile.write('\n')
paramFile.write("S= "+str(round(ar, 4)).replace(".", ",")+" mm^2")
paramFile.write('\n')
paramFile.write("x= "+str(round(xo, 4)).replace(".", ",")+" mm")
paramFile.write('\n')
paramFile.write("y= "+str(round(yo, 4)).replace(".", ",")+" mm")
paramFile.write('\n')
paramFile.write("z= "+str(round(zo, 4)).replace(".", ",")+" mm")
paramFile.write('\n')
paramFile.close()
print(u"Параметры сохранены")
except IOError:
print(u"Не удалось сохранить параметры")
def allexport(self):
try:
print(u"Для всех блоков")
doc = PhotoScan.app.document
app = QApplication.instance()
parent = app.activeWindow()
path = PhotoScan.app.getExistingDirectory(u"Сохранить параметры")
paramFile = open(path+"\\"+"ALL_PARAMETERS.csv", 'w+')
#dialog = progressDialog(u"Статус экспорта",parent)
#dialog.resize(300, 100)
print(u"Создан прогрессбар")
paramFile.write("Номер образца;X (мм);Y (мм);Z (мм);Объем (мм^3);Площадь (мм^2)")
paramFile.write('\n')
for c in doc.chunks:
print(u"Блок " + str(c.label) + u" это " + str(doc.chunks.index(c)+1) +u" блок из " + str(len(doc.chunks)))
mod=c.model
T = c.transform.matrix
xo=self.lenghByAxis(mod,T,0)
print(u"xo " +str(xo))
yo=self.lenghByAxis(mod,T,1)
print(u"yo " +str(yo))
zo=self.lenghByAxis(mod,T,2)
print(u"zo " +str(zo))
saveVol=False
try:
vol=mod.volume()
ar=mod.area()
if vol==0:
PhotoScan.app.messageBox(u"Внимание! Объем равен нулю. Проверьте герметичность модели.")
if vol!=None or ar!=None:
saveVol=True
except IOError:
print(u"Не могу вычичслить объем и площадь")
paramFile.write(str(c.label).split('_', 1)[0]+";"+str(round(xo, 4)).replace(".", ",")+";"+str(round(yo, 4)).replace(".", ",")+";"+str(round(zo, 4)).replace(".", ",")+";")
if saveVol==True:
paramFile.write(str(round(vol, 4)).replace(".", ",")+";"+str(round(ar, 4)).replace(".", ","))
paramFile.write('\n')
print(u"Параметры сохранены")
paramFile.close()
except IOError:
print(u"Не удалось сохранить параметры")
def lenghByAxis(self, mod,T, axis):
coordinate=mod.vertices[0].coord
coordinate=T.mulv(coordinate)
min = max = coordinate[axis]
for v in mod.vertices:
coordinate=v.coord
coordinate=T.mulv(coordinate)
if min>coordinate[axis]:
min = coordinate[axis]
if max<coordinate[axis]:
max = coordinate[axis]
dif = max - min
return dif
Вот данные CSV файла после пакетного сохранения параметров (керна):
Номер образца;X (мм);Y (мм);Z (мм);Объем (мм^3);Площадь (мм^2)
CORE002;64,7449;31,539;31,6422;
CORE001;64,2366;31,03;32,2758;
CORE003;63,3981;31,7091;31,6344;
CORE005;63,6054;31,3906;32,1512;
CORE006;64,1096;31,076;31,0631;
CORE009;63,2876;30,8854;31,1099;
CORE0011;63,3418;31,0886;31,0402;
CORE0012;63,2782;31,3693;31,1193;
CORE008;63,257;30,8895;30,9089;46610,167;7546,184
CORE0013;63,9342;31,9923;31,1513;46989,2956;7576,7966
CORE016;65,3816;32,2372;31,5789;
CORE017;64,6497;31,6619;31,6181;
CORE019;64,2848;31,5466;31,4941;
CORE020;63,8163;31,1824;31,2356;
CORE021;64,2268;31,5619;31,391;
CORE022;63,6909;31,2951;31,1655;
CORE023;63,7445;31,1891;31,216;
CORE026;63,3914;31,0154;30,9986;46934,507;7580,8991
CORE027;63,2671;30,9806;30,9302;46992,7339;7547,7587
CORE028;63,3117;31,0575;31,0525;
CORE029;63,5057;31,3401;31,2398;
CORE030;63,5713;31,2345;31,3314;
CORE031;64,2091;31,3774;31,1929;
CORE32;64,4755;31,3146;31,2655;
CORE25;53,1608;31,0337;30,9371;
CORE033;63,9241;31,0472;31,1537;
CORE034;63,4707;31,1532;31,4789;
CORE035;63,7535;31,0671;31,3062;
CORE036;63,8754;31,4902;31,5228;
CORE037;63,0556;31,0322;31,2188;
CORE038;63,3819;31,3655;31,252;
CORE039;58,2436;31,1316;30,9979;
CORE040;63,0122;31,1409;31,2275;
CORE041;63,0396;31,0196;31,1487;
CORE045;63,0355;30,9402;31,03;
CORE046;62,971;31,0153;30,9464;
CORE049;63,7335;31,135;31,2315;
CORE051;63,3826;31,035;31,1308;
CORE053;63,403;31,2063;31,1389;
CORE054;63,2347;30,9507;30,9675;
CORE055;63,2905;31,2616;30,9598;
CORE056;62,9993;30,9386;31,2494;