Ejemplo n.º 1
0
    def __init__(self, workGroup):
        """Constructor"""
        wx.Dialog.__init__(self, None, wx.ID_ANY, "Control Points"\
              , size = (400,500))
        self.workGroup = workGroup

        wk          = self.workGroup
        patch       = wk.inspector.currentPatch
        patchItem   = wk.inspector.currentPatchItem
        geoItem     = wk.inspector.tree.GetItemParent(patchItem)
        geo         = wk.inspector.tree.GetItemData(geoItem)
        patch_id    = geo.index(patch)
        patchInfo   = geo.list_patchInfo[patch_id]
        patchInfo.showPoints = True
        # Refresh the viewer
        wk.Refresh()

        self.patch = patch
        self.patchInfo = patchInfo

        self._patchItem = patchItem
        self._geoItem   = geoItem
        self._geo       = geo

        from viewer import SelectedPoints
        self.selectedPoints = SelectedPoints(self.patch)

        pnl = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        self.list_ctrl = wx.ListCtrl(pnl \
                              , style=wx.LC_REPORT|wx.EXPAND|wx.BORDER_SUNKEN)

        self.list_ctrl.InsertColumn(0, "Point")
        self.list_ctrl.InsertColumn(1, "x")
        self.list_ctrl.InsertColumn(2, "y")
        self.list_ctrl.InsertColumn(3, "z")
        self.list_ctrl.InsertColumn(4, "w")

        self.list_ctrl.Bind(wx.EVT_LIST_ITEM_SELECTED, self.onItemSelected)

        rows = []
        n = self.patch.shape
        # if 1D case
        if self.patch.dim == 1:
            for i in range(0,n[0]):
                P = self.patch.points[i,:]
                w = str(self.patch.weights[i])
                ijk   = "("+str(i)+")"
                Q = str(P[0]), str(P[1]), str(P[2])
                rows.append(Point(ijk,Q,w))
        # if 2D case
        if self.patch.dim == 2:
            for j in range(0,n[1]):
                for i in range(0,n[0]):
                    P = self.patch.points[i,j,:]
                    w = str(self.patch.weights[i,j])
                    ijk   = "("+str(i)+","+str(j)+")"
                    Q = str(P[0]), str(P[1]), str(P[2])
                    rows.append(Point(ijk,Q,w))
        # if 3D case
        if self.patch.dim == 3:
            for k in range(0,n[2]):
                for j in range(0,n[1]):
                    for i in range(0,n[0]):
                        P = self.patch.points[i,j,k,:]
                        w = str(self.patch.weights[i,j,k])
                        ijk   = "("+str(i)+","+str(j)+","+str(k)+")"
                        Q = str(P[0]), str(P[1]), str(P[2])
                        rows.append(Point(ijk,Q,w))
        self.rows = rows
        index = 0
        self.myRowDict = {}
        for row in self.rows:
            self.list_ctrl.InsertStringItem(index, row.ijk)
            self.list_ctrl.SetStringItem(index, 1, row.x)
            self.list_ctrl.SetStringItem(index, 2, row.y)
            self.list_ctrl.SetStringItem(index, 3, row.z)
            self.list_ctrl.SetStringItem(index, 4, row.w)
            self.myRowDict[index] = row
            index += 1

        hbox = wx.BoxSizer(wx.VERTICAL)
        hbox.Add(self.list_ctrl, 1, wx.EXPAND, 5)
        pnl.SetSizer(hbox)

        vbox.Add(pnl, proportion=1, flag=wx.EXPAND, border=5)
        self.SetSizer(vbox)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        updateButton = wx.Button(self, label='Update')
        hbox2.Add(updateButton)

        vbox.Add(hbox2,flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=10)

        self.list_ctrl.Bind(wx.EVT_RIGHT_DOWN, self.OnRightMouseClick)
        updateButton.Bind(wx.EVT_BUTTON, self.OnUpdate)

        self.menu_titles = ["Edit", "Mark", "Select"]

        self.menu_title_by_id = {}
        for title in self.menu_titles:
            self.menu_title_by_id[ wx.NewId() ] = title

        self.SetFocus()

        self.ID_CLOSE = wx.NewId()
        self.Bind(wx.EVT_MENU, self.OnClose, id=self.ID_CLOSE)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL,  wx.WXK_ESCAPE, self.ID_CLOSE )])
        self.SetAcceleratorTable(accel_tbl)