Changeset 8765:184c4022f54a in orange


Ignore:
Timestamp:
08/24/11 17:29:36 (3 years ago)
Author:
matejd <matejd@…>
Branch:
default
Convert:
9e7b34ed4414c95a2bb3394e4bb1cf0ef662e91a
Message:

Fixed freeviz anchor restraints

Location:
orange
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • orange/Orange/projection/linear.py

    r8761 r8765  
    214214        """ 
    215215        attr_list = self.get_shown_attribute_list() 
    216         if not attr_list: return 
     216        if not attr_list: 
     217            return 
     218        if "3d" in self.parentName.lower(): 
     219            self.graph.anchor_data = self.graph.create_anchors(len(attr_list), attr_list) 
     220            return 
    217221        phi = 2*math.pi/len(attr_list) 
    218222        self.graph.anchorData = [(math.cos(i*phi), math.sin(i*phi), a) 
     
    226230         
    227231        """ 
    228         if not self.graph.haveData: return 
     232        if not self.graph.haveData: 
     233            return 
    229234        attr_list = self.get_shown_attribute_list() 
    230         if not attr_list: return 
     235        if not attr_list: 
     236            return 
     237        if "3d" in self.parentName.lower(): 
     238            if self.restrain == 0: 
     239                def ranch(i, label): 
     240                    r = 0.3+0.7*random.random() 
     241                    phi = 2*math.pi*random.random() 
     242                    theta = math.pi*random.random() 
     243                    return (r*math.sin(theta)*math.cos(phi), 
     244                            r*math.sin(theta)*math.sin(phi), 
     245                            r*math.cos(theta), 
     246                            label) 
     247            elif self.restrain == 1: 
     248                def ranch(i, label): 
     249                    phi = 2*math.pi*random.random() 
     250                    theta = math.pi*random.random() 
     251                    r = 1. 
     252                    return (r*math.sin(theta)*math.cos(phi), 
     253                            r*math.sin(theta)*math.sin(phi), 
     254                            r*math.cos(theta), 
     255                            label) 
     256            else: 
     257                self.graph.anchor_data = self.graph.create_anchors(len(attr_list), attr_list) 
     258                def ranch(i, label): 
     259                    r = 0.3+0.7*random.random() 
     260                    return (r*self.graph.anchor_data[i][0], 
     261                            r*self.graph.anchor_data[i][1], 
     262                            r*self.graph.anchor_data[i][2], 
     263                            label) 
     264 
     265            anchors = [ranch(*a) for a in enumerate(attr_list)] 
     266 
     267            if not self.restrain == 1: 
     268                maxdist = math.sqrt(max([x[0]**2+x[1]**2+x[2]**2 for x in anchors])) 
     269                anchors = [(x[0]/maxdist, x[1]/maxdist, x[2]/maxdist, x[3]) for x in anchors] 
     270 
     271            self.graph.anchorData = anchors 
     272            return 
    231273 
    232274        if self.restrain == 0: 
  • orange/OrangeWidgets/OWFreeVizOptimization.py

    r8735 r8765  
    6363        vbox = OWGUI.widgetBox(self.MainTab, "Set anchor positions") 
    6464        hbox1 = OWGUI.widgetBox(vbox, orientation = "horizontal") 
    65         OWGUI.button(hbox1, self, "Circle", callback = self.radialAnchors) 
     65        OWGUI.button(hbox1, self, "Sphere" if "3d" in self.parentName.lower() else "Circle", callback = self.radialAnchors) 
    6666        OWGUI.button(hbox1, self, "Random", callback = self.randomAnchors) 
    6767        self.manualPositioningButton = OWGUI.button(hbox1, self, "Manual", callback = self.setManualPosition) 
     
    9696        self.freeAttributesButton = OWGUI.button(box, self, "Remove hidden attributes", callback = self.removeHidden) 
    9797 
    98         if parentName.lower() != "radviz": 
     98        if parentName.lower() != "radviz" and parentName.lower() != "sphereviz": 
    9999            pcaBox = OWGUI.widgetBox(self.ProjectionsTab, "Principal Component Analysis") 
    100100            OWGUI.button(pcaBox, self, "Principal component analysis", callback = self.findPCAProjection) 
     
    189189    def setRestraints(self): 
    190190        if self.restrain: 
    191             positions = numpy.array([x[:2] for x in self.graph.anchorData]) 
    192191            attrList = self.getShownAttributeList() 
    193192            if not attrList: 
    194193                return 
     194 
     195            if "3d" in self.parentName.lower(): 
     196                positions = numpy.array([x[:3] for x in self.graph.anchorData]) 
     197                if self.restrain == 1: 
     198                    positions = numpy.transpose(positions) * numpy.sum(positions**2, 1)**-0.5 
     199                    self.graph.anchorData = [(positions[0][i], positions[1][i], positions[2][i], a) for i, a in enumerate(attrList)] 
     200                else: 
     201                    self.graph.create_anchors(len(attrList), attrList) 
     202 
     203                self.graph.updateData() 
     204                self.graph.repaint() 
     205                return 
     206 
     207            positions = numpy.array([x[:2] for x in self.graph.anchorData]) 
    195208 
    196209            if self.restrain == 1: 
  • orange/OrangeWidgets/Visualize Qt/OWLinProjQt.py

    r8761 r8765  
    142142                get_shown_attribute_list = lambda: [anchor[3] for anchor in self.graph.anchorData] 
    143143                self.freeVizDlg.get_shown_attribute_list = get_shown_attribute_list 
     144                self.freeVizDlg.getShownAttributeList = get_shown_attribute_list 
    144145                self.freeVizDlg._use_3D = True 
    145146 
Note: See TracChangeset for help on using the changeset viewer.