Beispiel #1
0
    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)
Beispiel #2
0
    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
Beispiel #3
0
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
Beispiel #4
0
 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
Beispiel #5
0
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
Beispiel #6
0
    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
Beispiel #7
0
 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