Changeset 988


Ignore:
Timestamp:
Mar 2, 2005, 2:11:28 PM (20 years ago)
Author:
duncan
Message:

change in alpha interface

Location:
inundation/ga/storm_surge/pmesh
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • inundation/ga/storm_surge/pmesh/mesh.py

    r986 r988  
    12051205        self.userSegments.extend(newsegs)
    12061206        return newsegs
    1207      
    1208     def autoSegment(self, alpha = None, boundary_type=REMOVE_PINCH_OFF):
     1207    def autoSegmentFilter(self,):
     1208        pass
     1209   
     1210    def autoSegment(self, alpha = None,
     1211                                 raw_boundary=True,
     1212                                 remove_holes=False,
     1213                                 smooth_indents=False,
     1214                                 expand_pinch=False):
    12091215        """
    12101216        Precon: There must be 3 or more vertices in the userVertices structure
     
    12141220        for vertex in self.getUserVertices():
    12151221            points.append((vertex.x,vertex.y))
    1216         shape = alpha_shape.alpha_shape.Alpha_Shape(points, alpha = alpha)
    1217         shape.set_boundary_type(flag = boundary_type)
    1218         boundary_segs = shape.get_boundary()
     1222        self.shape = alpha_shape.alpha_shape.Alpha_Shape(points, alpha = alpha)
     1223        self.shape.set_boundary_type(raw_boundary=raw_boundary,
     1224                                 remove_holes=remove_holes,
     1225                                 smooth_indents=smooth_indents,
     1226                                 expand_pinch=expand_pinch)
     1227        boundary_segs = self.shape.get_boundary()
    12191228
    12201229        segs2delete = self.alphaUserSegments
    1221         #for neededseg in boundary_segs:
    1222         #    try:
    1223          #     segs2delete.remove(neededseg)
    1224          #     print "list delete",neededseg
    1225          #   except:
    1226          #       print "list don't delete",neededseg
    1227         #addback = []
    1228         #for delseg in segs2delete:
    1229         #    print "boundary_segs.count(delseg)",boundary_segs.count(delseg)
    1230         #    if boundary_segs.count(delseg) > 0:
    1231         #        #Don't delete this seg.  We need it for the new boundary
    1232         #        addback.append(delseg)
    1233         #for seg in addback:
    1234         #    segs2delete.remove(seg)
    12351230               
    12361231        new_segs = []
     
    12621257        self.alphaUserSegments.extend(alpha_segs)
    12631258
    1264         optimum_alpha = shape.get_alpha()
     1259        optimum_alpha = self.shape.get_alpha()
    12651260        # need to draw newsegs
    12661261        return new_segs, segs2delete, optimum_alpha
  • inundation/ga/storm_surge/pmesh/pmesh.py

    r972 r988  
    55from   tkSimpleDialog import Dialog
    66import mesh
    7 from Tkinter import  FALSE,TRUE, Frame,X, LEFT,YES,BOTH,ALL,Widget,CURRENT, Label,W, Entry, E, StringVar, END, Checkbutton, Radiobutton, IntVar
     7from Tkinter import  FALSE,TRUE, Frame,X, LEFT,YES,BOTH,ALL,Widget,CURRENT, Label,W, Entry, E, StringVar, END, Checkbutton, Radiobutton, IntVar, DISABLED, NORMAL
    88#from cursornames import TLC,TRC, BLC, BRC, TS, RS, LS, BS
    99from tkMessageBox import showerror, _show, QUESTION,YESNOCANCEL
     
    130130                                 label='Auto segment',
    131131                                 command=self.autoSegment)
     132        self.menuBar.addmenuitem('File', 'command',
     133                           'modify the alpha boundary by applying filters',
     134                                 label='filter alpha boundary',
     135                                 command=self.autoSegmentFilter)
    132136        self.menuBar.addmenuitem('File', 'command', 'Normalise mesh',
    133137                                 label='Normalise mesh', command=self.normaliseMesh)
     
    628632            if dialog.alphaValueOk:
    629633                self.autoSegment(alpha = dialog.alpha,
    630                                  boundary_type=dialog.boundary_type.get())
     634                                 raw_boundary=dialog.raw_boundary.get(),
     635                                 remove_holes=dialog.remove_holes.get(),
     636                                 smooth_indents=dialog.smooth_indents.get(),
     637                                 expand_pinch=dialog.expand_pinch.get())
    631638            else:
    632639                 showerror('pMesh',
    633640                      'Bad alpha value.')
    634641        else:
    635             self.autoSegment(boundary_type=dialog.boundary_type.get())
     642            self.autoSegment(raw_boundary=dialog.raw_boundary.get(),
     643                             remove_holes=dialog.remove_holes.get(),
     644                             smooth_indents=dialog.smooth_indents.get(),
     645                             expand_pinch=dialog.expand_pinch.get())
    636646           
    637647       
    638     def autoSegment (self, alpha = None, boundary_type=mesh.REMOVE_PINCH_OFF):
     648    def autoSegment (self, alpha = None,
     649                                 raw_boundary=True,
     650                                 remove_holes=False,
     651                                 smooth_indents=False,
     652                                 expand_pinch=False ):
    639653        """
    640654        add Segments to bound all vertices
     
    646660        if len(self.mesh.getUserVertices()) >= 3:
    647661            if alpha == None:
    648                 newsegs, ObjectsToVisuallyDelete, self.meshLastAlpha = self.mesh.autoSegment(boundary_type=boundary_type)
     662                newsegs, ObjectsToVisuallyDelete, self.meshLastAlpha = self.mesh.autoSegment(remove_holes=remove_holes,
     663                                 smooth_indents=smooth_indents,
     664                                 expand_pinch=expand_pinch)
    649665            else:
    650                 newsegs, ObjectsToVisuallyDelete, self.meshLastAlpha = self.mesh.autoSegment(alpha=alpha,boundary_type=boundary_type)
     666                newsegs, ObjectsToVisuallyDelete, self.meshLastAlpha = self.mesh.autoSegment(alpha=alpha, remove_holes=remove_holes,
     667                                 smooth_indents=smooth_indents,
     668                                 expand_pinch=expand_pinch)
    651669               
    652670            #print "newsegs",newsegs
     
    669687
    670688
     689    def autoSegmentFilter (self):
     690        dialog = autoSegmentFilterDialog(self.canvas)
     691        dialog.use_optimum.get() == SET_ALPHA
     692       
    671693    def joinVerticesButton (self, parent):
    672694        self.joinVertices()
     
    14391461
    14401462class  AutoSegmentDialog(Dialog):
     1463    """
     1464    Dialog box for adding segments
     1465    """
     1466    def __init__(self, parent, alpha):
     1467        self.alpha = alpha
     1468        Dialog.__init__(self, parent)
     1469       
     1470    def body(self, master):
     1471        """
     1472        GUI description
     1473        """
     1474        self.title("Automatically Add Segments")
     1475
     1476        self.use_optimum = IntVar()
     1477        self.use_optimum.set(AUTO) # should initialise the radio buttons.
     1478                                   #  It doesn't
     1479                                   
     1480        #self.use_optimum.set(NO_SELECTION)
     1481        self.ck = Radiobutton(master, value = AUTO, variable=self.use_optimum)
     1482        self.ck.grid(row=1, column=0)
     1483        Label(master, text='Use optimum alpha').grid(row=1, column=1, sticky=W)
     1484
     1485        self.ck2 = Radiobutton(master, value = SET_ALPHA,
     1486                               variable=self.use_optimum)
     1487        self.ck2.grid(row=2, column=0)
     1488       
     1489        Label(master, text='alpha:').grid(row=2, column=1, sticky=W)
     1490        if (self.alpha):
     1491            alphaVar = StringVar()
     1492            alphaVar.set(self.alpha)
     1493            self.alpha_str  = Entry(master,
     1494                                     textvariable = alphaVar,
     1495                                     width = 16, name ="entry")
     1496        else:
     1497            self.alpha_str = Entry(master, width = 16, name ="entry")
     1498       
     1499        self.alpha_str.grid(row=2, column=3, sticky=W)
     1500
     1501        #boundary type buttons
     1502        self.raw_boundary = IntVar()
     1503        self.remove_holes = IntVar()
     1504        self.smooth_indents = IntVar()
     1505        self.expand_pinch = IntVar()
     1506        self.ck3 = Checkbutton(master, state=NORMAL,
     1507                               variable=self.raw_boundary)
     1508        self.ck3.grid(row=3, column=0)
     1509        Label(master, text='Raw boundary').grid(row=3, column=1, sticky=W)
     1510        #
     1511        self.ck4 = Checkbutton(master, state=NORMAL,
     1512                               variable=self.remove_holes)
     1513        self.ck4.grid(row=4, column=0)
     1514        Label(master, text='Remove small holes').grid(row=4,column=1, sticky=W)
     1515        #
     1516        self.ck5 = Checkbutton(master,state=NORMAL,
     1517                               variable=self.smooth_indents)
     1518        self.ck5.grid(row=5, column=0)
     1519        Label(master,
     1520              text='Remove sharp indents').grid(row=5, column=1, sticky=W)
     1521        #
     1522        self.ck6 = Checkbutton(master,state=NORMAL,
     1523                               variable=self.expand_pinch)
     1524        self.ck6.grid(row=6, column=0)
     1525        Label(master,
     1526              text='Remove pinch off').grid(row=6, column=1,  sticky=W)
     1527
     1528       
     1529        self.alpha  = 0
     1530        self.alphaValueOk = False
     1531       
     1532
     1533    def apply(self):
     1534        """
     1535        check entered values
     1536        """
     1537        try:
     1538            self.alpha = float(self.alpha_str.get())
     1539            self.alphaValueOk = True
     1540           
     1541        except ValueError:
     1542            pass
     1543            #showerror('Bad Alpha value',
     1544            #                       'Alpha is negative.')
     1545
     1546
     1547class  AutoSegmentFilterDialog(Dialog):
    14411548    """
    14421549    Dialog box for adding segments
     
    15251632
    15261633
     1634
    15271635class  MeshGenDialog(Dialog):
    15281636    """
Note: See TracChangeset for help on using the changeset viewer.