def getGroup(self, name=None): e = self.getPlotTargets() g={} for x in e: gns=cve.getDisplayGroup(x,False) for gn in gns: if not g.has_key(gn): g[gn]=[] g[gn].append(x) if name: return g.get(name) if not g: self.report("No Groups") gn=None elif len(g)==1: gn=g.keys()[0] else: l = self.askParam([{"Name":"Which Group", "Type":"List", "Value":g.keys()}]) if l: gn=l[0] else: gn=None return gn
def highlightEachGroup(self): for pn in self.graph.plots.keys(): c=self.graph.plots[pn]['color'] d=self.graph.plots[pn]['data'][:,3].copy() self.graph.plots[pn]['color']=[1.0,1.0,1.0] self.graph.plots[pn]['data'][:,3]=maximum(4, d*3) self.graph.recalc(pn) self.graph.OnDraw(pn) o=self.graph.modelRefs[pn]['mien.nmpml'] ssn= getDisplayGroup(o) or o.name() self.graph.screenShot(ssn+'highlight.bmp') self.graph.plots[pn]['color']=c self.graph.plots[pn]['data'][:,3]=d self.graph.recalc(pn)
def colorGroup(self, gn, col, hide=False, draw=True): #print gn, col, hide col=convertColor(col, 'gl') cn=convertColor(col, 'py') for name in self.plots.keys(): try: mr=self.modelRefs[name].get('mien.nmpml') except: continue if gn in cve.getDisplayGroup(mr, False): self.plots[name]['color']=col mr.setAttrib('color', cn, True) self.recalc(name) self.plots[name]["hide"]=hide if draw: self.OnDraw()
def onNewDoc(self): e = self.getPlotTargets(False) gcol={} for el in e: dg=cve.getDisplayGroup(el) if dg and not el.attrib('color', True): if not gcol.has_key(dg): gcol[dg]=self.graph.getNewColor(used=gcol.values()) col=convertColor(gcol[dg], 'py') grp = self.document.getElements("Group", dg) if grp: grp[0].setAttrib('color', col) else: el.setAttrib('color', col) self.addAll() self.graph.stdView() showDefault(self)
def selectNearest(self, event=None): #fids=[e for e in self.getVisible() if e.__tag__=='Fiducial'] fids=[e for e in self.getVisible()] closest=None pt=self.graph.findMouse(event.GetX(), event.GetY()) for fid in fids: pts=fid.getPoints() diams=pts[:,3] pts=pts[:,:3]-pt depths=dot(pts, self.graph.forward) inrange=nonzero1d(logical_and(depths>0, depths<self.graph.depthoffield)) if inrange.shape[0]==0: continue depths=take(depths, inrange, 0) dists=eucd(take(pts, inrange, 0), array([0,0,0.0]))-depths top=argmin(dists) dmin=dists[top] top=inrange[top] if not closest: closest=[fid, top, dmin] elif dmin<closest[2]: closest=[fid, top, dmin] name=closest[0].name() pt=closest[0].getPoints()[closest[1]] try: dia=pt[3] except: dia=.5 s = " %.3f, %.3f, %.3f, [%.3f] (%s[%i]) " % (pt[0], pt[1], pt[2],2*dia,name, closest[1]) dg=cve.getDisplayGroup(closest[0], False) if dg: s+= "(group - %s)" % ("/".join(dg),) self.report(s) self.graph.highlightPoint(pt[:3]-1.1*dia*self.graph.forward) self._foundLastPoint.insert(0, (closest[0], closest[1])) self._foundLastPoint=self._foundSpatialPoint[:2] self._foundSpatialPoint.insert(0, pt[:3]) self._foundSpatialPoint=self._foundSpatialPoint[:2] if len(self._foundSpatialPoint)>1: lp=self._foundSpatialPoint[1] pt=self._foundSpatialPoint[0] dist=eucd(lp, pt) self.report("Distance from last point: %.4f" % dist)
def getElements(self, multi=True): if not multi: self.getOneElement() targets = self.getPlotTargets() dgroups = {} for el in targets: dgs = cve.getDisplayGroup(el, False) for dg in dgs: if not dg in dgroups: dgroups[dg]=[] dgroups[dg].append(el) dgn = {} for k in dgroups: n = len(dgroups[k]) if n > 1: gn = "%s (%i)" % (k, n) dgn[gn] = k if len(targets)>45 and not dgn: self.report("Too many unclassified elements for interactive selection") return targets els=nameHash(targets) keys = sorted(dgn)+sorted(els) l = self.askParam([{"Name":"Which Objects", "Type":"Select", "Value":keys}]) if not l: return [] select = [] for name in l[0]: if name in dgn: select.extend(dgroups[dgn[name]]) else: el = els[name] select.append(el) select = list(set(select)) return select