def fixSegment(self, segment, slab_poly): e1, e2 = segment.End1.PntCoord, segment.End2.PntCoord pnt1 = Pnt(e1.x, e1.y) pnt2 = Pnt(e2.x, e2.y) end1 = pnt1.copy() end2 = pnt2.copy() if not pnt1.isInPolygon(slab_poly): end1 = self.get_closest_intersection(pnt1, pnt2, slab_poly) if not pnt2.isInPolygon(slab_poly): end2 = self.get_closest_intersection(pnt2, pnt1, slab_poly) if end1 is not None and end2 is None: print((e1.x, e1.y, e2.x, e2.y)) print("polygon") for pnt in slab_poly.points: print((pnt.x(), pnt.y())) raise Exception if end1 is None and end2 is not None: print((e1.x, e1.y, e2.x, e2.y)) print("polygon") for pnt in slab_poly.points: print((pnt.x(), pnt.y())) raise Exception # start # for poly # ('(-1.82486794037,-1.03558377118)', '(-5.12486794037,-1.03558377118)') # ('(-9.12486794037,-5.63558377118)', '(-9.12486794037,-0.960583771182)') # ('result', '(-9.12486794037,-1.03558377118)') # ('outcome', None) # ('(-1.82486794037,-1.03558377118)', '(-5.12486794037,-1.03558377118)') # ('(-9.12486794037,-0.960583771182)', '(-4.94986794037,-0.960583771182)') # ('result', 'None') # ('outcome', None) # ('(-1.82486794037,-1.03558377118)', '(-5.12486794037,-1.03558377118)') # ('(-4.94986794037,-0.960583771182)', '(-4.94986794037,-5.63558377118)') # ('result', '(-4.94986794037,-1.03558377118)') # ('outcome', None) # ('(-1.82486794037,-1.03558377118)', '(-5.12486794037,-1.03558377118)') # ('(-4.94986794037,-5.63558377118)', '(-9.12486794037,-5.63558377118)') # ('result', 'None') # ('outcome', None) # (-5.124867940372748, -1.0355837711820652, -1.824867940372748, -1.0355837711820652) # polygon # (-9.12486794037277, -5.63558377118204) # (-9.12486794037277, -0.9605837711820402) # (-4.949867940372769, -0.9605837711820402) # (-4.949867940372769, -5.63558377118204) if end1 is None or end1.minus(end2).magn() == 0: return None return Segment(EndOfSegment(end1.pnt), EndOfSegment(end2.pnt), segment.Open)
def __init__(self, parent=None, wallShapes=None, slabShapes=None): super(Launcher, self).__init__() self.constraints = { "ecc_w": -0.5, "area_w": 1, "length_w": 1, "ratio": 1, "d": 1, } self.levels = Level.generateLevelsFromShapes(wallShapes, slabShapes) print("INFO INIT: DONE GENERATING LEVELS FROM SHAPES") self.levels.sort(key=lambda lvl: lvl.getHeight()) self.skeletonLevels = [ LevelSkeleton.createSkeletonFromLevel(level) for level in self.levels ] self.levelsHash = dict(list(zip(self.levels, self.skeletonLevels))) self.skeletonLevelsHash = dict( list(zip(self.skeletonLevels, self.levels))) print("INFO INIT: DONE GENERATING LEVELSKELETONS FROM LEVELS") baseSlabHeight = 0 for level in self.levels: if not len(self.levelsHash[level].getPolys() ): # or level.getHeight() <= 0: baseSlabHeight = level.getHeight() else: break for i, levelSkeleton in enumerate(self.skeletonLevels): prevLevels = self.skeletonLevelsHash[ levelSkeleton].getRightLowerLevels() if not prevLevels: continue prevLevels = [ self.levelsHash[level] for level in prevLevels if level.getHeight() > baseSlabHeight ] if not len(prevLevels): continue levelSkeleton.restrictLevelUsableWalls(prevLevels) self.storey_mode = False self.levels = [ level for level in self.levels if len(self.levelsHash[level].getPolys()) ] self.skeletonLevels = [ levelSkeleton for levelSkeleton in self.skeletonLevels if len(levelSkeleton.getPolys()) ] self.storeySkeletons = [] heights = [] for levelSkeleton in self.skeletonLevels: height = levelSkeleton.level.getHeight() if height not in heights: skeletons = [levelSkeleton] heights.append(height) for ls in self.skeletonLevels: if ls.level.getHeight() == height: skeletons.append(ls) self.storeySkeletons.append(StoreySkeleton(skeletons)) self.solutions = {} self.solutions = {} self.selectedRow = 1 self.pend = True # Vertical Loads Sdiv = SlabDivision(self.storeySkeletons[0]) # Sdiv.importWalls(self.skeletonLevels[0]) # Seg = Sdiv.createSlabSegments() # f2 = plt.figure(3,) # for segment in Sdiv.createSlabSegments(): # segment.End1.plotEnd() # segment.End2.plotEnd() # segment.PlotSeg() for room in Sdiv.rooms: # 0x7fd0cba0b9e0 > print(("room", room)) fig, ax = plt.subplots() color = (random(), random(), random()) color2 = (random(), random(), random()) for segment in room.get_segments(): e1, e2 = segment.End1.PntCoord, segment.End2.PntCoord pnt1 = Pnt(e1.x, e1.y) pnt2 = Pnt(e2.x, e2.y) c = color if pnt1.isInPolygon(room.slab_poly) else "r" segment.End1.plot(c, (fig, ax)) c2 = color if pnt2.isInPolygon(room.slab_poly) else "r" segment.End2.plot(c2, (fig, ax)) segment.plot(color, (fig, ax)) room.plot(color2, figax=(fig, ax)) # axes = ax.gca() ax.set_xlim([-10, 10]) ax.set_ylim([-8, 8]) plt.show()