Changeset 988
- Timestamp:
- Mar 2, 2005, 2:11:28 PM (20 years ago)
- Location:
- inundation/ga/storm_surge/pmesh
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
inundation/ga/storm_surge/pmesh/mesh.py
r986 r988 1205 1205 self.userSegments.extend(newsegs) 1206 1206 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): 1209 1215 """ 1210 1216 Precon: There must be 3 or more vertices in the userVertices structure … … 1214 1220 for vertex in self.getUserVertices(): 1215 1221 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() 1219 1228 1220 1229 segs2delete = self.alphaUserSegments 1221 #for neededseg in boundary_segs:1222 # try:1223 # segs2delete.remove(neededseg)1224 # print "list delete",neededseg1225 # except:1226 # print "list don't delete",neededseg1227 #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 boundary1232 # addback.append(delseg)1233 #for seg in addback:1234 # segs2delete.remove(seg)1235 1230 1236 1231 new_segs = [] … … 1262 1257 self.alphaUserSegments.extend(alpha_segs) 1263 1258 1264 optimum_alpha = s hape.get_alpha()1259 optimum_alpha = self.shape.get_alpha() 1265 1260 # need to draw newsegs 1266 1261 return new_segs, segs2delete, optimum_alpha -
inundation/ga/storm_surge/pmesh/pmesh.py
r972 r988 5 5 from tkSimpleDialog import Dialog 6 6 import mesh 7 from Tkinter import FALSE,TRUE, Frame,X, LEFT,YES,BOTH,ALL,Widget,CURRENT, Label,W, Entry, E, StringVar, END, Checkbutton, Radiobutton, IntVar 7 from Tkinter import FALSE,TRUE, Frame,X, LEFT,YES,BOTH,ALL,Widget,CURRENT, Label,W, Entry, E, StringVar, END, Checkbutton, Radiobutton, IntVar, DISABLED, NORMAL 8 8 #from cursornames import TLC,TRC, BLC, BRC, TS, RS, LS, BS 9 9 from tkMessageBox import showerror, _show, QUESTION,YESNOCANCEL … … 130 130 label='Auto segment', 131 131 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) 132 136 self.menuBar.addmenuitem('File', 'command', 'Normalise mesh', 133 137 label='Normalise mesh', command=self.normaliseMesh) … … 628 632 if dialog.alphaValueOk: 629 633 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()) 631 638 else: 632 639 showerror('pMesh', 633 640 'Bad alpha value.') 634 641 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()) 636 646 637 647 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 ): 639 653 """ 640 654 add Segments to bound all vertices … … 646 660 if len(self.mesh.getUserVertices()) >= 3: 647 661 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) 649 665 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) 651 669 652 670 #print "newsegs",newsegs … … 669 687 670 688 689 def autoSegmentFilter (self): 690 dialog = autoSegmentFilterDialog(self.canvas) 691 dialog.use_optimum.get() == SET_ALPHA 692 671 693 def joinVerticesButton (self, parent): 672 694 self.joinVertices() … … 1439 1461 1440 1462 class 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 1547 class AutoSegmentFilterDialog(Dialog): 1441 1548 """ 1442 1549 Dialog box for adding segments … … 1525 1632 1526 1633 1634 1527 1635 class MeshGenDialog(Dialog): 1528 1636 """
Note: See TracChangeset
for help on using the changeset viewer.