1. 높이가 3미터를 넘는 계단에는 높이 3미터이내마다 너비 1.2미터 이상의 계단참을 설치할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 1항1호
check(REFB_15_1_1){
IF CS THEN KS
}
CS{
getObjectHeight(Stair)>3 m
}
KS{
isExist(StairLanding )= TRUE
getPaceWidth(StairLanding>=1.2 m
getObjectCount(StairLanding)>=getObjectCount(getObjectCount(StairLanding))/3
IF getObjectCount(StairLanding)>1
THEN getObjectVerticalDistance(StairLanding ,StairLanding)>3 m
END IF
}
def Check():
for building in SELECT('building'):
for stair in building.SELECT('stair'):
st_h = stair.SELECT('height').UNIT('m')
st_h_num = height.NUMBER()
if st_h_num >= 3:
elv1 = stair.SELECT('elevation').UNIT('m').NUMBER()
elv2 = elv1
for width in stair.SELECT("clear landing width"):
elv2 = width.SELECT('elevation').UNIT('m').NUMBER()
if elv2 - elv1 > 3:
stair.ERROR('3m 이내마다 계단참이 존재하지 않습니다.')
breaker = True
break
elv1 = elv2
w = width.UNIT('m').NUMBER()
if w < min_w:
width.ERROR('계단참 유효너비: ' + str(w) + ' < ' + str(min_w))
else:
width.SUCCESS('계단참 유효너비: ' + str(w) + ' >= ' + str(min_w))
2. 높이가 1미터를 넘는 계단 및 계단참의 양옆에는 난간(벽 또는 이에 대치되는 것을 포함한다)을 설치할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 1항2호
check(REFB_15_1_2){
KS
}
KS{
IF getObjectHeight(Stair)>1 m
OR getObjectHeight(StairLanding)>1 m)
THEN isExist(Railing)=TRUE
END IF
}
def Check():
for building in SELECT('building'):
for stair in building.SELECT('stair'):
st_h = stair.SELECT('height').UNIT('m')
st_h_num = height.NUMBER()
if st_h_num >= 1:
if stair.SELECT('rail').COUNT() == 0:
stair.ERROR('난간이 설치되지 않았습니다.')
else:
stair.SUCCESS('난간이 설치되어 있습니다.')
1. 초등학교의 계단인 경우에는 계단 및 계단참의 너비는 150센티미터 이상, 단높이는 16센티미터 이하, 단너비는 26센티미터 이상으로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 2항1호
check(REFB_15_2_1){
IF CS THEN KS
}
CS{
getBuildingUsage()="ElementarySchool"
}
KS{
getObjectWidth(Stair)>= 150 cm
getObjectWidth(StairLanding)>150 cm
getObjectProperty(Stair.riserHeight)>=16 cm
getObjectProperty(Stair.riserWidth)>=26 cm
}
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
min_clear_w = 0.6
max_riser_h = 0.0
min_tread_w = 0.0
if bldg_use == '교육연구시설':
min_clear_w = 1.5
min_tread_w = 0.26
if sub_use == '초등학교':
max_riser_h = 0.16
elif sub_use in ['중학교', '고등학교']:
max_riser_h = 0.18
elif (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장']) or (bldg_use == '판매시설'):
min_clear_w = 1.2
else:
min_clear_w = 0.6
for storey in building.SELECT('storey'):
for stair in storey.SELECT('stair'):
clear_width = stair.SELECT('clear width').UNIT('m')
clear_w = clear_width.NUMBER()
if clear_w < min_clear_w:
clear_width.ERROR('유효너비: ' + str(clear_w) + ' < ' + str(min_clear_w))
else:
clear_width.SUCCESS('유효너비: ' + str(clear_w) + ' >= ' + str(min_clear_w))
if max_riser_h > 0:
for riser_height in stair.SELECT('riser height'):
riser_h = riser_height.UNIT('m').NUMBER()
if riser_h > max_riser_h:
riser_height.ERROR('단높이: ' + str(riser_h) + ' > ' + str(max_riser_h))
break
if min_tread_w > 0:
for tread_width in stair.SELECT('tread width'):
tread_w = tread_width.UNIT('m').NUMBER()
if tread_w < min_tread_w:
tread_width.ERROR('단너비: ' + str(tread_w) + ' < ' + str(min_tread_w))
break
2. 중·고등학교의 계단인 경우에는 계단 및 계단참의 너비는 150센티미터 이상, 단높이는 18센티미터 이하, 단너비는 26센티미터 이상으로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 2항2호
check(REFB_15_2_2){
IF CS THEN KS
}
CS{
getBuildingUsage()="MiddleSchool"
OR getBuildingUsage()="HighSchool"
}
KS{
getObjectWidth(Stair)>=150 cm
getObjectWidth(StairLanding)>150 cm
getObjectProperty(Stair.riserHeight)>=18 cm
getObjectProperty(Stair.riserWidth)>=26 cm
}
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
min_clear_w = 0.6
max_riser_h = 0.0
min_tread_w = 0.0
if bldg_use == '교육연구시설':
min_clear_w = 1.5
min_tread_w = 0.26
if sub_use == '초등학교':
max_riser_h = 0.16
elif sub_use in ['중학교', '고등학교']:
max_riser_h = 0.18
elif (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장']) or (bldg_use == '판매시설'):
min_clear_w = 1.2
else:
min_clear_w = 0.6
for storey in building.SELECT('storey'):
for stair in storey.SELECT('stair'):
clear_width = stair.SELECT('clear width').UNIT('m')
clear_w = clear_width.NUMBER()
if clear_w < min_clear_w:
clear_width.ERROR('유효너비: ' + str(clear_w) + ' < ' + str(min_clear_w))
else:
clear_width.SUCCESS('유효너비: ' + str(clear_w) + ' >= ' + str(min_clear_w))
if max_riser_h > 0:
for riser_height in stair.SELECT('riser height'):
riser_h = riser_height.UNIT('m').NUMBER()
if riser_h > max_riser_h:
riser_height.ERROR('단높이: ' + str(riser_h) + ' > ' + str(max_riser_h))
break
if min_tread_w > 0:
for tread_width in stair.SELECT('tread width'):
tread_w = tread_width.UNIT('m').NUMBER()
if tread_w < min_tread_w:
tread_width.ERROR('단너비: ' + str(tread_w) + ' < ' + str(min_tread_w))
break
3. 문화 및 집회시설(공연장·집회장 및 관람장에 한한다)·판매시설 기타 이와 유사한 용도에 쓰이는 건축물의 계단인 경우에는 계단 및 계단참의 너비를 120센티미터 이상으로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 2항3호
check(REFB_15_2_3){
IF CS THEN KS
}
CS{
getBuildingUsage()= "CulturalAndAssemblyFacility.PerformanceHall"
OR getBuildingUsage()= "CulturalAndAssemblyFacility.AssemblyHall"
OR getBuildingUsage()= "CulturalAndAssemblyFacility.Auditorium"
OR getBuildingUsage()= "CommercialFacility "
}
KS{
getObjectWidth(Stair)>=120 cm
getObjectWidth(StairLanding)>=120 cm
}
def Check():
for building in SELECT('building'):
bldg_use = building.SELECT('building type').STRING()
sub_use = building.SELECT('prop', '세부용도').STRING()
min_clear_w = 0.6
max_riser_h = 0.0
min_tread_w = 0.0
if bldg_use == '교육연구시설':
min_clear_w = 1.5
min_tread_w = 0.26
if sub_use == '초등학교':
max_riser_h = 0.16
elif sub_use in ['중학교', '고등학교']:
max_riser_h = 0.18
elif (bldg_use == '문화 및 집회시설' and sub_use in ['공연장', '집회장', '관람장']) or (bldg_use == '판매시설'):
min_clear_w = 1.2
else:
min_clear_w = 0.6
for storey in building.SELECT('storey'):
for stair in storey.SELECT('stair'):
clear_width = stair.SELECT('clear width').UNIT('m')
clear_w = clear_width.NUMBER()
if clear_w < min_clear_w:
clear_width.ERROR('유효너비: ' + str(clear_w) + ' < ' + str(min_clear_w))
else:
clear_width.SUCCESS('유효너비: ' + str(clear_w) + ' >= ' + str(min_clear_w))
if max_riser_h > 0:
for riser_height in stair.SELECT('riser height'):
riser_h = riser_height.UNIT('m').NUMBER()
if riser_h > max_riser_h:
riser_height.ERROR('단높이: ' + str(riser_h) + ' > ' + str(max_riser_h))
break
if min_tread_w > 0:
for tread_width in stair.SELECT('tread width'):
tread_w = tread_width.UNIT('m').NUMBER()
if tread_w < min_tread_w:
tread_width.ERROR('단너비: ' + str(tread_w) + ' < ' + str(min_tread_w))
break
4. 윗층의 거실의 바닥면적의 합계가 200제곱미터 이상이거나 거실의 바닥면적의 합계가 100제곱미터 이상인 지하층의 계단인 경우에는 계단 및 계단참의 너비를 120센티미터 이상으로 할 것
//건축물의 피난ㆍ방화구조 등의 기준에 관한 규칙 15조 (계단의 설치기준) 2항4호
check(REFB_15_2_4){
IF CS THEN KS
}
CS{
Floor myFloor{
N=getFloorNumber(Stair)
Floor.number=N+1
}
(getTotalFloorArea(myFloor.Room)>=200 m2
OR getTotalFloorArea(Room)>=100 m2)
getFloorNumber(Stair)<0
}
KS{
getObjectWidth(Stair)>=120 cm
getObjectWidth(StairLanding)>120 cm
}
area_sum_lable = '바닥면적 합계'
up_area_sum_lable = '윗층 바닥면적 합계'
clear_w_lable = '계단, 계단참의 유효면적'
def Check():
area_sum =0
up_area_sum = 0
min_clear_w = 1.2
under_stories = []
for building in SELECT('building'):
for storey in building.SELECT('storey'):
if storey.SELECT('prop', '기준 지상층').BOOL():
base_storey_exist = True
break
under_stories.append(storey)
for storey in under_stories:
if up_area_sum >= 200:
continue
else:
for space in storey.SELECT('space'):
area_sum += space.SELECT('area').UNIT('m2').NUMBER()
if area_sum >= 100:
continue
else:
break
up_area_sum = area_sum
for stair in storey.SELECT('stair'):
clear_width = stair.SELECT('clear width').UNIT('m')
clear_w = clear_width.NUMBER()
if clear_w < min_clear_w:
clear_width.ERROR('유효너비: ' + str(clear_w) + ' < ' + str(min_clear_w))
else:
clear_width.SUCCESS('유효너비: ' + str(clear_w) + ' >= ' + str(min_clear_w))
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
}