def ReadLmkTr(): #{ sv = [] tv = [] try: #{ if args.input == '-': #{ f = sys.stdin else: #}{ f = open(args.input, 'r') #} doc = et.parse(f) idx = 0 for lm in doc.findall('Landmark'): #{ s = lm.find('Source') t = lm.find('Target') sv.append(GetLmkVertex(s)) tv.append(GetLmkVertex(t)) VerbMsg('{:d} {:g} {:g} {:g} {:g} {:g} {:g}'. \ format( \ idx, \ sv[idx].vtX, sv[idx].vtY, sv[idx].vtZ, \ tv[idx].vtX, tv[idx].vtY, tv[idx].vtZ)) idx = idx + 1 #} if not args.input == '-': #{ f.close() #} if ((not len(sv) == len(tv)) or (len(sv) < 3)): #{ raise IOError() #} except IOError: #}{ ErrorMsg('Failed to read ITK affine transform from file ' + args.input) #} try: #{ n = len(sv) svtx = (w.WlzDVertex3 * n)() tvtx = (w.WlzDVertex3 * n)() errNum = w.enum__WlzErrorNum(w.WLZ_ERR_NONE) for i in range(0, n): #{ svtx[i] = sv[i] tvtx[i] = tv[i] #} tr = w.WlzAffineTransformLSq3D(n, tvtx, n, svtx, 0, None, \ w.enum__WlzTransformType(w.WLZ_TRANSFORM_3D_AFFINE), \ c.byref(errNum)) if bool(errNum) or \ (not int(tr.contents.type) == int(w.WLZ_TRANSFORM_3D_AFFINE)): #{ raise WlzError() #} except WlzError: #}{ ErrorMsg('Failed to compute LSq affine transform from landmarks (' + w.WlzStringFromErrorNum(errNum, None) + ')') #} mat = WlzTrToMat(tr) return(mat)