def drawSkeleton(self, levelSkeleton): ellipses = [] if levelSkeleton in self.solutions: solution = self.solutions[levelSkeleton] polys = self.getPolygonsFromLevelSkeletons(solution.levelSkeleton) c1 = solution.levelSkeleton.getCenterFromSlab() c2 = solution.levelSkeleton.getCenterFromShear() print("point in draw: ", str(c2)) print("point in draw2: ", str(c1)) e1 = Ellip(c1, 0.4) e2 = Ellip(c2, 0.4) ells = [e1, e2] ellipses = [ ells, [QtGui.QColor(255, 0, 0), QtGui.QColor(0, 255, 0)] ] for box in solution.getValidVoilesBoxes(self.constraints['d']): polys[0].append( Poly([Pnt(pnt[0], pnt[1]) for pnt in box.exterior.coords])) q1 = QtGui.QColor(0, 255, 0) q1.setAlpha(20) polys[1].append(q1) for box in solution.getNonValidVoilesBoxes(self.constraints['d']): polys[0].append( Poly([Pnt(pnt[0], pnt[1]) for pnt in box.exterior.coords])) q1 = QtGui.QColor(255, 0, 0) q1.setAlpha(20) polys[1].append(q1) else: polys = self.getPolygonsFromLevelSkeletons(levelSkeleton) self.draw(polys, ellipses)
def removeColumnIntersections(newWallSkeletons1,Columns): newWallSkeletons3 = [] newWallSkeletons33=copy.deepcopy(newWallSkeletons1) newWallSkeletons = [] toRemove = [] for column in Columns: pnts = column.exterior.coords Pnts = [] for i in range(len(pnts)): Pnts.append(Pnt(pnts[i][0], pnts[i][1])) ColumnWall = Poly(Pnts) for i in range(len(newWallSkeletons33)): wallskeleton = newWallSkeletons33[i] poly = wallskeleton.poly if poly.intersects(ColumnWall): if poly.intersection(ColumnWall).area() == poly.area():toRemove.append(wallskeleton) if poly.intersection(ColumnWall).area()!= poly.area(): wallsklts = LevelSkeleton.wallskeletonfromDif(poly,ColumnWall) newWallSkeletons33[i] = wallsklts[0] newWallSkeletons3.append(wallsklts[0]) if len(wallsklts) == 2: newWallSkeletons33.append(wallsklts[1]) newWallSkeletons3.append(wallsklts[1]) todelete = [] for column in Columns: pnts = column.exterior.coords Pnts = [] for i in range(len(pnts)): Pnts.append(Pnt(pnts[i][0], pnts[i][1])) ColumnWall = Poly(Pnts) for i in range(len(newWallSkeletons3)): wallskeleton = newWallSkeletons3[i] poly = wallskeleton.poly if poly.intersects(ColumnWall): intersection=poly.intersection(ColumnWall) if intersection != None: todelete.append(wallskeleton) for elmt in toRemove: if elmt in newWallSkeletons33: newWallSkeletons33.remove(elmt) for elmnt in newWallSkeletons33: if elmnt not in newWallSkeletons: newWallSkeletons.append(elmnt) for elmt in newWallSkeletons3: if elmt not in newWallSkeletons: newWallSkeletons.append(elmt) for wall in todelete: if wall in newWallSkeletons: newWallSkeletons.remove(wall) return newWallSkeletons
def getShapeBasePolygon(shape): from Geometry.Geom2D import Pnt,Poly polygons = getPolygonesFromShape(shape) minZ = min([pnt.z for polygon in polygons for pnt in polygon.points]) # print "min z: " + str(minZ) for polygon in polygons: points = [] if polygon.isInPlaneXY(minZ): for pnt in polygon.points: points.append(Pnt(pnt.x, pnt.y)) return Poly(points) return None
def getPolyFromStartEnd(self,start,end): parent = self.parentWall length = end - start newLengthVec = parent.vecLength.copy().resize(length) move = start moveVec = parent.vecLength.copy() moveVec.resize(move) topLeftPnt = parent.topLeftPnt + moveVec newWidthVec = parent.vecWidth.copy() pnt1 = topLeftPnt + newWidthVec pnt2 = pnt1 + newLengthVec pnt3 = topLeftPnt + newLengthVec poly = Poly([topLeftPnt, pnt1, pnt2, pnt3]) return poly
def getShapeXYPlanePolygons(shape,minZ=None,maxZ=None): from Geometry.Geom2D import Pnt,Poly polygons = getPolygonesFromShape(shape) polys = [] # print "min z: " + str(minZ) for polygon in polygons: points = [] if polygon.isInPlaneXY(): if minZ is not None and polygon.points[0].z < minZ: continue if maxZ is not None and polygon.points[0].z > maxZ: continue for pnt in polygon.points: points.append(Pnt(pnt.x, pnt.y)) polys.append(Poly(points)) return polys
def removeUnwantedWalls(LevelSkeletons,SolutionAxes,Columns): for levelSkeleton in LevelSkeletons: newWallSkeletons1 = [] newWallSkeletons4 = [] print("number of level", LevelSkeletons.index(levelSkeleton)) for wallskeleton in levelSkeleton.wallSkeletons: y = round(wallskeleton.poly.centroid().y, 2) x = round(wallskeleton.poly.centroid().x, 2) print("here wall ",levelSkeleton.wallSkeletons.index(wallskeleton),":",x,y) for axis in SolutionAxes.axes[0]: # print("here axis:",axis) if y==axis.coords[0][1] : newWallSkeletons1.append(wallskeleton) # print("added horizontal") for axis in SolutionAxes.axes[1]: if x==axis.coords[0][0] : newWallSkeletons1.append(wallskeleton) # if not test: levelSkeleton.wallSkeletons.remove(wallskeleton) for wallsklt in LevelSkeleton.removeColumnIntersections(newWallSkeletons1,Columns): newWallSkeletons4.append(wallsklt) for Column in Columns: pnts = Column.exterior.coords Pnts = [] for i in range(len(pnts)): Pnts.append(Pnt(pnts[i][0], pnts[i][1])) wall = Poly(Pnts) wallsklt = WallSkeleton.createSkeletonFromPoly(wall) wallsklt.iscolumnParent = True newWallSkeletons4.append(wallsklt) NewWallSkeletons = [] for wall in newWallSkeletons4: if wall not in NewWallSkeletons: NewWallSkeletons.append(wall) levelSkeleton.wallSkeletons = copy.deepcopy(NewWallSkeletons) return LevelSkeletons
def wallskeletonfromDif(poly,ColumnWall): newWallSkeletons = [] polys = poly.difference(ColumnWall) if polys.geom_type == 'Polygon': pnts = polys.exterior.coords Pnts = [] for i in range(len(pnts)): Pnts.append(Pnt(pnts[i][0], pnts[i][1])) polygon = Poly(Pnts) if polygon.area() > 0: newWallSkeletons.append(LevelSkeleton.Addnewpolys(polygon)) if polys.geom_type == "MultiPolygon": polygons = polys.geoms for Polys in polygons: pnts = Polys.exterior.coords Pnts = [] for i in range(len(pnts)): Pnts.append(Pnt(pnts[i][0], pnts[i][1])) polygon = Poly(Pnts) if polygon.area() > 0: newWallSkeletons.append(LevelSkeleton.Addnewpolys(polygon)) return newWallSkeletons