①영 제51조제2항에 따라 6층 이상의 건축물로서 문화 및 집회시설, 종교시설, 판매시설, 운수시설, 의료시설, 교육연구시설 중 연구소, 노유자시설 중 아동관련시설·노인복지시설, 수련시설 중 유스호스텔, 운동시설, 업무시설, 숙박시설, 위락시설, 관광휴게시설 및 장례식장의 거실에는 다음 각호의 기준에 적합하게 배연설비를 설치하여야 한다. 다만, 피난층인 경우에는 그러하지 아니하다. <개정 1996.2.9,1999.5.11, 2002.8.31, 2009.12.31>
//건축물의 설비기준 등에 관한 규칙 14조 (배연설비) 1항
Check(RFB_14_1){
IF (CS) THEN KS
}
CS {
isObjectProperty(Floor.isEscape) = FALSE
}
KS {
isExist(SmokeExhaustionSystem)=TRUE
getResult(RFB_14_1_1) = TRUE
AND getResult(RFB_14_1_2) = TRUE
}
①영 제35조제1항의 규정에 의하여 건축물의 5층 이상 또는 지하 2층 이하의 층으로부터 피난층 또는 지상으로 통하는 직통계단(지하 1층인 건축물의 경우에는 5층 이상의 층으로부터 피난층 또는 지상으로 통하는 직통계단과 직접 연결된 지하 1층의 계단을 포함한다)은 피난계단 또는 특별피난계단으로 설치하여야 한다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 9조 (피난계단 및 특별피난계단의 구조) 1항
Check(REFB_9_1){
IF (CS1) THEN KS1 ELSE IF (CS2) THEN KS2
CS1{
Floor myFloor1 {
Floor.number > 5
OR Floor.number <= -2
}
Stair myStair1 {
isObjectProperty(Stair.isDirect) = TRUE
}
Floor myFloor2 {
isObjectProperty(Floor.isEscape)= TRUE
}
isGoThrough(myFloor1, myStair1, myFloor2)= TRUE
OR isGoThrough(myFloor1, myStair1, Ground) = TRUE
}
CS2{
Floor myFloor3 {
Floor.number >= 5
}
Stair myStair3 {
isObjectProperty(Stair.isDirect) = TRUE
(isGoThrough(myFloor3, myFloor2, Stair) = TRUE
OR isGoThrough(myFloor3, Ground, Stair) = TRUE)
}
Stair myStair2 {
Stair.Floor.number = -1
}
isDirectlyAccessible(myStair2, myStair3)=TRUE
KS1 {
(isObjectProperty(myStair1.isEscape) = TRUE
OR isObjectProperty(myStair1.isSpecialEscape) = TRUE)
}
KS2{
(isObjectProperty(myStair2.isEscape) = TRUE
OR isObjectProperty(myStair2.isSpecialEscape) = TRUE)
(isObjectProperty(myStair3.isEscape) = TRUE
OR isObjectProperty(myStair3.isSpecialEscape) = TRUE)
}
③영 제35조제1항에 따른 피난계단 또는 특별피난계단은 돌음계단으로 하여서는 아니되며, 영 제40조에 따라 옥상광장을 설치하여야 하는 건축물의 피난계단 또는 특별피난계단은 해당 건축물의 옥상으로 통하도록 설치하여야 한다. 이 경우 옥상으로 통하는 출입문은 피난방향으로 열리는 구조로서 피난시 이용에 장애가 없어야 한다. <개정 2010.4.7>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 9조 (피난계단 및 특별피난계단의 구조) 3항
Check(REFB_9_3) {
KS
}
KS {
Stair myStair1{
isObjectProperty(Stair.isEscape)=TRUE
OR isObjectProperty(Stair.isSpecialEscape)=TRUE
}
Space mySpace{
getObjectProperty(Space.usage) = “RooftopPlaza”
}
hasObject(Rooftop, mySpace)=TRUE
}
Stair myStair2{
hasObject(mySpace.Building,myStair1)=TRUE
}
getObjectProperty(myStair.type)!= “WindingStair”
isAccessible(myStair2,mySpace)=TRUE
isEgressDirection(mySpace.Door) = TRUE
}
①영 제39조제1항의 규정에 의하여 건축물의 바깥쪽으로 나가는 출구를 설치하는 경우 피난층의 계단으로부터 건축물의 바깥쪽으로의 출구에 이르는 보행거리(가장 가까운 출구와의 보행거리를 말한다. 이하 같다)는 영 제34조제1항의 규정에 의한 거리이하로 하여야 하며, 거실(피난에 지장이 없는 출입구가 있는 것을 제외한다)의 각 부분으로부터 건축물의 바깥쪽으로의 출구에 이르는 보행거리는 영 제34조제1항의 규정에 의한 거리의 2배 이하로 하여야 한다.
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 1항
Check(REFB_11_1){
IF CS THEN KS1 AND KS2
}
CS {
Door myDoor{
isObjectProperty(Door.isEntrance)=TRUE
}
isExist(myDoor)
}
KS1 {
Floor myFloor{
isObjectProperty(Floor.isEscape)=TRUE
}
getObjectDistance(myFloor.Stair, myDoor,a) <= EDBA_34_1.distance
}
KS2 {
getObjectDistance(Room, myDoor) <= (EDBA_34_1.distance)*2
}
⑤다음 각 호의 어느 하나에 해당하는 건축물의 피난층 또는 피난층의 승강장으로부터 건축물의 바깥쪽에 이르는 통로에는 제15조제5항에 따른 경사로를 설치하여야 한다. <개정 2010.4.7>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 11조 (건축물의 바깥쪽으로의 출구의 설치기준) 5항
Check(REFB_11_5){
IF CS1 AND CS2 THEN KS
}
CS1 {
getResult(REFB_11_5_1)=TRUE
OR getResult(REFB_11_5_2)=TRUE
OR getResult(REFB_11_5_3)=TRUE
OR getResult(REFB_11_5_4)=TRUE
OR getResult(REFB_11_5_5)=TRUE
OR getResult(REFB_11_5_6)=TRUE
}
CS2{
Floor myFloor{
isObjectProperty(Floor.isEscape)=TRUE
}
Passage myPassage{
isDirectlyAccessible(myFloor,Passage) = TRUE
OR isDirectlyAccessible(myFloor.Platform,Passage) = TRUE
isConnectedToExternal(Passage) = TRUE
}
isExist(myPassage)=TRUE
}
KS{
hasObject(myPassage,Ramp)=TRUE
getResult(REFB_15_5)=TRUE
}
1. 피난구의 덮개는 제26조에 따른 비차열 1시간 이상의 내화성능을 가져야 하며, 피난구의 유효 개구부 규격은 직경 60센티미터 이상일 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 14조 (방화구획의 설치기준) 3항 1호
Check(REFB_14_3_1){
KS
}
KS{
Opening myOpening {
isObjectProperty(Opening.isEscape)=True
}
getObjectDiameter(myOpening)>60 cm
}
5. 비상탈출구는 피난층 또는 지상으로 통하는 복도나 직통계단에 직접 접하거나 통로 등으로 연결될 수 있도록 설치하여야 하며, 피난층 또는 지상으로 통하는 복도나 직통계단까지 이르는 피난통로의 유효너비는 0.75미터 이상으로 하고, 피난통로의 실내에 접하는 부분의 마감과 그 바탕은 불연재료로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 25조 (지하층의 구조) 2항 5호
check(REFB_25_2_5){
Floor myFloor(
isObjectProperty(Floor.isEscape) = TRUE
)
Stair myStair{
isObjectProperty(Stair.isDirect) = TRUE
(isDirectlyAccessible(Stair, Ground) = TRUE
OR isDirectlyAccessible(Stair, myFloor) = TRUE)
}
Corridor myCorridor{
isDirectlyAccessible(Corridor, myFloor) = TRUE
OR isDirectlyAccessible(Corridor, Ground) = TRUE
}
Door myDoor{
Door.functionType = "Emergency"
Door.Floor.number < 0
}
(isDirectlyAccessible(myDoor, myStair) = TRUE
OR isDirectlyAccessible(myDoor, myCorridor) = TRUE
OR isGoThrough(myDoor, Corridor, myStair) = TRUE
OR isGoThrough(myDoor, Corridor, myCorridor) = TRUE)
Passage myPassage{
isObjectProperty(Passage.isEscape) = TRUE
}
getSpaceWidth(myPassage) >= 0.75 m
isObjectProperty(myPassage.InteriorFinish.Material.nonCombustibility) = TRUE
}
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 1호
Check (REFB_13_3_1){
KS
}
KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
mySpace.area > Roof.horizontalProjectionArea*0.1
}
3. 출입구·창문을 제외한 부분은 해당 건축물의 다른 부분과 내화구조의 바닥 및 벽으로 구획할 것
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 3호
Check(REFB_13_3_3){
KS
}
KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
isFirePartition(mySpace)=True
}
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 5호
Check(REFB_13_3_5){
KS
}
KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
isObjectProperty(mySpace.InteriorFinish.Material.nonCombustibility)=True
}
// 건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 13조 (헬리포트 및 구조공간 설치 기준) 3항 7호
check(REFB_13_3_7){
KS
}
KS{
Space mySpace{
isObjectProperty(Space.isEscape) = TRUE
}
hasObject(mySpace, WarningAndCommunicationFacility) = TRUE
}
⑦ 제1항 및 제2항에도 불구하고 영 제34조제4항 후단에 따라 피난층 또는 지상으로 통하는 직통계단을 설치하는 경우 계단 및 계단참의 너비는 다음 각 호의 구분에 따른 기준에 적합하여야 한다. <신설 2012.1.6>
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 7항
check(REFP_15_7){
IF CS THEN KS
}
CS{
Floor myFloor{
isObjectProperty(Floor.isEscape)=TRUE
}
isAccessible(Stair,myFloor)
OR isAccessible(Stair,Ground)
}
KS{
getResult(REFP_15_7_1)
OR getResult(REFP_15_7_2)
}
min_stair_width = 1.5
def Check():
for building in SELECT('building'):
bldg_type = building.SELECT('building type').STRING()
sub_type = building.SELECT('prop', '세부용도').STRING()
if bldg_type is "공통주택":
min_stair_width = 1.2
else :
min_stair_width = 1.5
d_stairs = building.SELECT('direct stair')
for d_stair in d_stairs:
s_stair_w = d_stair.SELECT('width').Unit(m)
breker = True
for stair_stories in d_stair.SELECT('storey'):
if stair_stories.SELECT('is evacuation storey').BOOL() is True :
break
elif stair_stories.SELECT('level') is "Ground" :
break
else:
breaker = False
if breaker is True:
d_stair.SUCCESS('해당계단은 피난층이나 지상으로 통하는 직통계단이 아닙니다.')
break
if d_stair_w >= min_stair_width:
d_stair.SUCCESS('계단의너비()' + d_stair_w + ')가 ' + '>=' + min_stair_width)
else:
d_stair.ERROR('계단의너비()' + d_stair_w + ')가 ' + '<' + min_stair_width)
①건축물의 대지 안에는 그 건축물 바깥쪽으로 통하는 주된 출구와 지상으로 통하는 피난계단 및 특별피난계단으로부터 도로 또는 공지(공원, 광장, 그 밖에 이와 비슷한 것으로서 피난 및 소화를 위하여 해당 대지의 출입에 지장이 없는 것을 말한다. 이하 이 조에서 같다)로 통하는 통로를 다음 각 호의 기준에 따라 설치하여야 한다. <개정 2010.12.13, 2015.9.22, 2016.5.17, 2017.2.3>
① 법 제49조제1항에 따라 5층 이상 또는 지하 2층 이하인 층에 설치하는 직통계단은 국토해양부령으로 정하는 기준에 따라 피난계단 또는 특별피난계단으로 설치하여야 한다. 다만, 건축물의 주요구조부가 내화구조 또는 불연재료로 되어 있는 경우로서 다음 각 호의 어느 하나에 해당하는 경우에는 그러하지 아니하다. <개정 2008.10.29>
//건축법 시행령 35조(피난계단의 설치) 1항
Check(EDBA_35_1){
IF (!CS1 AND !CS2 AND CS3) THEN KS
}
CS1 {
isFireProofStructure(MainStructuralPart) = TRUE
OR isObjectProperty(MainStructuralPart.Material.nonCombustibility) = TRUE
}
CS2 {
getResult(EDBA_35_1_1) = TRUE
OR getResult(EDBA_35_1_2) = TRUE
}
CS3{
Floor myFloor {
Floor.number > 5
OR Floor.number <= -2
}
Stair myStair {
isObjectProperty(Stair.isDirect) = TRUE
}
hasElement(myFloor, myStair) = TRUE
}
KS {
isObjectProperty(myStair.isEscape) = TRUE
OR isObjectProperty(myStair.isSpecialEscape) = TRUE
}
② 건축물(갓복도식 공동주택은 제외한다)의 11층(공동주택의 경우에는 16층) 이상인 층(바닥면적이 400제곱미터 미만인 층은 제외한다) 또는 지하 3층 이하인 층(바닥면적이 400제곱미터미만인 층은 제외한다)으로부터 피난층 또는 지상으로 통하는 직통계단은 제1항에도 불구하고 특별피난계단으로 설치하여야 한다. <개정 2008.10.29>
//건축법 시행령 35조 (피난계단의 설치) 2항
check(EDBA_35_2){
IF (CS1 AND CS2) THEN KS
}
CS1{
Building.usage != "MultiUnitHouse.SideCorridorTypeMultiUnitHouse"
}
CS2{
Floor myFloor{
IF (Building.usage = "MultiUnitHouse“)
THEN getFloorNumber(Floor) >= 16
ELSE
getFloorNumber(Floor) >= 11
ENDIF
OR getFloorNumber(Floor) < -3
getFloorArea(Floor) >= 400m2
}
Stair myStair {
(isAccessible(Stair, Floor.isEscape) = TRUE
OR isAccessible(Stair, Ground) = TRUE)
isObjectProperty(Stair.isDirect) = TRUE
}
hasObject(myFloor, myStair) = TRUE
}
KS{
isObjectProperty(myStair.isSpecialEscape) = TRUE
}
제37조 (지하층과 피난층 사이의 개방공간 설치) 바닥면적의 합계가 3천 제곱미터 이상인 공연장·집회장·관람장 또는 전시장을 지하층에 설치하는 경우에는 각 실에 있는 자가 지하층 각 층에서 건축물 밖으로 피난하여 옥외 계단 또는 경사로 등을 이용하여 피난층으로 대피할 수 있도록 천장이 개방된 외부 공간을 설치하여야 한다.
Check(EDBA_37){
IF (CS) THEN KS END IF
Space mySpace{
Space.Floor.area > 3000 M2;
Space.usage="PerformanceHall"
OR Space.usage="AssemblyHall"
OR Space.usage="Auditorium"
OR Space.usage="ExhibitionHall"
}
}
CS{
mySpace.Floor.number< 0
}
KS{
Stair myStair{
Stair.isOutdoor = TRUE
}
Floor myFloor{
Floor.isEscape = TRUE
}
Space mySpace{
hasObject(Space, Ceiling) != TRUE
}
(isGoThrough(mySpace, myStair, myFloor)=True
OR isGoThrough(mySpace, Ramp, myFloor)=True)
AND isExternal(mySpace)=True
}
std_area = 3000
std_area_label = '기준 바닥면적 합계'
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
if not (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장', '전시장']):
continue
base_storey_exist = False
under_stories = []
for storey in building.SELECT('storey'):
if storey.SELECT('prop', '기준 지상층').BOOL():
base_storey_exist = True
break
under_stories.append(storey)
if base_storey_exist == False:
building.ERROR('지상층이 존재하지 않습니다.')
continue
if len(under_stories) == 0:
continue
area_sum = 0.0
ex_spaces = []
for storey in under_stories:
for space in storey.SELECT('space'):
area_sum += space.SELECT('area').UNIT('m2').NUMBER()
if space.SELECT('is external').BOOL():
ex_spaces.append(space)
if area_sum < std_area:
building.SUCCESS('지하공간 바닥면적 합: ' + str(area_sum) + ' < ' + str(std_area))
continue
if len(ex_spaces) == 0:
building.ERROR('지하에 천장이 개방된 외부 공간이 없습니다.')
continue
for space in ex_spaces:
for stair in space.SELECT('stair'):
if stair.SELECT('is direct').BOOL():
space.SUCCESS('피난층으로 대피할 수 있는 외부 공간이 존재합니다.')
return
ex_spaces[0].ERROR('피난층으로 대피할 수 없습니다.')
4. 건축물의 최상층 또는 피난층으로서 대규모 회의장·강당·스카이라운지·로비 등의 용도로 쓰는 부분으로서 그 용도로 사용하기 위하여 불가피한 부분
//건축법 시행령 46조 (방화구획의 설치) 2항 4호
check(EDBA_46_2_4){
KS
}
KS{
Floor myFloor{
getObject(TopFloor)
OR isObjectProperty(Floor.isEscape)=TRUE
}
AND
(getSpaceUsage(myFloor.Space)="ConferenceRoom"
OR getSpaceUsage(myFloor.Space)="Hall"
OR getSpaceUsage(myFloor.Space)="SkyLounge"
OR getSpaceUsage(myFloor.Space)="Lobby"
OR isObjectProperty(Zone.isEgressSafetyZone)= TRUE
}
④ 공동주택 중 아파트로서 4층 이상인 층의 각 세대가 2개 이상의 직통계단을 사용할 수 없는 경우에는 발코니에 인접 세대와 공동으로 또는 각 세대별로 다음 각 호의 요건을 모두 갖춘 대피공간을 하나 이상 설치하여야 한다. 이 경우 인접 세대와 공동으로 설치하는 대피공간은 인접 세대를 통하여 2개 이상의 직통계단을 쓸 수 있는 위치에 우선 설치되어야 한다.
//건축법 시행령 46조 (방화구획의 설치) 4항
check(EDBA_46_4){
IF CS THEN KS1 AND KS2
}
Zone myZone{
isObjectProperty(Zone.isOccupiedByOneHousehold) = TRUE
}
KS1{
Space mySpace{
Space.isEscape = TRUE
}
isExist(Balcony)=TRUE
AND hasElement(Balcony,mySpace)=TRUE
AND (getResult(EDBA_46_4_1)=TRUE
AND getResult(EDBA_46_4_2)=TRUE
AND getResult(EDBA_46_4_3)=TRUE
AND getResult(EDBA_46_4_4)=TRUE)
}
KS2{
Stair myStair{
Stair.isDirect = TRUE
}
isGoThrough(myZone,mySpace,myZone)=TRUE
AND isGoThrough(mySpace,myZone,myStair)=TRUE
}
CS{
getBuildingUsage()="MultiUnitHouses.ApartmentHouses"
AND Floor.number >=4
AND isDirectlyAccessible(myZone, myStair)=TRUE
AND myStair.Number>=2
}
⑤ 제4항에도 불구하고 아파트의 4층 이상인 층에서 발코니에 설치하는 인접 세대와의 경계벽이 파괴하기 쉬운 경량구조 등이거나 경계벽에 피난구를 설치한 경우에는 대피공간을 설치하지 아니할 수 있다.
//건축법 시행령 46조 (방화구획의 설치) 5항
Check(EDBA_5){
CS
}
Space mySpace{
Space.isEscape = TRUE
}
CS{getObjectProperty(Building.usage)="ApartmentHouses"
AND isExist(Balcony)=TRUE
AND (hasObject(Balcony,Structure)=TRUE
AND (getResult(EDBA_5_1)=TRUE
or getResult(EDBA_5_2)=TRUE
or getResult(EDBA_5_3)=TRUE)
AND isExist(mySpace)=FALSE
}
② 법 제49조제2항에 따라 6층 이상인 건축물로서 문화 및 집회시설, 종교시설, 판매시설, 운수시설, 의료시설, 교육연구시설 중 연구소, 노유자시설 중 아동 관련 시설·노인복지시설, 수련시설 중 유스호스텔, 운동시설, 업무시설, 숙박시설, 위락시설, 관광휴게시설 및 장례식장의 거실에는 국토해양부령으로 정하는 기준에 따라 배연설비(排煙設備)를 하여야 한다. 다만, 피난층인 경우에는 그러하지 아니하다.
//건축법 시행령 51조 (거실의 채광 등) 2항
Check(EDBA_51_2){
IF (!CS1 AND CS2) THEN KS
}
CS1{
Floor myFloor{
isObjectProperty(Floor.isEscape) = TRUE
}
getFloorNumber(Room) = getFloorNumber(myFloor)
}
CS2{
getBuildingStoriesCount() >= 6
getResult(EDBA_51_2_1) = True
OR getResult(EDBA_51_2_2) = True
OR getResult(EDBA_51_2_3) = True
OR getResult(EDBA_51_2_4) = True
OR getResult(EDBA_51_2_5) = True
OR getResult(EDBA_51_2_6) = True
OR getResult(EDBA_51_2_7) = True
OR getResult(EDBA_51_2_8) = True
OR getResult(EDBA_51_2_9) = True
OR getResult(EDBA_51_2_10) = True
OR getResult(EDBA_51_2_11) = True
OR getResult(EDBA_51_2_12) = True
OR getResult(EDBA_51_2_13) = True
OR getResult(EDBA_51_2_14) = True
OR getResult(EDBA_51_2_15) = True
}
KS{
hasSpace(Room, SmokeExhaustionSystem) = True
getResult(RFB_14_1) = True
getResult(REFB_17_1) = True
getResult(REFB_17_2) = True
}
① 건축물의 피난층(직접 지상으로 통하는 출입구가 있는 층을 말한다. 이하 같다) 외의 층에서는 피난층 또는 지상으로 통하는 직통계단(경사로를 포함한다. 이하 같다)을 거실의 각 부분으로부터 계단(거실로부터 가장 가까운 거리에 있는 계단을 말한다)에 이르는 보행거리가 30미터 이하가 되도록 설치하여야 한다. 다만, 건축물(지하층에 설치하는 것으로서 바닥면적의 합계가 300제곱미터 이상인 공연장·집회장·관람장 및 전시장은 제외한다)의 주요구조부가 내화구조 또는 불연재료로 된 건축물은 그 보행거리가 50미터(층수가 16층 이상인 공동주택은 40미터) 이하가 되도록 설치할 수 있으며, 자동화 생산시설에 스프링클러 등 자동식 소화설비를 설치한 공장으로서 국토해양부령으로 정하는 공장인 경우에는 그 보행거리가 75미터(무인화 공장인 경우에는 100미터) 이하가 되도록 설치할 수 있다. <개정 2009.7.16>
// 건축법 시행령 34조 (직통계단의 설치) 1항
Check(EDBA_34_1){
KS
}
KS{
Floor myFloor{
isObjectProperty(Floor.isEscape) = TRUE
}
Space mySpace{
getObjectProperty(Space.usage)="PerformanceHall"
OR getObjectProperty(Space.usage)="AssemblyHall"
OR getObjectProperty(Space.usage)="Auditorium"
OR getObjectProperty(Space.usage)="ExhibitionHall"
}
Door myDoor{
isDirectlyAccessible(Door, Ground)=TRUE
}
Stair myStair{
isObjectProperty(Stair.isDirect)=TRUE
isAccessible(Stair,myFloor)=TRUE
OR isAccessible(Stair,Ground)=TRUE
}
Ramp myRamp{
isAccessible(Ramp,myFloor)=TRUE
OR isAccessible(Ramp,Ground)=TRUE
}
Floor myFloor2{
isObjectProperty(Floor.isEscape)=FALSE
OR hasObject(Floor, myDoor)=FALSE
}
Zone myZone{
isDirectlyAccessible(myStair, Zone)=FALSE
}
IF
getFloorNumber(mySpace)>0
getFloorArea(mySpace)<=300 m2
isFireResistantStructure(MainStructuralPart)=TRUE
OR isObjectProperty(MainStructuralPart.Material.nonCombustibility)=TRUE
THEN IF getBuildingStoriesCount()>=16
getBuildingUsage()="MultiUnitHouse"
THEN ED= 40
ELSE THEN ED=50
END IF
ELSE IF
getBuildingUsage() = "Factory"
isExist(ExtinguishingSystem)=TRUE
isObjectProperty(ExtinguishingSystem.isAutomatic)=TRUE
getResult(REFB_8_2)=TRUE
THEN IF getBuildingUsage() = "UnmannedFactory"
THEN ED=100
ELSE THEN ED=75
END IF
ELSE THEN ED=30
END IF
(hasObject(myFloor,myStair)=TRUE
hasObject(myZone, myStair)=TRUE
getObjectDistance(Room,myStair, 1)<=ED)
OR
(hasObject(myFloor,myRamp)=TRUE
hasObject(myZone, myRamp)=TRUE
getObjectDistance(Room,myRamp, 1)<=ED)
}
max_route_length = 30
def Check():
evac_storey_exist = False
stories = SELECT('storey')
for storey in stories:
if storey.SELECT('is evacuation storey').BOOL() == True:
evac_storey_exist = True
break
if evac_storey_exist == False:
ERROR('피난층이 존재하지 않습니다.')
return
for storey in stories:
if storey.SELECT('is evacuation storey').BOOL() == True:
continue
stairs = storey.SELECT('direct stair')
if stairs.COUNT() == 0:
storey.ERROR(storey.SELECT('name').STRING() + '에 직통계단이 존재하지 않습니다.')
continue
for space in storey.SELECT('space'):
route_length = -1
for route in space.SELECT('escape route', stairs):
length = route.SELECT('length').UNIT('m').NUMBER()
if length > 0:
if route_length < 0:
route_length = length
else:
route_length = min([route_length, length])
if route_length < 0:
space.ERROR(space.SELECT('name').STRING() + '부터 직통계단까지 갈 수 없다.')
elif route_length > max_route_length:
space.ERROR(space.SELECT('name').STRING() + '부터 직통계단까지의 거리가 멀다 : ' + str(route_length))
else:
space.SUCCESS(space.SELECT('name').STRING() + ' : ' + str(route_length))
⑤ 건축물의 5층 이상인 층으로서 문화 및 집회시설 중 전시장 또는 동·식물원, 판매시설, 운수시설(여객용 시설만 해당한다), 운동시설, 위락시설, 관광휴게시설(다중이 이용하는 시설만 해당한다) 또는 수련시설 중 생활권 수련시설의 용도로 쓰는 층에는 제34조에 따른 직통계단 외에 그 층의 해당 용도로 쓰는 바닥면적의 합계가 2천 제곱미터를 넘는 경우에는 그 넘는 2천 제곱미터 이내마다 1개소의 피난계단 또는 특별피난계단(4층 이하의 층에는 쓰지 아니하는 피난계단 또는 특별피난계단만 해당한다)을 설치하여야 한다. <개정 2008.10.29, 2009.7.16>
//건축법 시행령 35조 (피난계단의 설치) 5항
check(EDBA_35_5){
IF (CS) THEN KS
}
CS{
Floor myFloor{
Floor.number >= 5
OR Floor.usage = "CulturalAndAssemblyFacility.ExhibitionHall"
OR Floor.usage = "CulturalAndAssemblyFacility.ZoologicalAndBotanicalGarden"
OR Floor.usage = "CommercialFacility"
OR Floor.usage = "PassengerTrafficFacilities“??
OR Floor.usage = "SportsFacility"
OR Floor.usage = "AmusementFacility"
OR Floor.usage = "FacilityForTourismAndRelaxation“???
OR Floor.usage = "Trainingfacility.TrainingFacilityInLivingZone“
}
isExist(myFloor)=True
}
KS{
Stair myStair2{
isObjectProperty(Stair.isSpecialEscape) = True
OR isObjectProperty(Stair.isEscape) = True
}
getResult(EDBA_34) = TRUE
IF (getTotalFloorArea(myFloor.Space) >= 2000m2)
THEN getObjectCount(myStair2) >= 1+ getFloorArea(myFloor.Space)/2000
}
1. 장애인등의 통행이 가능한 접근로
가. 유효폭 및 활동공간
(1) 휠체어사용자가 통행할 수 있도록 접근로의 유효폭은 1.2미터 이상으로 하여야 한다.
(2) 휠체어사용자가 다른 휠체어 또는 유모차 등과 교행할 수 있도록 50미터마다 1.5미터×1.5미터 이상의 교행구역을 설치할 수 있다.
(3) 경사진 접근로가 연속될 경우에는 휠체어사용자가 휴식할 수 있도록 30미터마다 1.5미터×1.5미터 이상의 수평면으로 된 참을 설치할
//장애인ㆍ노인ㆍ임산부 등의 편의증진보장에 관한 법률 시행규칙 별표1 편의시설의 구조·재질등에 관한 세부기준(제2조제1항관련)
Check(ERCDAPA_2_1_*_1_4_나_1){
IF (CS1 THEN KS1) OR (CS2 THEN KS2)
ParkingUnit myParkingUnit{
isObjectProperty(ParkingUnit.isParallelParking) = TRUE
}
CS1{
isObjectProperty(ParkingUnit.isParallelParking) = TRUE
}
KS1{
getObjectWidth(ParkingLotArea.isHandicapParking, a) >= 3.3 m
getElementLength(ParkingLotArea.isHandicapParking) >= 5 m
}
CS2{
isObjectProperty(ParkingLotArea.isParallelParking) = FALSE
}
KS2{
getObjectWidth(ParkingLotArea.isHandicapParking, a) >= 2 m
getElementLength(ParkingLotArea.isHandicapParking) >= 6 m
}
}
check(ERCDAPA_2_1_*_1_4_나_2){
getObjectGradient(ParkingSpace.Floor) <= 1/50
}
check(ERCDAPA_2_1_*_1_6_가_1){
Door myDoor1{
isObjectProperty(Door.isEntrance) = TRUE
}
Door myDoor2{
isObjectProperty(Door.isEntrance) = TRUE
getObject(Door.isEntrance) != getObject(myDoor1)
}
getObjectWidth(Door.isEntrance) >= 0.8 m
isEgressDirection(myDoor1) = isEgressDirection(myDoor2)
getObjectDistance(myDoor1, myDoor2) >= 1.2 m
}
check(ERCDAPA_2_1_*_1_6_가_2){
isObjectProperty(Door.isAutomatic) = FALSE
isObjectProperty(Door.isSillFree) = TRUE
}
check(ERCDAPA_2_1_*_1_8_가_2){
getObjectVerticalDistance(FloorSurface,Door.Bottom)
}
check(ERCDAPA_2_1_*_1_8_나){
Stair myStair{
isObjectProperty(Stair.isEscape) = TRUE
isObjectProperty(Stair.isOutdoor) = TRUE
}
getObjectWidth(myStair) >= 0.9 m
getObjectWidth(myStair.StairLanding) >= 0.9 m
Stair myStair2{
isObjectProperty(Stair.isEscape) = FALSE
isObjectProperty(Stair.isOutdoor) = FALSE
}
getObjectWidth(myStair2) >= 1.2 m
getObjectWidth(myStair2.StairLanding) >= 1.2 m
}
check(ERCDAPA_2_1_*_1_8_다_1){
hasObject(Stair, VerticalSurfaceStair) = TRUE
}
check(ERCDAPA_2_1_*_1_8_다_2){
getObjectWidth(Stair.threadWidth) >= 0.28 m
getObjectHeight(Stair.riserHeight) <= 0.18m
}
check(ERCDAPA_2_1_*_1_8_다_3){
getObjectGradient(Stair.riserGradient) >= 60
getObjectLength(Stair.nosingLength) < 3 cm
}