오픈소스 이용하는 방법
BIM 모델에 대한 구조 해석
BIM 정보추출, 협업, 가시화 개발 절차, 방법
BIM 지식 서비스 개발 절차 및 방법
Ver 1.1
2021. 강태욱, Taewook Kang
BIM 표준과 구현
BIM Standard and Development
BIM 표준과 구현 © 강태욱 Page 2 of 149
Table of Contents
1. Open BIM 표준형식 구조 설명 7
1.1 IFC 개요 7
1.2 IFC4 특징 10
1.3 모델 구조 21
1.3.1 일반 사항 21
1.3.2 모델 관계 구조 22
1.3.3 객체 구조 27
1.3.4 형상 구조 31
1.3.5 파일 포맷 구조 33
1.4 결론 36
2. Open BIM 기반 소프트웨어 구현 37
2.1 표준모델 파싱 및 정보추출 37
2.1.1 개요 37
2.1.2 개발환경 39
2.1.3 개발환경 설치 41
2.1.4 IFC 구조생성과 저장 - Hello Wall 44
2.1.4.1 개요.....................................................................................................................................................44
2.1.4.2 예제 프로젝트 설치......................................................................................................................44
2.1.4.3 프로젝트 실행.................................................................................................................................46
2.1.4.4 핵심 구조..........................................................................................................................................49
2.1.4.5 실습.....................................................................................................................................................52
2.1.4.6 결론.....................................................................................................................................................55
2.1.5 IFC 형상정보추출 – Hello IFC 56
2.1.5.1 개요.....................................................................................................................................................56
2.1.5.2 오픈소스 프로젝트 빌드 파일 생성.......................................................................................57
2.1.5.3 프로젝트 빌드.................................................................................................................................60
2.1.5.4 핵심 구조..........................................................................................................................................63
2.1.5.5 SimpleIfcViewer 개발..................................................................................................................65
2.1.5.6 결론.....................................................................................................................................................70
2.1.6 결론 71
2.2 BIM 협업과 가시화 도구 구현 72
2.2.1 BIM모델관리와 협업 - bimServer.org 72
BIM 표준과 구현 © 강태욱 Page 3 of 149
2.2.1.1 개요.....................................................................................................................................................72
2.2.1.2 설치 및 실행....................................................................................................................................73
2.2.1.3 핵심 구조..........................................................................................................................................77
2.2.1.4 프로젝트 생성.................................................................................................................................79
2.2.1.5 BIM 모델 체크인 및 버전별 모델 획득................................................................................87
2.2.1.6 결론.....................................................................................................................................................94
2.2.2 BIM정보 시각화와 쿼리언어 개발 - xBIM 95
2.2.2.1 개요.....................................................................................................................................................95
2.2.2.2 설치 및 실행....................................................................................................................................96
2.2.2.3 핵심 구조 분석.............................................................................................................................102
2.2.2.4 실습...................................................................................................................................................106
2.2.2.5 결론...................................................................................................................................................117
2.3 Ontology와 Semantic BIM query 117
2.3.1 Ontology 117
2.3.2 데이터와 지식의 차이 118
2.3.3 지식 추론 기능 118
2.3.4 지식의 표현과 시멘틱 119
2.3.5 온톨로지 개념과 트리플 데이터 구조 120
2.4 Semantic BIM query 오픈소스 도구 124
2.4.1 개요 124
2.4.2 Fuseki 기반 간단한 SPARQL 서버 실행 126
2.5 BIM 지식 서비스 지원 시멘틱 정보 질의 방법 개발 127
2.5.1 Jena Fuseki 서버 동작 128
2.5.2 BIM 온토롤지 파일 업로드 130
2.5.3 SPARQL 질의 132
2.6 마무리 138
3. BIM 응용과 개발 사례 139
3.1 개요 139
3.2 LA Aiport FM 사례 139
3.3 BIM-GIS FM 기술 프레임웍 142
3.4 결론 147
4. 레퍼런스 148
BIM 표준과 구현 © 강태욱 Page 4 of 149
BIM 표준과 구현 © 강태욱 Page 5 of 149
머리말
이 책은 BIM 표준과 구현이란 제목으로 출판하려했던 내용 중 일부입니다. 2013 년에
시작했었는 데, 함께 하기로 한 분들이 너무 바쁜 상황이라, 거의 8 년 이상 묵혀둔 내용이
되어 버렸습니다.
지금은 미국에서 책을 정리할 시간적 여유도 약간 생겼고, 이 내용을 필요한 분들도 있을
듯하여 eBook으로 정리해 공유합니다. 일부 URL은 너무 오래되어, 최대한 확인해
갱신하였습니다. 이 책의 내용은 제가 예전에 관심을 두고 직접 연구 및 개발했던 부분입니다.
이 책은 BIM 개발과 관련된 아래 내용을 주로 다루고 있으니 참고하시길 바랍니다. 아직도 이
글에서 사용된 기술은 계속 유지관리되고 있으니 활용 가능하시리라 생각합니다.
 개방형 BIM 모델에 대한 구조 해석
 오픈소스 이용하는 방법
 BIM 정보추출, 협업, 가시화 개발 절차 및 방법
 BIM 지식 서비스 개발 절차 및 방법
 사례 소개
아래 라이선스로 관련 내용을 재활용할 수 있으니 참고하시길 바랍니다.
CC BY-NC
요즘 국내 BIM상황은 기술의 문제라기 보다는 사람과 제도의 문제로 바뀌었습니다. 그래서,
최근 몇 년 동안 BIM Principle and Philosophy 블로그 내용은 새로운 건설 기술이나 제도와
관련된 내용으로 채워졌습니다. 앞으로도 이런 트랜드를 유지하려 합니다.
아울러, BIM Principle and Philosophy 웹사이트는 Google site정책으로 Blog 방식으로
전환하였습니다. 예전 자료는 BIM Principle and Philosophy에서 확인할 수 있습니다.
새로운 글은 BIM Principle and Philosophy 블로그에 올릴 것이니 참고 하시길 바랍니다.
 https://bimprinciple.blogspot.com
- 2021.9.13, 강태욱 (laputa99999@gmail.com)
BIM 표준과 구현 © 강태욱 Page 6 of 149
BIM 표준과 구현 © 강태욱 Page 7 of 149
1. Open BIM 표준형식 구조 설명
1.1 IFC 개요
IFC는 건물에 관한 정보를 기술하기 위한 목적으로 개발된 데이터 교환 포맷이다. 이 포맷은
중립적이며, 오픈되어 있다. IFC포맷은 1995 년 미국과 유럽 AEC회사들을 중심으로 1995 년에
데이터 교환을 목적으로 만들어진 국제 협의체 IAI(International Alliance Interoperability)에
의해 개발되었으며, 2005 년까지 buildingSMART에서 개발, 유지되어 왔다. buildingSMART는
건설분야 생산성 향상을 위한 정보 상호운용성 표준 포맷 및 정보교환 방법을 정의하고
개발하여 산업계에 표준을 확산하고자 하는 목적으로 설립되었다.
현재 IFC는 IFC4 버전까지 완성되었으며 객체지향적 구조를 기술할 수 있는 엔티티 관계
모델(Entity relationship model)기반인 EXPRESS언어로 기술되어 있다. 모든 정보는 객체란
개념의 집합으로 볼 수 있고 객체지향에서는 이를 클래스라 한다. 클래스는 보통 속성 형식,
객체의 행위 규칙을 정의한 함수 및 클래스간 관계로 구성되어 캡슐화된 객체 틀(Template)로
이뤄진다.
IFC4 의 경우 핵심 객체 클래스를 정의한 커널(Kernel) 패키지와 커널에서 확장된 Control,
Product, Process 세개의 기본 확장 패키지, 확장 패키지에서 건물 서비스, 컴포넌트, 건물
부재, 관리 요소, 시설물 객체 등 5 개의 AEC/FM 공통 패키지로 클래스가 확장되어 정의된다.
각 공통 패키지에서 AEC/FM 도메인별 8 개의 패키지와 건축 요소의 속성을 정의하는 데
사용되는 수량이나 재료와 같은 기본 객체형을 정의해 종류별로 나눈 21 개의 리소스
패키지로 구성되어 있다.
표 1-1 IFC 공통 패키지 설명
패키지 명 설명
IfcKernel IFC 모델의 핵심 클래스들을 지원한다. IFC의 모든
객체는 IfcRoot에서 시작되며, IfcObjectDefinition을
통해 각 객체간 관계를 설정해 구조를 만든다. 이와
같은 객체, 관계 기본 클래스를 지원한다.
IfcControlExtension 프로세스, 리소스, 부재와 같은 자산의 통제와 관련된
기본 클래스를 지원한다.
IfcProcessExtension 프로세스와 관련된 기본 클래스를 지원한다.
IfcProductExtension 형상과 위치를 가지는 컴포넌트 개념을 일반화한
클래스를 지원한다. IfcBuilding, IfcBuildingStorey,
BIM 표준과 구현 © 강태욱 Page 8 of 149
IfcElement 클래스 등을 지원한다.
IfcSharedBldgServiceElements MEP와 같이 건물 서비스를 지원하는 개념을
일반화한 클래스를 지원한다. IfcDistributionSystem,
IfcFlowController 등을 지원한다.
IfcSharedComponentElements 컴포넌트간 연결 등에 필요한 상대적으로 작은 부품
클래스를 지원한다. IfcFastener, IfcDiscreteAccessory
등을 지원한다.
IfcSharedBuildingElements 건물 부재 컴포넌트를 지원한다. IfcBeam, IfcColumn,
IfcRailing, IfcRamp, IfcRoof, IfcSlab, IfcWall,
IfcWindow, IfcStair등을 지원한다.
IfcSharedManagementElements 건물 생애주기 단계 동안 관리에 필요한 기본적인
개념을 정의한다. 비용 및 일정 등이 포함되며
IfcCostItem, IfcCostSchedule 등을 지원한다.
IfcSharedFacilityElements FM(Facility Management)를 위한 가구, 자산, 재고와
같은 개념을 지원한다. IfcAsset, IfcFurniture,
IfcInventory 등을 지원한다.
다음은 클래스 패키지 다이어그램을 나타낸 것으로써 커널 패키지를 중심으로 앞에 언급된
패키지가 재활용되고 있는 구조를 표현한 것이다.
BIM 표준과 구현 © 강태욱 Page 9 of 149
그림 1-1 IFC 클래스 패키지
구조도(https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/introduction.htm )
IFC는 객체 지향적 개념에 근거해 EXPRESS언어로 정보 스키마를 기술한다. IFC는 건축 분야
정보 상호운용에 촛점이 맞춰져 재활용이 가능하도록 Kernel 객체에서 확장된 다양한 건축
요소와 재료, 공정 등 전체 700 개 이상의 객체를 제공한다.
BIM 표준과 구현 © 강태욱 Page 10 of 149
IFC는 온톨로지 용어 사전인 IFD(International Framework for Dictionaries, ISO 12006-3) 및
IFC에 대한 정보 교환 방법인 IDM(Information Delivery Manual, ISO 29481-1:2010)과 함께
사용되며, 여기서 IDM은 건축 프로젝트 프로세스를 정의하고, BIM 활용 시 요구된 프로세스
간 정보 교환을 위한 지침을 제공하는 것이 목적이다. IDM은 프로세스 상호 관련성, 소비 정보
종류, 정보 교환 방법 등을 범용 IFC가 특정 프로젝트에 맞도록(Tailroing)할 수 있도록
BPM(Business Process Management)기술인 BPMN(Business Process Model and Notation)과
ER(Exchange Requirement)으로 정의된다.
본 장에서는 새로 개정된 IFC4 를 포함해 IFC의 구조적 특징을 EXPRESS, UML(Unified
Modeling Language, 객체모델링 표준언어) 등을 이용해 설명한다.
1.2 IFC4 특징
2013 년 3 월 12 일 공식 릴리즈 된 IFC4 는 3 월 21 일에 ISO16739 로 릴리즈 되었다. IFC4 는
기존 IFC에서 이슈로 제기된 부분들이 개선되었으며 비정형 모델링, 라이브러리 속성정의,
인프라스트럭처 모델 연계 등을 포함하고 있다.
다음과 같은 부분이 개선되었다.
표 1-2 IFC4 특징 (출처 - Dr. Thomas Liebich, 2013.3, IFC4 - the new buildingSMART standard,
buildingSMART, http://www.buildingsmart-tech.org)
No 항목 내용
1 새로운 기하 형상 및
파라메트릭 기능 지원
아키텍쳐, 빌딩 서비스 및 구조와 관련된 새로운 기하 형상과
파라메트릭 및 기능들이 포함되었고 개선되었다
2 4D, 5D 모델 정보 교환,
BIM-GIS 상호운용관련
기능 지원, 지속가능성과
관련된 시뮬레이션 등
작업 흐름 지원
4D, 5D 모델 교환, 제조, 라이브러리, BIM과 GIS상호운용, 온도
시뮬레이션 및 지속가능성 평가와 관련된 워크플로우가 가능해
졌다.
3 IFC 속성정의와 데이터
사전의 연계
모든 IFC 속성 정의가 buildingSMART 데이터 사전과
연계되었다. 정보 재활용 관점에서 사전과 분리되고 연계하는
방식으로 개선되었다.
4 사용성 개선 많은 구현 개념과 예제가 연계되어 문서를 쉽게 접근하고 읽을
수 있도록 개선되었다.
5 ifcXML4 스키마 지원 ifcXML4 스키마를 포함하고 있으며 EXPRESS스키마와 연계해
IFC명세가 통합되어 있다.
BIM 표준과 구현 © 강태욱 Page 11 of 149
6 mvdXML 기술 통합을
통한 데이터 검사
mvdXML 기술과 통합되었으며 쉽게 데이터 검사 서비스를
정의할 수 있도록 하였다. 이는 IFC4 데이터의 제출과 함께
활용할 수 있다.
7 여러 기술적 문제 해결 IFC2x3 릴리즈 이후로 발견된 여러 기술적인 문제들을
해결하였다.
8 인프라스트럭쳐 확장성
고려
IFC의 확장이 인프라스트럭쳐까지 가장해져 빌딩 환경 뿐
아니라 다른 도메인에서도 적용이 가능해 졌다.
IFC4 는 6 년 동안 개발되었고 8 m/m(man / month)가 모델 개선을 위해 투자되고 이 중
50%가 자원봉사 형태였다. IFC포맷이 워낙 확장성과 유연성을 고려하다 보니 각 요소의
관계들이 매우 복잡하게 연결되어 있어 이를 고려해 모델링을 한다는 것이 쉽지 않은 일이고
또한 IFC포맷에 대한 많은 실무적 비난도 있었기에 이를 해결하기 위한 노력도 쉽지는
않았다고 생각하기 때문이다. 1200 건 정도 발생된 이슈를 해결하려고 노력하였고 openBIM
표준을 위한 IFC보안을 고려하였다.
IFC2x3 는 2016 년까지 사용될 것이며 IFC4 는 2014 년부터 적용이 시작된다. 다음 그림은
향후 IFC 개발 로드맵이다.
그림. IFC 개발 History (buildingSMART)
각 개선항목을 좀 더 확인하기 위해 본 장에서는 소스코드 비교 도구를 사용하여 스키마
변화를 살펴보았다.
BIM 표준과 구현 © 강태욱 Page 12 of 149
그림 1-2 코드 분석도구를 이용한 차이 분석 (WinDiff)
IFC4 에서 개선된 기능들은 다음과 같다.
1. IFC스키마 일관성
IFC에서 계속 지적 받던 내용인 모델러마다 저장하는 방식에 따라 동일한 모델에 대한
호환성이 지켜지지 않았던 문제가 개선되었다. 이는 IFC의 매우 유연하게 디자인된 구조와
확장성이 오히려 문제가 되어버린 케이스로 모델러 간 IFC호환성에서는 큰 문제가 되었던
스키마 모호성 문제를 해결하려 노력하였다. 즉, 'multiple ways to do'를 줄이려고 노력하였다.
모호성 문제를 해결하는 방법은 몇 가지가 있을 수 있는 데, 객체의 역활이 다중인 경우에는
책임을 분리하여 타입을 정의하고, 객체가 포함하는 속성의 값을 제약하거나 분명히 정의하고,
객체간의 관계를 명확히 하는 등의 전략을 적용할 수 있다. 이는 데이터 모델링에서
인스턴스화 된 객체의 정보 무결성을 확보하는 실질적인 전략이다.
아래는 책임을 명확히 정의하기 위해 타입을 재정의한 예이다.
IFC2x3 IFC4
BIM 표준과 구현 © 강태욱 Page 13 of 149
아래는 이 중 속성값을 특정 범위로 제약한 경우로 2D와 3D 곡선을 EXPRESS의 영역규칙을
이용해 정의한 것이다. EXPRESS의 WHERE구문을 이용해 차원을 검증하는 규칙을 정의하고
있다.
ENTITY IfcOffsetCurve2D
SUBTYPE OF (IfcCurve);
BasisCurve : IfcCurve;
Distance : IfcLengthMeasure;
SelfIntersect : LOGICAL;
WHERE
DimIs2D : BasisCurve.Dim = 2;
END_ENTITY;
ENTITY IfcOffsetCurve3D
SUBTYPE OF (IfcCurve);
BasisCurve : IfcCurve;
Distance : IfcLengthMeasure;
SelfIntersect : LOGICAL;
RefDirection : IfcDirection;
WHERE
DimIs2D : BasisCurve.Dim = 3;
END_ENTITY;
이 영역규칙은 WHERE 문을 이용하여 각 엔티티 객체에 대해 개별 속성이나 여러 속성들의
조합된 값들에 대한 제약 조건을 설정할 수 있다. 예를 들어 위 EXPRESS식의 경우 DimIs2D로
정의된 WHERE 영역규칙은 IfcOffsetCuve2D 엔티티에 포함된 IfcCurve타입 BasisCurve객체의
차원을 표시하는 Dim변수가 2 인지 아닌지를 체크한다.
이런 방식으로 규칙을 정의하고 모든 영역규칙들이 True 값으로 조건식이 평가될 때 해당
객체는 유효한 객체로 사용되며 False이면 해당 객체는 사용되지 않는다. 이를 이용하면
규칙기반으로 데이터 무결성을 정의할 수 있다.
TYPE IfcWallTypeEnum = ENUMERATION OF
(STANDARD
,POLYGONAL
,SHEAR
,ELEMENTEDWALL
,PLUMBINGWALL
,USERDEFINED
,NOTDEFINED);
END_TYPE;
TYPE IfcWallTypeEnum = ENUMERATION OF
(MOVABLE
,PARAPET
,PARTITIONING
,PLUMBINGWALL
,SHEAR
,SOLIDWALL
,STANDARD
,POLYGONAL
,ELEMENTEDWALL
,USERDEFINED
,NOTDEFINED);
END_TYPE;
BIM 표준과 구현 © 강태욱 Page 14 of 149
제약 조건을 설정해 무결성을 확보하는 또 다른 방법은 FUNCTION을 사용하는 방법인데
이것도 RULE SET의 일종이다. 아래 스크립트의 좌측은 새로 추가된 BSpline 매듭백터(Knot
Vector)의 유효성을 검증하는 함수로 데이터 무결성을 보장하기 위해 우측과 같이 영역규칙에
포함되어 활용되고 있다는 것을 확인할 수 있다. 이외에도 IFC4 에는 IfcCurveDim,
IfcCurveWeightsPositive 등 유효성 검증용 함수들이 정의되어 있다.
FUNCTION IfcConstraintsParamBSpline
( Degree, UpKnots, UpCp : INTEGER;
KnotMult : LIST OF INTEGER;
Knots : LIST OF IfcParameterValue )
: BOOLEAN;
...
IF (i = UpKnots) AND (K > Degree + 1) THEN
Result := FALSE;
RETURN(Result);
END_IF;
END_REPEAT;
RETURN(result);
END_FUNCTION;
ENTITY IfcBSplineCurveWithKnots
SUPERTYPE OF (ONEOF
(IfcRationalBSplineCurveWithKnots))
SUBTYPE OF (IfcBSplineCurve);
KnotMultiplicities : LIST [2:?] OF INTEGER;
Knots : LIST [2:?] OF IfcParameterValue;
KnotSpec : IfcKnotType;
DERIVE
UpperIndexOnKnots : INTEGER := SIZEOF(Knots);
WHERE
ConsistentBSpline : IfcConstraintsParamBSpline
(Degree, UpperIndexOnKnots,
UpperIndexOnControlPoints,
KnotMultiplicities, Knots);
CorrespondingKnotLists : SIZEOF(KnotMultiplicities) =
UpperIndexOnKnots;
END_ENTITY;
2. 빌딩 서비스 요소 카탈로그 및 구조 모델링 요소 및 해석
지원되지 않았던 태양광 디바이스, 커뮤니케이션 장치 등 전기 요소, 빌딩 자동화(BAS-
Building Automation System)와 관련된 여러 설비 요소 등을 지원하였다. 또한, 스틸 구조
요소를 보완하였으며 구조 분석이 가능하도록 철근 등 관련 정보가 상세화되었다. 아래는
이와 관련되어 추가된 ENUMBERATION 타입 정의이다.
TYPE IfcBuildingElementPartTypeEnum =
ENUMERATION OF
(INSULATION
,PRECASTPANEL
,USERDEFINED
,NOTDEFINED);
END_TYPE;
TYPE IfcDistributionSystemEnum = ENUMERATION OF
(AIRCONDITIONING
,AUDIOVISUAL
,CHEMICAL
...
,NOTDEFINED);
END_TYPE;
BIM 표준과 구현 © 강태욱 Page 15 of 149
TYPE IfcDistributionPortTypeEnum = ENUMERATION
OF
(CABLE
,CABLECARRIER
,DUCT
,PIPE
,USERDEFINED
,NOTDEFINED);
END_TYPE;
ENTITY IfcActuator
SUBTYPE OF (IfcDistributionControlElement);
PredefinedType : OPTIONAL
IfcActuatorTypeEnum;
WHERE
...;
END_ENTITY;
3. 대지 계획, GIS 좌표계 변환 및 토목 요소 기본 클래스 지원
GIS 연결을 가능하도록 하여 대지 계획을 할 수 있도록 하였다. 이를 위해
최근 BIM과 GIS연계 추세를 고려해 GIS 체계 안에 건물 디자인 맵핑이 가능하도록
개선되었다.
그림. IfcCoordinateReferenceSystem 스키마 표현(*주: WSG84 등 다양한 GIS좌표계를 지원할
수 있도록 하였다)
또한 다음 Express-G와 같이 토목 요소 기본 클래스인 IfcCivilElement를 지원한다. 이는 향후
도로, 철도, 상하수도와 같은 토목 객체를 효과적으로 지원하기 위한 기본 클래스를 마련하기
위함이다.
BIM 표준과 구현 © 강태욱 Page 16 of 149
ENTITY IfcCivilElement
...
SUBTYPE OF (IfcElement);
END_ENTITY;
4. 효율성 개선
스케줄 정의 재작업, 칼렌더 지원, ISO 8601 타임 포맷 지원 등 불편한 부분을 개선하고 MS
Project를 직접적으로 지원할 수 있도록 하였다.
그림 1-3 ResourceTime의 일부 클래스 다이어그램(UML) 및 개선된 Task 및 Time 연계 기능 (buildingSMART)
5. 비정형 모델링 지원
Extrusion tapering을 지원하며 CSG기반 BOOLEAN연산과 NURBS 및 다양한 서페이스를
지원한다. 관련해 IFC예제 파일을 살펴보면 NURBS를 표현하기 위한 기하학적 정의가
기술되어 있는 것을 알 수 있다. 이를 검증하기 위해 Rhino의 Grasshopper를 이용해
IFC4 스키마를 통한 모델 입출력을 테스트해보았다.
IfcResourceTime
<<Optional>>+ScheduleWork
<<Optional>>+ScheduleUsage
<<Optional>>+ScheduleStart
<<Optional>>+ScheduleFinish
<<Optional>>+ActualWork
<<Optional>>+ActualStart
<<Optional>>+ActualFinish
<<Optional>>+RemainingWork
<<Optional>>+RemainingUsage
IfcSchedulingTime
<<Optional>>+Name
<<Optional>>+DataOrigin
<<Optional>>+UserDefinedDataOrigin
BIM 표준과 구현 © 강태욱 Page 17 of 149
그림 1-4 NURBS의 스키마와 다양한 방식으로 생성된 Surface 지원(buildingSMART)
그림 1-5 Grasshopper에서 생성된 AdvanedBrep 로 기술된 BSpline Surface 정보 중 일부(buildingSMART. *주:
Grasshopper 컴포넌트를 개발해 IFC로 생성한 것으로 보인다.)
6. 속성집합 정의 개선
속성집합과 관련해 다양한 언어를 지원하고 있다. 다음과 같이 속성셋을 사전으로 관리하는
IFD와 연계를 IFD GUID를 이용해 강화하였다.
BIM 표준과 구현 © 강태욱 Page 18 of 149
그림 1-6 다양한 언어를 지원하고 있는 Property Set 스키마 및 IFD연계성 강화(buildingSMART)
7. 효율성 개선
기존 IFC2x3 에서 가장 큰 문제점 중 하나였던 데이터 용량문제가 어느정도 개선되었다.
IFC2x3 기준으로 용량 개선이 솔리드 형상에 관해 14% 줄었다. 솔리드 형상이 가장 큰 용량을
차지하고 있다고 생각할 때 20~30%이상의 용량 절감은 있어 보인다. 게임 등에서 많이
사용되고 있는 최적화된 데이터 형식 개념을 활용하고 있다. 예를 들어 좌표, 벡터, 인덱스
등을 각각 구분하는 것이 아니라 Series 형태로 나열해 놓는 식이다. 이렇게 하면 압축도
손쉬워진다.
BIM 표준과 구현 © 강태욱 Page 19 of 149
8. IFC-DOC 도구
ifcDoc은 MVD(Model View Definitions)을 정의하기 위해 빌딩스마트 협회에서 개발한
도구이다. ifcDoc은 mvdXML
스펙(https://www.buildingsmart.org/standards/groups/ifcdoc/ )에 기반해 동작한다.
ifcDoc는 HTML, 다이어그램, 스키마(EXPRESS, XSD) 등 생성을 지원하고 mvdXML포맷 생성 및
MVD에 대한 IFC 체크도 지원한다. 각 IFC요소의 정의, 속성, 개념, 템플릿 등을 편집할 수
있으며 bSI 저장소에 결과물을 업로드하거나 다운로드할 수 있으며 오픈소스다. 다운로드는
https://github.com/buildingSMART/IfcDoc 에서 가능하다. 참고로 메뉴얼은
https://technical.buildingsmart.org/projects/information-delivery-specification-ids/ 에서
확인할 수 있다.
그림 1-7 ifcDOC 실행 모습 (https://github.com/buildingSMART/IfcDoc)
9. 기타 개선 기능
BIM 표준과 구현 © 강태욱 Page 20 of 149
수량산출이 개선되어 XML스키마와 설정파일이 IFC와 분리 연결되어 수량을 정의할 수 있도록
하였다. 또한 에너지 등 성능 및 환경 분석을 위한 스페이스 경계, 특수 존 및 외부영역에 대한
파라메터 정의 등을 통해 에너지 등 성능 분석 정보를 개선하였다. 그리고 렌더링을 위한
Lighting 및 Shading 컴포넌트가 개선되어 멀티 텍스쳐, 광원 처리 모델, X3D표준 지원을 하고
있다. MEP 시스템 연결부 정보 개선도 있었는 데 빌딩 서비스 부분이 재설계되었고 관련해
Port Connection과 같은 부분이 개선되었다.
또한 다음과 같이 건설 시공과 관련된 시공 작업이나 리소스와 같은 부분의 표준화를
고려하였다.
TYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF
(DEMOLISHING
,EARTHMOVING
,ERECTING
,HEATING
,LIGHTING
,PAVING
,NOTDEFINED);
END_TYPE;
TYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF
(AGGREGATES
,CONCRETE
,DRYWALL
,FUEL
,GYPSUM
,MASONRY
,USERDEFINED);
END_TYPE;
이외에도 일반 요소 정의와 파라메트릭 정의 분리, Task / Event / Procedure 정의의 재사용
지원, 효과적인 5D를 위한 개선, simple ifcXML 지원 및 개발도구 지원, 손쉽게 탐색할 수 있는
문서 시스템 개선, mvdXML를 통한 MVD개발자를 위한 스키마와 개념 템플릿 등이
개선되었다.
BIM 표준과 구현 © 강태욱 Page 21 of 149
*참고: 스펙을 지원하기 위한 도구로 개발되고 있는 IFC Toolbox-
https://technical.buildingsmart.org/resources/software-implementations/ 는 링크를
클릭하시면 확인할 수 있으며 IFC4 스펙 페이지에 가시면 추가된 기능에 대해 이해하기
쉽도록 예제(https://technical.buildingsmart.org/standards/ifc/ifc-examples/ )가 스키마와
함께 설명되어 있다.
1.3 모델 구조
1.3.1 일반 사항
IFC에 대한 상세한 내용은
https://www.designingbuildings.co.uk/wiki/IFC4#:~:text=Industry%20Foundation%20Classes
%20(IFC)%20are,data%20across%20different%20software%20applications. 를 방문하면
자세히 확인할 수 있다. 이 웹페이지를 열고 링크 중 [5. Core schemas]를 선택하면 다음
왼쪽과 같은 다이어그램이 표시된다. 다이어그램에는 클래스 패키지가 표현되어 있고 예를
들어 “Kernel”을 클릭하면 IfcKernel에 관한 세부 설명과 EXPRESS구조 및 각 구성요소의
설명이 기술되어 있다.
그림 1-8 IFC2x4 Manual(BuildingSmart)
BIM 표준과 구현 © 강태욱 Page 22 of 149
IFC에서 묘사하고 있는 객체는 Building에서 눈에 보이는 벽, 윈도우뿐만 아니라 Owner,
Resource, Control, Cost, Asset과 같이 건축 계획, 디자인, 견적, 시공, 자산관리 전반적인
객체들을 모두 다루고 있다. 클래스 패키지는 AEC객체들을 개념적으로 가까운 것들끼리 묶은
것이다.
IFC를 구성하는 모든 노드는 IfcRoot에서 시작되며, IfcRoot는 노드를 식별하기 위한 GlobalID,
노드 Name 과 Description 정보를 가진다. 객체의 특성을 정의하는 IfcObject노드는 다음과
같은 파생 클래스들을 가진다.
IfcProject : 제품을 만들기 위해 수행하는 활동이다.
IfcProcess : 프로젝트내에서 행해지는 공정이나 작업들이다.
IfcResource : 프로세스에서 객체 사용에 대한 것을 정의한 것이다.
IfcActor : 프로젝트와 관련된 인적자원이다.
IfcProduct : 프로젝트에 포함된 물리적 객체며, 형상으로 표현된다.
IfcControl : 다른 객체를 컨트롤하는 개념이다.
IfcGroup : 객체의 집합이다.
1.3.2 모델 관계 구조
IFC에서는 객체간의 포함, 연관, 할당, 제약조건, 기하학적 관계 등 각 객체별 특성에 따른
관계들을 모두 명확히 표현하고 있다. 그래서 IfcObjectDefinition이란 개념을 두어서 이
관계들을 특별히 관리하고 있다. 특히, EXPRESS 언어는 INVERSE관계를 표현할 수 있어, 예를
들면 자동차가 엔진을 Aggregation하고 있지만, 엔진관점에서도 자동차에 포함되어지는
관계를 역으로 표현할 수 있다.
객체 특성은 IfcPropertyDefinition 으로 기술되며 객체간 관계는 할당(Assign),
집합(Aggregation), 분해(Aggregation의 역관계), 정의(Defined), 연결과 같은 IfcRelationship에
의해 기술될 수 있다. IFC에서는 관계도 객체로써 취급된다.
BIM 표준과 구현 © 강태욱 Page 23 of 149
IFC에서 건물이란 전체(Whole), 건물 공간, 건물 부재 간에 집합 관계로 구성된다. 이는 전체와
부분 관계(Whole/part relationship)을 의미하는 것으로 IfcRelAggregates는 이를 지원한다.
관계는 항상 두 객체 간에 발생되는 것이므로 집합체와 부분으로 관계가 정의된다. 집합체는
IfcObjectDefinition형식의 RelatingObject로 정의되며 부분들은 RelatedObjects 로 정의된다.
예를 들어 집합체는 건물이고 부분들은 건물의 각 층들이 될 수 있다.
ENTITY IfcRelAggregates
SUBTYPE OF IfcRelDecomposes;
RelatingObject : IfcObjectDefinition;
RelatedObjects : SET [1:?] OF IfcObjectDefinition;
END_ENTITY;
IFC공간적 구조는 대지(IfcSite), 건물(IfcBuilding), 층(IfcBuildingStory), 공간(IfcSpace) 4 가지
개념으로 구분된다.
IfcBuilding은 다음 그림과 같이 IfcBuildingStorey를 포함하고 지형 높이(ElevationOfTerriain)과
같은 속성을 가지고 있다.
그림 1-9 IfcBuilding 개념도 (BuildingSmart)
IfcBuildingStorey
IfcBuildingStorey
BIM 표준과 구현 © 강태욱 Page 24 of 149
IfcBuildingStorey는 벽체(IfcWall), 슬라브(IfcSlab), 기둥(IfcColumn)과 같은 건축 부재를 포함할
수 있는 데 이런 건축 부재는 IfcProduct로 일반화된 클래스로 표현된다.
공간과 건축 부재 객체들은 서로 관계를 가지고 있으며 예를 들어 다음 그림과 같이
IfcBuilding는 IfcBuildingStorey를 IfcRelAggregates객체를 이용해 집합관계로 포함하고 있다.
반대로 IfcBuildingStorey는 자기를 포함하는 객체를 역관계(INV)로 가리키고 있다.
IfcBuildingStorey는 IfcProduct를 IfcRelContainedInSpatialStructure 관계객체를 이용해
관리한다.
그림 1-10 IfcBuilding 정보 표현 (BuildingSmart)
다음 그림은 객체관계를 좀 더 자세히 표현한 다이어그램이다. IfcRelAggregates 관계객체를
이용해 Relating 객체와 Related 객체들의 정보를 관리하고 있다. IFC는 IfcProject에서
IfcBuildingStorey에 이르기까지 연결된 위상정보를 제공하며 이를 통해 계층적으로 서로
관련된 정보를 탐색할 수 있다.
BIM 표준과 구현 © 강태욱 Page 25 of 149
그림 1-11 IfcRelAggregates 위상관계 표현 (BuildingSmart)
BIM 표준과 구현 © 강태욱 Page 26 of 149
각 공간객체는 자신만의 지역좌표계를 가지고 있는 데 이는 IfcLocalPlacement에 의해
표현된다. IfcLocalPlacement는 X, Y, Z축과 Orientation을 가질 수 있어 IfcLocalPlacement에
의해 정의된 공간 객체는 이 지역좌표계에 영향을 받는다. 즉, 지역좌표계가 (999, 210,
3)이라면 이 지역좌표계에 속해진 부재 객체들의 형상 좌표들은 이를 원점으로 취급되
상대좌표로 정의된다. 이는 컴퓨터 그래픽스에서 전통적으로 사용되는 좌표계 스택
프레임(Stack Frame)개념을 활용하기 위함이다 (*주: 대부분의 컴퓨터 그래픽 좌표계는
전역좌표계와 지역좌표계들로 나뉘며 지역좌표계에 속해진 객체들은 좌표변환행렬을 통해
전역좌표계로 변환된다. 이를 통해 각 객체별로 효과적인 좌표 처리를 할 수 있다).
다음은 이를 표현한 다이어그램이다.
그림 1-12 IfcLocalPlacement 정보 표현 (BuildingSmart)
BIM 표준과 구현 © 강태욱 Page 27 of 149
1.3.3 객체 구조
솔리드 모델링은 실제 모델을 만들기 위해 많은 시간이 소요된다. 예를 들어 집을 설계하기
위해 솔리드 모델러를 이용해, 점, 선, 면, 입체를 하나 하나씩 만들어 바닥과 벽, 지붕을 만드는
것과 미리 준비되어 있는 바닥, 벽, 지붕의 파라메터를 조정해 설계하는 것과는 생산성에 큰
차이가 있음은 명백하다. 게다가 벽에는 기하학적 요소의 집합뿐만 아니라 벽체 재료와 같은
고유의 속성도 존재하므로 기존의 솔리드 모델러 만으로는 표현하기 어려운 부분이 많다.
솔리드 모델에 비해 객체지향적인 모델은 객체을 중심으로 모든 정보를 모아서 배열한다.
이는 정보 모델링에서 객체지향 모델링방법을 사용하는 방법과 동일하다. 다만, 대상이 그래픽
모델 정보란 차이일 뿐이다. 벽이 기하학적으로 점, 선, 면의 위상적 집합이지만, 이런
집합으로 다루기 보다는 벽 자체로 인식하는 편이 사람에게는 더 직관적이며, 다루기가 쉽다.
예를 들어 건축의 경우에는 바닥, 벽, 창문, 지붕, 층 등이 모델링 될 객체가 되며 각자 해당
객체를 표현하는 파라메터를 가진다. 즉, 벽체는 코어(Core), 마감재료, 도장, 단열재의
집합으로 구성되어 관련된 파라메터를 가진다. 토목의 경우 평면 선형(Alignment), 종단 선형,
횡단(Cross section), 교량, 부지, 수치지형 등이 객체가 되며 마찬가지로 적절한 파라메터를
가진다. 기계 분야에서는 기어, 너트와 같은 객체가 활용될 수 있다.
그림은 벽체를 순수하게 솔리드로만 표현한 것과 객체기반으로 모델링한 것의 차이를
보여준다. 솔리드 기반에서는 모든 정보가 기하학과 위상학적인 정보만 제공해줄 수 있지만,
객체 기반 모델에서는 객체의 속성정보까지 포함되어 제공된다.
Property set
GUID = W03b0I7
Length = 3.2m
Width = 60cm
Height = 4m
Surface = brick
Volume = ...
Material = ..
Cost = $...
Edge
Polyloop
Solid
Vertex
Face
Edge
Edge
Edge
Object
BIM 표준과 구현 © 강태욱 Page 28 of 149
그림 1-13 솔리드 모델러 기반 디자인과 객체기반 디자인
건축분야에서 BIM이 발생된 만큼 Building에 대한 구조를 분해해 다음과 같은 EXPRESS라는
구조화된 블록 언어(Block structured language - 언어가 묘사하는 정보는 시작과 끝의
블록으로 구조화 된다)로 기술되어 있다. 예를 들어 벽체는 다음과 같이 묘사된다.
ENTITY wall
SUPERTYPE OF (ONE OF (core_wall));
geom : wall_geom;
opening : OPTIONAL SET [0:?] OF o_object;
END_ENTITY
설명을 하자면 wall이란 ENTITY(요소)를 정의하는 데, wall은 core_wall이란 ENTITY의 속성을
파생받고, 모양을 정의하는 geom 은 wall_geom이란 형식으로 기술된다. 아울러 벽체에는
여러개의 개구부(opening)가 있을 수 있다.
BIM은 정보 모델링과 밀접한 관련이 있다. 정보 모델링은 언어를 통해 쉽게 구조적으로
모델링될 수 있다. 여기서 구조를 모델링한다는 것은 구조를 구성하는 요소와 관계를
묘사한다는 말이다.
ISO-STEP 기구에서 개발된 EXPRESS언어(1986 년 Douglas Schenck가 개발, 1994 년 ISO에서
표준화)는 실세계 객체, 속성, 아이디어등을 정보 모델로 맵핑하는 언어 문법을 제공한다. 이
모델링 언어는 제품 자료 교환 모델인 STEP등에 활용되었다. EXPRESS는 특수화, 통합,
모듈화와 같은 객체지향적인 특성을 제공한다. 아래는 EXPRESS 언어로 기술된 x, y, z
실수(REAL)값으로 구성된 point 좌표점의 예이다.
ENTITY point;
x, y, z : REAL;
END_ENTITY
만약 중심좌표 Center 와 반경 R을 가지고 있는 원(Circle)을 EXPRESS로 정보 모델링하면
다음과 같다.
ENTITY circle;
Center : point;
BIM 표준과 구현 © 강태욱 Page 29 of 149
R : REAL;
END_ENTITY
EXPRESS는 ENTITY 구조체를 이용해 원하는 객체의 정보 구조를 정의할 수 있다. ENTITY
정보간 관계를 정의하기 위해 circle예와 같이 집합관계(1:1, 1:n, n:n)를 사용할 수 있다. 다음은
point 의 리스트(LIST) 구성된 polyline(연결선)을 EXPRESS언어로 정의한 예이다. 여기서
정의된 polyine은 최소 2 개 이상의 포인트가 필요하다.
ENTITY polyline
points : LIST[2 : ?] of point;
END_ENTITY
객체지향적 특성인 개념일반화를 통한 상속 관계는 다음과 같이 표현된다. 예를 들어 위
폴리라인 ENTITY를 상위개념으로 재활용하고, 파생된 개념으로 REAL 데이터 형의 높이값
Elevation과 polyline에서 파생된 contour_line(등고선)을 정보 모델링 하면 다음과 같다.
ENTITY contour_line
SUBTYPE OF (polyline);
Elevation : REAL;
END_ENTITY
앞에서 언급한 객체를 모델링하면 다음과 같다.
point
circle
Center
REAL
x
y
z
R
polyline points[2:?]
contour_line
(ONEOF)
Elevation
그림 1-14 객체 모델링(EXPRESS-G, BIM의 원리, 2011)
BIM 표준과 구현 © 강태욱 Page 30 of 149
이렇게 객체지향적인 방식으로 모델의 3 차원 형상을 표현하고, 아울러 다양한 관점의
속성정보를 부가해 표현할 수 있다. 형상정보는 기하정보와 위상정보로 표현될 수 있고,
모델의 지식정보는 비지니스 프로세스에 생성되는 객체별로 정보를 담아둘 수 있다. 그러므로
다음에는 BIM을 구성하는 3 차원 형상 객체 모델과 정보 표현 포맷인 IFC구조에 대한
이야기를 해보도록 한다.
Building(건물)을 구성하는 모든 것은 Object(객체)들을 포함(Aggregation)하고 Object들
간에는 연관관계(Association)이 있다. Object의 상위객념은 Root이며 Root는 객체의 고유한
ID를 가질수 있다.(*주: 이 그림에선 표현하지 않았습니다.) Object는 속성들을 가지고 있다.
그리고 Object에서 개념적으로 파생을 받은 Product는 Geometry(기하학적 모양)들을 가지고
있다. 또한 Mateiral(재료)들도 포함한다. Product를 파생받은 Element(요소)는 다시
BuildingElement(건물요소), StructuralElement(구조요소), MepElement(MEP 요소)로 특수하게
나뉘어 질 수 있다. 건물요소는 벽, 바닥, 천장, 지붕등의 요소로 또 다시 특수하게 나뉘어 진다.
실제로는 이런 클래스간 관계가 매우 복잡하다. 아래는 IFC를 일부 역공학한 UML 클래스
다이어그램이다.
BIM 표준과 구현 © 강태욱 Page 31 of 149
그림 1-15 IFC 클래스 다이어그램과 일부 확대 모습(UML, BIM상호운용성과 플랫폼, 2013)
EXPRESS언어는 객체를 구성하는 속성들도 모두 관계로 표현을 한다. 즉, 속성도 독립적인
객체로 표현한다. 그래서 Root, Object만 표현하였음에도 관계를 표현하는 선들이 많다. 또한,
IFC에서는 Object를 확장하고 재활용할 수 있도록 PropertyDefinition이 별개로 Object에서
떨어져 나와 표현되어 있다.
1.3.4 형상 구조
IFC 형상 구조를 이해하기 위해서는 3 차원 솔리드 모델링 개념을 이해할 필요가 있다. 3 차원
모델링(Solid Modeling)은 물체(Solid)를 구성하는 각 요소들과 관계를 서로 모순되지 않게
직선, 곡선, 곡면과 같은 기하학적 요소를 위상학적(Topology)으로 상호간 정보를 연결하고
표현하는 작업이다. 솔리드 모델은 Vertex와 Edge만으로 표현된 Wireframe 모델에 비해
공간적 구분을 가능하게 해준다.
Root
+GlobalId
+Name
+Description
IfcProduct
IfcElement
+FillsVoids
+ConnectedTo
+HasCoverings
+HasProjections
+ReferencedInStructures
+HasPorts
+HasOpenings
+IsConnectionRealization
+ProvidesBoundaries
+ConnectedFrom
+ContainedInStructure
IfcObject
+ObjectType: IfcLabel
IfcProductRepresentation
IfcObjectPlacement
IfcObjectDefinition IfcRelAssigns
IfcRelDecomposes
+RelatedObjects: IfcObjectDefinition[n]
+RelatingObject: IfcObjectDefinition
IfcRelAssociates
decomposes
+hasAssignments
+hasAssociations
+isDecomposedBy
IfcOwnerHistory
IfcPersonAndOrganization
IfcApplication
+version: string
IfcPerson
IfcOrganization
+name: string
+description: string
IfcActorRole
+roles
*
+isRelatedBy
+relates
IfcBuilding
IfcRelContainedInSpatialStructure
IfcBuildingStorey
IfcSpatialStructureElement IfcSpatialElement
IfcProject
IfcRelAggregates
IfcSite
+RefLatitude
+RefLongitude
+RefElevation
+SiteAddress
ContainsElements
+RelatingStructure *
IfcRelConnects +RelatedElements
+RelatedObjects
*
*
+RelatedObjects
*
IfcRepresentationContext
*
IfcGeometricRepresentationContext
+CoordinateSpaceDimension
+Precision
+WorldCoordinateSystem
IfcGeometricRepresentationSubContext
+ParentContext
+TargetScale
+TargetView
Objects are independent pieces of information that might contain
or reference other pieces of information.
There are three essential kinds of relationships in which
object definitions (by their instantiable subtypes) can be involved:
< Attribute definitions >
HasAssignments : Reference to the relationship objects,
that assign (by an association relationship) other subtypes of
IfcObject to this object instance. Examples are the association
to products, processes, controls, resources or groups.
IsDecomposedBy : Reference to the decomposition relationship,
that allows this object to be the composition of
other objects. An object can be decomposed by several other objects.
Decomposes : References to the decomposition relationship,
that allows this object to be a part of the decomposition.
An object can only be part of a single decomposition
(to allow hierarchical strutures only).
HasAssociations : Reference to the relationship objects,
that associates external references or other resource
definitions to the object.. Examples are the association
to library, documentation or classification.
IfcBuildingElement IfcElectricalElement
IfcFurnishingElement IfcDistributionElement IfcTransportElement IfcEquipmentElement IfcFeatureElement
IfcElementAssembly
IfcVirtualElement
IfcActor
IfcControl
IfcGroup
IfcProcess
IfcPropertyDefinition
IfcOwnerHistory
IfcPropertySetDefinition
IfcPropertySet
IfcProperty
+Name
+Description
+PartOfPset
*
IfcResource
IfcTypeObject IfcPropertySetDefinition
IfcTypeProduct
IfcProductDefinitionShape IfcMaterialDefinitionRepresentation
IfcMaterial
+Name
+Description
+Category
+RepresentedMaterial
IfcMaterialProperties
IfcMaterialSelect
IfcGeneralMaterialProperties
+MolecularWeight
+Porosity
+MassDensity
IfcMaterialLayer IfcMaterialLayerSet
*
IfcRelAssociatesMaterial IfcRelAssociatesConstraint
IfcMaterialSelection
IfcMaterialSelection
BIM 표준과 구현 © 강태욱 Page 32 of 149
예를 들어 피라미드와 같은 5 면체 모델은 사실 선과 면으로 연결된 것이다. 이 연결성이란
정보를 같이 처리하지 않으면, 3 차원 객체를 제대로 표현할 수 없다. 연결성이라는 것은 즉, 각
기하학적 객체를 이어 붙여주는 접착제같은 역할을 하는 것이고 이것이 위상학적 정보이다.
점, 선, 면의 집합으로 된 간단한 와이어프레임을 표현하는 자료 구조를 통한 모델링은 렌더링,
행렬변환을 통한 모형변환등에는 문제가 없으나 형상이 복잡해 질 경우, 모델링시 각 요소
주변에 있는 부분을 모두 전체 탐색해 나가야 함으로 처리 성능이 떨어질 수 밖에 없다.
그러므로 모델을 부분 수정을 할 경우 검색을 하지 않고 위상정보에 의해 특정 요소 주위에
있는 요소를 빠르게 얻어낼 수 있는 정보가 필요하다.
이런 이유로 모델링에 사용하고 있는 위상구조는 일반적으로 경계면을 기준으로 안과 밖을
판단할 수 있는 B-rep(Boundary representation)구조를 사용한다. 이 구조는 다음과 같이
표현된다. 아래 그림에서 왼쪽 부분은 위상정보, 오른쪽 부분은 곡선, 곡면과 같은
기하학정보를 표현한다.
Solid
+MakeShell()
+RemoveShell()
Face Surface
+Intersect()
Edge Curve
+Intersect()
Point
-x
-y
-z
Vertex
Shell
+MEL()
+KEL()
Loop
0..*
0..*
1..*
1..*
Line
Arc
Spline
B-Spline
NURBS
PlaneSurface B-SplineSurface NURBS-Surface
Euler formula example
MEL : Make an Edge and a Loop
KEL : Kill an Edge and a Loop
MVE : Make a Vertex and an Edge
Axis
+Position
+DirectionX
+DirectionY
BIM 표준과 구현 © 강태욱 Page 33 of 149
그림 1-16 B-rep 모델 구조 (BIM의 원리, 2011)
이 구조를 이해하기 위해 간단한 큐빅 솔리드 모델을 아래 그림과 같이 가정해 보면. 왼쪽
그림에 있는 구조는 오른쪽 물체의 각 위상요소와 일치한다. 그리고 하나의 위상요소를 알고
있으면 주변의 다른 요소도 쉽게 탐색해 정보를 접근할 수 있다.
그림 1-17 B-rep 모델
1.3.5 파일 포맷 구조
IFC 파일 포맷은 기계, 제조분야에서 주로 사용되는 중립 포맷인 STEP 기반 포맷과 XML기반
포맷으로 나뉜다. STEP 포맷에서 객체 정의는 다음과 같은 형식을 가진다. 오른쪽에 정의된
객체값이 왼쪽 #no에 할당되는 형식이다.
#no = Ifc…(Object parameter …);
다음은 실제 IFC 파일의 구조를 나타낸다.
ISO-10303-21;
HEADER;
FILE_DESCRIPTION (('ViewDefinition [CoordinationView,
ISO 스키마 모델 정의.
FILE_DESCRIPTION 헤더
섹션 정의.
Solid
Face
Edge
Vertex
Shell
Loop
0..*
1..*
1..*
0..*
BIM 표준과 구현 © 강태욱 Page 34 of 149
QuantityTakeOffAddOnView]'), '2;1');
FILE_NAME ('example.ifc', '2013-08-15T22:03:15', ('Architect'),
('Building Designer Office'), 'IFC Engine DLL version 1.02 beta', 'IFC
Engine DLL version 1.02 beta', 'The authorising person');
FILE_SCHEMA (('IFC2X3'));
ENDSEC;
DATA;
#1 = IFCPROJECT('2NJiPr4gzCWOVa3Z_YKqfV', #2, 'Default Project',
'Description of Default Project', $, $, $, (#20), #7);
#2 = IFCOWNERHISTORY(#3, #6, $, .ADDED., $, $, $, 1376571795);
#3 = IFCPERSONANDORGANIZATION(#4, #5, $);
#4 = IFCPERSON('ID001', 'Bonsma', 'Peter', $, $, $, $, $);
#5 = IFCORGANIZATION($, 'TNO', 'TNO Building Innovation', $, $);
#6 = IFCAPPLICATION(#5, '0.10', 'Test Application', 'TA 1001');
#7 = IFCUNITASSIGNMENT((#8, #9, #10, #11, #15, #16, #17, #18,
#19));
#8 = IFCSIUNIT(*, .LENGTHUNIT., .MILLI., .METRE.);
...
#20 = IFCGEOMETRICREPRESENTATIONCONTEXT($, 'Model', 3,
1.000E-5, #21, $);
#21 = IFCAXIS2PLACEMENT3D(#22, $, $);
#22 = IFCCARTESIANPOINT((0., 0., 0.));
#23 = IFCSITE('2mOMAS4BPAWeItH4EihObT', #2, 'Default Site',
'Description of Default Site', $, #24, $, $, .ELEMENT., (24, 28, 0), (54,
25, 0), $, $, $);
#24 = IFCLOCALPLACEMENT($, #25);
#25 = IFCAXIS2PLACEMENT3D(#26, #27, #28);
#26 = IFCCARTESIANPOINT((0., 0., 0.));
#27 = IFCDIRECTION((0., 0., 1.));
#28 = IFCDIRECTION((1., 0., 0.));
#29 = IFCBUILDING('0Dvk3w8Wz0Svt0XBInUr2Q', #2, 'Default
Building', 'Description of Default Building', $, #30, $, $, .ELEMENT., $,
$, $);
#30 = IFCLOCALPLACEMENT(#24, #31);
파일명, IFC버전 명, 주석
등의 정의됨.
헤더 섹션 정의 끝.
BIM 모델 데이터 정의.
프로젝트 정의.
프로젝트 관련 속성 정보
조직 정의.
프로젝트 책임자 정의.
조직 정의.
사용 단위 정의.
SI단위로 길이는 mm임.
프로젝트 형상 표현 정보
정의.
프로젝트 기준 좌표점
정의.
부지 객체 정의.
부지 로컬 좌표계 정의.
빌딩 객체 정의.
BIM 표준과 구현 © 강태욱 Page 35 of 149
#31 = IFCAXIS2PLACEMENT3D(#32, #33, #34);
...
#35 = IFCBUILDINGSTOREY('2_MGIekZfDFA2lt5RKzuMC', #2, 'Default
Building Storey', 'Description of Default Building Storey', $, #36, $,
$, .ELEMENT., 0.);
...
#41 = IFCRELAGGREGATES('1BIpSsAJ56uO$wBfvCC6Ce', #2,
'BuildingContainer', 'BuildingContainer for BuildigStories', #29, (#35));
#42 = IFCRELAGGREGATES('3ltbIbu81FafFPivO8vWKE', #2,
'SiteContainer', 'SiteContainer For Buildings', #23, (#29));
#43 = IFCRELAGGREGATES('2GWUjMzrH8Kx5Z9zRUclb9', #2,
'ProjectContainer', 'ProjectContainer for Sites', #1, (#23));
#44 =
IFCRELCONTAINEDINSPATIALSTRUCTURE('2DTaFLTrf0f9HVtWbNOL4V',
#2, 'Default Building', 'Contents of Building Storey', (#45), #35);
#45 = IFCWALL('3GaQu8Oor3_gTuGuaQKuf7', #2, 'Wall xyz',
'Description of Wall', $, #46, #51, $);
#46 = IFCLOCALPLACEMENT(#36, #47);
...
#51 = IFCPRODUCTDEFINITIONSHAPE($, $, (#72, #101));
#52 = IFCPROPERTYSET('0Hh0as7k1BbxUn1_CeYGbQ', #2,
'Pset_WallCommon', $, (#53, #54, #55, #56, #57, #58, #59, #60, #61,
#62));
#55 = IFCPROPERTYSINGLEVALUE('FireRating', 'FireRating', IFCTEXT(''),
$);
...
#64 = IFCELEMENTQUANTITY('1CBGgoAfL7jx2sMT600qN6', #2,
'BaseQuantities', $, $, (#65, #66, #67, #68, #69, #70));
#65 = IFCQUANTITYLENGTH('Lenght', 'Lenght', $, 5000.);
...
#71 = IFCRELDEFINESBYPROPERTIES('3_fU2pkt9E5AImKFd9yz3r', #2, $,
$, (#45), #64);
#72 = IFCSHAPEREPRESENTATION(#20, 'Body', 'Brep', (#100));
#73 = IFCCLOSEDSHELL((#80, #87, #90, #93, #96, #99));
#74 = IFCPOLYLOOP((#75, #76, #77, #78));
빌딩 로컬 좌표계 정의.
건물 층 공간 객체 정의.
빌딩이 포함하는 건물 층
공간 집합 포함관계 정의.
단지가 포함하는 빌딩
객체 집합 포함관계 정의.
프로젝트가 포함하는 부지
객체 집합 포함관계 정의.
빌딩 층 객체가 포함하는
건물 부재 객체들 관리용
컨테이너 관계 정의.
컨테이너 관계 객체에
포함되는 벽체 정의.
벽체 로컬좌표계 정의.
벽체 공통 속성.
Pset_WallCommon 정의.
벽체 속성 정의.
벽체 수량객체 정의.
길이 수량 정의.
정의된 속성들과 벽체
객체 연결 관계 정의.
벽체 형상 정의.
벽체 폐합 공간 정의.
BIM 표준과 구현 © 강태욱 Page 36 of 149
#75 = IFCCARTESIANPOINT((0., 0., 0.));
#76 = IFCCARTESIANPOINT((0., 300., 0.));
#77 = IFCCARTESIANPOINT((5000., 300., 0.));
#78 = IFCCARTESIANPOINT((5000., 0., 0.));
#79 = IFCFACEOUTERBOUND(#74, .T.);
#80 = IFCFACE((#79));
...
ENDSEC;
END-ISO-10303-21;
연결 루프를 이용한 벽체
면 정의.
벽체 면을 구성하는 정점
정의.
정점으로 구성된 면 정의.
BIM 모델 정의 끝.
ISO 스키마 모델 정의 끝.
1.4 결론
본 장에서는 IFC의 전반적인 개념과 최근 릴리즈한 IFC4 의 개선점 및 특징, 그리고 IFC의
구조적 부분에 대해 설명하였다. 또한, 실제 IFC의 예를 분석하여 설명된 IFC스키마가
물리적으로 어떻게 저장되는 지 확인하였다. IFC는 향후 토목 엔지니어링 등 건설 전반에 걸친
건설정보 상호운용을 위해 꾸준히 개선되고 있으며 실무적인 문제점을 검토해 처리 성능이나
호환성 부분의 향상도 이루어지고 있음을 알 수 있다.
BIM 표준과 구현 © 강태욱 Page 37 of 149
2. Open BIM 기반 소프트웨어 구현
2.1 표준모델 파싱 및 정보추출
2.1.1 개요
이 장에서는 IFC 표준 포맷을 기반으로 정보를 처리하고 도구나 시스템을 구현하는 기본적인
방법을 설명하도록 한다.
IFC파일에서 직접적으로 정보를 추출하기 위한 방법은 크게 다음과 같은 방법이 있다.
그림 2-1 IFC 파일 정보 추출 방법
표 2-1 IFC 파일 정보 추출 방법 설명
No 정보 추출 방법 설명 도구 예
1 IFC Parser IFC Parser를 이용해 직접적으로 파일을
열고 IFC 객체 구조를 탐색해 가면서
필요한 정보를 추출하는 방법이다. 반대로
IFC 객체 구조를 메모리 상에 만들어 놓고
IFC파일로 저장할 수도 있다. 보통 BIM
도구나 시스템을 직접적으로 개발할 때
사용한다.
IfcOpenShell, IFC
Gear, IFC Engine
DLL, IFC SDK 등
2 CASE Tool Computer-aided software engineering의 STEP tools, JSDAI,
IFC
IFC Parser
CASE Tool
BIM
Modeler
BIM
Viewer /
Checker
BIM Server
BIM 표준과 구현 © 강태욱 Page 38 of 149
약자로 데이터 모델링을 지원하는
소프트웨어 공학 도구를 이용해 IFC 의
객체 구조를 저장하거나 역으로 해석해
구조나 정보를 추출하는 방법이다.
보통 데이터 모델로부터 Express와 같은
코드를 생성하는 방법을 Foward
engineering, 반대로 코드에서 데이터
모델을 생성하는 방법을 Reverse
engineering이라 하며 CASE Tool에 따라
지원 기능의 차이가 있다.
EDM, Visio for
Express-G 등
3 BIM Modeler 일반적으로 BIM 모델러는 IFC 입출력을
지원한다. 이를 통해 IFC에 포함된 객체의
형상이나 속성을 확인하거나 추출할 수
있다. Revit과 같은 모델러는 속성에 대한
일람표 출력 등을 지원하므로 엑셀로 그
값들을 확인하기 쉽다.
Archicad, Revit,
AllPlan, DProfiler,
dRofus 등
4 BIM Viewer /
Checker
BIM 뷰어나 법규 등을 체크하는
체커에서도 IFC 입력을 지원하며 SMC의
경우 좀 더 강력한 속성정보 추출 등의
기능이 지원된다.
SMC, ONUMA
system, Tekla
BIMsight, Autodesk
BIM 360, xBIM 등
5 BIM Server IFC를 서버에 등록하여 다양한 방법으로
정보추출을 할 수 있는 데 보통 Web-
Service를 통한 객체나 속성값들을
추출하거나 SQL문을 통해 필요한 정보를
Select 하여 값을 인출하는 방식을 취하고
있다.
EDM server,
bimServer 등
참고로 빌딩스마트에서는 표준을 기반으로 한 건설정보 재활용 생태계 마련을 위해 다음
링크와 같이 다양한 도구를 개발하거나 소개하고 있다.
BIM 표준과 구현 © 강태욱 Page 39 of 149
그림 2-2 IFC Implementation (https://www.buildingsmart.org/about/openbim/ )
2.1.2 개발환경
IFC와 같은 정보표준을 기반으로 한 유스케이스는 프로젝트 특성이나 활용 목적에 따라
다양할 수 있고 모든 상용 시스템이 이러한 유스케이스를 지원하는 것은 불가능하다. 이런
점에서 본인이 필요한 도구나 시스템을 연구하거나 개발할 필요가 생긴다. 이를 위해서는
표준의 구조 뿐 아니라 이를 이용해 도구나 시스템을 개발할 수 있는 개발도구와 개발환경을
이해할 필요가 있다.
일반적으로 프로그램을 개발하기 위한 도구들을 모아둔 지원 환경을 통합 개발
환경(Integration Development Environment – IDE)이라 한다. IDE는 프로그램 개발
프로세스에 따라 필요한 도구를 통합시켜 편리한 개발을 지원해 주는 프로그램이다.
보통 도구를 개발하는 방법은 도구가 동작할 수 있도록 데이터구조와 처리 로직을 정의하는
소스(Source)를 작성하고 소스파일이 생성되면, 아래 그림과 같은 순서로 소스를 실행하기
위한 기계코드(OBJect code)를 생성한 후에 실행된다. 소스는 컴파일러(Compiler)란 도구로
컴파일되어, 컴퓨터가 쉽게 빠르게 실행할 수 있는 중간코드로 변환된다. 중간코드는 파일
입출력과 같은 외부 시스템 라이브러리를 사용할 때 해당 중간코드를 연결(링크-link)시켜야
한다. 링크한 후 최종적으로 실행가능한 실행 코드 파일이 생성된다.
과거에는 이런 과정을 콘솔창에서 하나씩 각 역활을 하는 개발도구를 이용해 수행하였으나
최근 소프트웨어 개발 방식은 이를 모두 하나의 개발 환경에 올려두고 자동화시켜 각각
단계를 실행할 필요가 없도록 편리한 환경을 지원한다.
BIM 표준과 구현 © 강태욱 Page 40 of 149
그러므로 소스 코드를 코딩한 후에 실행할 경우 이런 과정이 외부로 드러나 있지 않고, 실행
버튼을 눌렀을 때 내부적으로 이런 전과정이 동작된다.
생성된 실행 코드 파일은 실행되기 위해 메모리에 로드되어, 코드가 실행된다. 아래와 같이
실행코드(혹은 컴포넌트 파일)를 생성하는 과정을 빌드(Build)라 한다. 이런 관점에서 Visual
Basic이나 Ruby같은 언어는 인터프린터(Interpreter) 언어라고 하여, 실행(Run)할 때 빌드
과정을 내부적으로 자동으로 처리하지만, C#이나 C++과 같은 컴파일(Compile) 언어는
명시적으로 빌드 과정을 수행한 후에 실행할 수 있다. 이런 이유로 인터프린터 언어는
문법적인 오류가 있어도, 그 전까지는 실행이 되지만 컴파일 언어는 문법적 오류가 있는
스크립트는 빌드될 수 없으므로 실행될 수 없다.
그림 2-3 스크립팅(프로그래밍) 및 스크립트 실행 단계
소스 파일이 길어지면, 소스를 읽고 일부를 수정하는 일이 매우 불편해지므로, 소스 파일을
여러 개로 분할하여 관리하기도 한다. 이런 이유로 프로그램 개발 프로젝트 규모에 따라 한
개에서 수백 개의 소스 파일을 추가될 수 있다. 일반적으로 IDE는 프로젝트 탐색창을 두어
이를 직관적으로 확인하고 관리할 수 있도록 하고 있다.
스크립팅
스크립트
소스 파일
컴파일
(Compile)
링크
(link)
중간
코드
시스템 라이브러리
중간 코드
실행 코드 파일
실행코드
메모리 로드
(Load)
코드 실행
(execution)
BIM 표준과 구현 © 강태욱 Page 41 of 149
이를 위해서는 컴퓨터 언어를 사용해 프로그래밍하고 컴파일할 수 있는 도구가 필요한데 이
장에서 활용할 개발 도구는 Microsoft 사에서 제공하는 개발 도구 중 Visual Studio의 2012 와
2010 버전을 사용하도록 하겠다. 만약 정품 개발 도구가 없다면 Microsoft사에서 Trial 버전을
제공하므로 이를 다운로드 받아 설치한다. 참고로 Trial 버전은 몇몇 기능에 제한이 있어
MFC(Microsoft Foundation Class)등 과거 버전과 호환성, 데이터 모델링, 디버깅, 협업 작업
등의 한계 점이 있다. 가능한 정품 개발도구를 사용하는 것이 좋다.
2.1.3 개발환경 설치
이 장에서는 정품 개발도구가 설치되지 않은 상황일 경우 예제를 실행해 보기 위해 Visual
Studio Trial 버전을 설치하는 방법을 기술한다.
1. Visual Studio 2012 설치
.NET기반 자동화 프로그램을 개발하기 위해서는 우선 Visual Studio 2012 Express(Trial
버전)을 https://visualstudio.microsoft.com/ko/vs/older-downloads/ 사이트에서 다운로드
받아야 한다. 다운로드시 여러 가지 언어 버전이 있는 데 예제를 실행해 보려면 C++, C#,
Basic언어를 지원하는 Express 버전을 설치해야 한다. 만약 정식 Visual Studio 2012 이 있다면
굳이 다운받아 설치할 필요는 없다. 가능한 Express버전 보다는 Professional 버전 등을
권장한다. 유료이지만 코드를 디버깅할 수 있거나 데이터베이스와 연동할 수 있는 다양한
컴포넌트가 포함되어 있다.
아래와 같이 해당 사이트를 방문해 설치언어를 ‘한국어’로 변경하고 ‘INSTALL NOW’를 선택해
설치한다.
BIM 표준과 구현 © 강태욱 Page 42 of 149
그림 2-4 Visual C# 2010 express 다운로드 사이트(https://visualstudio.microsoft.com/ko/vs/older-
downloads/ )
설치 한 후에 아래와 같이 실행해 본다. 정상적으로 실행되면 프로그램을 개발할 준비가 된 것
이다.
BIM 표준과 구현 © 강태욱 Page 43 of 149
그림 2-5 Microsoft Visual C# 2012 실행화면
2. Visual Studio 2010 설치
Visual Studio 2010 은 다음과 같이 다운로드 페이지에서 다운로드 받을 수 있다. ISO버전은
Daemon Tools와 같은 ISO CD 이미지 파일을 인식할 수 있는 소프트웨어를 설치해서
다운로드 받은 ISO파일을 CD 이미지로 인식시킨 후에 설치하도록 한다.
그림 2-6 Visual Studio 2010 다운로드 페이지 (https://visualstudio.microsoft.com/ko/vs/older-downloads/ )
설치방법은 앞의 Visual Studio 2012 와 거의 동일하다.
모두 설치하였다면 Visual Studio 2010 서비스팩 1 을 다운로드해 설치해야 한다. 그렇지 않을
경우 C++ 프로젝트를 컴파일할 때 다음과 같은 링크 에러 메시지를 만날 수 있다 (*주:
개발도구도 소프트웨어이기 때문에 버그가 존재한다. 개발사에서는 버그를 패치하는 “서비스
팩”을 무료로 배포하므로 문법적 에러가 전혀 없는 데 컴파일이나 링크가 안되는 경우 Visual
Studio 해당 버전의 서비스팩을 개발사의 다운로드 센터 검색 페이지나 Google 검색해
반듯이 설치하도록 한다).
BIM 표준과 구현 © 강태욱 Page 44 of 149
LNK1123: failure during conversion to COFF: file invalid or corrupt
Visual Studio 2010 서비스팩은 다음 링크에서 다운로드 받을 수 있다.
그림 2-7 Visual Studio 서비스 팩 다운로드 (https://www.microsoft.com/en-
us/download/details.aspx?id=34677 )
2.1.4 IFC 구조생성과 저장 - Hello Wall
2.1.4.1 개요
이 장에서는 빌딩스마트에서 제공하는 HelloWall이란 Visual C++ 기반 예제 프로젝트를
이용하여 Wall이 포함된 IFC객체구조를 직접 컴퓨터 언어를 이용해 생성하는 방법을 다룬다.
이 프로젝트는 IfcEngine.dll 이란 라이브러리를 사용하고 있으며 비상업적인 목적으로 사용할
수 있도록 제공하고 있다.
라이브러리는 내부 소스가 감춰져 있고 API만 노출되어 있다. API는 일종의 함수 집합이고
함수는 함수를 실행할 때 필요한 함수 호출명, 함수 파라메터, 함수 리턴값과 같은 함수
명세(Specification) 구성된다. 그러므로 API를 사용하기 위해서는 반듯이 함수 명세를
포함하는 헤더파일을 API 호출 코드 전에 포함(Include)시켜 컴파일러에 API를 어떤 방식으로
호출하고 파라메터를 전달해 줘야 하는 지 알려줘야 한다.
예제는 대화상자를 통해 Wall 뿐 아니라 Openning, Window를 생성할 수 있는 다양한 옵션을
이용한 IFC파일을 생성하도록 구현되어 있다. 이와 관련해 대화상자를 구현하기 위한
MFC(Microsoft Foundation Class) 사용자 인터페이스 처리 등 부가적인 소스가 많으므로
IFC를 처리하는 핵심적인 부분만 살펴볼 것이다.
2.1.4.2 예제 프로젝트 설치
1. 다음 링크에서 HelloWall MiniExample 을 다운로드한다.
BIM 표준과 구현 © 강태욱 Page 45 of 149
그림 2-8 HelloWall MiniExample 다운로드
페이지(https://hujb2000.gitbooks.io/ifcspecification/content/en/implementation/first_steps_and_tools.html )
2. Microsoft Visual C++ 를 실행해 [파일][열기][프로젝트/솔류션] 메뉴를 실행하고 다음과
같이 “miniExample.dsw”파일을 선택해 연다.
dsw 파일은 Visual Studio 구버전 프로젝트 파일이라 새로운 버전으로 업그레이드해야 한다는
메시지 창이 뜰 것이다. [예]를 선택해 변환하도록 한다.
BIM 표준과 구현 © 강태욱 Page 46 of 149
3. [빌드]메뉴의 [솔류션 빌드] 메뉴를 선택한다. 다음과 같이 설정은 [Debug] 모드로
빌드하도록 한다(*주: 디버그-Debug 모드는 실행파일인 exe파일을 생성할 때 실행파일
안에 실행코드마다 소스코드를 추적할 수 있는 특별한 정보를 덧붙인다. 이런 이유로
실행시 어느 소스코드의 문장을 실행하는 지 사용자가 확인할 수 있지만 실행파일 크기는
릴리즈-Release 모드에서 생성된 실행파일보다 훨씬 크게 생성되고 실행속도도 느리다).
2.1.4.3 프로젝트 실행
1. 이제 디버그 모드에서 실행할 실행파일을 설정한다. 변환 시 구 버전 프로젝트의 경우 가끔
실행파일 경로가 잘못되어 디버깅을 할 수 없는 경우가 있다. 다음과 같이 [솔류션 탐색기]의
“miniExample” 노드를 우클릭해 [속성]메뉴를 선택한다.
“miniExample” 속성 페이지에서 [구성속성]의 [디버깅]을 선택해 디버깅 속성값 중 [명령] 실행
파일명 설정 값을 <찾아보기> 메뉴를 이용해 다음과 같이 “Debug”폴더 아래에
“HelloWall.exe”파일로 설정하고 [확인]한다.
BIM 표준과 구현 © 강태욱 Page 47 of 149
2. 빌드된 프로그램을 실행한다. 다음과 같이 실행 버튼을 클릭하거나 F5 단축키를 눌러
실행한다.
그럼 다음과 같이 실행된 결과를 확인할 수 있다. 이 예제는 [IFC File Content] 그룹박스 내에
체크된 정보를 이용해 IFC파일을 생성하는 코드가 구현되어 있다. 생성할 수 있는 객체는 Wall,
Opening, Window이며 Wall은 두께, 높이, 폭과 더불어 Wall의 형상을 돌출, B-Rep, 경계박스
형태로 생성할 수 있다. Opening과 Window의 경우도 Wall과 같은 형상 타입을 선택해 출력할
수 있다.
[File Name]을 “example.ifc”로 입력하고 출력하고자 하는 폴더를 입력한 후에 [Create IFC File
(SPFF)]버튼을 클릭해보자.
BIM 표준과 구현 © 강태욱 Page 48 of 149
내부적으로 IFCEngine 라이브러리를 이용해 체크된 객체의 정보를 IFC로 출력해 파일로
저장한다. 실제 본인이 설정한 경로에 폴더를 보면 다음과 같이 IFC파일을 확인할 수 있다.
다음과 같이 IFC파일을 편집기로 열어보면 IfcWall객체와 관련 파라메터가 생성된 것을 확인할
수 있다.
BIM 표준과 구현 © 강태욱 Page 49 of 149
2.1.4.4 핵심 구조
이 프로그램은 IFC모델의 모든 요소 IFCEngine 라이브러리를 이용해 모델에 Wall이나
Window객체를 추가하여 IFC파일을 생성한다 (*주: STEP Tools를 사용하면 이런 IFC 파서를
포함한 라이브러리를 컴퓨터 언어별로 쉽게 생성할 수 있다. 대부분의 IFC관련 라이브러리는
이런 방식으로 개발되고 있다).
IFCEngine 라이브러리는 sdai 머리단어로 시작된다. 예를 들어 IFC 모델을 생성하는 함수
원형은 다음과 같다.
int __declspec(dllexport) __stdcall sdaiCreateModelBN(
int repository,
char * fileName,
char * schemaName
);
이외에 IFC파일을 열거나 (sdaiOpenModelBN), IFC객체 및 속성을 정의하고 관계를 연결하는
등에 필요한 API를 지원하고 있다. 지원하는 API는 IFCEngine.h 파일에 정의되어 있다.
API를 이용해 객체가 생성될 때 STEP 포맷의 각 행 참조번호와 유사한 객체 참조번호가
리턴된다. 이 값을 이용해 서로 관계를 설정할 수 있다.
프로그램은 구조적 방식으로 개발되어 있어 각 소스 파일이 하나의 재활용 모듈을 이루고
있다. 다음은 이와 관련된 모듈 설명이다.
소스 모듈 명 기능
baseIfc createEmptyIfcFile 함수를 이용해 내용이 빈 IFC파일을 생성한다.
saveIfcFile 함수를 이용해 현재 IFCEngine이 관리하는 IFC모델을
IFC파일로 저장한다.
IfcProject 객체 생성에 필요한 조작, 단위 등 객체를 생성한다.
관계 객체를 생성하고 관계를 연결하는 함수를 제공한다.
baseIfcObject createIfcWall 등 함수를 이용해 벽체, 윈도우 등 건물 부재 객체를
생성한다.
boundingBoxIfc IfcShapeRepresentation 객체 생성시 필요한 경계 박스 정보를
생성한다.
BRepIfc IfcShapeRepresentation 객체 생성시 B-Rep로 형상 구조를 구성하는
함수를 지원한다.
BIM 표준과 구현 © 강태욱 Page 50 of 149
extrudedPolygonIfc IfcShapeRepresentation 객체의 IfcExtrudedAreaSolid 객체를 이용해
형상 구조를 구성하는 함수를 지원한다.
propertiesIfc IfcPropertySet 객체를 생성하고 IfcProperty 객체에 속성명과
속성값을 구성하는 함수를 지원한다. 이외에 수량(Quantity), 벽체 및
윈도우의 기본 속성들을 설정하는 API를 지원한다.
이 프로그램에 포함된 각 소스 모듈들은 IFC 모델에 객체를 편리하게 생성하기 위한 일종의
유틸리티 함수 역활을 하고 있다. 예를 들어 다음과 같이 “propertiesIfc.cpp”파일에
buildPset_WallCommon함수는 “Pset_WallCommon” 벽체 기본 속성을 설정하는 코드를
구현하고 있다.
벽체나 윈도우 객체를 생성해 저장할 때 일반적인 순서는 다음과 같다.
첫번째, IFC 모델을 저장할 최상위 IfcProject객체를 생성하고 벽체 등 건축 부재를 저장하기
위해 IfcProject 객체의 하위 계층 구조를 생성한다. IfcProject는 IfcSite, IfcBuilding,
IfcBuildingStorey 객체와 계층구조를 이루고 있다. IfcSite, IfcBuilding, IfcBuildingStorey,
IfcSpace는 공간객체로 자체적인 지역좌표계를 가지고 있다. 이 부분은 앞 장에서 IFC구조에
관해 다루었으므로 참고한다.
두번째, IfcBuildingStorey에 벽체 등 건축 부재를 공통 속성들을 포함해 생성하고 그들간
관계를 생성해 연결한다.
세번째, IFC모델을 파일로 저장한다.
시퀀스 구조는 다음과 같다.
BIM 표준과 구현 © 강태욱 Page 51 of 149
Start
Input IFC save
option
Create empty IFC
file
Create IFC Wall
Create IFC
Opening
Save IFC Wall?
Save Opening?
Create IFC
Window
Save Window?
[Yes]
[Yes]
[Yes]
End
[No]
[No]
[No]
Save IFC File
Create IFC Wall
sdaiCreateInstanceBN(model,
"IFCWALL")
Create basic attributes of IfcWall
Create IfcRelDefinesByProperties to
link between IfcWall and
IfcPropertySet
Create B-Rep Shape for IfcWall
shape representation
Return
그림 2-9 HelloWall 처리 시퀀스 구조도
좀 더 깊은 이해를 위해 IFCEngine을 이용해 IFC구조를 만드는 핵심 코드를 확인해 본다.
다음은 빈 IFC모델을 구성하는 C++코드이다.
ifcProjectInstance = IfcProject 객체를
BIM 표준과 구현 © 강태욱 Page 52 of 149
getProjectInstance(lengthUnitConversion);
ifcSiteInstance = buildSiteInstance(&matrix, NULL,
&ifcSiteInstancePlacement);
ifcBuildingInstance = buildBuildingInstance(&matrix,
ifcSiteInstancePlacement,
&ifcBuildingInstancePlacement);
ifcBuildingStoreyInstance =
buildBuildingStoreyInstance(&matrix,
ifcBuildingInstancePlacement,
&ifcBuildingStoreyInstancePlacement);
buildRelAggregatesInstance("BuildingContainer",
"BuildingContainer for BuildigStories",
ifcBuildingInstance, ifcBuildingStoreyInstance);
buildRelAggregatesInstance("SiteContainer",
"SiteContainer For Buildings",
ifcSiteInstance, ifcBuildingInstance);
buildRelAggregatesInstance("ProjectContainer",
"ProjectContainer for Sites", ifcProjectInstance,
ifcSiteInstance);
sdaiCreateInstanceBN(model, "IFCPROJECT")
함수로 생성하고 기본 속성들을 설정한 후
참조값을 리턴받음.
지역좌표계 정의와 함께 IfcSite 객체를
생성하고 참조값을 리턴받음.
지역좌표계 정의와 함께 IfcBuilding 객체를
생성하고 참조값을 리턴받음.
지역좌표계 정의와 함께 IfcBuildStorey
객체를 생성하고 참조값 리턴받음.
각 객체의 참조값을 전달해 각 객체 간의
IfcRelAggregates 관계를 생성.
IfcSite와 IfcBuilding 간 관계를 설정.
IfcProject와 IfcSite 간 관계를 설정.
다른 IFC객체를 생성할 때도 유사한 방식을 사용할 수 있으며 객체 종류간 관계만 IFC구조에
맞게 설정하면 된다.
2.1.4.5 실습
이 실습에서는 벽체에 윈도우를 3 개 만들어 넣는 함수를 개발해 보도록 한다. 이를 통해 공간
객체와 건축 부재의 관계를 좀 더 깊게 이해해 본다. 이미 실습에 필요한 코드는 구현되어
있으나 직접 실습할 수 있도록 “/*”와 “*/”로 코드가 주석화되어 있어 컴파일되지는 않는
상태이다. 나머지 장들의 실습 내용도 같은 방식으로 코드가 처리되어 있으니 코딩하고 싶지
않다면 단순히 이 주석기호만 삭제하면 된다.
1. 함수를 생성하기 위해 솔류션 탐색기에서 [miniExample]의 [miniExample] 프로젝트에서
“miniExampleDlg.h”을 다음과 같이 연다.
BIM 표준과 구현 © 강태욱 Page 53 of 149
그리고 CMiniExampleDlg() 함수 바로 아래에 다음 함수를 정의한다.
void CreateWindowsAndSave();
“miniExampleDlg.cpp” 소스를 더블클릭해 편집기에서 열고 void CMiniExampleDlg::OnOK()
함수 바로 위에 다음과 같이 CreateWindowsAndSave 함수를 코딩한다. 나머지 “...
중략 ...”으로 표현되어 있는 부분은 기존 주석화된 동일한 함수의 해당 코드를 복사해 붙여
넣는다. 그리고 OnOK()함수안에서 CreateWindowsAndSave() 함수를 호출해 준다.
void CMiniExampleDlg::CreateWindowsAndSave()
{
// Create IFC objects and relationships
char ifcSchemaName[512];
m_SchemaName.GetWindowText(ifcSchemaName, 512);
if(createEmptyIfcFile(ifcSchemaName, true, _T("MILLI"))
== false)
return;
int ifcWallInstance = createIfcWall(_T("Wall xyz"), 100, 50, 0);
buildRelDefinesByProperties(ifcWallInstance,
buildPset_WallCommon());
shellStruct* pShell = localCreateShellStructureForCuboid(
0, 0, 0, 8000, 300, 2300); // mm unit
createIfcBRepShape(pShell);
for(int i = 1; i <= 3; i++)
{
int ifcOpeningElementInstance =
createIfcOpeningElement(
CreateWindowAndSave 함수 정의
저장할 IFC파일명을 획득.
빈 IFC 모델을 생성.
X, Y, Z위치와 이름을 파라메터로 받아
IfcWall 객체를 생성.
리턴된 IfcWall 객체를 참조해 벽체 공통
속성 설정.
B-Rep 구조 생성을 위한 Shell 형태 박스
구조 정의.
Shell 형태를 입력받아 IfcWall의 B-Rep를
정의.
개구부와 창 객체를 3 회 생성하기 위한
반복문 실행.
반복문 인덱스 i * 1100 만큼 X위치,
250 만큼 Z위치에 개구부 객체를 생성.
BIM 표준과 구현 © 강태욱 Page 54 of 149
_T("Opening Element xyz"), i * 1100, 0, 250, true);
buildRelVoidsElementInstance(ifcWallInstance,
ifcOpeningElementInstance);
pShell = localCreateShellStructureForCuboid
(0, 0, 0, 750, 300, 1400);
createIfcBRepShape(pShell);
createIfcBoundingBoxShape(750, 190, 1400, _T("Box"));
int ifcWindowInstance = createIfcWindow(
_T("Window xyz"), 0, 12, 0, true, 1400, 750);
buildRelFillsElementInstance(ifcOpeningElementInstance,
ifcWindowInstance);
buildRelDefinesByProperties(ifcWindowInstance,
buildPset_WindowCommon());
pShell = localCreateShellStructureForCuboid
(0, 0, 0, 750, 190, 1400);
createIfcBRepShape(pShell);
createIfcBoundingBoxShape(750, 190, 1400, "Box");
}
// Save IFC file
... 중략 ...
char ifcFileName[512];
m_FileName.GetWindowText(ifcFileName, 512);
saveIfcFile(ifcFileName);
벽체와 개구부 객체 IfcRelVoidSelement
관계 설정.
개구부 형상 좌표를 설정한 Shell 생성.
Shell 을 이용해 B-Rep 생성.
최대 경계 박스 설정.
1400mm높이, 750mm폭을 가진 창문 객체
생성.
개구부 객체와 창문 객체간
IfcRelFillSegment 관계 설정.
기본 창문 속성 설정.
창문 형상 좌표를 설정한 Shell 생성.
Shell 을 이용해 창문 B-Rep 생성.
최대 경계 박스 설정.
IFC 파일 저장.
SMC이나 xBIM과 같은 BIM뷰어를 실행해 저장된 IFC파일을 열면 다음과 같은 모델을 확인할
수 있다.
BIM 표준과 구현 © 강태욱 Page 55 of 149
2.1.4.6 결론
본 장에서는 IFCEngine 라이브러리를 이용한 IFC 모델을 생성하고 IFC객체와 관계 객체를
설정하는 방법을 알아보았다. IFC 라이브러리는 IFC 구조를 다룰 수 있는 API를 제공해 주므로
편리하게 본인이 필요한 도구를 개발할 수 있다.
IFC구조는 객체간 관계를 통해 서로간에 위상적인 계층 구조, 연관 및 의존 구조를 만들수
있다. 어떤 관계를 설정해야 하는 지는 객체의 종류에 따라 달라진다. 이에 대한 상세한 내용은
앞 장의 IFC 구조에 대한 내용을 참고하길 바란다.
BIM 표준과 구현 © 강태욱 Page 56 of 149
2.1.5 IFC 형상정보추출 – Hello IFC
2.1.5.1 개요
앞 장에서 설명한 HelloWall의 경우에는 IfcEngine이라는 라이브러리를 활용했었다.
이 장에서는 오픈소스를 이용해 형상정보 등을 추출하는 간단한 예제 프로그램을 만들어
본다. 이장에서 사용할 오픈소스는 IfcSdk 이며 다음 링크에서 다운로드 받을 수 있다 (*주:
오픈소스나 프로그램의 링크주소는 버전업이되면서 바뀌는 경우가 많다. 가능한 Google에서
검색해서 다운받는 것이 좋다). 이 오픈소스를 통해 간단한 IFC 정보 추출 및 출력 프로그램을
만들면서 IFC구조에 대해 좀 더 확실한 이해를 가져본다.
다운로드를 받은 후 폴더를 하나 만들어 압축을 해제한다 (*주: 폴더 명은 반드시 영문이어야
한다).
그림 2-10 IFC SDK 다운로드 링크 (https://github.com/cstb/ifc-sdk )
BIM 표준과 구현 © 강태욱 Page 57 of 149
2.1.5.2 오픈소스 프로젝트 빌드 파일 생성
보통 오픈소스는 멀티플랫폼(윈도우, 유닉스, 맥킨토시, iOS 등을 지원)을 지원하는 경우가
많다. 이런 경우 오픈소스를 진행하는 입장에서 각 플랫폼마다 프로젝트를 어떻게
빌드(Build)하고 어떤 파일들을 컴파일해야하는 지 만들기가 매우 번거롭다. 이런 이유로 각
플랫폼 환경에 의존적인 부분만 별도로 정의하고 공통적인 부분을 따로 모아 정의한 Make
파일이란 것을 사용한다. 최근 Make파일을 작성하고 각 플랫폼에 대한 프로젝트 파일을
생성하는 용도로 많이 활용되고 있는 것이 CMake 란 프로젝트 파일 생성 프로그램이다.
그림 2-11 CMake 다운로드 페이지(http://www.cmake.org)
CMake 설치파일을 다운받아 설치하고 실행한다.
실행하면 다음과 같은 CMake 대화창이 나타나는 데 소스가 있는 곳을 [Where is the source
code] 의 [Browse Source]버튼을 이용해 폴더를 지정해 준다. 그리고 소스가 빌드될 폴더를
지정하는 [Where to build the binaries] 는 같은 폴더로 설정한다 (*주: 폴더명에 한글이
들어있는 경우 에러가 나는 경우가 있으니 주의한다).
BIM 표준과 구현 © 강태욱 Page 58 of 149
이제 [Configure]버튼을 클릭하면 프로젝트 생성 타입을 선택하는 창이 표시되는 데 본인
PC에 설치된 Visual Studio 버전을 선택해 [Finish]버튼을 클릭한다. 그럼 설정된 폴더에서
CMakeLists.txt 파일이 있는 지 확인하고 있다면 이 파일을 로드해 해석한다. 참고로 이 파일은
CMake가 프로젝트 빌드 파일을 생성하기 위한 규칙이 아래와 같이 정의되어 있다.
CMake는 이 파일을 로드한 후에 현재 선택된 타입에 선택해야 할 빌드 옵션이 있는 지
확인하고 옵션이 있다면 다음과 같이 적색 표시된 옵션을 선택하도록 표시한다. 본인의
경우에는 ‘ENABLE PRECOMPLIED_HEADER’옵션과 ‘ENABLE_TESTING’ 옵션이 문제가 있어
체크를 해제하고 [Configure]버튼을 다시 클릭해 빌드 설정을 하였다.
BIM 표준과 구현 © 강태욱 Page 59 of 149
설정이 제대로 되면 자동으로 CMakeLists.txt파일을 해석하여 선택된 프로젝트 유형으로
프로젝트 빌드 파일이 생성된다. 다음 그림은 설정이 제대로 완료된 CMake 화면으로 출력
창에 “Configuring done”이라 표시된 것을 확인할 수 있다.
BIM 표준과 구현 © 강태욱 Page 60 of 149
이제 IfcSdk 폴더를 확인해 보면 다음과 같이 선택된 프로젝트 유형에 대한 프로젝트 빌드
파일이 생성되어 있을 것이다. 본인의 경우에는 Visual Studio 2011 로 프로젝트 파일을
생성했었다 (*주: 현재 설치된 개발 도구 버전에 따라 앞과 같이 제대로 빌드 설정이 성공하는
경우가 다르다. 본인의 개발 도구 버전과 환경에 맞도록 프로젝트 빌드 유형을 생성해야 한다).
2.1.5.3 프로젝트 빌드
이제 이 파일을 Visual Studio를 이용해 다음과 같이 열어본다. 그리고 [빌드]메뉴에 [솔류션
빌드]를 실행한다.
BIM 표준과 구현 © 강태욱 Page 61 of 149
빌드가 에러없이 성공했다면 다음과 같이 “DEBUG”폴더에 exe파일이 생성될 것이다.
IfcSdk에 포함된 예제 파일을 실행해 보기 위해 다음과 같이 [솔류션 탐색기]에서 “Example
Ifc2x3 SDK – readWrite” 프로젝트를 [시작 프로젝트로 설정]한다.
이 예제 프로젝트는 명령창에서 ifc 입력파일을 받고 파싱하여 IfcProject 객체의 정보를
추출해 출력한 후에 파싱된 정보를 “saved.ifc”파일로 저장한다.
그러므로 ifc파일을 하나 설정할 필요가 있는 데 IfcSdk 압축 폴더에 “builtModel.ifc”란 예제
ifc파일이 포함되어 있다. 이를 이용하도록 한다.
BIM 표준과 구현 © 강태욱 Page 62 of 149
우리는 명령창에서 해당 exe파일을 실행하는 것이 아닌 Visual Studio에서 실행하기로 한다.
이를 위해 “Example Ifc2x3 SDK – readWrite” 프로젝트를 우클릭해 [속성] 메뉴를 실행한다.
그리고 다음과 같이 [속성 페이지]창에서 [디버깅] 속성을 선택하고 [명령 인수] 속성을
“....dataifcbuiltModel.ifc”로 설정한다. 이는 “Example Ifc2x3 SDK – readWrite”
프로젝트가 있는 폴더에서 상대경로로 builtModel.ifc 파일을 명령인수로 설정한 것이다.
Visual Studio에서 실행하면 이 내용은 다음과 같이 명령창에서 실행할 때와 동일한 결과를
가진다.
Visual Studio 에서 실행하면 프로그램 소스의 특정 위치에 실행을 멈추고 그때 ifc객체들의
변수값 등을 확인하며 디버깅을 할 수 있는 장점이 있다.
BIM 표준과 구현 © 강태욱 Page 63 of 149
[디버깅]메뉴의 [디버깅 시작]메뉴를 선택해 실행한다.
정상적으로 실행되었다면 명령창이 띄워지고 다음과 같이 IfcProject 정보가 추출되어
출력되는 것을 확인할 수 있다.
그리고 실행된 폴더에 “saved.ifc”파일이 저장된 것을 확인할 수 있다.
2.1.5.4 핵심 구조
이 예제 프로젝트의 핵심 시퀀스 구조를 분석하고 설명한다.
1. IFC파일 열기
IFC는 표준파일이며 EXPRESS문법으로 정보를 모델링하고 있으므로 이 문법에서 정보를
추출하기 위해서는 문법을 인식하고 의미 정보를 추출하는 파서(Parser)를 이용해
파싱(Parsing)해야 한다. 이를 위해 먼저 IFC파일을 열고 그 안의 텍스트를 읽을 준비를 해야
한다. 다음은 이와 관련된 코드이다.
std::ifstream ifcFile;
ifcFile.open("example.ifc");
ifc2x3::SPFReader reader;
파일을 읽기 위한 파일스트림
객체를 생성하고
“example.ifc”파일을 연다.
ifc2x3 파싱을 위한 객체를
BIM 표준과 구현 © 강태욱 Page 64 of 149
if ( ifcFile.is_open() )
std::cout << "reading file ..." << std::endl;
else
return false;
bool result = reader.read(ifcFile);
ifcFile.close();
생성한다.
Ifc2x3 파일을 파싱한다.
파일을 닫는다.
2. IFC파싱 / 객체모델 인스턴스화
IFC 파일을 열고 나면 IfcEngine의 ExpressDataSet을 얻을 수 있다. 이 클래스는 BIM 오브젝트
세트를 관리하는데, 현재 관리 중인 BIM 오브젝트는 instantiateAll() 함수로 모델을 인스턴스화
할 수 있다. 인스턴스화를 한다는 것은 파일로 기록된 객체 정보를 메모리로 로딩하고
객체간의 관계를 연결하여 위상정보를 생성한다. 이를 통해 IFC에서 필요한 정보를 탐색할 수
있다.
ifc2x3::ExpressDataSet * expressDataSet =
dynamic_cast<ifc2x3::ExpressDataSet*>(reader.getExpressDataSet());
if(expressDataSet == NULL)
return false
expressDataSet->instantiateAll();
IFC객체집합을 관리하는
ExpressDataSet를
획득한다.
IFC파일 파싱을 통해
IFC객체집합을 구성한다.
3. IFC 객체 정보 접근 / 사용
DataSet에서는 IFC객체집합이 포함되어 있고 특정 객체들을 접근해 정보를 얻을 수 있다. 이
엔진은 C++의 표준라이브러리인 STL(Standard Template Library)을 사용하므로 여기서
제공하는 정보 열거자 클래스인 iterator를 이용하면 객체 정보에 쉽게 접근할 수 있다.
Step::RefLinkedList< ifc2x3::IfcProject > projects
= expressDataSet->getAllIfcProject();
DataSet에서 IfcProject객체들을
참조하는 연결리스트(Linked list)를
획득.
BIM 표준과 구현 © 강태욱 Page 65 of 149
Step::RefPtr< ifc2x3::IfcProject > project =
&*(projects.begin());
std::cout << "Project name is: "
<< project->getName().toLatin1() << std::endl;
연결리스트의 첫번째 요소를 획득.
획득된 IfcProject객체 이름을 얻어
std::cout 함수를 이용해 출력한다.
그리고 난 후 DataSet의 BIM 오브젝트를 열거해 정보를 얻고, 이를 적절히 활용하면 된다.
모든 처리를 마치면 IFC파일을 닫고 파일 리소스를 운영체계에 반납한다 (*주: 운영체계에서
관리하는 메모리, 파일, 네트웍 자원 등은 사용한 후 운영체제에 반납하지 않으면 자원이
부족해 결국 응용어플리케이션이 다운될 수 있다).
2.1.5.5 SimpleIfcViewer 개발
IfcSdk을 사용하여 객체를 읽고 오픈소스 기반 3D그래픽 렌더링 엔진으로 유명한 OpenGL로
간단히 렌더링해보는 SimpleIfcViewer프로그램을 개발해 본다. 이를 통해 형상정보가 어떻게
구체적으로 구성되어 있고 어떻게 형상정보를 이용해 정보를 생성하는 방법을 익혀보도록
한다.
이 장에서는 모든 개발 코드를 싣기에는 지면을 너무 차지하게 되므로 일부 핵심 코드만
설명하고 실제 코드는 본 장에 첨부된 예제 파일 소스 코드를 참고하도록 한다. 또한, OpenGL
및 이를 활용하기 위해 필요한 컴퓨터 그래픽스 관련 내용은 마찬가지 이유로 설명하지
않는다. 이런 내용을 깊게 알고자 한다면 관련 서적을 참고하길 바란다.
IFC는 형상정보를 크게 두가지 방법으로 정의하고 있다.
첫번째, B-Rep 구조 정의 - 앞 장의 IFC구조에 대해 설명한 내용처럼 형상구조를
경계표현법으로 정의한다. 경계표현은 형상을 구성하는 정점, 모서리, 면, 쉘(Shell),
솔리드(Solid)로 구조를 정의하는 방법으로 형상을 표현하는 유연성과 활용성이 크다. 다만,
형상이 복잡해 질수록 구조가 복잡해지고 모델 크기가 커지는 문제가 있다.
두번째, 파라메트릭 기반 객체 정의 – 이 방식은 형상을 정의하는 변수를 이용해
파라메트릭하게 형상구조를 정의하는 방식이다. 예를 들어 벽체를 정의할 때 벽체의 바닥면을
둘러싸고 있는 폐합 폴리라인을 정의하고 이를 벽체 높이만큼 돌출(Extrude)시키는 방법으로
벽체 형상을 정의한다. 파라메트릭 기반 객체 정의 방식은 디자인 의도가 포함되어 있으므로
다양하게 정의할 수 있다. 이런 이유로 IFC에서는 파라메트릭 기반 객체 정의 방식의 종류를
객체 유형별로 정의하고 있다.
BIM 표준과 구현 © 강태욱 Page 66 of 149
이 예에서는 B-Rep를 추출하는 실습을 한다.
형상정보만 얻어 화면에 Polyloop를 렌더링 할 것이므로 ExpressDataSet에서 IfcProject에서
위상정보를 이용해 객체들을 검색한다. 검색 방법은 앞 장에서 설명한 IFC 위상구조를 참고해
관계를 탐색하면 된다. 다음은 IfcRelAggregates 관계에 대해서 계층적으로 재귀탐색하는
VisitObjectAggregation 함수 코드 중 일부이다.
ifc2x3::Inverse_Set_IfcRelDecomposes_0_n decomposes
= pObjectDef->getIsDecomposedBy();
ifc2x3::Inverse_Set_IfcRelDecomposes_0_n::iterator itRel
= decomposes.begin();
for(; itRel != decomposes.end(); itRel++)
{
const ifc2x3::IfcRelDecomposes* pRel = itRel->get();;
const ifc2x3::IfcObjectDefinition* pRelatingObject
= pRel->getRelatingObject();
ifc2x3::Set_IfcObjectDefinition_1_n ObjectSet
= pRel->getRelatedObjects();
ifc2x3::Set_IfcObjectDefinition_1_n::iterator itObject
= ObjectSet.begin();
for(; itObject != ObjectSet.end(); itObject++)
{
const ifc2x3::IfcObjectDefinition* pRelatedObjectDef
= itObject->get();
VisitObjectAggregation(pRelatedObjectDef, vPosition);
}
}
IfcObjectDefinition 객체를
구성하고 있는 집합 관계를
획득한다.
집합관계 열거자를 이용해 각
관계를 접근한다.
각 관계에 Relating 객체와
Related 객체를 획득한다.
Related 객체집합을 획득한다.
Related 객체집합 열거자를
얻는다.
열거자를 통해 Related 객체를
접근한다.
계층적 탐색을 위해 이 함수를
재귀호출한다.
벽체와 같은 건축부재의 형상정보를 파싱하기 위해 별도로 ParsingElement와 Geometry
shape을 표현하는 ParsingProductRepresentation 함수를 정의하였다. 이 함수는 IFC객체들을
재귀하면서 정보를 얻는다.
BIM 표준과 구현 © 강태욱 Page 67 of 149
bool IfcFile::ParsingElement
(ifc2x3::IfcElement* pElement, Vector3d
vPosition)
{
ifc2x3::IfcObjectPlacement* pPlace =
pElement->getObjectPlacement();
if(pPlace->getType().getName() == "IfcLocalPlacement")
...
ParsingElement() 함수를 정의한다.
객체의 기하학적 위치를 갖고 있는
IfcLocalPlacement 객체 획득
IFC에서는 각 공간객체가 상위 공간객체의 좌표계에서 상대적으로 정의된다. 예를 들어
IfcBuilding 건물공간객체는 IfcBuildingStorey 건물층 공간객체의 위치를 정의하는
기준좌표계를 정의한다. 건물층은 건물에 대해 지역좌표계를 가지고 있다.
IfcLocalPlacement는 각 공간객체의 지역좌표계를 정의하고 있다. 이 부분에는 하위
Element의 Representation객체에 포함된 Geometry 정보가 반영돼야 한다. 다시 말하면 하위
Element의 Position의 x, y, z가 지역 좌표계라면 이것을 절대 좌표 기준을 정의하는 세계
좌표계로 변환해야 한다. 그렇지 않으면 얻어진 형상 정보로 모델이 제대로 표현되지 않는다.
형상정보를 얻기 위해 다음과 같이 IfcElement를 표현하는 IfcProductRepresentation을 얻어
Geometry 정보를 획득한 후 ParsingProductRepresentation 함수를 정의해 형상정보를
추출한다.
ifc2x3::IfcProductRepresentation* pRep = pElement->getRepresentation();
ParsingProductRepresentation(pRep, vPosition);
for( ifc2x3::Inverse_Set_IfcRelVoidsElement_0_n::const_iterator it =
pElement->getHasOpenings().begin(); it
!= pElement->getHasOpenings().end(); it++)
{
Step::ObsPtr<ifc2x3::IfcRelVoidsElement> Object = (*it);
ifc2x3::IfcElement* pEle = Object->getRelatedOpeningElement();
ParsingElement(pEle, vPosition);
Wall객체 내에서도 개구부,
창, 문과 같은 객체가 포함된
재귀적 포함 관계를 가지고
있다. Loop를 이용해 각
포함된 객체들을 열거한다.
객체를 획득해
ParsingElement 함수를
재귀호출한다.
BIM 표준과 구현 © 강태욱 Page 68 of 149
}
다음 소스는 형상 정보 표현을 위해 정의된 함수이다. 이 경우는 객체의 PolyLoop 기하정보만
얻기 위해 IfcFacetedBrep의 정보만 구한다.
IFC 구조는 솔리드 모델을 표현하기 위해서 B-Rep을 사용한다. 그러므로 솔리드 모델 계층에
따라 정보를 얻어야 한다. 솔리드 모델은 솔리드에서 면, 모서리, 점을 순서대로 접근해 정보를
얻을 수 있다. 다음은 IfcProductRepresentation 객체에서 형상정보를 취득하는 코드 일부이다.
Step::RefPtr< ifc2x3::IfcProductRepresentation > rpValue
= pProductRepresentation;
Step::RefPtr< ifc2x3::IfcShapeRepresentation > shapeRepresentation;
ifc2x3::List_IfcRepresentation_1_n::iterator it;
for(it = rpValue->getRepresentations().begin(); it != rpValue
->getRepresentations().end(); it++ )
{
...
for(; itRep != shapeRepresentation->getItems().end(); itRep++)
{
Step::RefPtr<ifc2x3::IfcRepresentationItem> pItem = (*itRep);
if(pItem->getType().getName() != "IfcFacetedBrep")
continue;
...
for(; itFace != pClosedShell->getCfsFaces().end(); itFace++)
{
Step::RefPtr<ifc2x3::IfcFace> pFace = (*itFace);
ifc2x3::Set_IfcFaceBound_1_n::iterator itBound =
pFace->getBounds().begin();
for(; itBound != pFace->getBounds().end(); itBound++)
{
if(pLoop->getType().getName() != "IfcPolyLoop")
continue;
vector3ds* pPolyline = new vector3ds();
...
for(it = PointList.begin(); it != PointList.end(); ++it)
{
함수에서 입력받은
pProductRepresentation
파라메터 획득한다.
IfcShapeRepresentation 객체들을
각각 열거하여 얻어 온다.
IfcShapeRepresentation객체의
IfcRepresentationItem들을
획득한다.
IfcRepresentationItem 중
“IfcFacetedBrep”객체만 처리한다.
IfcFacetedBrep에서 Face들을
획득한다.
Face를 구성하는 경계선들을
획득한다.
경계선들을 열거하며 각각
얻어온다.
경계선 중 IfcPolyLoop를 얻는다.
폴리라인 정보를 담을 객체
pPolyline 생성한다.
폴리라인을 구성하는 정점들을
열거하여 각 정점을 획득한다.
BIM 표준과 구현 © 강태욱 Page 69 of 149
Step::RefPtr<ifc2x3::IfcCartesianPoint> pt = (*it).get();
ifc2x3::List_IfcLengthMeasure_1_3 coords
= pt->getCoordinates();
...
pVertex->x = coords[0] + vPosition.x;
pVertex->y = coords[1] + vPosition.y;
pVertex->z = coords[2] + vPosition.z;
pPolyline->push_back(pVertex);
}
...
_aPolyline.push_back(pPolyline);
}
}
}
}
정점을 구성하는 X, Y, Z좌표를
얻는다.
좌표를 변환한다.
폴리라인 좌표들을 pPolyline 에
추가한다.
pPolyline을 Polyline배열객체에
추가한다.
위에서 생성된 aPolyline에 Polyline을 추가하고 리턴한다. 이것을 이용하면 와이어프레임
형태의 IFC 모델을 렌더링 할 수 있다. 이와 같은 식으로 프로그래밍을 해 본다 (*주: 본 장에
첨부된 예제파일 프로젝트를 Visual Studio에서 로드해 작업해도 된다). 실행파일 생성을 위해
디버그(Debug)모드로 빌드해 본다. 빌드된 폴더(IfcSdkbinDebug)에 SimpleIfcViewer.exe
파일이 있을 것이다. 해당 폴더에 앞 장에서 B-Rep구조로 생성한 벽체가 저장된 IFC파일을
복사해 넣고 명령창에서 다음과 같이 실행해 본다.
그럼 다음과 같이 example.ifc파일의 형상정보를 추출해 OpenGL로 렌더링 된 결과를 확인할
수 있다.
BIM 표준과 구현 © 강태욱 Page 70 of 149
그림. IFC기반 뷰어(OpenGL기반 Wireframe 모드 렌더링)
이 프로그램은 IFC의 형상정보 추출에 대한 이해를 돕기 위해 간략한 코드로 개발된 것이므로
몇가지 한계가 있다.
형상의 면처리는 하지 않았는 데 이는 유한요소법 등에서 많이 사용하는 Mesh Processing을
적용해 메쉬 구성하는 삼각요소들을 얻어야 해결할 수 있다. 이와 관련해서도 오픈소스가
많으니 참고하길 바란다. 다른 이슈는 Extrude등을 사용한 파라메트릭 기반 객체 모델 유형이
지원되지 않는다. 이는 B-Rep처리에 비해서는 크게 어렵지 않은 부분이다. 좌표변환시에도
이슈가 있는 데 위치변환만 적용하였고 회전변환은 적용하지 않았다. 이는 주석으로 표시되어
있고 행렬변환식을 사용하면 쉽게 처리되니 참고하길 바란다.
2.1.5.6 결론
IFC모델에서 원하는 건축물 정보를 탐색하고 추출하여 원하는 목적 어플리케이션 정보를
지원하기 위해 정보 처리하는 것은 IFC의 중요한 개발 목적 중 하나이다.
IfcSdk는 오픈소스 기반의 IFC 모델 생성 라이브러리며 내부적으로 오픈되어 있으므로 필요한
함수를 추가하여 기능을 개선할 수 있다.
IFC모델에 객체를 추가하고 관계를 설정하는 방법은 라이브러리 기반 개발 방식과 거의
동일하다. 다만, 소스가 오픈되어 있으므로 다른 개발환경(예 – iOS, 웹, 리눅스 등)상에서
개발이 가능하다. 실제로 IfcSdk는 멀티플랫폼 CMake 파일을 지원해 아이폰, 아이패드 등에서
IFC모델을 보고 정보를 확인하는 도구를 개발할 수 있다.
BIM 표준과 구현 © 강태욱 Page 71 of 149
2.1.6 결론
IFC는 표준정보포맷일 뿐이므로 IFC파일에서 객체 정보를 획득하기 위해서는 IfcSdk와 같은
파서가 필요하다. 여기서는 오픈소스를 이용해 IFC 표준포맷을 이용한 간단한 목적의 개발을
해 보았다. 이외에 IFC 모델을 다룰 수 있는 오픈소스나 라이브러리는 IfcOpenShell
(http://ifcopenshell.org/), IfcGear 등이 있으며 사용방법은 거의 유사한다. 오픈 소스는
내부적으로 어떻게 IFC를 모델링하고 확인하는 데 좋으며 성능을 본인이 개선할 수 있는
장점이 있는 반면 라이브러리는 안전된 기능을 제공하는 대신 제공되는 API는 블랙박스
형태라 내부적으로 어떻 알고리즘으로 실행되는 지 알 수 없고 문제가 발생되었을 경우
개발사가 라이브러리를 릴리즈해 줄 때까지는 해결 방법이 없다. 이런 이유로 개발 목적에
맞는 적절한 IFC개발도구를 활용하는 것이 중요하다.
BIM 표준과 구현 © 강태욱 Page 72 of 149
2.2 BIM 협업과 가시화 도구 구현
2.2.1 BIM모델관리와 협업 - bimServer.org
2.2.1.1 개요
bimServer는 IFC파일을 데이터베이스로 관리할 수 있도록 지원해주는 오픈소스기반
BIM서버이다. bimServer는 다음과 같이 BIM Datastore로써 역활을 하며 협업 지원을 위한
형상관리 기능을 지원한다. 다양한 모델러 및 시스템과 연동을 위해 약 470 개 (1.1 버전)의
Web-service를 지원하고 Map 기능 구현을 위해 Google 등 클라우드 기반 시스템을 활용하고
있다. COBie, CityGML, Collada 등 다양한 파일 포맷을 지원하고 Plugin 형태로 기능을 확장할
수 있다. 이런 Plugin은 일종의 BIM MVD(Model View Definition)로써 동작된다.
그림 2-12 bimServer 개념도 (출처 - bimServer.org, February 2009, BIMserver and the potential of server side
BIM, http://www.stress-free.co.nz/bimserver_and_the_potential_of_serverside_bim )
BIM 표준과 구현 © 강태욱 Page 73 of 149
이 오픈소스는 BIM 모델 관리를 위해 버클리DB를 사용하는 데 클라우드 시스템에서 많이
사용되는 Mongo DB와 같은 파일기반으로 처리 속도가 매우 빠르다 (*주: 버클리 DB는
오라클에 인수되었다). 참고로 파일기반 DB는 Key-Value 형식으로 Key에 대한 인덱스를
생성하여 빠른 검색 속도를 보장하면서 파일 기반이라 데이터 레코드 삽입 속도도 매우
빠르다.
2.2.1.2 설치 및 실행
bimServer를 실행하기 위해서는 우선 Java 최신 버전을 다운로드해서 설치해야 한다.
bimServer는 윈도우즈, 맥킨토시, 리눅스와 같은 운영체제를 지원한다. 이 장에서는
윈도우에서 실행하는 방식을 사용하는 데 맥킨토시, 리눅스에서도 큰 차이없이 실행이
가능하다. 윈도우는 많이 사용되는 운영체제인 만큼 실행이 편리한 면이 있지만 서버가
실행되는 데 메모리를 많이 차지하는 문제가 있다.
1. 자바는 http://java.com/ 링크에서 다운로드할 수 있다. 각자 운영체제에 맞는 버전을
다운받아 설치를 한다.
2. bimServer를 https://github.com/opensourceBIM/BIMserver/releases (소스코드 -
https://github.com/opensourceBIM/BIMserver)에서 다운로드 한다. 파일들이 몇 가지 있는 데
이 중에서 bimServer-1.2.jar 파일을 받는 다(*주: 현재 2013 년 7 월 시점이며 이후에는 더 높은
버전으로 릴리즈 되어 있을 수 있다. 최신 버전으로 다운받으면 된다). 또한, bimServer 관련
문서가 포함되어 있는 bimServer-javadoc-1.2-final.zip 파일도 다운로드 받는다.
BIM 표준과 구현 © 강태욱 Page 74 of 149
3. bimServer 은 Java 코드가 컴파일되어 압축된 jar 을 통해 실행한다. 서버는 서버 역활을
하는 PC가 필요하고 서버를 실행한 후 클라이언트는 서버 PC의 IP 주소를 통해 실행되는 것이
일반적이다. bimServer도 마찬가지이다.
우선 다음과 같이 명령창(cmd)을 실행한다.
[cd] 명령을 이용해 폴더를 bimServer 을 다운로드 한곳으로 이동한다. 그리고 다음과 같이
명령창에서 서버 실행명령을 입력하여 서버를 실행한다(*주: bimServer 버전에 따라 jar
확장자를 가진 Java 실행파일 이름이 다를 수 있으므로 만약 발견하지 못한다면 bimServer
홈페이지에서 실행파일 이름을 확인할 필요가 있다). 그럼 Java가 jar 압축파일에 포함된
Menifest 실행정보를 찾은 후 실행한다.
Java – jar bimServer-1.2.jar
4. 다음과 같이 BIMserver Stater 창이 나타나는 데 [Start]버튼을 클릭한다.
참고로 [Address]는 현재 IP주소로 서버를 실행함을 의미하고 [Port]는 서버가 클라이언트와
통신할 포트를 말한다. 만약 포트 초기값이 운영체제에서 설정된 방화벽 포트에 추가되어
있다면 제대로 수행되지 않으니 주의하길 바란다.
BIM 표준과 구현 © 강태욱 Page 75 of 149
나머지 [Max Heap Size], [Max Perm Size], [Stack Size]는 서버와 Java 가상 머신이 실행에
필요한 메모리를 설정하는 것으로 메모리 부족 경고 메시지(Out of memory exception)가
표시되면 이 수치를 적절히 조정해야 한다. 이 경우에는 [Max Heap Size]를 올려주는 데 예를
들어 1.3 MByte라면 ‘1300m’을 입력한다 (*주: 1.2 버전부터는 많은 메모리를 사용하므로 최소
4~8 GB이상 메모리를 설치하고 실행하는 것이 좋다).
여전히 메모리 부족 메시지가 출력되어 서버가 시작되지 않는 다면 알집(Alzip)과 같은
압축해제 프로그램을 설치 한 후에 다운받은 jar파일을 더블클릭하면 이 압축파일안에
‘Plugin’이라는 폴더가 있고 이 안에 용량이 많은 jar 플러그인 파일을 몇개 삭제한 후에 다시
시도하도록 한다.
여전히 메모리 부족으로 서버가 시작되지 않는 경우가 있다. 이 경우에는 본 교재에서
제공하는 예제 폴더에 있는 1.1 버전을 실행한다. 다음과 같이 폴더안에는 bimServer를
실행하기 위한 bimserver.bat 파일이 있다. 이를 더블클릭한다. 마찬가지로 [Start]시 메모리
부족 문제가 있다면 앞에 언급한 것처럼 [Max Heap Size] 등을 증가시켜 보도록 한다.
BIM 표준과 구현 © 강태욱 Page 76 of 149
제대로 [Start]되었다면 아래와 같은 메시지를 볼 수 있다.
5. BIMserver Starter창에서 [Launch Webbrowser]버튼을 클릭해 웹브라우저를 실행한다. 그럼
다음과 같이 웹브라우저가 자동으로 실행되고 지정된 [Address]의 [Port]를 값으로 클라이언트
접속을 시도한다 (*주: 만약 자동으로 접속이 안되면 http://localhost:[Port] 주소값을 직접
입력한다). 서버에 사용자로 등록을 하고 E-mail과 암호를 입력하여 [Login]을 한다. 초기
아이디와 암호는 “Admin”과 “Admin”이다.
BIM 표준과 구현 © 강태욱 Page 77 of 149
2.2.1.3 핵심 구조
bimServer는 IFC기반 BIM서버로써 동작되기 위해 다음과 같은 구조로 구성되어 있다.
bimServer는 크게 3 가지 종류로 컴포넌트를 구분할 수 있는 데 BIM모델 및 협업 관리 등을
지원하는 bimServer platform, BIM서버 기능 확장을 위한 Plugins tools, 사용자에게 웹서버를
통한 인터페이스를 제공해 주기 위한 Web server 이다. Plugins되는 모듈들은 IFC파일을
파싱하는 IfcEngine, CityGML파일을 저장하는 Plugin 등 다양하다.
BIM 표준과 구현 © 강태욱 Page 78 of 149
그림 2-13 bimServer 플랫폼 구조
bimServer platform를 구성하는 컴포넌트는 다음과 같다.
컴포넌트 내용
database BIM 모델 정보를 DB로써 관리한다. 현재는 파일 기반 DB인 Berkeley DB를
사용한다.
cache 처리 속도 성능을 개선하기 위한 캐쉬 처리를 한다. 자주 사용되는
객체들을 캐쉬 처리하여 처리 성능을 높인다.
query BIM 모델에서 필요한 정보를 추출하기 위한 쿼리 연산을 지원한다.
notification 협업 및 형상 관리 시 객체 및 사용자 간 주고 받는 통지 메시지를
관리한다.
Configuration
Mamagement
협업을 위한 모델 형상 관리를 지원한다. 로그인 계정과 모델에 대한
Checkin, Checkout, Revision history 등을 지원한다.
Serializers BIM 모델을 다양한 형식의 데이터 포맷과 입출력을 하기 위한 기본
인터페이스를 제공한다. 실제 동작 코드는 각 포맷에 대해 구현된 Plugin
에서 처리된다.
webservices 외부 이기종 시스템과 연계를 하기 위해 SOAP 형식의 웹서비스 API를
지원한다. SOAP형식으로 Eclipse와 같은 개발도구를 이용해 API를
bimServer platform
cache
(EHCache)
notifications
webservices
database
(Berkeley DB)
query
Configuration
Management
Web server
(Apache + Tomcat)
MVC Framework
(Spring)
Serializers
IfcEngine
CityGML
Collada
Plugins
…
Google
Plugins
interface
Map
interface
API
BIM 표준과 구현 © 강태욱 Page 79 of 149
호출하여 BIM모델 생성이나 형상관리를 할 수 있다.
bimServer는 플랫폼 개념으로 개발되어 있어 확장성이 좋다. 다른 이기종 시스템과 연계도
가능하며 이는 webservices를 이용해 처리할 수 있다. 다음은 BIM 모델서버와 다른 이기종
시스템 연계를 위해 디자인된 bimServer 웹서비스 아키텍처이다. BIM 파일이 포맷 변환기를
거쳐 모델서버에 저장되고 모델 뷰 접근을 위해 SOAP 형식으로 웹서비스를 호출하도록 되어
있다. 이와 함께 REST를 지원해 모델 변경 사항이 발생하였을 때 등록된 사용자에게 자동으로
변경통보하는 기능을 지원한다. 이러한 아키텍처로 인해 다른 BIM 소프트웨어와 연동이
가능하다.
그림 2-14 bimServer 웹서비스 아키텍처 (The implementation of BIM SOAP facade pattern, Umit Isikdag,
2012, Design patterns for BIM-based service-oriented architectures, Automation in Construction)
2.2.1.4 프로젝트 생성
본 장의 예제 파일에서 IFC파일 중 하나를 BIM 서버에 등록해 보도록 한다.
서버에 로그인을 하면 다음과 같은 화면이 표시된다.
BIM 표준과 구현 © 강태욱 Page 80 of 149
1. 프로젝트 생성을 위해 [Add project] 버튼을 클릭한다. 프로젝트 추가 페이지가 나타나면
프로젝트 이름을 설정한다. [Geolocate] 체크 박스를 체크해 IFC파일내 포함된 건물의 원점과
방향을 다음과 같이 입력한다. 만약 지도를 이용해 입력하고 싶다면 [Use a map!] 링크를
클릭한다. 화면에 Map 창이 뜨는 데 Map창의 툴바를 이용해 위치를 탐색하고 [Draw line]
메뉴를 이용해 건물의 원점과 방향을 입력할 수 있다. 참고로 Map창 툴바는 지도의 [Zoom
in], [Zoom out], [Pan], [Draw line]메뉴를 각각 지원한다.
BIM 표준과 구현 © 강태욱 Page 81 of 149
[Save]버튼을 클릭하면 입력한 이름의 프로젝트가 추가된다.
BIM 표준과 구현 © 강태욱 Page 82 of 149
상단에 메뉴가 있는 데 [Projects] 메뉴를 선택하면 현재 생성된 프로젝트 리스트가 다음과
같이 표시된다. 이 메뉴를 통해 프로젝트를 활성화하거나 삭제할 수 있다.
[Users]메뉴는 BIM서버에 사용자를 추가하고 삭제할 수 있는 기능을 지원한다.
다음과 같이 사용자를 만들어보자. 다음 예에서는 Architect, engineer, mep 사용자를
만들었다. 만들어진 사용자를 클릭해 암호를 설정한다. 여기에 등록된 사용자만 생성된
프로젝트에 포함시킬 수 있어 프로젝트 모델을 체크인하거나 체크아웃하여 협업할 수 있다.
[Info] 메뉴를 선택하면 라이센스, JVM, 웹서비스 등 설정 정보를 볼 수 있다.
여기서 특이한 것은 [Database]탭인데 데이터베이스 처리 속도를 높이기 위해 파일 DB기반
버클리 DB(Berkeley DB)를 사용하고 있다는 것을 확인할 수 있다 (*주: 클라우드 기반 분산 및
고속 처리를 위해 사용되는 Mongo DB와 같은 방식인 파일 DB기반 방식을 사용하고 있다).
BIM 표준과 구현 © 강태욱 Page 83 of 149
[Web Service]탭을 클릭하면 다음과 같이 웹서비스 지원하는 함수 리스트를 확인할 수 있다.
[Log]메뉴를 선택하면 다음과 같이 서버가 어떻게 사용되었는 지 히스토리를 확인할 수 있다.
[Server Settings]메뉴를 클릭하면 서버 설정 값 및 서버에 플러그인 된 모듈이 표시되는 데
다음과 같이 CityGML 입출력을 담당하는 Serializer 나 COBie 를 지원하는
COBieCheckSerialize를 지원하는 것을 확인할 수 있다.
BIM 표준과 구현 © 강태욱 Page 84 of 149
[Setting]메뉴를 클릭하면 각종 Addin 을 관리할 수 있는 페이지가 표시된다. 예를 들어
[Render Engines] 탭을 선택하면 다음과 같이 IFC파일을 파싱하고 저장하는 역활을 하는
렌더엔진(RenderEngine)을 추가하거나 삭제할 수 있으며 [Object IDMs] 탭을 선택하면
IDM기반으로 구현된 COBie와 같은 Addin을 관리할 수 있다. 기타 [Serializers]탭을 선택하면
CityGML, Collada와 같은 파일을 저장할 수 있는 Addin이 표시된다.
2. 프로젝트를 사용하기 위해 [Project]메뉴를 클릭해 다음과 같이 프로젝트 명을 클릭한다.
그럼 다음과 같이 “Sample2”의 Project details’페이지가 표시되고 그 아래와 왼쪽에 관련
메뉴나 탭이 표시된다.
BIM 표준과 구현 © 강태욱 Page 85 of 149
[Details]탭은 프로젝트 상세 정보가 표시되어 있어 언제 누구에 의해 생성되고 정보가 최종
갱신되었는 지 등이 표시되어 있다.
프로젝트 하나는 하위에 여러개의 프로젝트로 구성된다. 예를 들어 프로젝트는 건축, 구조,
토목으로 구성될 수 있다. 마찬가지로 각 하위항목도 프로젝트로 취급되어 그 밑에 세부
프로젝트 항목으로 구성될 수 있다. bimServer는 이런 프로젝트 계층 구조를 지원한다. 각
프로젝트마다 별도의 BIM모델을 관리하며 프로젝트에 등록된 여러 사용자간 협업을 위하여
IFC파일을 기반으로 한 Checkin/Checkout과 같은 형상관리를 지원한다.
하위 프로젝트를 생성하기 위해 [Sub Projects]탭을 선택한다. 그리고 [Add subproject]링크를
클릭한다.
그럼 다음과 같이 서브프로젝트 추가 페이지가 나타난다. 이름을 입력하고 [Save]버튼을
누른다.
이런 방식으로 다음과 같이 서브 프로젝트를 생성해 본다. 이렇게 만든 각 서브 프로젝트는
프로젝트 계층 트리안에서 각자 모델 정보를 Checkin, Checkout, Download를 통해 갱신하고
사용자들끼리 협업할 수 있다.
BIM 표준과 구현 © 강태욱 Page 86 of 149
다음과 같이 왼쪽 메뉴 밑에 프로젝트 트리가 표시된 것을 알 수 있다.
3. 프로젝트 사용자 설정을 위해 각 서브 프로젝트를 선택한다. 그럼 서브 프로젝트에 대한
[Project details]페이지가 표시된다. [Authorized users] 탭의 [Add an existing user]에서
“Architect”를 선택하고 [Add]를 하여 사용자를 추가한다. 나머지 프로젝트에도 각각
“Engineering”, “mep”를 설정한다.
BIM 표준과 구현 © 강태욱 Page 87 of 149
[Logout]을 한후 Architect로 로그인을 하면 본인이 수정 권한이 있는 서브 프로젝트만
IFC파일을 업데이트하거나 Checkout할 수 있으며 나머지 서브 프로젝트는 리비전(Revision)할
수 있는 권한이 없는 것을 확인할 수 있다. 다음은 “MEP”서브 프로젝트에 할당된 유저로
로그인한 화면으로 “MEP”만 흰색바탕으로 표시되어 있다. 이 프로젝트만 모델을 Checkin할 수
있다.
선택하면 다음과 같이 [Checkin]메뉴가 활성화되어 있는 것을 알 수 있다. 하지만 다른 서브
프로젝트를 같은 사용자로 로그인하면 오른쪽 그림과 같이 Checkin권한이 없으므로
[Checkin]메뉴를 사용할 수 없다.
bimServer는 이런 방식으로 프로젝트의 계층과 다중 사용자간 형상관리를 지원함으로써
협업이 가능하다.
2.2.1.5 BIM 모델 체크인 및 버전별 모델 획득
이제 IFC로 생성된 BIM파일을 생성된 프로젝트에 체크인해 추가해 보도록 한다.
1. 다음과 같이 [Checkin] 메뉴를 클릭한다. 그리고 [파일 선택]버튼을 이용해 IFC파일을
선택한다. 그리고 [Upload]버튼을 클릭한다.
BIM 표준과 구현 © 강태욱 Page 88 of 149
bimServer는 체크인을 할 때 다음과 같이 [Revision] 버전번호가 증가되며 특정 버전의 모델을
다음 [Simple Download]와 [Advanced Download] 링크를 이용해 얻을 수 있다. 이를 이용해
모델을 버전별로 관리할 수 있다.
BIM 표준과 구현 © 강태욱 Page 89 of 149
2. [Project details]페이지에서 [Simple Download]의 [Download]링크를 클릭한다. 그럼
[Download / Checkout]창이 뜨는 데 여기서 “Ifc2x3”를 선택하고 [Checkout]을 클릭한다.
모델을 Checkout하거나 다운로드하는 것은 bimServer에 등록된 Addin을 이용해 CityGML,
Collada, KMZ등 다양한 표준 파일 포맷으로 변환해 저장할 수 있다. 이는 Addin이
MVD역활을 하기 때문에 가능하다.
이렇게 Checkout한 경우 다른 사용자로 로그인해 같은 모델을 체크아웃할려 할 때 아래와
같이 이미 다른 사용자가 Checkout을 하였다고 경고 메시지가 출력되고 [Checkout] 버튼이
비활성화되어 다른 사용자가 Checkin하기 전까지 모델 변경을 함부로 하지 않도록
형상관리한다.
BIM 표준과 구현 © 강태욱 Page 90 of 149
누가 Checkout하였는 지 확인하고 싶다면 [Checkouts] 페이지를 선택해 다음과 같이
확인하면 된다.
다시 “Administrator”계정으로 로그인하고 [Checkin]메뉴로 다음과 같이 기존 버전으로
체크인하는 기능인 [OR Checkin existing revision] 링크를 이용해 체크인한다.
다음과 같이 [Checkin existing revision]창이 뜨는 데 리비전하고자 하는 프로젝트와 리비전
번호를 선택하고 주석을 입력한 후에 [Checkin as new revision] 버튼을 선택한다.
그럼 다음과 같이 프로젝트 버전이 증가한 것을 확인할 수 있다.
BIM 표준과 구현 © 강태욱 Page 91 of 149
각 프로젝트의 버전별 모델을 얻고자 한다면 앞에 그림과 같이 [Project details]페이지의
[Revisions]탭의 각 프로젝트 버전에 대한 [Download]링크를 클릭하면 된다.
3. 프로젝트에 등록된 정보를 추출하기 위해 [Query]탭을 클릭한다. 다음과 같이 서버
자체적으로 BIM객체를 버클리 DB에 등록할 때 생성되는 Object ID를 통해 질의(Query)가
가능하고 IFC 객체의 GUID인 Globally Unique ID로 질의가 가능하다. 또한, IFC 객체 종류
별로 IFC Class를 질의할 수 있다.
참고로 bimServer는 이런 질의를 Web service API로 제공한다. Web service는 XML기반의
SOAP(Simple Object Access Protocol)형식으로 웹서버와 클라이언트간 정보 통신을 지원한다.
이를 이용하면 원하는 BIM객체를 주어진 파라메터 값과 부합하는 객체를 리턴받아 다양한
응용 도구를 개발할 수 있다.
Berkeley DB
Client
System
bimServer
SOAP
Web
service
Ex.
BIM Viewer
BIM Collaborative System
BIM Quality Checker ...
BIM 표준과 구현 © 강태욱 Page 92 of 149
SOAP의 형식은 다음과 같이 Web service API 이름과 API를 호출하는 파라메터로 구성되어
있으며 이를 호출받은 측에서 SOAP메시지를 해석하여 필요한 정보 처리를 한 후에 SOAP
형식으로 리턴한다.
bimServer에서 사용할 수 있는 Web service 명세를 보고 싶다면 [Info]탭의 [Web
services]탭을 선택하여 SOAP 서비스 기술자를 확인해 보면 된다.
다음은 bimServer의 WSDL(Web Services Description Language)이다. 이 명세에 맞게 Java나
C#과 같은 언어를 이용해 필요한 Web service API를 SOAP메시지로 주고 받으면 된다.
이와 관련된 좀 더 상세한 정보는 bimServer의 wiki페이지인
https://github.com/opensourceBIM/BIMserver/wiki/_pages 에서 확인해 보길 바란다.
이제 등록한 BIM모델 중 일부 정보를 질의해 획득하기 위해 [IFC Class]를 “IfcDoor”로
설정하고 다운로드해 저장할 파일 형식을 “Ifc2x3”로 설정한다. 그리고 [Download]링크를
클릭해본다. 그럼 웹브라우저로 해당 종류의 객체가 다운로드된다.
BIM 표준과 구현 © 강태욱 Page 93 of 149
다운로드 받은 IFC파일을 SMC나 xBIM과 같은 IFC뷰어로 확인해 본다.
[Query]탭의 [Advaned]탭은 Java SDK가 설치되어 있는 경우 Java로 필요한 정보를 쿼리할 수
있는 기능을 지원한다.
BIM 표준과 구현 © 강태욱 Page 94 of 149
왼쪽 메뉴 창에서 [Browser] 메뉴를 이용하면 모델 정보를 IFC 엔티티와 관계를 중심으로 좀
더 상세히 확인할 수 있다.
2.2.1.6 결론
bimServer는 프로젝트 계층 트리와 다중 사용자간 형상관리를 지원하는 BIM 모델 협업
서버이다. 기본적으로 버클리 파일 DB상에서 동작하므로 일반적인 RDBMS에 비해 BIM파일을
등록하거나 인출하는 등의 연산속도가 빠르고 다양한 응용 도구와 연계를 할 수 있도록 Web
service를 지원한다. 이런 Web service를 이용해 다양한 방식의 BIM 정보쿼리를 포함한 응용
도구를 개발할 수 있다.
BIM 표준과 구현 © 강태욱 Page 95 of 149
2.2.2 BIM정보 시각화와 쿼리언어 개발 - xBIM
2.2.2.1 개요
xBIM(eXtensible Building Information Modeling) Toolkit은 오픈소스 기반 소프트웨어 개발
BIM 도구이며 IFC를 지원한다. xBIM은 IFC포맷을 읽고 쓰는 기능을 지원하며 형상 표현을
위한 메쉬 프로세싱, 위상 정보 연산 처리 등을 지원한다. xBIM은 IFC 기반 어플리케이션 개발
시 IFC 처리 엔진으로써 동작될 수 있다.
xBIM은 C#으로 개발되어 있어 기능을 확장하기가 용이하며 객체지향적으로 구조화되어 있다.
3D 모델 가시화는 솔리드 모델링 엔진 오픈소스인 Open CASCADE 를 이용해 3D 가시화를
처리하고 IFC 파서는 기존의 IFC파서 대신에 Gardens Point Parser
Generator(http://gppg.codeplex.com/) 를 이용한 파서를 활용하고 있다. 이 파서는 다른
오픈스스 기반의 파서와는 다르게 처리속도가 빠른 장점이 있다. 그래서 다른 오픈소스기반
뷰어와는 다르게 IFC파일 로딩 속도가 빠르다.
그림 2-15 xBIM Xplorer 실행 모습 (https://docs.xbim.net/ )
xBIM은 BIM모델을 읽고 생성하는 기능과 더불어 그래픽 가시화처리 기능을 포함하고 있다.
xBIM을 기반으로 제공되는 Xplorer는 IFC 파일 보기, IFC 객체 속성 확인, 객체 가시화 처리,
ifcXML, ifcZIP파일 출력 등을 지원한다.
BIM 표준과 구현 © 강태욱 Page 96 of 149
2.2.2.2 설치 및 실행
xBIM을 설치하는 방법은 크게 두가지가 있다. 하나는 기존 구버전을 설치하는 방법이고
다른하나는 최신 버전을 설치하는 방법이다. 구버전은 본 장의 첨부 압축파일로 제공하므로
압축만 풀면 활용이 가능하지만 최신 버전에 비해 기능이 제약적이며 Visual Studio 2010
버전에서 제대로 동작된다. 현재 최신 버전인 2.4.1 버전은 운영체제, 개발환경 및 도구 등의
설정에 민감하게 반응하며 Visual Studio 2012 로 컴파일시 C++ 템플릿과 관련된 부분에서
문법 에러가 나는 경우가 있다 (*주: 오픈소스를 사용할 때는 제공되는 프로젝트 파일 버전
이외의 개발도구를 사용할 경우 빈번한 에러를 만나는 경우가 많다. 가능한 테스트된 버전의
개발도구를 사용하는 것이 좋고 만약 예기치 않은 에러가 발생될 경우 에러 메시지를 복사해
Google 사이트 등에서 검색하여 솔류션 찾아야 한다).
다만, 본 장에서는 향후 최신버전에서 이 부분이 개선될 수도 있고 어떤 환경에서는 큰 문제
없이 실행되므로 구버전과 최신버전 모두 설치 방법을 다루도록 한다.
1. xBIM 구버전 설치
구버전은 2013 년 초에 개발된 버전으로 예제파일 중에 본 장의 xBIM폴더에 압축파일로
저장되어 있다. 압축을 풀고 다음과 같이 하위 폴더의 “XbimFrameworkRelRC3”폴더를
연다. 그리고 “XbimComplete.sln”파일이 있는 지 확인한다.
이 파일을 더블클릭해 Visual Studio 2010 버전으로 열거나 이 개발도구를 실행해
[파일][열기][프로젝트/솔류션]메뉴를 통해 해당 프로젝트 파일을 로드한다.
2. xBIM 2.4.1 버전 설치
BIM 표준과 구현 © 강태욱 Page 97 of 149
xBIM을 설치하기 위해서는 다음과 같이 소스코드 다운로드 페이지의 해당 링크를 클릭해
최신 파일을 다운로드 받아야 한다. 파일은 압축파일이므로 다운 받은 후에 적절한 곳에
폴더를 만든 후 압축해제를 한다.
그림 2-16 소스 다운로드 페이지 (http://xbim.codeplex.com/releases)
만약 이 오픈소스 프로젝트에 접근할 권한을 얻었을 경우 아래와 같이 소스 제어를 위한 서버
정보를 다음과 같이 입력하면 된다. 이렇게 설정하면 소스 프로젝트 파일을 열면 자동으로
소스 관리 서버와 연결되어 최신 소스를 소스 형상관리 기능을 통해 쉽게 받을 수 있다.
Server Name: tfs.codeplex.com
Path: tfs
Protocol: https
Port number: 443
압축을 풀면 다음과 같이 소스 파일을 프로젝트 별로 묶어 주는 C# 프로젝트 파일(*.csproj) 및
프로젝트 파일을 묶어 관리하는 솔류션 파일(*.sln)파일을 확인할 수 있다.
오프소스 프로젝트 소스 제어 권한이 없는 경우가 일반적이므로 로컬PC에서 xBIM 프로젝트
파일을 열어 작업해야 한다. 이를 위해 다음과 같이 압축을 푼 파일들의 [읽기 전용] 및
[숨김]속성을 해제해 줘야 한다. 읽기 전용 속성으로 된 프로젝트 파일을 로드할 경우 Visual
Studio은 해당 파일 편집 시 자동으로 소스 제어 기능을 사용하게 되어 문제가 발생할 수 있다.
xBIM의 하위 폴더 파일들도 마찬가지로 해당 속성을 모두 해제한다.
BIM 표준과 구현 © 강태욱 Page 98 of 149
Visual Studio 2012 C#를 실행해 [도구][옵션]메뉴에서 [소스 제어]의 [환경] 항목을 클릭한다.
그리고 표시되는 속성 중 [소스 제어 환경 설정] 항목을 [단독 개발자]로 설정한다.
프로젝트 파일 로드를 위해 [파일][열기][프로젝트/솔류션] 메뉴를 실행한다. 그리고
“XbimComplete.sln”파일을 연다.
BIM 표준과 구현 © 강태욱 Page 99 of 149
그럼 Visual Studio 가 솔류션안에 포함된 프로젝트 파일을 로드하고 프로젝트 파일 안에
포함된 C# 소스 파일과 리소스 파일 등을 차례대로 로드한다.
만약 다음과 같은 메시지가 출력되면 [아니오]를 선택한다.
그리고 몇몇 프로젝트 로드시 구 버전 프로젝트 라이브러리 업데이트 메시지가 보여질 수
있다. 이 경우에는 업데이트를 선택하도록 한다.
xBIM은 32 비트와 64 비트를 지원한다. 32 비트일 경우에는 다음과 같이 [솔류션 탐색기]의
“XbimComplete” 솔류션을 우클릭하고 [속성]메뉴를 선택한 후에 [구성 속성]의 [구성]항목을
선택하고 [구성 관리자]버튼을 선택해 구성관리자 창을 띄운다. 그리고 설정을 x86 으로
설정한다. 만약 x86 설정이 없을 경우 [새로 만들기]를 하고 설정한다.
BIM 표준과 구현 © 강태욱 Page 100 of 149
3. 프로젝트 실행
이제 프로젝트들을 빌드하고 xBIM Xplorer를 실행해 보기 위해 [솔류션 탐색기]에서
“Samples”폴더 아래 “xBimXplorer” 프로젝트 찾은 후 우클릭한 후 [시작 프로젝트로 설정]
메뉴를 선택한다. 그리고 [디버깅]메뉴의 [디버깅 시작]메뉴를 선택하면 각 프로젝트 파일의
소스들이 빌드되어 DLL 라이브러리나 EXE 실행파일이 생성된다. 에러가 없다면
“xBimXplorer”에서 생성된 실행파일이 실행된다.
BIM 표준과 구현 © 강태욱 Page 101 of 149
실행한 후 다음과 같은 프로그램이 실행되면 성공한 것이다.
본 장의 예제 폴더에 “AC11-Institute-Var-2-IFC.ifc”파일을 [File][Open]메뉴를 이용해 로드해
본다. 이 프로그램은 xBIM을 이용해 개발된 간단한 뷰어로 왼쪽에 IFC객체 트리가 표시되며
화면상에서 특정 객체를 선택하고 우클릭을 하면 해당 객체의 속성창을 보거나 해당 객체
클래스를 Hide/Show할 수 있는 기능을 제공한다. IFC가 로드되면 xBIM파일 포맷인
“.xbim”확장자 파일로 변환되어 저장된다.
BIM 표준과 구현 © 강태욱 Page 102 of 149
2.2.2.3 핵심 구조 분석
본 장에서는 xBIM을 이용한 실습을 위해 필요한 핵심 구조를 설명한다.
xBIM 컴포넌트 구조는 다음과 같다.
그림 2-17 xBIM 컴포넌트 다이어그램 (UML)
xBIM 은 핵심적인 컴포넌트가 4 개가 있는 데 Xbim.Ifc, Xbim.IO, Xbim.ModelGeometry.Scene,
Xbim.Presentation이다.
컴포넌트 역활
Xbim.Ifc IFC 객체들을 관리한다. IFC의 클래스인 IfcProduct 등을
구현하고 있다.
Xbim.IO IFC파일과 입출력을 위한 기능을 제공한다.
XbimModelServer 등의 클래스를 구현하고 있다.
Xbim.ModelGeometry.Scene IFC 형상정보를 가시화하여 그래픽 장면(Scene)을 만들기
위한 기능이 구현되어 있다. 주로 메쉬처리와 좌표변환을
담당한다.
Xbim.Presentation 윈도우에서 3D를 가시화할 수 있도록 DrawingView3D
XbimXplorer
Xbim.Ifc Xbim.Ifc.Extensions Xbim.IO
Xbim.ModelGeometry.Scene
Xbim.Presentation
Xbim.DOM
BIM 표준과 구현 © 강태욱 Page 103 of 149
클래스를 제공하고, 3D모델 배경이 되는 Skybox와 모델
탐색을 위한 Pan 등 기능을 지원한다. 또한, 이 도면 뷰에서
마우스 클릭 등 이벤트가 발생하였을 때 선택된 객체를
탐색해 리턴해 주는 기능을 제공한다.
XbimXplorer BIM뷰어는 앞서 설명한 컴포넌트를 모두 사용해 개발된 것이다.
BIM뷰어의 로직 처리 구조를 살펴보기 위해 “XbimXplorer”프로젝트의
“XplorerMainWindow.xaml”하위에 “XplorerMainWindow.xaml.cs” 소스파일을 더블클릭하여
C#소스를 에디터창에 로드한다. 그리고 키워드 탐색을 위해 Ctrl+F키를 눌러
“OpenIfcFile”함수를 찾아본다.
private void OpenIfcFile(object s, DoWorkEventArgs args)
{
BackgroundWorker worker = s as
BackgroundWorker;
string ifcFilename = args.Argument as string;
IModel model = new XbimFileModelServer();
model.Open(ifcFilename, worker.ReportProgress);
XbimScene geomEngine = new XbimScene(model);
ModelProvider.Scene = geomEngine;
}
OpenIfcFile 함수 정의.
IFC로드 시 처리 진행 표시를 위한
백그라운드 작업 생성.
XbimFileModelServer 객체 생성.
모델서버 객체를 로드할 IFC이름을
받아 Open 함.
모델서버에 저장된 BIM정보를 화면에
표시하기 위한 XbimScene 객체 생성.
모델 정보를 제공하는 객체에
XbimScene객체를 할당.
IFC로드를 위해서는 IFC문법에 맞게 Text를 파싱(Parsing)해야 한다. XbimFileModelServer는
IfcInputStream객체를 이용해 IFC파일 TEXT 데이터 스트림을 로드한 후 파서를 이용해
IFC문법을 체크하고 IFC정보를 읽어들인다.
BIM 표준과 구현 © 강태욱 Page 104 of 149
xBIM은 앞에서 언급한 XbimFileModelServer에서 Open함수를 이용해 IFC를 로드한다.
XbimFileModelServer는 IFC파일을 Open하거나 IFC를 출력하는 ExportIfc를 제공하며
Open함수로 로드된 객체들을 IfcProject 를 루트(Root)객체로 관리하고 있다. 이
IfcProject객체를 이용해 모든 IFC객체 계층 구조를 탐색하고 필요한 정보를 추출할 수 있다. 각
객체는 IFC 구조에서 다루었듯이 IfcObjectDefinition의 IfcRelationship 객체들을 통해 탐색할
수 있도록 되어 있다.
다음은 이를 표현한 클래스 다이어그램이다.
BIM 표준과 구현 © 강태욱 Page 105 of 149
그림 2-18 XBimModelServer와 IFC객체의 관계도
앞의 객체 관계도를 참고해 XbimFileModelServer 객체에 저장된 IfcSite에 접근하는 코드는
다음과 같다. IFC객체의 관계도와 비교해 보면 코드가 이를 반영해 관련 정보를 탐색하였음을
알 수 있다.
private string GetIfcSiteName(IModel model)
{
string SiteName = "";
foreach (var relation
in model.IfcProject.IsDecomposedBy)
{
foreach( IfcObject obj
XbimFileModelServer객체의
인터페이스를 받아 IfcSite 이름을 얻는
함수.
IfcProject의 IsDecomposedBy 관계들을
획득.
획득한 관계 객체의 RelatedObjects에
XbimFileModelServer
+Open(inputFileName)
XbimModelServer
+IfcProject
+PrintProperties()
+Open(inputFileName)
+ExportIfc(filename, compress, isGZip)
+ExportIfcXml(ifcxmlFileName)
+Save()
IfcProject
-_project
IfcObject
+ObjectType
IfcObjectDefinition
+HasAssignments: IfcRelAssigns
+IsDecomposedBy: IfcRelDecomposes
+Decomposes: IfcRelDecomposes
+HasAssociations: IfcRelAssociates
IfcRelDecomposes
+RelatingObject
+RelatedObjects
*
IfcRelAssigns
+RelatedObjects
*
IfcRelAssociates
+RelatedObjects
*
BIM 표준과 구현 © 강태욱 Page 106 of 149
in relation.RelatedObjects)
{
SiteName = obj.Name;
break;
}
}
return SiteName;
}
포함된 객체들을 얻음. Whole/Part에서
Part에 해당함.
Part에 해당하는 객체를 얻은 후 이름을
리턴. IfcProject의 경우 Part 객체는
IfcSite임.
얻은 객체 이름을 리턴함.
참고로 “foreach ... in ...”문은 in에 명시된 객체를 포함한 컨테이너 요소를 각각 얻어 foreach
다음의 변수에 할당하고 코드블럭을 실행하는 반복문이다. 예를 들어 다음과 같은 코드는
list안에 포함된 객체들을 각각 차례대로 접근해 var 변수형의 object 변수에 설정한 후 { ... }
안의 코드 블럭을 실행하라는 의미이다. 당연히 list 는 컨테이너 변수고 이 안에 객체들이
미리 추가되어 있다고 가정한다.
foreach( var object in list)
{
}
지금까지 xBIM의 구조를 살펴보았다. 이런 이해를 바탕으로 간단한 실습 소스 코드를
개발한다.
2.2.2.4 실습
실습에서는 XbimXplorer 프로그램 메뉴에 Open한 IFC객체에서 간단한 정보를 추출하는
기능을 구현해 보도록 한다. 이를 위해 정보를 추출할 때 사용자와 인터페이스를 구성하는
메뉴를 추가할 필요가 있다.
1. 다음과 같이 솔류션 탐색기의 “XbimXplorer”의 “XplorerMainWindow.xaml”파일을
더블클릭하여 주 윈도우 UI(User Interface)를 띄운다. 그리고 뷰어 메뉴 객체를 클릭한다.
BIM 표준과 구현 © 강태욱 Page 107 of 149
그럼 메뉴 UI를 생성하는 XML형식의 스크립트코드가 바로 아래 [XAML]창에 표시된다.
2. 다음과 같은 기능을 수행할 두 개 메뉴를 추가해 보도록 한다.
메뉴 명 기능
Site name 열려진 프로젝트의 부지 이름을 확인한다.
Query objects 주어진 속성 조건에 맞는 객체를 탐색해 이름을 리턴한다.
이를 위해 “Import”메뉴 아래에 다음 스크립트를 추가한다.
<MenuItem Header="_Import" Click="FileImport_Click"/>
<MenuItem Header="Information">
<MenuItem Header="Site name" Click="FileSitename_Click"/>
<MenuItem Header="Query objects" Click="FileQueryobject_Click"/>
</MenuItem>
BIM 표준과 구현 © 강태욱 Page 108 of 149
3. “XplorerMainWindow.xaml.cs” 소스 파일을 열고 다음 코드를 FileOpen_Click 함수 블럭
아래에 추가한다. 이 함수는 앞의 MenuItem 스크립트에서 해당 메뉴를 클릭할 때 연결되어
호출되는 함수이다.
private void FileSitename_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Site name"); // 메시지 박스 출력
}
private void FileQueryobject_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Query name"); // 메시지 박스 출력
}
이제 다음과 같이 실행해 보고 추가한 메뉴를 실행해 메시지 박스가 출력되는 지 확인한다.
4. 앞서 설명한 IfcSite 의 이름을 획득하는 GetIfcSiteName 함수를 FileSitename_Click 함수
코드 블럭 앞에 추가하고 FileSitename_Click함수에서 다음과 같이 코딩해 그 함수를 호출해
주도록 한다.
private void FileSitename_Click(object sender, RoutedEventArgs e)
{
if (ModelProvider.Scene == null) // 현재 로드된 BIM모델 객체가 없다면
{
MessageBox.Show("There isn't a BIM model.");
return;
}
IModel model = ModelProvider.Scene.Graph.Model; // 로드된 모델 객체 획득
BIM 표준과 구현 © 강태욱 Page 109 of 149
string SiteName = GetIfcSiteName(model); // 부지 명 획득
MessageBox.Show("Site name = " + SiteName); // 메시지 박스 출력}
}
Visual Studio에서 [Debug][Start Debugging]메뉴를 실행한다. 그리고 해당 메뉴를 클릭해
다음과 같이 부지 명이 출력되는 지 확인한다.
5. 특정 객체를 탐색할 쿼리 문자열을 입력받아 탐색된 객체들의 유형만 화면에 표시하는
예제를 만들어 본다. 이를 위해서는 IFC 구조에 대한 이해가 필수적이다. 정보 추출을 위한
쿼리를 정의하기 위해 간단한 문법을 가진 sBQL(simple BIM Query Language)이라는 이름의
언어를 정의한다. 보통 언어를 개발할 때는 LEX(LEXical analyzer)나 YACC(Yet Another
Compiler Compiler)같은 토큰 분석기와 파서 생성기를 사용한다. 이 경우에는 언어의
문법성을 강조하기 위해 LEX/YACC 로 다음과 같이 정의했다. 이에 대해 자세하 알고 싶다면
http://www.gnu.org/software/bison/ 를 참고하길 바란다. 실제로는 간단한 문자열 연산을
통해 구현해 보도록 한다.
%token PROPERTY_NAME
%token STRING
%%
Variable
: PROPERTY_NAME
Value
BIM 표준과 구현 © 강태욱 Page 110 of 149
: STRING
AssignOP
: ‘=’
SimpleExpression
: Variables AssignOP Value
LogicOp
: ‘&’
Expression
: SimpleExpression
| SimpleExpression LogicOp Expression
%%
이러한 문법의 결과로 아래와 같은 질의문을 문법적으로 정의하는 것이 가능하다.
sBQL Query: Type=IfcWindow&Name=Window xyz
그럼 이 의미를 해석하는 로직이 속성명이 Type이고 값이 IfcWindow인 객체와 그 객체의
Name 속성값이 Window xyz 인 조건에 부합하는 모든 객체를 추출해 리턴한다.
시퀀스 구조는 크게 세 부분으로 구분된다.
첫번째 단계는 입력받은 sBQL 쿼리 문자열에서 문자열 연산을 이용해 토큰들을 분리하는
단계이다.
두번째 단계는 BIM객체를 입력 받아 PSet 속성 리스트를 얻고 sBQL 토큰들에 포함된 속성
조건에 맞는 지 체크하는 단계이다.
세번째 단계는 sBQL 쿼리문 조건에 부합된 객체 리스트를 리턴받아 화면에 표시해 주는
단계이다. 시퀀스 구조도는 다음과 같다.
BIM 표준과 구현 © 강태욱 Page 111 of 149
Analyze query
token
Input sBQL query
string
Check sBQL
grammar
QueryBimObjects(
model, IfcProject,
sBQLQueryTokens
, ObjectList)
Start
End
[Yes]
[No]
QueryBimObjects(model, obj,
sBQLQueryTokens, ObjectList)
Return
Show objects
using ObjectList
PSetList = obj.GetAllPropertySets()
Extract Property Names and Values
from PSetList
Search the objects which has the
conditions of sBQL query with
sBQLQueryTokens
Add the objects to ObjectList
The obj has
IfcRelContainedInSpatialStruct
ures?
Call QueryBimObjects(model, element,
QueryTokens, ObjectList) about the
elements in
IfcRelContainedInSpatialStructures of the obj
Call QueryBimObjects(model, part,
QueryTokens, ObjectList) about the parts in
IsDecomposedBy of the obj
[Yes]
[No]
그림 2-19 sBQL 시퀀스 구조도
이를 고려해 xBIM 엔진을 이용해 c#에서 구현하기 위해서는 몇가지 절차가 필요하다.
첫번째로 xBIM 엔진에서 필요한 라이브러리를 사용한다고 “using”문을 이용해 선언해야 한다.
이렇게 해야 라이브러리 안에 구현되어 있는 객체와 기능을 사용할 수 있다.
BIM 표준과 구현 © 강태욱 Page 112 of 149
두번째로 sBQL 을 입력받는 입력 UI를 만들어야 한다. 이 부분은 본 책의 주제와 큰 관계가
없는 것이므로 자세히 설명하지 않는다. 이미 제공되는 소스에 InputQueryStringBox 함수로
구현해 놓았으므로 사용만 하면 된다.
세번째로 xBIM에서 IFC 모델을 관리하는 IModel을 이용하기 위해
ModelProvider.Scene.Graph.Model 을 통해 IModel 객체를 획득해야 한다. sBQL 쿼리 결과
얻은 BIM객체들만 화면에 표시하기 위해 DrawingControl 객체의 Hide, Show 함수를
호출한다.
다음 코드는 sBQL 쿼리 문자열을 입력받아 쿼리 조건에 부합되는 BIM객체들을 리턴하는 함수
코드에 대한 설명이다.
using Xbim.IO;
... 중략 ...
using Xbim.ModelGeometry.Scene;
private void FileQueryobject_Click(object sender,
RoutedEventArgs e)
{
if (ModelProvider.Scene == null) {
MessageBox.Show("There isn't a BIM model.");
return;
}
InputQueryStringBox InputBox = new
InputQueryStringBox();
InputBox.ShowDialog();
string sBQLQuery = InputBox.QueryTextBox.Text;
if (sBQLQuery == "")
return;
char[] Seperators = { '=', '&' };
string[] QueryTokens = sBQLQuery.Split(Seperators);
if (QueryTokens.Length < 2)
return;
IModel model = ModelProvider.Scene.Graph.Model;
List<IfcObject> ObjectList = new List<IfcObject>();
QueryObjects(model, model.IfcProject, QueryTokens,
Xbim 라이브러리 사용을 선언.
추가된 “Query object”메뉴가 클릭될 때
호출되는 함수 정의.
IFC 모델이 있는 지 체크.
sBQL 쿼리 문자열 입력 받음.
sBQL 쿼리 스트링에서 토큰들을 분리함.
sBQL 쿼리 스트링 자체에 문제가 없는 지
체크.
sBQL 쿼리 조건에 부합하는 BIM객체들을
추출하는 함수 호출.
BIM 표준과 구현 © 강태욱 Page 113 of 149
ObjectList);
foreach(IfcProduct Product in model.IfcProducts.Items)
DrawingControl.Hide(Product.GetType());
foreach (IfcObject obj in ObjectList)
DrawingControl.Show(obj.GetType());
}
xBIM의 DrawingControl에서 모든
BIM객체 숨기기.
추출한 BIM객체들 보이기.
다음 코드는 sBQL 쿼리 문자열을 입력받아 쿼리 조건에 부합되는 BIM객체들을 리턴하는 함수
코드에 대한 설명이다. 이 함수는 코드 라인수를 줄이고 효과적인 처리를 할 수 있도록
재귀함수로 작성되어 있다. 이는 IFC구조가 Whole/Part 계층 구조로 되어 있기 때문에 이런
효과적인 처리가 가능한 것이다 (*주: IFC구조는 이렇게 정보 처리 효율성을 고려해
모델링되어 있다).
private void QueryBimObjects(IModel model, IfcObject obj,
string[] QueryTokens, List<IfcObject> ObjectList)
{
if (obj == null)
return;
List<string> Names = new List<string>();
List<string> Values = new List<string>();
Names.Add("Name");
Values.Add(obj.Name);
Names.Add("GUID");
Values.Add(obj.GlobalId);
Names.Add("Description");
Values.Add(obj.Description);
List<IfcPropertySet> PSetList
= obj.GetAllPropertySets();
foreach (IfcPropertySet PSet in PSetList)
{
foreach (IfcProperty Prop in PSet.HasProperties)
{
string Name = Prop.Name;
IfcPropertySingleValue SingleValue
sBQL 쿼리 조건에 부합하는 BIM객체를
리턴하는 함수 정의. 재귀함수로 동작함.
속성명 리스트를 생성.
속성값 리스트를 생성.
객체명 추가.
객체명 값 추가.
GUID명 추가
GUID값 추가.
Description명 추가.
Description값 추가.
IFC객체인 obj 에서 속성집합들을 획득.
속성집합들로부터 속성명과 속성값을 획득.
속성유형 중에 단일값 속성만 처리.
BIM 표준과 구현 © 강태욱 Page 114 of 149
= Prop as IfcPropertySingleValue;
if (SingleValue == null) continue;
if (SingleValue.NominalValue == null ||
SingleValue.NominalValue.Value == null) continue;
string Value = SingleValue.NominalValue.Value as
string;
if (Value == null)
Value = SingleValue.NominalValue
.Value.ToString();
Names.Add(Name);
Values.Add(Value);
}
}
bool sBQLEqualQueryValue = true;
for (int i = 0; i < QueryTokens.Length - 1; i += 2)
{
string QueryName = QueryTokens[i];
string QueryValue = QueryTokens[i + 1];
bool Find = false;
for (int j = 0; j < Names.Count; j++)
{
string Name = Names[j];
string Value = Values[j];
if (Name == QueryName
&& Value == QueryValue)
{
Find = true;
break;
}
}
if (Find == false)
sBQLEqualQueryValue = false;
if (sBQLEqualQueryValue == false)
break;
}
속성값을 획득.
PSet의 속성명 추가.
PSet의 속성값 추가.
쿼리조건과 일치여부 판단 플래그 설정.
쿼리 토큰들을 파싱하면서 쿼리조건과
부합여부를 판단함.
쿼리 토큰명 획득.
쿼리 토큰값 획득.
탐색 성공 플래그 설정.
각 쿼리명들에 대해 조건 부합여부 판단
처리.
속성명 획득.
속성값 획득.
쿼리 토큰명과 속성명의 일치여부와 쿼리
토큰값과 속성값의 일치여부 판단
조건이 일치하였다면 탐색 성공 플래그 설정.
탐색 루프 탈출.
조건에 부합하는 속성값 탐색 못하였으면
sBQL쿼리의 리턴값은 없는 것임.
BIM 표준과 구현 © 강태욱 Page 115 of 149
if (sBQLEqualQueryValue)
ObjectList.Add(obj);
IEnumerable<IfcRelContainedInSpatialStructure>
RelContains = null;
IfcBuildingStorey Storey = obj as IfcBuildingStorey;
if(Storey != null)
RelContains = Storey.ContainsElements;
IfcSpace Space = obj as IfcSpace;
if(Space != null)
RelContains = Space.ContainsElements;
if (RelContains != null)
{
foreach (IfcRelContainedInSpatialStructure RelContain in
RelContains)
{
foreach (IfcObject element in
RelContain.RelatedElements)
{
QueryBimObjects(model, element, QueryTokens,
ObjectList);
}
}
}
foreach (var relation in obj.IsDecomposedBy)
{
foreach (IfcObject part in relation.RelatedObjects)
{
QueryBimObjects(model, part, QueryTokens,
ObjectList);
}
}
}
sBQL 쿼리 조건에 부합된 객체이면
ObjectList에 추가.
함수에 입력된 파라메터인 obj 가
공간객체로써
IfcRelContainedInSpatialStructure 관계들을
가지고 있는 지 판단함.
만약 그 관계를 가지고 있다면.
obj와 IfcRelContainedInSpatialStructure
관계를 가진 element를 얻어
QueryObject함수를 재귀호출함.
Whole/Part관계를 확인해 obj와 관계된 part
객체를 열거하여 QueryObject함수를
재귀호출함.
sBQL 처리 시퀀스 구조도를 앞의 소스 코드와 비교하여 각 의미를 파악해 보면 IFC구조가
반영되어 처리되었음을 알 수 있다.
BIM 표준과 구현 © 강태욱 Page 116 of 149
XplorerMainWindow.xaml.cs 소스 파일을 열고 앞의 소스코드를 입력한 후 실행을 해 본다
(*주: 직접 입력하기 어려우면 추가된 함수를 찾아 “/*”, “*/” 로 주석 표시 기호를 삭제한다.
그러면 그 사이에 주석처리된 소스코드가 컴파일될 수 있게 된다.)
다음과 같은 Xbiom Xplorer가 뜨면 본 장의 예제 파일 중 SimpleWallWindow.ifc 파일을
[Open]한다. 그리고 [File][Information][Query object] 메뉴를 실행하여 sBQL 쿼리문인
“FireExit=False&SmokeStop=False” 를 대소문자 구분하여 정확히 입력하고 [OK]버튼을
클릭한다.
그럼 다음과 같이 “FireExit”속성값이 “False”이며 “SmokeStop”속성값이 “False”인 BIM객체가
쿼리되어 해당 객체만 화면에 표시된다.
BIM 표준과 구현 © 강태욱 Page 117 of 149
참고로 본 장에서 제공된 소스는 처리 속도와 같은 성능 확보 보다는 IFC구조를 이용한 BIM
정보 추출 방법을 쉽게 이해하는 데 초점이 맞춰진 코드이다. 만약 sBQL의 처리 속도 및
편의성을 개선하고자 한다면 속성명 탐색시 Hash 함수를 이용한 검색 방식을 사용하고 sBQL
을 좀 더 개선하여 예를 들어 다음과 같이 공백(Space) 문자나 OR 논리 등을 지원하도록
개선해 본다.
sBQL Query: Type = IfcWindow AND ( Name = ‘Window xyz’ OR FireExit = False )
2.2.2.5 결론
본 장에서는 BIM에서 가장 중요한 유스케이스(Use-case) 중 하나인 BIM 정보
추출(Information Takeoff)의 원리를 직접 개발함으로써 확인해 보았다. 이와 유사한 방식으로
필요한 정보만 필터링해서 추출한 후 엑셀 스프레드시트와 같은 특정 파일 포맷으로 저장을
할 수 있다. COBie와 같은 MVD도 이와 유사한 방식으로 개발할 수 있다.
IFC구조는 객체간에 객체지향적인 구조로 관계들이 연결되어 있어 이를 고려해 개발을 한다면
효과적 방법으로 필요한 기능을 수월하게 구현할 수 있다. xBIM은 이런 기능을 효과적으로
테스트하고 본인에 필요한 기능들을 개발할 수 있는 오픈소스를 제공한다. 만약 xBIM자체에
제공되는 API가 부족하다면 오픈소스 기반으로 추가해 나갈 수 있다.
buildingSMART에서는 IFC표준 포맷을 기반으로 학생, 연구자, 개발자, 건축가, 엔지니어 들이
필요한 기능을 손쉽게 개발할 수 있는 오픈소스나 툴킷을 제공한다. 이를 이용하면 상용
소프트웨어에서 제공할 수 없는 것들을 직접 개발하고 쇼셜 커뮤니티 등을 통해 공헌할 수
있다.
2.3 Ontology와 Semantic BIM query
2.3.1 Ontology
이 글은 BIM기반 지식 서비스 개발을 위한 유용한 모델인 온톨로지(Ontology) 구조에 대해
이야기한다. 더불어, 데이터와 지식의 차이, 온톨로지와 시멘틱을 표현하는 방법을 간략히
설명하고, 관련 오픈소스를 소개한다.
BIM 표준과 구현 © 강태욱 Page 118 of 149
2.3.2 데이터와 지식의 차이
데이터를 아무리 많이 저장해 보아도, 여기서 지식을 얻는 것은 쉽지 않다. 데이터 간의 관계를
만들고, 추론할 수 있는 구조가 없으면, 쓸모없는 파일일 뿐이다. 그래서, 데이터를 어떻게
구조화하면 지식을 효과적으로 검색할 수 있는 지에 대한 연구가 오랫동안 있어 왔다. 이 글은
다음 ? 에 해당하는 것이다.
데이터 > 빅데이터 저장 > ? > 지식 검색
2.3.3 지식 추론 기능
지식은 사용자의 관점에 따라 상대적인 개념이다. 예를 들어, 다음과 같은 사실 데이터가
있다고 하자.
A는 B를 가진다.
B는 C를 가진다.
사실 데이터는 트리플(triple)인 주어, 목적어, 술어를 가진다. 여기서 지식은 사실 데이터를
이용해 다음과 같이 추론 될 수 있다.
A는 C를 가진다.
지식은 다양한 방법으로 얻을 수 있다. 사람은 지식을 얻을 때 연역, 귀납, 유추의 방법을
사용한다. 위 지식은 연역을 사용한 것이다. 귀납은 관찰된 사실을 일반화하는 것이다. 유추는
유사성을 바탕으로 대상의 성질을 추측한다. 사람은 계산을 통해, 확률 통계적 지식을 얻을 수
있다.
지식 추론 기능 = {연역, 귀납, 유추, 확률 통계}
BIM 표준과 구현 © 강태욱 Page 119 of 149
이 4 가지를 지식 추론 기능이라 한다. 이 기능은 컴퓨터 계산기능으로 대치될 수 있다. 위
기능에서 연역, 귀납, 유추는 서로 유사한 면이 있다. 수치를 다루는 확률 통계는 이 글에서
다루지 않는다. 이 부분은 인공지능 머신러닝, 데이터 마이닝의 수치해석적 기능에 속한다.
이 글에서는 특히 연역 기능을 컴퓨터에서 구현하기 위한 사실 데이터 표현 방법인
온톨로지와 추론 기능에 해당하는 시멘틱 정보 검색 방법을 간략히 설명한다.
2.3.4 지식의 표현과 시멘틱
지식은 그래프 구조로 나타낼 수 있는 데, 특히, 멀티미디어가 많은 자료들은 그래프 형식으로
자료를 매달아 놓고, 그래프 노드 간의 관계를 정의해 놓으면, 지식을 효과적으로 추가, 삭제,
검색할 수 있는 매우 유연한 구조로 만들 수 있다.
데이터를 그래프로 표현하가 각 데이터의 관계를 정의해 놓으면 다음과 같은 의미있는 질의를
할 수 있다.
John likes Neo.
이는 John과 Neo 사이에 어떤 관계가 있는 지를 질의하는 기능을 구현함으로써 가능하다.
시멘틱(semantic. 의미)은 사실관계가 있는 데이터를 그래프 형식으로 나타내어 검색할 수
있을 때 가능한 것이다. 이것이 가능한 데이터베이스를 시멘틱(semantic) 데이터베이스라
하며, 이 데이터베이스의 구조를 온톨로지 데이터 구조라 한다.
참고로, 시멘틱의 개념은 복잡 다양한 웹의 데이터를 효과적으로 검색하기 위한 방법을
개발하기 위해 발생되었다.
BIM 표준과 구현 © 강태욱 Page 120 of 149
데이터와 시멘틱의 차이
2.3.5 온톨로지 개념과 트리플 데이터 구조
시멘틱 데이터베이스를 만들수 있는 도구는 온톨로지(ontology)가 있다. 온톨로지는 도메인에
의존된 지식과 관계를 형식 기술 언어로 명세화한 것이다. 좀 더 쉽게 말하면 사물과 사물
간의 관계를 표현하는 방법이다.
An ontology is a formal, explicit specification of a shared conceptualization of a domain of
interest) - T. Gruber
예를 들어, 다음과 같은 사물과 관계가 포함되어 있는 문장이 있다고 하자.
John friend Susan.
이 문장에는 많은 관계와 가정이 지식으로 포함되어 있다. 예를 들어, John, Susan은 사물이다.
그들과의 관계는 friend이며 friend는 최소 1 명 이상 제약조건이 있다. 이를 OWL로
명세화하면 다음과 같다.
John rdf:type owl:Thing .
Susan rdf:type owl:Thing .
John rdf:type _:x .
_:x owl:onProperty friend .
_:x owl:minCardinality "1"^^xsd:nonNegativeInteger .
이렇게 사물과의 관계와 의미를 명확히 형식화하는 방법을 온톨로지라 한다. 온톨로지에 대한
상세한 설명은 다음 링크를 참고한다.
OWL Web Ontology Language Semantics and Abstract Syntax Appendix B. Examples
(Informative)
BIM 표준과 구현 © 강태욱 Page 121 of 149
온톨로지는 그래프 형식으로 지식을 표현하는 저장소 역할을 할 수 있다. 온톨로지는 보통
Triple 형식으로 데이터를 표현하는 데, 최근 실용적으로 많이 사용되는 것은
산업표준인 TTL(Terse RDF Triple Language. Turtle) 그래프 형식의 트리플 포맷이다.
트리플 형식은 다음과 같이 기본적으로 주어, 술어, 목적어 형식의 3 개 데이터를 가진다. 이를
서로 연결하면 그래프 온톨로지 구조가 된다. 주어나 목적어는 그래프의 노드, 술어는 링크로
표현된다.
이를 이용해 복잡한 모델을 간단한 그래프 구조로 만들 수 있다. 이를 이용해 그래프
데이터모델에서 지식을 얻기 위한 추론을 다음과 같이 할 수 있다.
Mike → said → (triples → can be → objects)
A → has B (B → has C)
온톨로지 그래프 데이터 모델 예시(ontotext)
BIM 표준과 구현 © 강태욱 Page 122 of 149
다음은 온톨로지 저장소는 이런 그래프 데이터 형식으로 구성된 database이다. 이
database에서 추론 등 다양한 query를 하기 위한 정보 질의 표준 언어가 SPARQL이다. 이
언어는 위 그래프 지식 모델에서 A has C? 라는 질문에 대한 결과를 답하기 위해, 그래프
검색을 수행한다.
만약, IoT 데이터를 온톨로지로 구현한다면 온톨로지를 표현하는 스키마 구조를 만들어야
하고, 다음과 같이 스키마가 반영된 온톨로지 데이터 저장소에 데이터를 얻어 저장해야 한다.
Room → has → Property set
Property set → has → Property IoT sensor
Property IoT sensor → has → IoT temperature sensor
온톨로지 표현을 위한 그래프 구조는 확장성이 좋고, 데이터 간 상호운용성 지원이 편리하고,
지식을 탐색하기 용이한 방법이다.
그래프 데이터는 편집기로 작성할 수도 있지만, 전용 편집기를 이용하면 편리하다. 다음과
같은 오픈소스 도구를 이용하면 좀 더 편하게 만들 수 있다.
 Ontology Editor
 Protege
 Fluent Editor
지식 서비스 시스템 구조와 질의 언어
다음은 이를 이용한 일반적인 지식 서비스 시스템 구조를 보여준다. 대부분의 지식 서비스는
다음과 같은 구조를 가진다.
BIM 표준과 구현 © 강태욱 Page 123 of 149
지식 서비스 시스템 구조
그래프 형식으로 표현된 지식을 검색하기 위해서는 검색 언어가 필요하다.
초창기는 SPARQL을 지원하는 JENA란 오픈소스를 사용했으나 자바를 사용하고 무거워,
최근에는 SPARQL을 좀 더 가볍고 편리하게 사용하는 Node.js기반 도구를 이용하는 경향이
많다.
 SPARQL 예제
앞의 지식 서비스 시스템을 구현하기 위해서는 지식 데이터를 CRUD(create, read, update,
delete)하고 지식을 검색하는 서버를 제공해야 하는 데, Node.js는 서버를 매우 쉽게 만들 수
있다. 게다가, 수많은 무료 도구를 손쉽게 설치할 수 있다.
이외에 페이스 북에서는 수많은 SNS 데이터에서 지식을 검새하기 위해 그래프 DB를
오픈소스로 공개했다.
BIM 표준과 구현 © 강태욱 Page 124 of 149
 Facebook - The power of graph
 GraphDB and Dragon query engine of Facebook
이를 이용해 다음과 같은 SNS 지식 검색을 수행할 수 있다.
Who is John's friend? And does John's friend have family, live in Seattle, and like traveling
as a hobby?
What is John's annual income and how much will he earn at the next 10 years?
How much will Sunny's house price rise in 10 years, and how much will maintenance cost?
물론 검색에 필요한 사실 데이터는 모두 그래프 데이터베이스에 입력되어 있어야 하며, 사실
데이터가 수치일 경우, 머신 러닝 및 통계 패키지를 이용해 계산된 예측값이 그래프 노드
어딘가에 입력되어 있어야 한다. 당연히 예측값 계산은 다양한 통계기법(회귀식, 커브피팅,
딥러닝 등)을 이용해 미리 준비해 놓어야 한다.
2.4 Semantic BIM query 오픈소스 도구
2.4.1 개요
시멘틱 데이터를 만들기 위한 온톨로지 도구는 다양하다. 오픈소스에도 많은 Knowledge base
구조를 제공하는 프로젝트가 많다.
도구는 크게 3 가지로 나뉘는 데, 지식 그래프 모델링 및 질의 도구, wiki 지식 기반 도구,
텍스트 마이닝(text mining)가 있다. wiki도구는 단순한 키워드 검색 추론을 제공한다.
온톨로지 기반의 시멘틱 검색은 그래프 링크에 해당하는 술어 관계도 포함해 지식 검색이
가능하다. 텍스트 마이닝은 텍스트에서 추출한 사실 데이터의 그래프 모델에서 지식을
질의하는 서비스를 가능하게 한다. 이때 텍스트는 워드, 문서, 도면 등이 될 수 있다. 이런
데이터는 ETL(Extract, Transform and Load) 도구를 이용해 추출할 수 있다.
다음은 이와 관련된 기능을 제공하는 오픈소스 링크이다.
BIM 표준과 구현 © 강태욱 Page 125 of 149
 Text mining using tidytext
 Dgraph graph database
 Neo4j graph database
 GraphDB and Dragon query engine of Facebook
 Wiki tools
 Knowledge graph js
 Ontology store
 Node JS with semantic data
 Jena for building semantic web and linked data
 Fuseki SPARQL server
 Ontology dapi based on Blockchain
이외 최근 딥러닝(Deep Learning)이 발달하면서, 이를 기반으로 한 텍스트 마이닝 기술이
발전하고 있다.
BIM 표준과 구현 © 강태욱 Page 126 of 149
2.4.2 Fuseki 기반 간단한 SPARQL 서버 실행
미리 이런 도구를 설치해 놓고 필요할 때 꺼내서 사용하는 도커(docker) 기반 SPARQL 서버도
있다. fuseki는 편리한 SPARQL 서버로 미리 트리플 형식 데이터를 놓고 업로드해 놓으면
손쉽게 SPARQL 질의를 할 수 있고, 이는 인터넷 상에서 서버로 동작시킬 수 있다. 참고로,
도커는 가상머신처럼 동작하는 컨테이너이다. 이를 이용하면 복잡한 환경과 프로그램을
배포하기 쉽게 이미지로 만든 후 재사용할 수 있다.
사용은 간단하다. 아래 링크를 클릭해 도커를 설치한다.
 https://docs.docker.com/desktop/windows/install
다음과 같이 도커 명령행 인터페이스에서 명령을 입력한다.
docker run -p 3030:3030 -e ADMIN_PASSWORD=pw123 stain/jena-fuseki
Docker에서 fuseki 이미지 실행 모습
크롬에서 localhost:3030 주소를 입력하고, 아이디와 암호를 admin, pw123 으로 입력한다.
그럼, 다음과 같이 query를 사용할 수 있다.
BIM 표준과 구현 © 강태욱 Page 127 of 149
도커에서 실행된 fuseki 기반 SPARQL 서버
참고로, 이 글에서 사용한 fuseki 도커 이미지에 대한 상세한 설명은 아래를 참고하길 바란다.
Jena Fuseki 2 docker image doc
각 도구는 목적에 맞게 활용해야 이익을 얻을 수 있다. 그러므로, 도구가 목적에 맞는 지
분석하여 기능을 이용한 후 사용해야 한다.
2.5 BIM 지식 서비스 지원 시멘틱 정보 질의 방법 개발
이 글은 지식 서비스를 위한 BIM 시멘틱 정보 질의 방법을 간단히 알아본다.
이 내용은 시멘틱, 온톨로지, SPARQL, BIM(Building Information Modeling), 트리플(triple),
도커(docker) 등의 개념은 알고 있다는 가정하에 진행한다. 이와 관련된 사항은 아래 링크를
참고한다.
 지식 서비스 개발을 위한 그래프 모델과 온톨로지 구조
 SPARQL 문법 예제
 가상 이미지 컨테이너 도커 사용하기
BIM 표준과 구현 © 강태욱 Page 128 of 149
이 글에서는 온톨로지 모델로 트리플 구조를 사용한다. 트리플 설명, Turtle 파일 포맷, 예제는
다음 링크를 참고한다.
 트리블 구조 및 질의 예제
 Turtle 설명 및 예제
2.5.1 Jena Fuseki 서버 동작
이 글은 Jena Fuseki 서버를 사용한다. 이미 만들어진 도커 이미지를 이용해 서버를
구동시킨다. 도커 이미지는 stain/jena-fuseki 를 사용한다. Jena Fuseki 서버에 관한 상세
내용은 다음 링크를 참고하라.
 Jena Fuseki server
도커 명령 인터페이스(DCI. Docker Command Interface)에서 stain/jena-fuseki 도커를
다운로드 받는다. 도커 이미지를 run하기 전에, 도커 내 Jena Fuseki 작업 데이터를
보관(persist) 및 저장(save)하려면 다음 같이 도커 volume를 먼저 만들어야 한다. 이 경우
사용하기 편리한 busybox를 사용한다. volume 이름은 fuseki-data 이다.
docker run --name fuseki-data -v /fuseki busybox
이제 다음과 같이 생성된 도커 volume fuseki-data가 지정된 Jena Fuseki 이미지를 실행한다.
docker run -d --name fuseki -p 3030:3030 -e ADMIN_PASSWORD=pw123 --volumes-from
fuseki-data stain/jena-fuseki
BIM 표준과 구현 © 강태욱 Page 129 of 149
도커 이미지를 구동한 후 localhost:3030 을 접속하면 다음과 같은 Apache Jena Fuseki 서버
데쉬보드 화면을 볼 수 있다. 참고로 아이디아와 암호는 admin, pw123 이다.
BIM 표준과 구현 © 강태욱 Page 130 of 149
2.5.2 BIM 온토롤지 파일 업로드
Apache Jena Fuseki 메뉴를 이용해 Spider란 이름의 Dataset을 만들고, 다음과
같이 spider.ttl 파일을 저장 후 Jena 에 upload한다.
@base <http://example.org/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix rel: <http://www.perceive.net/schemas/relationship/> .
<#green-goblin>
rel:enemyOf <#spiderman> ;
a foaf:Person ; # in the context of the Marvel universe
foaf:name "Green Goblin" .
<#spiderman>
rel:enemyOf <#green-goblin> ;
a foaf:Person ;
foaf:name "Spiderman", "Человек-паук"@ru .
dataset 생성 후 파일 업로드
BIM 표준과 구현 © 강태욱 Page 131 of 149
등록된 그래프 데이터 리스트 결과
질의를 다음과 같이 해보자.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rel: <http://www.perceive.net/schemas/relationship/>
SELECT ?subject
WHERE
{ ?subject foaf:name 'Green Goblin' }
그럼 다음과 같이 이름이 Green Goblin 인 subject가 검색된다 .
BIM 표준과 구현 © 강태욱 Page 132 of 149
그래프 데이터 모델 검색 결과
2.5.3 SPARQL 질의
Dataset을 만들고, ifc2x3 ttl 파일을 다운로드하여 다음과 같이 Jena 에 upload한다.
BIM 표준과 구현 © 강태욱 Page 133 of 149
dataset 생성
ttl upload files
업로드된 ifc2x3 ttl 일부 내용
BIM 표준과 구현 © 강태욱 Page 134 of 149
query를 다음과 같이 실행한다. 질의 방법은 PREFIX로 용어를 정의한 네임 스페이스를 설정한
후, SPARQL 구문으로 IfcBuildingElement의 하위 클래스를 질의한다.
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dce: <http://purl.org/dc/elements/1.1/>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX vann: <http://purl.org/vocab/vann/>
PREFIX list: <https://w3id.org/list#>
PREFIX expr: <https://w3id.org/express#>
PREFIX ifc: <http://ifcowl.openbimstandards.org/IFC2X3_Final#>
PREFIX cc: <http://creativecommons.org/ns#>
SELECT ?subject
WHERE
{ ?subject rdfs:subClassOf ifc:IfcBuildingElement }
결과는 다음과 같다.
BIM 표준과 구현 © 강태욱 Page 135 of 149
질의 모습
BIM 표준과 구현 © 강태욱 Page 136 of 149
질의 결과
fuseki 도커 서버의 로그를 확인하려면 다음 명령을 입력한다.
BIM 표준과 구현 © 강태욱 Page 137 of 149
서버 종료를 위해 다음과 같이 도커 stop명령을 입력한다.
docker stop fuseki
도커 fuseki 서버를 재시작하려면 다음 명령을 입력한다. 참고로 fuseki 서버 run 시 옵션이
저장되므로, 모두 입력할 필요는 없다.
docker restart fuseki
다음처럼, 앞서 생성한 dataset 등이 모두 잘 보관되어 실행되는 것을 확인할 수 있다.
BIM 표준과 구현 © 강태욱 Page 138 of 149
데이터 복원된 도커 Jena Fuseki 서버 실행 모습
2.6 마무리
SPARQL을 이용하면 좀 더 복잡하고, 추론적인 질의가 가능하다. 이를 이용해 BIM기반의
다양한 지식 서비스를 좀 더 손쉽게 구현할 수 있다. 요즘에는 딥러닝 기반 채봇 등이 있어,
이와 연결하면 좀 더 인공지능적인 서비스 구현이 가능하다. 다만, 이런 서비스를 위해서는
BIM과 연계된 지식 서비스 구축을 위해서는 대상 소스의 데이터를 <주어-술어-목적어>
트리플 형식으로 구조화해 데이터베이스를 구축해야 한다. 만약, 텍스트 파일에서 트리플
데이터를 생성하기 위해서는 텍스트 마이닝 기법을 사용해야 한다.
BIM 표준과 구현 © 강태욱 Page 139 of 149
3. BIM 응용과 개발 사례
3.1 개요
최근, 건축, 건설 분야에서 스마트 홈, 스마트 빌딩으로 시작된 효과적인 에너지 및 시설물
성능 관리와 운영에 대한 이슈가 스마트 시티로 확대되는 모양이다. 이런 시점에서 건물에
대한 상세한 정보 모델을 지원하는 BIM과 건물 주변의 공간에 대한 정보를 제공하는 GIS의
융합은 필연적인 단계이다.
이 장에서는 BIM-GIS 기반으로 FM을 적용한 사례를 간단히 언급하고, 그 기술적인
프레임웍과 개념에 대해서 논한다.
3.2 LA Aiport FM 사례
이 사례는 BIM Forum에서 LA Airport 에 대한 BIM 기반 FM (Facility Management) 사례를
Frank Peters와 Doug Betts가 나와 발표 한 사례이다.
그림. LAX 모습 (Frank Peters, Doug Betts, LAX FM, 2012, BIMForum)
이 시스템 개발로 위치기반 유지관리, 작업 흐름 개선, 데이터 취득 및 데이터베이스 축척을
통한 지식 베이스 확보 및 데이터 검증 등의 효과를 얻으려 하였다. 아래 그림은 기존에
시설물 관리를 위해 필요한 메뉴얼, 도면, 박스 등을 보여주고 있습니다. 이런 것들을 관리하는
것은 너무 귀찮은 일이다.
BIM 표준과 구현 © 강태욱 Page 140 of 149
그림. 시설물관리 운영 메뉴얼 및 도면, 문서들 (Frank Peters, Doug Betts, LAX FM, 2012,
BIMForum)
이 FM 시스템의 아이디어는 아래와 같이 데이베이스를 구축해 프로젝트 데이터와 시공 후
As-built 모델을 연계해 시설물을 관리하는 것이다. 시설물의 As-Built 모델은 역설계(reverse
sengineering) 기술을 이용해 모델링하고, 시설물의 위치정보는 GIS 정보를 최대한
활용하였다.
그림. BIM기반 시설물관리 시스템 아이디어
BIM 표준과 구현 © 강태욱 Page 141 of 149
개발을 위해, 각 시설물들의 정보를 효과적으로 분류, 탐색, 관리해야 한다. 이를 위해, 아래와
같이 정보 분류 체계를 정리하였다. 그리고 관리할 시설물에 대한 파라메터를 정의하였다.
그림. 정보분류체계와 시설물 파라메터 정의
시스템의 기반 플랫폼은 마이크로소프트의 Sharepoint 를 사용하였다. 참고로 Sharepoint는
신뢰성있는 협업 플랫폼으로 형상관리과 협업에 필요한 다양한 기능들을 지원하고 API를 통해
사용자가 자동화할 수 있는 플랫폼이다. 그리고 N-Screen 기반이다.
다음 그림은 이러한 플랫폼 기반위에서 Asset, Spare Parts, Safety 등을 관리하게 끔 개발된
LAX FM Project Data 시스템이다.
그림. LAX BIM+FM Project Data
BIM 표준과 구현 © 강태욱 Page 142 of 149
이 시스템에 사용자는 FM에 필요한 정보를 입력을 한다. 정보나 As-built 모델을 웹기반이나
프로젝트 파일 관리 시스템으로 Subcontractor가 입력하도록 하였고, Field Data는 3D scan
모델을 자산 데이터와 함께 역설계해 시설물 객체를 모델링하였다. 이 시스템이 앞의 Project
Data 시스템과 통합되어 CAFM, CMMS, GIS 와 연계되어 활용된다.
다음은 사용자가 보고 활용하는 BIM+FM 시스템이다.
그림. LAX BIM+FM 시스템
사용자는 위 시스템을 이용해 시설물을 관리할 수 있다. 왼쪽에 객체 트리는 시설물들이
카테고리 별로 분류가 되어 있다. 이를 이용해 정보를 탐색하면 중앙 화면에 해당 시설물이
자연스럽게 Zoom in되며 보여지고, 오른쪽 아래 화면에서 적절히 필요한 부분만 필터링할 수
있도록 되어 있다.
모든 FM정보는 시각적인 위치 좌표 정보와 함께, 관련된 속성, 메뉴얼, 이력정보,
작업지시정보 등이 연계, 통합되어 있다.
3.3 BIM-GIS FM 기술 프레임웍
프레임워크는 어플리케이션의 구조와 틀을 제공하는 하부의 구조이다. 시스템 개발 시 특정
문제 해결을 쉽게 할 수 있는 기능과 절차를 미리 개발해 놓아 필요할 때 재활용할 수 있도록
한 것이다.
BIM 표준과 구현 © 강태욱 Page 143 of 149
현재는 많은 프로젝트 개발에서 공통 기능의 구현에 있어 프레임워크를 사용하는 사례가
증가하고 있다. 프레임워크의 사용은 일관성 있는 개발방법으로 인해 불필요한 인터페이스
개발 시간을 줄이고 향후 프로그램의 호환성을 높여 지속적인 유지보수를 가능하게 하며 개발
사용자의 수가 늘어남에 따라 기능 구현 시 타 프로그램의 참조가 용이하게 만들어 준다.
도시 시설물 관리의 참조 모델 프레임웍은 아래 표와 같이 정보수집, 정보통합/가공, 정보
활용으로 구분할 수 있다.
BIM기반 도시 시설물 관리 참조 모델은 정보 수집통합 연계서비스를 통해 다양한 도시정보를
수집하고 수집된 정보를 내부 시스템과 연계함으로서 통합 시설물 관리에 필요한 서비스는
물론 분야별 정보를 융합한 통합운영 서비스가 Open API로 제공되어야 한다.
또한, 도로 및 지하시설물은 물론 BIM을 통한 건축물까지 포함된 종합적인 도시시설물을
통합하여 관리하고 센서, 현장데이터 등 시설물 유지관리를 위한 데이터를 수집하여
도시시설물 통합 관제가 가능하도록 구성되어야 한다. Open API로 제공되는 인터페이스는 웹
기반의 표준 인터페이스를 준수하여 모바일 등 다양한 환경에서도 동일한 데이터가 제공될 수
있다.
다음 그림에서 우측의 다이어그램은 이러한 워크플로우와 공통 기술 요소를 프레임웍 구조로
정의한 그림이다. 아울러 이 프레임웍을 이용해, 유스케이스 관점에서 정보를 추출하여
사용하는 예를 좌측 그림으로 표현하였다. 그림 속 예시에서는, 도시 시설물 관리자가, 특정
도로 선형 근처 1km 반경 내에 있는 중요 시설물 중, PCI (Performance Condition Index)가
50% 미만인 시설물 정보를 획득해, 오름차순으로 정렬한 후, 그 정보를 유스케이스의
액터(actor)에 던져 준다.
BIM 표준과 구현 © 강태욱 Page 144 of 149
그림. BIM-GIS based FM Integration Framework Reference Model (BG-FM IFRM, Tae-Wook Kang, Jun-Hee
Youn, Jang-Wook Kim, Hyun-Sang Choi, 2014, A Study on BIM-based Reference Model for Effective Urban
Facility Management, Korea Academia-Industrial cooperation Society)
통합 플랫폼 구성 요소에 대한 정의는 다음과 같다.
표. Integrated Platform Reference Model Component Definition
Category Description
Urban FM
Integrated
Urban Information
Control (UIC)
Controling the Urban Information for the facility
management.
Open Integrated Urban FM Platform
UFM
Integrated
DB
Spatial
DB
Context
Processing
DB
Data
Collection
Integration
Linkage
Service
Data Query
Engine
Adaptive
LOD
IFC-CityGML
Converter
3D
Visualization
Context Awareness
Web Service Component
(Security, Log, Session, Exception,
Message)
BIM-GIS-FM Data Linkage
Component
(Neutral File Format, Converter, ETL)
Open API Service Interface
Urban FM System BIM on GIS System
Facility Information
Management
FM Decision Supporting
System
FM Reporting System
FM DB
BIM Model Management
GIS Model Management
BIM-GIS Integration
BIM DB
GIS DB
Urban FM Integrated Control Center
Urban
Information
Control
Real-time
Remote
Monitoring
Real-time
Context
Management
Urban Facility
Management
Urban Energy
Management
Indoor/Outdoor
Navigation
Agency
Field
Data
USN
/CCTV
Urban FM Applications
SELECT * FROM Alignment,
Building WHERE Buffer(Alignment,
Building, ‘1km’) AND
Building.Pset(‘FM’).PCI < ‘50%’
ORDERBY Building.Pset(‘FM’).PCI
Urban
Facility
Manager
Smart city
operator
…
Use-case driven model
BIM 표준과 구현 © 강태욱 Page 145 of 149
Control
Center (ICC)
Real-time Remote
Monitoring (RRM)
FM data monitoring related to FM such as CCTV,
Field data, USN data etc.
Real-time
Context Management
(RCM)
Facility management by using the context
awareness.
Urban FM
Application
(UFMA)
Urban Facility
Management (UFM)
Urban facility management application to support
UIC.
Urban Energy
Management (UEM)
Facility management application considering
energy optimization.
Indoor/Outdoor
Navigation (ION)
The navigation application for FM operating
activities.
Open
Integrated
Urban
FM
Platform
Open API Service
Interface
The application program interface to support the
UFMA's functions.
Web Service Component
The component which supports the Open API
Service Interface.
Data Query Engine
The query engine for searching the needed FM
data which is similar to SQL(Structured Query
Language).
Adaptive LOD
The LOD generation technology for the geometry
and property representation performance about
the large volume BIM and GIS objects.
3D Visualization BIM and GIS 3D object representation function.
IFC-CityGML
Converter
The converting functions to represent the BIM
objects on GIS.
Context Awareness
The function for operating FM activities
considering the FM context effectively.
BIM-GIS-FM Data
Linkage Component
The needed data integration function between
BIM, GIS and FM.
Context Processing DB
DB for managing the context awareness rule
about FM.
UFM Integrated DB The integrated DB from BIM, GIS and FM.
Spatial DB BIM and GIS spatial object such as the polyline,
BIM 표준과 구현 © 강태욱 Page 146 of 149
3D solid DB.
Data Collection
Integrated Linkage
Service
The linkage service to extract the data related to
FM from the various sensor such as USN, CCTV,
Field device etc.
Urban
FM
System
Facility Information
Management
Facility objects CRUD function support.
FM Reporting System
Facility reporting function to support the decision
making.
FM Decision Supporting
System(DSS)
FM DSS function by using the data mining.
FM DB Facility Management Database
BIM on GIS
System
BIM-GIS integration
BIM-GIS integration function such as BIM-GIS
coordination and topology mapping.
BIM Model Management
BIM model management including the
object(Building, Wall, Slab, Door etc).
GIS Model Management
GIS model management including the
object(Road, Sewage, Pipe, Site, Railway etc).
GIS DB GIS Database
BIM DB BIM Database
BIM-GIS기반 FM을 구현하는 요구사항을 정의하는 프레임웍은 유스케이스 관점에 따라
약간의 차이는 있겠으나, 개념적으로 보았을 때는, 크게, 이러한 구성요소가 포함되어야, 도시,
캠퍼스, 대규모 시설물 등을 운영 및 관리하기 위한 유스케이스를 효과적으로 지원할 수 있을
것이다.
이 프레임웍에서 유스케이스에 따라 구현되어야 할 UFMA및 ICC 레이어는 비지니스 모델의
시나리오와 정보 교환 방식을 따라야 하는 것은 당연한 것이다. 비지니스 모델에 근거한
유스케이스 드리븐(use-case driven) 모델에서 시나리오, 정보 교환 모델이 파생되어야 하며,
이러한 정보와 시나리오에 따른 워크플로우를 공통적으로 제공하는 구조와 기술이
뒷맏침되어야 한다.
BIM 표준과 구현 © 강태욱 Page 147 of 149
3.4 결론
지금까지 BIM-GIS기반 FM 사례 및 기술 프레임웍에 대한 내용을 설명해 보았다. 앞서
언급하였다시피, 스마트 시티, 스마트 빌딩, 스마트 홈 시대에서 실내외의 공간 정보를
효과적으로 다루는 기술은 그 중요성이 점점 높아질 수 밖에 없다. 이런 관점에서, 실내외
3 차원 정보 모델을 유스케이스 모델에 따라, 유연하게 정의, 관리하고 서비스하는 기술의
가치는 더욱 높아질 것이라 생각한다.
BIM 표준과 구현 © 강태욱 Page 148 of 149
4. 레퍼런스
ISO/TS 19166:2021, Geographic information — BIM to GIS conceptual mapping (B2GM)
BIM principle and philosophy
bimprinciple.blogspot.com
daddynkidsmakers.blogspot.com
IFC specifications database
Open Semantic Search
buildingSMART international, IFC4
Silk (The Linked Data Integration Framework)
Best text analysis and mining tools (#2)
KNIME Text Processing
Apache OpenNLP
Google cloud natural language API
Natural Language Toolkit
Text mining software
BIM ontology, BOT app and BIM ontology visualization
Semantic Building Information Model for Facility Management
Intelligent System for Facility Management
Ontology change management approach for facility management
Ontology based facility data model for energy management
Ontology based Reference Data Model
Ontology based platform for BIM
BIM Ontology
Linked Open Vocabularies for IoT
BIM Topology Ontology, DTU
BIM 표준과 구현 © 강태욱 Page 149 of 149
shorttext

BIM 표준과 구현 (standard and development)

  • 1.
    오픈소스 이용하는 방법 BIM모델에 대한 구조 해석 BIM 정보추출, 협업, 가시화 개발 절차, 방법 BIM 지식 서비스 개발 절차 및 방법 Ver 1.1 2021. 강태욱, Taewook Kang BIM 표준과 구현 BIM Standard and Development
  • 2.
    BIM 표준과 구현© 강태욱 Page 2 of 149 Table of Contents 1. Open BIM 표준형식 구조 설명 7 1.1 IFC 개요 7 1.2 IFC4 특징 10 1.3 모델 구조 21 1.3.1 일반 사항 21 1.3.2 모델 관계 구조 22 1.3.3 객체 구조 27 1.3.4 형상 구조 31 1.3.5 파일 포맷 구조 33 1.4 결론 36 2. Open BIM 기반 소프트웨어 구현 37 2.1 표준모델 파싱 및 정보추출 37 2.1.1 개요 37 2.1.2 개발환경 39 2.1.3 개발환경 설치 41 2.1.4 IFC 구조생성과 저장 - Hello Wall 44 2.1.4.1 개요.....................................................................................................................................................44 2.1.4.2 예제 프로젝트 설치......................................................................................................................44 2.1.4.3 프로젝트 실행.................................................................................................................................46 2.1.4.4 핵심 구조..........................................................................................................................................49 2.1.4.5 실습.....................................................................................................................................................52 2.1.4.6 결론.....................................................................................................................................................55 2.1.5 IFC 형상정보추출 – Hello IFC 56 2.1.5.1 개요.....................................................................................................................................................56 2.1.5.2 오픈소스 프로젝트 빌드 파일 생성.......................................................................................57 2.1.5.3 프로젝트 빌드.................................................................................................................................60 2.1.5.4 핵심 구조..........................................................................................................................................63 2.1.5.5 SimpleIfcViewer 개발..................................................................................................................65 2.1.5.6 결론.....................................................................................................................................................70 2.1.6 결론 71 2.2 BIM 협업과 가시화 도구 구현 72 2.2.1 BIM모델관리와 협업 - bimServer.org 72
  • 3.
    BIM 표준과 구현© 강태욱 Page 3 of 149 2.2.1.1 개요.....................................................................................................................................................72 2.2.1.2 설치 및 실행....................................................................................................................................73 2.2.1.3 핵심 구조..........................................................................................................................................77 2.2.1.4 프로젝트 생성.................................................................................................................................79 2.2.1.5 BIM 모델 체크인 및 버전별 모델 획득................................................................................87 2.2.1.6 결론.....................................................................................................................................................94 2.2.2 BIM정보 시각화와 쿼리언어 개발 - xBIM 95 2.2.2.1 개요.....................................................................................................................................................95 2.2.2.2 설치 및 실행....................................................................................................................................96 2.2.2.3 핵심 구조 분석.............................................................................................................................102 2.2.2.4 실습...................................................................................................................................................106 2.2.2.5 결론...................................................................................................................................................117 2.3 Ontology와 Semantic BIM query 117 2.3.1 Ontology 117 2.3.2 데이터와 지식의 차이 118 2.3.3 지식 추론 기능 118 2.3.4 지식의 표현과 시멘틱 119 2.3.5 온톨로지 개념과 트리플 데이터 구조 120 2.4 Semantic BIM query 오픈소스 도구 124 2.4.1 개요 124 2.4.2 Fuseki 기반 간단한 SPARQL 서버 실행 126 2.5 BIM 지식 서비스 지원 시멘틱 정보 질의 방법 개발 127 2.5.1 Jena Fuseki 서버 동작 128 2.5.2 BIM 온토롤지 파일 업로드 130 2.5.3 SPARQL 질의 132 2.6 마무리 138 3. BIM 응용과 개발 사례 139 3.1 개요 139 3.2 LA Aiport FM 사례 139 3.3 BIM-GIS FM 기술 프레임웍 142 3.4 결론 147 4. 레퍼런스 148
  • 4.
    BIM 표준과 구현© 강태욱 Page 4 of 149
  • 5.
    BIM 표준과 구현© 강태욱 Page 5 of 149 머리말 이 책은 BIM 표준과 구현이란 제목으로 출판하려했던 내용 중 일부입니다. 2013 년에 시작했었는 데, 함께 하기로 한 분들이 너무 바쁜 상황이라, 거의 8 년 이상 묵혀둔 내용이 되어 버렸습니다. 지금은 미국에서 책을 정리할 시간적 여유도 약간 생겼고, 이 내용을 필요한 분들도 있을 듯하여 eBook으로 정리해 공유합니다. 일부 URL은 너무 오래되어, 최대한 확인해 갱신하였습니다. 이 책의 내용은 제가 예전에 관심을 두고 직접 연구 및 개발했던 부분입니다. 이 책은 BIM 개발과 관련된 아래 내용을 주로 다루고 있으니 참고하시길 바랍니다. 아직도 이 글에서 사용된 기술은 계속 유지관리되고 있으니 활용 가능하시리라 생각합니다.  개방형 BIM 모델에 대한 구조 해석  오픈소스 이용하는 방법  BIM 정보추출, 협업, 가시화 개발 절차 및 방법  BIM 지식 서비스 개발 절차 및 방법  사례 소개 아래 라이선스로 관련 내용을 재활용할 수 있으니 참고하시길 바랍니다. CC BY-NC 요즘 국내 BIM상황은 기술의 문제라기 보다는 사람과 제도의 문제로 바뀌었습니다. 그래서, 최근 몇 년 동안 BIM Principle and Philosophy 블로그 내용은 새로운 건설 기술이나 제도와 관련된 내용으로 채워졌습니다. 앞으로도 이런 트랜드를 유지하려 합니다. 아울러, BIM Principle and Philosophy 웹사이트는 Google site정책으로 Blog 방식으로 전환하였습니다. 예전 자료는 BIM Principle and Philosophy에서 확인할 수 있습니다. 새로운 글은 BIM Principle and Philosophy 블로그에 올릴 것이니 참고 하시길 바랍니다.  https://bimprinciple.blogspot.com - 2021.9.13, 강태욱 (laputa99999@gmail.com)
  • 6.
    BIM 표준과 구현© 강태욱 Page 6 of 149
  • 7.
    BIM 표준과 구현© 강태욱 Page 7 of 149 1. Open BIM 표준형식 구조 설명 1.1 IFC 개요 IFC는 건물에 관한 정보를 기술하기 위한 목적으로 개발된 데이터 교환 포맷이다. 이 포맷은 중립적이며, 오픈되어 있다. IFC포맷은 1995 년 미국과 유럽 AEC회사들을 중심으로 1995 년에 데이터 교환을 목적으로 만들어진 국제 협의체 IAI(International Alliance Interoperability)에 의해 개발되었으며, 2005 년까지 buildingSMART에서 개발, 유지되어 왔다. buildingSMART는 건설분야 생산성 향상을 위한 정보 상호운용성 표준 포맷 및 정보교환 방법을 정의하고 개발하여 산업계에 표준을 확산하고자 하는 목적으로 설립되었다. 현재 IFC는 IFC4 버전까지 완성되었으며 객체지향적 구조를 기술할 수 있는 엔티티 관계 모델(Entity relationship model)기반인 EXPRESS언어로 기술되어 있다. 모든 정보는 객체란 개념의 집합으로 볼 수 있고 객체지향에서는 이를 클래스라 한다. 클래스는 보통 속성 형식, 객체의 행위 규칙을 정의한 함수 및 클래스간 관계로 구성되어 캡슐화된 객체 틀(Template)로 이뤄진다. IFC4 의 경우 핵심 객체 클래스를 정의한 커널(Kernel) 패키지와 커널에서 확장된 Control, Product, Process 세개의 기본 확장 패키지, 확장 패키지에서 건물 서비스, 컴포넌트, 건물 부재, 관리 요소, 시설물 객체 등 5 개의 AEC/FM 공통 패키지로 클래스가 확장되어 정의된다. 각 공통 패키지에서 AEC/FM 도메인별 8 개의 패키지와 건축 요소의 속성을 정의하는 데 사용되는 수량이나 재료와 같은 기본 객체형을 정의해 종류별로 나눈 21 개의 리소스 패키지로 구성되어 있다. 표 1-1 IFC 공통 패키지 설명 패키지 명 설명 IfcKernel IFC 모델의 핵심 클래스들을 지원한다. IFC의 모든 객체는 IfcRoot에서 시작되며, IfcObjectDefinition을 통해 각 객체간 관계를 설정해 구조를 만든다. 이와 같은 객체, 관계 기본 클래스를 지원한다. IfcControlExtension 프로세스, 리소스, 부재와 같은 자산의 통제와 관련된 기본 클래스를 지원한다. IfcProcessExtension 프로세스와 관련된 기본 클래스를 지원한다. IfcProductExtension 형상과 위치를 가지는 컴포넌트 개념을 일반화한 클래스를 지원한다. IfcBuilding, IfcBuildingStorey,
  • 8.
    BIM 표준과 구현© 강태욱 Page 8 of 149 IfcElement 클래스 등을 지원한다. IfcSharedBldgServiceElements MEP와 같이 건물 서비스를 지원하는 개념을 일반화한 클래스를 지원한다. IfcDistributionSystem, IfcFlowController 등을 지원한다. IfcSharedComponentElements 컴포넌트간 연결 등에 필요한 상대적으로 작은 부품 클래스를 지원한다. IfcFastener, IfcDiscreteAccessory 등을 지원한다. IfcSharedBuildingElements 건물 부재 컴포넌트를 지원한다. IfcBeam, IfcColumn, IfcRailing, IfcRamp, IfcRoof, IfcSlab, IfcWall, IfcWindow, IfcStair등을 지원한다. IfcSharedManagementElements 건물 생애주기 단계 동안 관리에 필요한 기본적인 개념을 정의한다. 비용 및 일정 등이 포함되며 IfcCostItem, IfcCostSchedule 등을 지원한다. IfcSharedFacilityElements FM(Facility Management)를 위한 가구, 자산, 재고와 같은 개념을 지원한다. IfcAsset, IfcFurniture, IfcInventory 등을 지원한다. 다음은 클래스 패키지 다이어그램을 나타낸 것으로써 커널 패키지를 중심으로 앞에 언급된 패키지가 재활용되고 있는 구조를 표현한 것이다.
  • 9.
    BIM 표준과 구현© 강태욱 Page 9 of 149 그림 1-1 IFC 클래스 패키지 구조도(https://standards.buildingsmart.org/IFC/DEV/IFC4_2/FINAL/HTML/introduction.htm ) IFC는 객체 지향적 개념에 근거해 EXPRESS언어로 정보 스키마를 기술한다. IFC는 건축 분야 정보 상호운용에 촛점이 맞춰져 재활용이 가능하도록 Kernel 객체에서 확장된 다양한 건축 요소와 재료, 공정 등 전체 700 개 이상의 객체를 제공한다.
  • 10.
    BIM 표준과 구현© 강태욱 Page 10 of 149 IFC는 온톨로지 용어 사전인 IFD(International Framework for Dictionaries, ISO 12006-3) 및 IFC에 대한 정보 교환 방법인 IDM(Information Delivery Manual, ISO 29481-1:2010)과 함께 사용되며, 여기서 IDM은 건축 프로젝트 프로세스를 정의하고, BIM 활용 시 요구된 프로세스 간 정보 교환을 위한 지침을 제공하는 것이 목적이다. IDM은 프로세스 상호 관련성, 소비 정보 종류, 정보 교환 방법 등을 범용 IFC가 특정 프로젝트에 맞도록(Tailroing)할 수 있도록 BPM(Business Process Management)기술인 BPMN(Business Process Model and Notation)과 ER(Exchange Requirement)으로 정의된다. 본 장에서는 새로 개정된 IFC4 를 포함해 IFC의 구조적 특징을 EXPRESS, UML(Unified Modeling Language, 객체모델링 표준언어) 등을 이용해 설명한다. 1.2 IFC4 특징 2013 년 3 월 12 일 공식 릴리즈 된 IFC4 는 3 월 21 일에 ISO16739 로 릴리즈 되었다. IFC4 는 기존 IFC에서 이슈로 제기된 부분들이 개선되었으며 비정형 모델링, 라이브러리 속성정의, 인프라스트럭처 모델 연계 등을 포함하고 있다. 다음과 같은 부분이 개선되었다. 표 1-2 IFC4 특징 (출처 - Dr. Thomas Liebich, 2013.3, IFC4 - the new buildingSMART standard, buildingSMART, http://www.buildingsmart-tech.org) No 항목 내용 1 새로운 기하 형상 및 파라메트릭 기능 지원 아키텍쳐, 빌딩 서비스 및 구조와 관련된 새로운 기하 형상과 파라메트릭 및 기능들이 포함되었고 개선되었다 2 4D, 5D 모델 정보 교환, BIM-GIS 상호운용관련 기능 지원, 지속가능성과 관련된 시뮬레이션 등 작업 흐름 지원 4D, 5D 모델 교환, 제조, 라이브러리, BIM과 GIS상호운용, 온도 시뮬레이션 및 지속가능성 평가와 관련된 워크플로우가 가능해 졌다. 3 IFC 속성정의와 데이터 사전의 연계 모든 IFC 속성 정의가 buildingSMART 데이터 사전과 연계되었다. 정보 재활용 관점에서 사전과 분리되고 연계하는 방식으로 개선되었다. 4 사용성 개선 많은 구현 개념과 예제가 연계되어 문서를 쉽게 접근하고 읽을 수 있도록 개선되었다. 5 ifcXML4 스키마 지원 ifcXML4 스키마를 포함하고 있으며 EXPRESS스키마와 연계해 IFC명세가 통합되어 있다.
  • 11.
    BIM 표준과 구현© 강태욱 Page 11 of 149 6 mvdXML 기술 통합을 통한 데이터 검사 mvdXML 기술과 통합되었으며 쉽게 데이터 검사 서비스를 정의할 수 있도록 하였다. 이는 IFC4 데이터의 제출과 함께 활용할 수 있다. 7 여러 기술적 문제 해결 IFC2x3 릴리즈 이후로 발견된 여러 기술적인 문제들을 해결하였다. 8 인프라스트럭쳐 확장성 고려 IFC의 확장이 인프라스트럭쳐까지 가장해져 빌딩 환경 뿐 아니라 다른 도메인에서도 적용이 가능해 졌다. IFC4 는 6 년 동안 개발되었고 8 m/m(man / month)가 모델 개선을 위해 투자되고 이 중 50%가 자원봉사 형태였다. IFC포맷이 워낙 확장성과 유연성을 고려하다 보니 각 요소의 관계들이 매우 복잡하게 연결되어 있어 이를 고려해 모델링을 한다는 것이 쉽지 않은 일이고 또한 IFC포맷에 대한 많은 실무적 비난도 있었기에 이를 해결하기 위한 노력도 쉽지는 않았다고 생각하기 때문이다. 1200 건 정도 발생된 이슈를 해결하려고 노력하였고 openBIM 표준을 위한 IFC보안을 고려하였다. IFC2x3 는 2016 년까지 사용될 것이며 IFC4 는 2014 년부터 적용이 시작된다. 다음 그림은 향후 IFC 개발 로드맵이다. 그림. IFC 개발 History (buildingSMART) 각 개선항목을 좀 더 확인하기 위해 본 장에서는 소스코드 비교 도구를 사용하여 스키마 변화를 살펴보았다.
  • 12.
    BIM 표준과 구현© 강태욱 Page 12 of 149 그림 1-2 코드 분석도구를 이용한 차이 분석 (WinDiff) IFC4 에서 개선된 기능들은 다음과 같다. 1. IFC스키마 일관성 IFC에서 계속 지적 받던 내용인 모델러마다 저장하는 방식에 따라 동일한 모델에 대한 호환성이 지켜지지 않았던 문제가 개선되었다. 이는 IFC의 매우 유연하게 디자인된 구조와 확장성이 오히려 문제가 되어버린 케이스로 모델러 간 IFC호환성에서는 큰 문제가 되었던 스키마 모호성 문제를 해결하려 노력하였다. 즉, 'multiple ways to do'를 줄이려고 노력하였다. 모호성 문제를 해결하는 방법은 몇 가지가 있을 수 있는 데, 객체의 역활이 다중인 경우에는 책임을 분리하여 타입을 정의하고, 객체가 포함하는 속성의 값을 제약하거나 분명히 정의하고, 객체간의 관계를 명확히 하는 등의 전략을 적용할 수 있다. 이는 데이터 모델링에서 인스턴스화 된 객체의 정보 무결성을 확보하는 실질적인 전략이다. 아래는 책임을 명확히 정의하기 위해 타입을 재정의한 예이다. IFC2x3 IFC4
  • 13.
    BIM 표준과 구현© 강태욱 Page 13 of 149 아래는 이 중 속성값을 특정 범위로 제약한 경우로 2D와 3D 곡선을 EXPRESS의 영역규칙을 이용해 정의한 것이다. EXPRESS의 WHERE구문을 이용해 차원을 검증하는 규칙을 정의하고 있다. ENTITY IfcOffsetCurve2D SUBTYPE OF (IfcCurve); BasisCurve : IfcCurve; Distance : IfcLengthMeasure; SelfIntersect : LOGICAL; WHERE DimIs2D : BasisCurve.Dim = 2; END_ENTITY; ENTITY IfcOffsetCurve3D SUBTYPE OF (IfcCurve); BasisCurve : IfcCurve; Distance : IfcLengthMeasure; SelfIntersect : LOGICAL; RefDirection : IfcDirection; WHERE DimIs2D : BasisCurve.Dim = 3; END_ENTITY; 이 영역규칙은 WHERE 문을 이용하여 각 엔티티 객체에 대해 개별 속성이나 여러 속성들의 조합된 값들에 대한 제약 조건을 설정할 수 있다. 예를 들어 위 EXPRESS식의 경우 DimIs2D로 정의된 WHERE 영역규칙은 IfcOffsetCuve2D 엔티티에 포함된 IfcCurve타입 BasisCurve객체의 차원을 표시하는 Dim변수가 2 인지 아닌지를 체크한다. 이런 방식으로 규칙을 정의하고 모든 영역규칙들이 True 값으로 조건식이 평가될 때 해당 객체는 유효한 객체로 사용되며 False이면 해당 객체는 사용되지 않는다. 이를 이용하면 규칙기반으로 데이터 무결성을 정의할 수 있다. TYPE IfcWallTypeEnum = ENUMERATION OF (STANDARD ,POLYGONAL ,SHEAR ,ELEMENTEDWALL ,PLUMBINGWALL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcWallTypeEnum = ENUMERATION OF (MOVABLE ,PARAPET ,PARTITIONING ,PLUMBINGWALL ,SHEAR ,SOLIDWALL ,STANDARD ,POLYGONAL ,ELEMENTEDWALL ,USERDEFINED ,NOTDEFINED); END_TYPE;
  • 14.
    BIM 표준과 구현© 강태욱 Page 14 of 149 제약 조건을 설정해 무결성을 확보하는 또 다른 방법은 FUNCTION을 사용하는 방법인데 이것도 RULE SET의 일종이다. 아래 스크립트의 좌측은 새로 추가된 BSpline 매듭백터(Knot Vector)의 유효성을 검증하는 함수로 데이터 무결성을 보장하기 위해 우측과 같이 영역규칙에 포함되어 활용되고 있다는 것을 확인할 수 있다. 이외에도 IFC4 에는 IfcCurveDim, IfcCurveWeightsPositive 등 유효성 검증용 함수들이 정의되어 있다. FUNCTION IfcConstraintsParamBSpline ( Degree, UpKnots, UpCp : INTEGER; KnotMult : LIST OF INTEGER; Knots : LIST OF IfcParameterValue ) : BOOLEAN; ... IF (i = UpKnots) AND (K > Degree + 1) THEN Result := FALSE; RETURN(Result); END_IF; END_REPEAT; RETURN(result); END_FUNCTION; ENTITY IfcBSplineCurveWithKnots SUPERTYPE OF (ONEOF (IfcRationalBSplineCurveWithKnots)) SUBTYPE OF (IfcBSplineCurve); KnotMultiplicities : LIST [2:?] OF INTEGER; Knots : LIST [2:?] OF IfcParameterValue; KnotSpec : IfcKnotType; DERIVE UpperIndexOnKnots : INTEGER := SIZEOF(Knots); WHERE ConsistentBSpline : IfcConstraintsParamBSpline (Degree, UpperIndexOnKnots, UpperIndexOnControlPoints, KnotMultiplicities, Knots); CorrespondingKnotLists : SIZEOF(KnotMultiplicities) = UpperIndexOnKnots; END_ENTITY; 2. 빌딩 서비스 요소 카탈로그 및 구조 모델링 요소 및 해석 지원되지 않았던 태양광 디바이스, 커뮤니케이션 장치 등 전기 요소, 빌딩 자동화(BAS- Building Automation System)와 관련된 여러 설비 요소 등을 지원하였다. 또한, 스틸 구조 요소를 보완하였으며 구조 분석이 가능하도록 철근 등 관련 정보가 상세화되었다. 아래는 이와 관련되어 추가된 ENUMBERATION 타입 정의이다. TYPE IfcBuildingElementPartTypeEnum = ENUMERATION OF (INSULATION ,PRECASTPANEL ,USERDEFINED ,NOTDEFINED); END_TYPE; TYPE IfcDistributionSystemEnum = ENUMERATION OF (AIRCONDITIONING ,AUDIOVISUAL ,CHEMICAL ... ,NOTDEFINED); END_TYPE;
  • 15.
    BIM 표준과 구현© 강태욱 Page 15 of 149 TYPE IfcDistributionPortTypeEnum = ENUMERATION OF (CABLE ,CABLECARRIER ,DUCT ,PIPE ,USERDEFINED ,NOTDEFINED); END_TYPE; ENTITY IfcActuator SUBTYPE OF (IfcDistributionControlElement); PredefinedType : OPTIONAL IfcActuatorTypeEnum; WHERE ...; END_ENTITY; 3. 대지 계획, GIS 좌표계 변환 및 토목 요소 기본 클래스 지원 GIS 연결을 가능하도록 하여 대지 계획을 할 수 있도록 하였다. 이를 위해 최근 BIM과 GIS연계 추세를 고려해 GIS 체계 안에 건물 디자인 맵핑이 가능하도록 개선되었다. 그림. IfcCoordinateReferenceSystem 스키마 표현(*주: WSG84 등 다양한 GIS좌표계를 지원할 수 있도록 하였다) 또한 다음 Express-G와 같이 토목 요소 기본 클래스인 IfcCivilElement를 지원한다. 이는 향후 도로, 철도, 상하수도와 같은 토목 객체를 효과적으로 지원하기 위한 기본 클래스를 마련하기 위함이다.
  • 16.
    BIM 표준과 구현© 강태욱 Page 16 of 149 ENTITY IfcCivilElement ... SUBTYPE OF (IfcElement); END_ENTITY; 4. 효율성 개선 스케줄 정의 재작업, 칼렌더 지원, ISO 8601 타임 포맷 지원 등 불편한 부분을 개선하고 MS Project를 직접적으로 지원할 수 있도록 하였다. 그림 1-3 ResourceTime의 일부 클래스 다이어그램(UML) 및 개선된 Task 및 Time 연계 기능 (buildingSMART) 5. 비정형 모델링 지원 Extrusion tapering을 지원하며 CSG기반 BOOLEAN연산과 NURBS 및 다양한 서페이스를 지원한다. 관련해 IFC예제 파일을 살펴보면 NURBS를 표현하기 위한 기하학적 정의가 기술되어 있는 것을 알 수 있다. 이를 검증하기 위해 Rhino의 Grasshopper를 이용해 IFC4 스키마를 통한 모델 입출력을 테스트해보았다. IfcResourceTime <<Optional>>+ScheduleWork <<Optional>>+ScheduleUsage <<Optional>>+ScheduleStart <<Optional>>+ScheduleFinish <<Optional>>+ActualWork <<Optional>>+ActualStart <<Optional>>+ActualFinish <<Optional>>+RemainingWork <<Optional>>+RemainingUsage IfcSchedulingTime <<Optional>>+Name <<Optional>>+DataOrigin <<Optional>>+UserDefinedDataOrigin
  • 17.
    BIM 표준과 구현© 강태욱 Page 17 of 149 그림 1-4 NURBS의 스키마와 다양한 방식으로 생성된 Surface 지원(buildingSMART) 그림 1-5 Grasshopper에서 생성된 AdvanedBrep 로 기술된 BSpline Surface 정보 중 일부(buildingSMART. *주: Grasshopper 컴포넌트를 개발해 IFC로 생성한 것으로 보인다.) 6. 속성집합 정의 개선 속성집합과 관련해 다양한 언어를 지원하고 있다. 다음과 같이 속성셋을 사전으로 관리하는 IFD와 연계를 IFD GUID를 이용해 강화하였다.
  • 18.
    BIM 표준과 구현© 강태욱 Page 18 of 149 그림 1-6 다양한 언어를 지원하고 있는 Property Set 스키마 및 IFD연계성 강화(buildingSMART) 7. 효율성 개선 기존 IFC2x3 에서 가장 큰 문제점 중 하나였던 데이터 용량문제가 어느정도 개선되었다. IFC2x3 기준으로 용량 개선이 솔리드 형상에 관해 14% 줄었다. 솔리드 형상이 가장 큰 용량을 차지하고 있다고 생각할 때 20~30%이상의 용량 절감은 있어 보인다. 게임 등에서 많이 사용되고 있는 최적화된 데이터 형식 개념을 활용하고 있다. 예를 들어 좌표, 벡터, 인덱스 등을 각각 구분하는 것이 아니라 Series 형태로 나열해 놓는 식이다. 이렇게 하면 압축도 손쉬워진다.
  • 19.
    BIM 표준과 구현© 강태욱 Page 19 of 149 8. IFC-DOC 도구 ifcDoc은 MVD(Model View Definitions)을 정의하기 위해 빌딩스마트 협회에서 개발한 도구이다. ifcDoc은 mvdXML 스펙(https://www.buildingsmart.org/standards/groups/ifcdoc/ )에 기반해 동작한다. ifcDoc는 HTML, 다이어그램, 스키마(EXPRESS, XSD) 등 생성을 지원하고 mvdXML포맷 생성 및 MVD에 대한 IFC 체크도 지원한다. 각 IFC요소의 정의, 속성, 개념, 템플릿 등을 편집할 수 있으며 bSI 저장소에 결과물을 업로드하거나 다운로드할 수 있으며 오픈소스다. 다운로드는 https://github.com/buildingSMART/IfcDoc 에서 가능하다. 참고로 메뉴얼은 https://technical.buildingsmart.org/projects/information-delivery-specification-ids/ 에서 확인할 수 있다. 그림 1-7 ifcDOC 실행 모습 (https://github.com/buildingSMART/IfcDoc) 9. 기타 개선 기능
  • 20.
    BIM 표준과 구현© 강태욱 Page 20 of 149 수량산출이 개선되어 XML스키마와 설정파일이 IFC와 분리 연결되어 수량을 정의할 수 있도록 하였다. 또한 에너지 등 성능 및 환경 분석을 위한 스페이스 경계, 특수 존 및 외부영역에 대한 파라메터 정의 등을 통해 에너지 등 성능 분석 정보를 개선하였다. 그리고 렌더링을 위한 Lighting 및 Shading 컴포넌트가 개선되어 멀티 텍스쳐, 광원 처리 모델, X3D표준 지원을 하고 있다. MEP 시스템 연결부 정보 개선도 있었는 데 빌딩 서비스 부분이 재설계되었고 관련해 Port Connection과 같은 부분이 개선되었다. 또한 다음과 같이 건설 시공과 관련된 시공 작업이나 리소스와 같은 부분의 표준화를 고려하였다. TYPE IfcConstructionEquipmentResourceTypeEnum = ENUMERATION OF (DEMOLISHING ,EARTHMOVING ,ERECTING ,HEATING ,LIGHTING ,PAVING ,NOTDEFINED); END_TYPE; TYPE IfcConstructionMaterialResourceTypeEnum = ENUMERATION OF (AGGREGATES ,CONCRETE ,DRYWALL ,FUEL ,GYPSUM ,MASONRY ,USERDEFINED); END_TYPE; 이외에도 일반 요소 정의와 파라메트릭 정의 분리, Task / Event / Procedure 정의의 재사용 지원, 효과적인 5D를 위한 개선, simple ifcXML 지원 및 개발도구 지원, 손쉽게 탐색할 수 있는 문서 시스템 개선, mvdXML를 통한 MVD개발자를 위한 스키마와 개념 템플릿 등이 개선되었다.
  • 21.
    BIM 표준과 구현© 강태욱 Page 21 of 149 *참고: 스펙을 지원하기 위한 도구로 개발되고 있는 IFC Toolbox- https://technical.buildingsmart.org/resources/software-implementations/ 는 링크를 클릭하시면 확인할 수 있으며 IFC4 스펙 페이지에 가시면 추가된 기능에 대해 이해하기 쉽도록 예제(https://technical.buildingsmart.org/standards/ifc/ifc-examples/ )가 스키마와 함께 설명되어 있다. 1.3 모델 구조 1.3.1 일반 사항 IFC에 대한 상세한 내용은 https://www.designingbuildings.co.uk/wiki/IFC4#:~:text=Industry%20Foundation%20Classes %20(IFC)%20are,data%20across%20different%20software%20applications. 를 방문하면 자세히 확인할 수 있다. 이 웹페이지를 열고 링크 중 [5. Core schemas]를 선택하면 다음 왼쪽과 같은 다이어그램이 표시된다. 다이어그램에는 클래스 패키지가 표현되어 있고 예를 들어 “Kernel”을 클릭하면 IfcKernel에 관한 세부 설명과 EXPRESS구조 및 각 구성요소의 설명이 기술되어 있다. 그림 1-8 IFC2x4 Manual(BuildingSmart)
  • 22.
    BIM 표준과 구현© 강태욱 Page 22 of 149 IFC에서 묘사하고 있는 객체는 Building에서 눈에 보이는 벽, 윈도우뿐만 아니라 Owner, Resource, Control, Cost, Asset과 같이 건축 계획, 디자인, 견적, 시공, 자산관리 전반적인 객체들을 모두 다루고 있다. 클래스 패키지는 AEC객체들을 개념적으로 가까운 것들끼리 묶은 것이다. IFC를 구성하는 모든 노드는 IfcRoot에서 시작되며, IfcRoot는 노드를 식별하기 위한 GlobalID, 노드 Name 과 Description 정보를 가진다. 객체의 특성을 정의하는 IfcObject노드는 다음과 같은 파생 클래스들을 가진다. IfcProject : 제품을 만들기 위해 수행하는 활동이다. IfcProcess : 프로젝트내에서 행해지는 공정이나 작업들이다. IfcResource : 프로세스에서 객체 사용에 대한 것을 정의한 것이다. IfcActor : 프로젝트와 관련된 인적자원이다. IfcProduct : 프로젝트에 포함된 물리적 객체며, 형상으로 표현된다. IfcControl : 다른 객체를 컨트롤하는 개념이다. IfcGroup : 객체의 집합이다. 1.3.2 모델 관계 구조 IFC에서는 객체간의 포함, 연관, 할당, 제약조건, 기하학적 관계 등 각 객체별 특성에 따른 관계들을 모두 명확히 표현하고 있다. 그래서 IfcObjectDefinition이란 개념을 두어서 이 관계들을 특별히 관리하고 있다. 특히, EXPRESS 언어는 INVERSE관계를 표현할 수 있어, 예를 들면 자동차가 엔진을 Aggregation하고 있지만, 엔진관점에서도 자동차에 포함되어지는 관계를 역으로 표현할 수 있다. 객체 특성은 IfcPropertyDefinition 으로 기술되며 객체간 관계는 할당(Assign), 집합(Aggregation), 분해(Aggregation의 역관계), 정의(Defined), 연결과 같은 IfcRelationship에 의해 기술될 수 있다. IFC에서는 관계도 객체로써 취급된다.
  • 23.
    BIM 표준과 구현© 강태욱 Page 23 of 149 IFC에서 건물이란 전체(Whole), 건물 공간, 건물 부재 간에 집합 관계로 구성된다. 이는 전체와 부분 관계(Whole/part relationship)을 의미하는 것으로 IfcRelAggregates는 이를 지원한다. 관계는 항상 두 객체 간에 발생되는 것이므로 집합체와 부분으로 관계가 정의된다. 집합체는 IfcObjectDefinition형식의 RelatingObject로 정의되며 부분들은 RelatedObjects 로 정의된다. 예를 들어 집합체는 건물이고 부분들은 건물의 각 층들이 될 수 있다. ENTITY IfcRelAggregates SUBTYPE OF IfcRelDecomposes; RelatingObject : IfcObjectDefinition; RelatedObjects : SET [1:?] OF IfcObjectDefinition; END_ENTITY; IFC공간적 구조는 대지(IfcSite), 건물(IfcBuilding), 층(IfcBuildingStory), 공간(IfcSpace) 4 가지 개념으로 구분된다. IfcBuilding은 다음 그림과 같이 IfcBuildingStorey를 포함하고 지형 높이(ElevationOfTerriain)과 같은 속성을 가지고 있다. 그림 1-9 IfcBuilding 개념도 (BuildingSmart) IfcBuildingStorey IfcBuildingStorey
  • 24.
    BIM 표준과 구현© 강태욱 Page 24 of 149 IfcBuildingStorey는 벽체(IfcWall), 슬라브(IfcSlab), 기둥(IfcColumn)과 같은 건축 부재를 포함할 수 있는 데 이런 건축 부재는 IfcProduct로 일반화된 클래스로 표현된다. 공간과 건축 부재 객체들은 서로 관계를 가지고 있으며 예를 들어 다음 그림과 같이 IfcBuilding는 IfcBuildingStorey를 IfcRelAggregates객체를 이용해 집합관계로 포함하고 있다. 반대로 IfcBuildingStorey는 자기를 포함하는 객체를 역관계(INV)로 가리키고 있다. IfcBuildingStorey는 IfcProduct를 IfcRelContainedInSpatialStructure 관계객체를 이용해 관리한다. 그림 1-10 IfcBuilding 정보 표현 (BuildingSmart) 다음 그림은 객체관계를 좀 더 자세히 표현한 다이어그램이다. IfcRelAggregates 관계객체를 이용해 Relating 객체와 Related 객체들의 정보를 관리하고 있다. IFC는 IfcProject에서 IfcBuildingStorey에 이르기까지 연결된 위상정보를 제공하며 이를 통해 계층적으로 서로 관련된 정보를 탐색할 수 있다.
  • 25.
    BIM 표준과 구현© 강태욱 Page 25 of 149 그림 1-11 IfcRelAggregates 위상관계 표현 (BuildingSmart)
  • 26.
    BIM 표준과 구현© 강태욱 Page 26 of 149 각 공간객체는 자신만의 지역좌표계를 가지고 있는 데 이는 IfcLocalPlacement에 의해 표현된다. IfcLocalPlacement는 X, Y, Z축과 Orientation을 가질 수 있어 IfcLocalPlacement에 의해 정의된 공간 객체는 이 지역좌표계에 영향을 받는다. 즉, 지역좌표계가 (999, 210, 3)이라면 이 지역좌표계에 속해진 부재 객체들의 형상 좌표들은 이를 원점으로 취급되 상대좌표로 정의된다. 이는 컴퓨터 그래픽스에서 전통적으로 사용되는 좌표계 스택 프레임(Stack Frame)개념을 활용하기 위함이다 (*주: 대부분의 컴퓨터 그래픽 좌표계는 전역좌표계와 지역좌표계들로 나뉘며 지역좌표계에 속해진 객체들은 좌표변환행렬을 통해 전역좌표계로 변환된다. 이를 통해 각 객체별로 효과적인 좌표 처리를 할 수 있다). 다음은 이를 표현한 다이어그램이다. 그림 1-12 IfcLocalPlacement 정보 표현 (BuildingSmart)
  • 27.
    BIM 표준과 구현© 강태욱 Page 27 of 149 1.3.3 객체 구조 솔리드 모델링은 실제 모델을 만들기 위해 많은 시간이 소요된다. 예를 들어 집을 설계하기 위해 솔리드 모델러를 이용해, 점, 선, 면, 입체를 하나 하나씩 만들어 바닥과 벽, 지붕을 만드는 것과 미리 준비되어 있는 바닥, 벽, 지붕의 파라메터를 조정해 설계하는 것과는 생산성에 큰 차이가 있음은 명백하다. 게다가 벽에는 기하학적 요소의 집합뿐만 아니라 벽체 재료와 같은 고유의 속성도 존재하므로 기존의 솔리드 모델러 만으로는 표현하기 어려운 부분이 많다. 솔리드 모델에 비해 객체지향적인 모델은 객체을 중심으로 모든 정보를 모아서 배열한다. 이는 정보 모델링에서 객체지향 모델링방법을 사용하는 방법과 동일하다. 다만, 대상이 그래픽 모델 정보란 차이일 뿐이다. 벽이 기하학적으로 점, 선, 면의 위상적 집합이지만, 이런 집합으로 다루기 보다는 벽 자체로 인식하는 편이 사람에게는 더 직관적이며, 다루기가 쉽다. 예를 들어 건축의 경우에는 바닥, 벽, 창문, 지붕, 층 등이 모델링 될 객체가 되며 각자 해당 객체를 표현하는 파라메터를 가진다. 즉, 벽체는 코어(Core), 마감재료, 도장, 단열재의 집합으로 구성되어 관련된 파라메터를 가진다. 토목의 경우 평면 선형(Alignment), 종단 선형, 횡단(Cross section), 교량, 부지, 수치지형 등이 객체가 되며 마찬가지로 적절한 파라메터를 가진다. 기계 분야에서는 기어, 너트와 같은 객체가 활용될 수 있다. 그림은 벽체를 순수하게 솔리드로만 표현한 것과 객체기반으로 모델링한 것의 차이를 보여준다. 솔리드 기반에서는 모든 정보가 기하학과 위상학적인 정보만 제공해줄 수 있지만, 객체 기반 모델에서는 객체의 속성정보까지 포함되어 제공된다. Property set GUID = W03b0I7 Length = 3.2m Width = 60cm Height = 4m Surface = brick Volume = ... Material = .. Cost = $... Edge Polyloop Solid Vertex Face Edge Edge Edge Object
  • 28.
    BIM 표준과 구현© 강태욱 Page 28 of 149 그림 1-13 솔리드 모델러 기반 디자인과 객체기반 디자인 건축분야에서 BIM이 발생된 만큼 Building에 대한 구조를 분해해 다음과 같은 EXPRESS라는 구조화된 블록 언어(Block structured language - 언어가 묘사하는 정보는 시작과 끝의 블록으로 구조화 된다)로 기술되어 있다. 예를 들어 벽체는 다음과 같이 묘사된다. ENTITY wall SUPERTYPE OF (ONE OF (core_wall)); geom : wall_geom; opening : OPTIONAL SET [0:?] OF o_object; END_ENTITY 설명을 하자면 wall이란 ENTITY(요소)를 정의하는 데, wall은 core_wall이란 ENTITY의 속성을 파생받고, 모양을 정의하는 geom 은 wall_geom이란 형식으로 기술된다. 아울러 벽체에는 여러개의 개구부(opening)가 있을 수 있다. BIM은 정보 모델링과 밀접한 관련이 있다. 정보 모델링은 언어를 통해 쉽게 구조적으로 모델링될 수 있다. 여기서 구조를 모델링한다는 것은 구조를 구성하는 요소와 관계를 묘사한다는 말이다. ISO-STEP 기구에서 개발된 EXPRESS언어(1986 년 Douglas Schenck가 개발, 1994 년 ISO에서 표준화)는 실세계 객체, 속성, 아이디어등을 정보 모델로 맵핑하는 언어 문법을 제공한다. 이 모델링 언어는 제품 자료 교환 모델인 STEP등에 활용되었다. EXPRESS는 특수화, 통합, 모듈화와 같은 객체지향적인 특성을 제공한다. 아래는 EXPRESS 언어로 기술된 x, y, z 실수(REAL)값으로 구성된 point 좌표점의 예이다. ENTITY point; x, y, z : REAL; END_ENTITY 만약 중심좌표 Center 와 반경 R을 가지고 있는 원(Circle)을 EXPRESS로 정보 모델링하면 다음과 같다. ENTITY circle; Center : point;
  • 29.
    BIM 표준과 구현© 강태욱 Page 29 of 149 R : REAL; END_ENTITY EXPRESS는 ENTITY 구조체를 이용해 원하는 객체의 정보 구조를 정의할 수 있다. ENTITY 정보간 관계를 정의하기 위해 circle예와 같이 집합관계(1:1, 1:n, n:n)를 사용할 수 있다. 다음은 point 의 리스트(LIST) 구성된 polyline(연결선)을 EXPRESS언어로 정의한 예이다. 여기서 정의된 polyine은 최소 2 개 이상의 포인트가 필요하다. ENTITY polyline points : LIST[2 : ?] of point; END_ENTITY 객체지향적 특성인 개념일반화를 통한 상속 관계는 다음과 같이 표현된다. 예를 들어 위 폴리라인 ENTITY를 상위개념으로 재활용하고, 파생된 개념으로 REAL 데이터 형의 높이값 Elevation과 polyline에서 파생된 contour_line(등고선)을 정보 모델링 하면 다음과 같다. ENTITY contour_line SUBTYPE OF (polyline); Elevation : REAL; END_ENTITY 앞에서 언급한 객체를 모델링하면 다음과 같다. point circle Center REAL x y z R polyline points[2:?] contour_line (ONEOF) Elevation 그림 1-14 객체 모델링(EXPRESS-G, BIM의 원리, 2011)
  • 30.
    BIM 표준과 구현© 강태욱 Page 30 of 149 이렇게 객체지향적인 방식으로 모델의 3 차원 형상을 표현하고, 아울러 다양한 관점의 속성정보를 부가해 표현할 수 있다. 형상정보는 기하정보와 위상정보로 표현될 수 있고, 모델의 지식정보는 비지니스 프로세스에 생성되는 객체별로 정보를 담아둘 수 있다. 그러므로 다음에는 BIM을 구성하는 3 차원 형상 객체 모델과 정보 표현 포맷인 IFC구조에 대한 이야기를 해보도록 한다. Building(건물)을 구성하는 모든 것은 Object(객체)들을 포함(Aggregation)하고 Object들 간에는 연관관계(Association)이 있다. Object의 상위객념은 Root이며 Root는 객체의 고유한 ID를 가질수 있다.(*주: 이 그림에선 표현하지 않았습니다.) Object는 속성들을 가지고 있다. 그리고 Object에서 개념적으로 파생을 받은 Product는 Geometry(기하학적 모양)들을 가지고 있다. 또한 Mateiral(재료)들도 포함한다. Product를 파생받은 Element(요소)는 다시 BuildingElement(건물요소), StructuralElement(구조요소), MepElement(MEP 요소)로 특수하게 나뉘어 질 수 있다. 건물요소는 벽, 바닥, 천장, 지붕등의 요소로 또 다시 특수하게 나뉘어 진다. 실제로는 이런 클래스간 관계가 매우 복잡하다. 아래는 IFC를 일부 역공학한 UML 클래스 다이어그램이다.
  • 31.
    BIM 표준과 구현© 강태욱 Page 31 of 149 그림 1-15 IFC 클래스 다이어그램과 일부 확대 모습(UML, BIM상호운용성과 플랫폼, 2013) EXPRESS언어는 객체를 구성하는 속성들도 모두 관계로 표현을 한다. 즉, 속성도 독립적인 객체로 표현한다. 그래서 Root, Object만 표현하였음에도 관계를 표현하는 선들이 많다. 또한, IFC에서는 Object를 확장하고 재활용할 수 있도록 PropertyDefinition이 별개로 Object에서 떨어져 나와 표현되어 있다. 1.3.4 형상 구조 IFC 형상 구조를 이해하기 위해서는 3 차원 솔리드 모델링 개념을 이해할 필요가 있다. 3 차원 모델링(Solid Modeling)은 물체(Solid)를 구성하는 각 요소들과 관계를 서로 모순되지 않게 직선, 곡선, 곡면과 같은 기하학적 요소를 위상학적(Topology)으로 상호간 정보를 연결하고 표현하는 작업이다. 솔리드 모델은 Vertex와 Edge만으로 표현된 Wireframe 모델에 비해 공간적 구분을 가능하게 해준다. Root +GlobalId +Name +Description IfcProduct IfcElement +FillsVoids +ConnectedTo +HasCoverings +HasProjections +ReferencedInStructures +HasPorts +HasOpenings +IsConnectionRealization +ProvidesBoundaries +ConnectedFrom +ContainedInStructure IfcObject +ObjectType: IfcLabel IfcProductRepresentation IfcObjectPlacement IfcObjectDefinition IfcRelAssigns IfcRelDecomposes +RelatedObjects: IfcObjectDefinition[n] +RelatingObject: IfcObjectDefinition IfcRelAssociates decomposes +hasAssignments +hasAssociations +isDecomposedBy IfcOwnerHistory IfcPersonAndOrganization IfcApplication +version: string IfcPerson IfcOrganization +name: string +description: string IfcActorRole +roles * +isRelatedBy +relates IfcBuilding IfcRelContainedInSpatialStructure IfcBuildingStorey IfcSpatialStructureElement IfcSpatialElement IfcProject IfcRelAggregates IfcSite +RefLatitude +RefLongitude +RefElevation +SiteAddress ContainsElements +RelatingStructure * IfcRelConnects +RelatedElements +RelatedObjects * * +RelatedObjects * IfcRepresentationContext * IfcGeometricRepresentationContext +CoordinateSpaceDimension +Precision +WorldCoordinateSystem IfcGeometricRepresentationSubContext +ParentContext +TargetScale +TargetView Objects are independent pieces of information that might contain or reference other pieces of information. There are three essential kinds of relationships in which object definitions (by their instantiable subtypes) can be involved: < Attribute definitions > HasAssignments : Reference to the relationship objects, that assign (by an association relationship) other subtypes of IfcObject to this object instance. Examples are the association to products, processes, controls, resources or groups. IsDecomposedBy : Reference to the decomposition relationship, that allows this object to be the composition of other objects. An object can be decomposed by several other objects. Decomposes : References to the decomposition relationship, that allows this object to be a part of the decomposition. An object can only be part of a single decomposition (to allow hierarchical strutures only). HasAssociations : Reference to the relationship objects, that associates external references or other resource definitions to the object.. Examples are the association to library, documentation or classification. IfcBuildingElement IfcElectricalElement IfcFurnishingElement IfcDistributionElement IfcTransportElement IfcEquipmentElement IfcFeatureElement IfcElementAssembly IfcVirtualElement IfcActor IfcControl IfcGroup IfcProcess IfcPropertyDefinition IfcOwnerHistory IfcPropertySetDefinition IfcPropertySet IfcProperty +Name +Description +PartOfPset * IfcResource IfcTypeObject IfcPropertySetDefinition IfcTypeProduct IfcProductDefinitionShape IfcMaterialDefinitionRepresentation IfcMaterial +Name +Description +Category +RepresentedMaterial IfcMaterialProperties IfcMaterialSelect IfcGeneralMaterialProperties +MolecularWeight +Porosity +MassDensity IfcMaterialLayer IfcMaterialLayerSet * IfcRelAssociatesMaterial IfcRelAssociatesConstraint IfcMaterialSelection IfcMaterialSelection
  • 32.
    BIM 표준과 구현© 강태욱 Page 32 of 149 예를 들어 피라미드와 같은 5 면체 모델은 사실 선과 면으로 연결된 것이다. 이 연결성이란 정보를 같이 처리하지 않으면, 3 차원 객체를 제대로 표현할 수 없다. 연결성이라는 것은 즉, 각 기하학적 객체를 이어 붙여주는 접착제같은 역할을 하는 것이고 이것이 위상학적 정보이다. 점, 선, 면의 집합으로 된 간단한 와이어프레임을 표현하는 자료 구조를 통한 모델링은 렌더링, 행렬변환을 통한 모형변환등에는 문제가 없으나 형상이 복잡해 질 경우, 모델링시 각 요소 주변에 있는 부분을 모두 전체 탐색해 나가야 함으로 처리 성능이 떨어질 수 밖에 없다. 그러므로 모델을 부분 수정을 할 경우 검색을 하지 않고 위상정보에 의해 특정 요소 주위에 있는 요소를 빠르게 얻어낼 수 있는 정보가 필요하다. 이런 이유로 모델링에 사용하고 있는 위상구조는 일반적으로 경계면을 기준으로 안과 밖을 판단할 수 있는 B-rep(Boundary representation)구조를 사용한다. 이 구조는 다음과 같이 표현된다. 아래 그림에서 왼쪽 부분은 위상정보, 오른쪽 부분은 곡선, 곡면과 같은 기하학정보를 표현한다. Solid +MakeShell() +RemoveShell() Face Surface +Intersect() Edge Curve +Intersect() Point -x -y -z Vertex Shell +MEL() +KEL() Loop 0..* 0..* 1..* 1..* Line Arc Spline B-Spline NURBS PlaneSurface B-SplineSurface NURBS-Surface Euler formula example MEL : Make an Edge and a Loop KEL : Kill an Edge and a Loop MVE : Make a Vertex and an Edge Axis +Position +DirectionX +DirectionY
  • 33.
    BIM 표준과 구현© 강태욱 Page 33 of 149 그림 1-16 B-rep 모델 구조 (BIM의 원리, 2011) 이 구조를 이해하기 위해 간단한 큐빅 솔리드 모델을 아래 그림과 같이 가정해 보면. 왼쪽 그림에 있는 구조는 오른쪽 물체의 각 위상요소와 일치한다. 그리고 하나의 위상요소를 알고 있으면 주변의 다른 요소도 쉽게 탐색해 정보를 접근할 수 있다. 그림 1-17 B-rep 모델 1.3.5 파일 포맷 구조 IFC 파일 포맷은 기계, 제조분야에서 주로 사용되는 중립 포맷인 STEP 기반 포맷과 XML기반 포맷으로 나뉜다. STEP 포맷에서 객체 정의는 다음과 같은 형식을 가진다. 오른쪽에 정의된 객체값이 왼쪽 #no에 할당되는 형식이다. #no = Ifc…(Object parameter …); 다음은 실제 IFC 파일의 구조를 나타낸다. ISO-10303-21; HEADER; FILE_DESCRIPTION (('ViewDefinition [CoordinationView, ISO 스키마 모델 정의. FILE_DESCRIPTION 헤더 섹션 정의. Solid Face Edge Vertex Shell Loop 0..* 1..* 1..* 0..*
  • 34.
    BIM 표준과 구현© 강태욱 Page 34 of 149 QuantityTakeOffAddOnView]'), '2;1'); FILE_NAME ('example.ifc', '2013-08-15T22:03:15', ('Architect'), ('Building Designer Office'), 'IFC Engine DLL version 1.02 beta', 'IFC Engine DLL version 1.02 beta', 'The authorising person'); FILE_SCHEMA (('IFC2X3')); ENDSEC; DATA; #1 = IFCPROJECT('2NJiPr4gzCWOVa3Z_YKqfV', #2, 'Default Project', 'Description of Default Project', $, $, $, (#20), #7); #2 = IFCOWNERHISTORY(#3, #6, $, .ADDED., $, $, $, 1376571795); #3 = IFCPERSONANDORGANIZATION(#4, #5, $); #4 = IFCPERSON('ID001', 'Bonsma', 'Peter', $, $, $, $, $); #5 = IFCORGANIZATION($, 'TNO', 'TNO Building Innovation', $, $); #6 = IFCAPPLICATION(#5, '0.10', 'Test Application', 'TA 1001'); #7 = IFCUNITASSIGNMENT((#8, #9, #10, #11, #15, #16, #17, #18, #19)); #8 = IFCSIUNIT(*, .LENGTHUNIT., .MILLI., .METRE.); ... #20 = IFCGEOMETRICREPRESENTATIONCONTEXT($, 'Model', 3, 1.000E-5, #21, $); #21 = IFCAXIS2PLACEMENT3D(#22, $, $); #22 = IFCCARTESIANPOINT((0., 0., 0.)); #23 = IFCSITE('2mOMAS4BPAWeItH4EihObT', #2, 'Default Site', 'Description of Default Site', $, #24, $, $, .ELEMENT., (24, 28, 0), (54, 25, 0), $, $, $); #24 = IFCLOCALPLACEMENT($, #25); #25 = IFCAXIS2PLACEMENT3D(#26, #27, #28); #26 = IFCCARTESIANPOINT((0., 0., 0.)); #27 = IFCDIRECTION((0., 0., 1.)); #28 = IFCDIRECTION((1., 0., 0.)); #29 = IFCBUILDING('0Dvk3w8Wz0Svt0XBInUr2Q', #2, 'Default Building', 'Description of Default Building', $, #30, $, $, .ELEMENT., $, $, $); #30 = IFCLOCALPLACEMENT(#24, #31); 파일명, IFC버전 명, 주석 등의 정의됨. 헤더 섹션 정의 끝. BIM 모델 데이터 정의. 프로젝트 정의. 프로젝트 관련 속성 정보 조직 정의. 프로젝트 책임자 정의. 조직 정의. 사용 단위 정의. SI단위로 길이는 mm임. 프로젝트 형상 표현 정보 정의. 프로젝트 기준 좌표점 정의. 부지 객체 정의. 부지 로컬 좌표계 정의. 빌딩 객체 정의.
  • 35.
    BIM 표준과 구현© 강태욱 Page 35 of 149 #31 = IFCAXIS2PLACEMENT3D(#32, #33, #34); ... #35 = IFCBUILDINGSTOREY('2_MGIekZfDFA2lt5RKzuMC', #2, 'Default Building Storey', 'Description of Default Building Storey', $, #36, $, $, .ELEMENT., 0.); ... #41 = IFCRELAGGREGATES('1BIpSsAJ56uO$wBfvCC6Ce', #2, 'BuildingContainer', 'BuildingContainer for BuildigStories', #29, (#35)); #42 = IFCRELAGGREGATES('3ltbIbu81FafFPivO8vWKE', #2, 'SiteContainer', 'SiteContainer For Buildings', #23, (#29)); #43 = IFCRELAGGREGATES('2GWUjMzrH8Kx5Z9zRUclb9', #2, 'ProjectContainer', 'ProjectContainer for Sites', #1, (#23)); #44 = IFCRELCONTAINEDINSPATIALSTRUCTURE('2DTaFLTrf0f9HVtWbNOL4V', #2, 'Default Building', 'Contents of Building Storey', (#45), #35); #45 = IFCWALL('3GaQu8Oor3_gTuGuaQKuf7', #2, 'Wall xyz', 'Description of Wall', $, #46, #51, $); #46 = IFCLOCALPLACEMENT(#36, #47); ... #51 = IFCPRODUCTDEFINITIONSHAPE($, $, (#72, #101)); #52 = IFCPROPERTYSET('0Hh0as7k1BbxUn1_CeYGbQ', #2, 'Pset_WallCommon', $, (#53, #54, #55, #56, #57, #58, #59, #60, #61, #62)); #55 = IFCPROPERTYSINGLEVALUE('FireRating', 'FireRating', IFCTEXT(''), $); ... #64 = IFCELEMENTQUANTITY('1CBGgoAfL7jx2sMT600qN6', #2, 'BaseQuantities', $, $, (#65, #66, #67, #68, #69, #70)); #65 = IFCQUANTITYLENGTH('Lenght', 'Lenght', $, 5000.); ... #71 = IFCRELDEFINESBYPROPERTIES('3_fU2pkt9E5AImKFd9yz3r', #2, $, $, (#45), #64); #72 = IFCSHAPEREPRESENTATION(#20, 'Body', 'Brep', (#100)); #73 = IFCCLOSEDSHELL((#80, #87, #90, #93, #96, #99)); #74 = IFCPOLYLOOP((#75, #76, #77, #78)); 빌딩 로컬 좌표계 정의. 건물 층 공간 객체 정의. 빌딩이 포함하는 건물 층 공간 집합 포함관계 정의. 단지가 포함하는 빌딩 객체 집합 포함관계 정의. 프로젝트가 포함하는 부지 객체 집합 포함관계 정의. 빌딩 층 객체가 포함하는 건물 부재 객체들 관리용 컨테이너 관계 정의. 컨테이너 관계 객체에 포함되는 벽체 정의. 벽체 로컬좌표계 정의. 벽체 공통 속성. Pset_WallCommon 정의. 벽체 속성 정의. 벽체 수량객체 정의. 길이 수량 정의. 정의된 속성들과 벽체 객체 연결 관계 정의. 벽체 형상 정의. 벽체 폐합 공간 정의.
  • 36.
    BIM 표준과 구현© 강태욱 Page 36 of 149 #75 = IFCCARTESIANPOINT((0., 0., 0.)); #76 = IFCCARTESIANPOINT((0., 300., 0.)); #77 = IFCCARTESIANPOINT((5000., 300., 0.)); #78 = IFCCARTESIANPOINT((5000., 0., 0.)); #79 = IFCFACEOUTERBOUND(#74, .T.); #80 = IFCFACE((#79)); ... ENDSEC; END-ISO-10303-21; 연결 루프를 이용한 벽체 면 정의. 벽체 면을 구성하는 정점 정의. 정점으로 구성된 면 정의. BIM 모델 정의 끝. ISO 스키마 모델 정의 끝. 1.4 결론 본 장에서는 IFC의 전반적인 개념과 최근 릴리즈한 IFC4 의 개선점 및 특징, 그리고 IFC의 구조적 부분에 대해 설명하였다. 또한, 실제 IFC의 예를 분석하여 설명된 IFC스키마가 물리적으로 어떻게 저장되는 지 확인하였다. IFC는 향후 토목 엔지니어링 등 건설 전반에 걸친 건설정보 상호운용을 위해 꾸준히 개선되고 있으며 실무적인 문제점을 검토해 처리 성능이나 호환성 부분의 향상도 이루어지고 있음을 알 수 있다.
  • 37.
    BIM 표준과 구현© 강태욱 Page 37 of 149 2. Open BIM 기반 소프트웨어 구현 2.1 표준모델 파싱 및 정보추출 2.1.1 개요 이 장에서는 IFC 표준 포맷을 기반으로 정보를 처리하고 도구나 시스템을 구현하는 기본적인 방법을 설명하도록 한다. IFC파일에서 직접적으로 정보를 추출하기 위한 방법은 크게 다음과 같은 방법이 있다. 그림 2-1 IFC 파일 정보 추출 방법 표 2-1 IFC 파일 정보 추출 방법 설명 No 정보 추출 방법 설명 도구 예 1 IFC Parser IFC Parser를 이용해 직접적으로 파일을 열고 IFC 객체 구조를 탐색해 가면서 필요한 정보를 추출하는 방법이다. 반대로 IFC 객체 구조를 메모리 상에 만들어 놓고 IFC파일로 저장할 수도 있다. 보통 BIM 도구나 시스템을 직접적으로 개발할 때 사용한다. IfcOpenShell, IFC Gear, IFC Engine DLL, IFC SDK 등 2 CASE Tool Computer-aided software engineering의 STEP tools, JSDAI, IFC IFC Parser CASE Tool BIM Modeler BIM Viewer / Checker BIM Server
  • 38.
    BIM 표준과 구현© 강태욱 Page 38 of 149 약자로 데이터 모델링을 지원하는 소프트웨어 공학 도구를 이용해 IFC 의 객체 구조를 저장하거나 역으로 해석해 구조나 정보를 추출하는 방법이다. 보통 데이터 모델로부터 Express와 같은 코드를 생성하는 방법을 Foward engineering, 반대로 코드에서 데이터 모델을 생성하는 방법을 Reverse engineering이라 하며 CASE Tool에 따라 지원 기능의 차이가 있다. EDM, Visio for Express-G 등 3 BIM Modeler 일반적으로 BIM 모델러는 IFC 입출력을 지원한다. 이를 통해 IFC에 포함된 객체의 형상이나 속성을 확인하거나 추출할 수 있다. Revit과 같은 모델러는 속성에 대한 일람표 출력 등을 지원하므로 엑셀로 그 값들을 확인하기 쉽다. Archicad, Revit, AllPlan, DProfiler, dRofus 등 4 BIM Viewer / Checker BIM 뷰어나 법규 등을 체크하는 체커에서도 IFC 입력을 지원하며 SMC의 경우 좀 더 강력한 속성정보 추출 등의 기능이 지원된다. SMC, ONUMA system, Tekla BIMsight, Autodesk BIM 360, xBIM 등 5 BIM Server IFC를 서버에 등록하여 다양한 방법으로 정보추출을 할 수 있는 데 보통 Web- Service를 통한 객체나 속성값들을 추출하거나 SQL문을 통해 필요한 정보를 Select 하여 값을 인출하는 방식을 취하고 있다. EDM server, bimServer 등 참고로 빌딩스마트에서는 표준을 기반으로 한 건설정보 재활용 생태계 마련을 위해 다음 링크와 같이 다양한 도구를 개발하거나 소개하고 있다.
  • 39.
    BIM 표준과 구현© 강태욱 Page 39 of 149 그림 2-2 IFC Implementation (https://www.buildingsmart.org/about/openbim/ ) 2.1.2 개발환경 IFC와 같은 정보표준을 기반으로 한 유스케이스는 프로젝트 특성이나 활용 목적에 따라 다양할 수 있고 모든 상용 시스템이 이러한 유스케이스를 지원하는 것은 불가능하다. 이런 점에서 본인이 필요한 도구나 시스템을 연구하거나 개발할 필요가 생긴다. 이를 위해서는 표준의 구조 뿐 아니라 이를 이용해 도구나 시스템을 개발할 수 있는 개발도구와 개발환경을 이해할 필요가 있다. 일반적으로 프로그램을 개발하기 위한 도구들을 모아둔 지원 환경을 통합 개발 환경(Integration Development Environment – IDE)이라 한다. IDE는 프로그램 개발 프로세스에 따라 필요한 도구를 통합시켜 편리한 개발을 지원해 주는 프로그램이다. 보통 도구를 개발하는 방법은 도구가 동작할 수 있도록 데이터구조와 처리 로직을 정의하는 소스(Source)를 작성하고 소스파일이 생성되면, 아래 그림과 같은 순서로 소스를 실행하기 위한 기계코드(OBJect code)를 생성한 후에 실행된다. 소스는 컴파일러(Compiler)란 도구로 컴파일되어, 컴퓨터가 쉽게 빠르게 실행할 수 있는 중간코드로 변환된다. 중간코드는 파일 입출력과 같은 외부 시스템 라이브러리를 사용할 때 해당 중간코드를 연결(링크-link)시켜야 한다. 링크한 후 최종적으로 실행가능한 실행 코드 파일이 생성된다. 과거에는 이런 과정을 콘솔창에서 하나씩 각 역활을 하는 개발도구를 이용해 수행하였으나 최근 소프트웨어 개발 방식은 이를 모두 하나의 개발 환경에 올려두고 자동화시켜 각각 단계를 실행할 필요가 없도록 편리한 환경을 지원한다.
  • 40.
    BIM 표준과 구현© 강태욱 Page 40 of 149 그러므로 소스 코드를 코딩한 후에 실행할 경우 이런 과정이 외부로 드러나 있지 않고, 실행 버튼을 눌렀을 때 내부적으로 이런 전과정이 동작된다. 생성된 실행 코드 파일은 실행되기 위해 메모리에 로드되어, 코드가 실행된다. 아래와 같이 실행코드(혹은 컴포넌트 파일)를 생성하는 과정을 빌드(Build)라 한다. 이런 관점에서 Visual Basic이나 Ruby같은 언어는 인터프린터(Interpreter) 언어라고 하여, 실행(Run)할 때 빌드 과정을 내부적으로 자동으로 처리하지만, C#이나 C++과 같은 컴파일(Compile) 언어는 명시적으로 빌드 과정을 수행한 후에 실행할 수 있다. 이런 이유로 인터프린터 언어는 문법적인 오류가 있어도, 그 전까지는 실행이 되지만 컴파일 언어는 문법적 오류가 있는 스크립트는 빌드될 수 없으므로 실행될 수 없다. 그림 2-3 스크립팅(프로그래밍) 및 스크립트 실행 단계 소스 파일이 길어지면, 소스를 읽고 일부를 수정하는 일이 매우 불편해지므로, 소스 파일을 여러 개로 분할하여 관리하기도 한다. 이런 이유로 프로그램 개발 프로젝트 규모에 따라 한 개에서 수백 개의 소스 파일을 추가될 수 있다. 일반적으로 IDE는 프로젝트 탐색창을 두어 이를 직관적으로 확인하고 관리할 수 있도록 하고 있다. 스크립팅 스크립트 소스 파일 컴파일 (Compile) 링크 (link) 중간 코드 시스템 라이브러리 중간 코드 실행 코드 파일 실행코드 메모리 로드 (Load) 코드 실행 (execution)
  • 41.
    BIM 표준과 구현© 강태욱 Page 41 of 149 이를 위해서는 컴퓨터 언어를 사용해 프로그래밍하고 컴파일할 수 있는 도구가 필요한데 이 장에서 활용할 개발 도구는 Microsoft 사에서 제공하는 개발 도구 중 Visual Studio의 2012 와 2010 버전을 사용하도록 하겠다. 만약 정품 개발 도구가 없다면 Microsoft사에서 Trial 버전을 제공하므로 이를 다운로드 받아 설치한다. 참고로 Trial 버전은 몇몇 기능에 제한이 있어 MFC(Microsoft Foundation Class)등 과거 버전과 호환성, 데이터 모델링, 디버깅, 협업 작업 등의 한계 점이 있다. 가능한 정품 개발도구를 사용하는 것이 좋다. 2.1.3 개발환경 설치 이 장에서는 정품 개발도구가 설치되지 않은 상황일 경우 예제를 실행해 보기 위해 Visual Studio Trial 버전을 설치하는 방법을 기술한다. 1. Visual Studio 2012 설치 .NET기반 자동화 프로그램을 개발하기 위해서는 우선 Visual Studio 2012 Express(Trial 버전)을 https://visualstudio.microsoft.com/ko/vs/older-downloads/ 사이트에서 다운로드 받아야 한다. 다운로드시 여러 가지 언어 버전이 있는 데 예제를 실행해 보려면 C++, C#, Basic언어를 지원하는 Express 버전을 설치해야 한다. 만약 정식 Visual Studio 2012 이 있다면 굳이 다운받아 설치할 필요는 없다. 가능한 Express버전 보다는 Professional 버전 등을 권장한다. 유료이지만 코드를 디버깅할 수 있거나 데이터베이스와 연동할 수 있는 다양한 컴포넌트가 포함되어 있다. 아래와 같이 해당 사이트를 방문해 설치언어를 ‘한국어’로 변경하고 ‘INSTALL NOW’를 선택해 설치한다.
  • 42.
    BIM 표준과 구현© 강태욱 Page 42 of 149 그림 2-4 Visual C# 2010 express 다운로드 사이트(https://visualstudio.microsoft.com/ko/vs/older- downloads/ ) 설치 한 후에 아래와 같이 실행해 본다. 정상적으로 실행되면 프로그램을 개발할 준비가 된 것 이다.
  • 43.
    BIM 표준과 구현© 강태욱 Page 43 of 149 그림 2-5 Microsoft Visual C# 2012 실행화면 2. Visual Studio 2010 설치 Visual Studio 2010 은 다음과 같이 다운로드 페이지에서 다운로드 받을 수 있다. ISO버전은 Daemon Tools와 같은 ISO CD 이미지 파일을 인식할 수 있는 소프트웨어를 설치해서 다운로드 받은 ISO파일을 CD 이미지로 인식시킨 후에 설치하도록 한다. 그림 2-6 Visual Studio 2010 다운로드 페이지 (https://visualstudio.microsoft.com/ko/vs/older-downloads/ ) 설치방법은 앞의 Visual Studio 2012 와 거의 동일하다. 모두 설치하였다면 Visual Studio 2010 서비스팩 1 을 다운로드해 설치해야 한다. 그렇지 않을 경우 C++ 프로젝트를 컴파일할 때 다음과 같은 링크 에러 메시지를 만날 수 있다 (*주: 개발도구도 소프트웨어이기 때문에 버그가 존재한다. 개발사에서는 버그를 패치하는 “서비스 팩”을 무료로 배포하므로 문법적 에러가 전혀 없는 데 컴파일이나 링크가 안되는 경우 Visual Studio 해당 버전의 서비스팩을 개발사의 다운로드 센터 검색 페이지나 Google 검색해 반듯이 설치하도록 한다).
  • 44.
    BIM 표준과 구현© 강태욱 Page 44 of 149 LNK1123: failure during conversion to COFF: file invalid or corrupt Visual Studio 2010 서비스팩은 다음 링크에서 다운로드 받을 수 있다. 그림 2-7 Visual Studio 서비스 팩 다운로드 (https://www.microsoft.com/en- us/download/details.aspx?id=34677 ) 2.1.4 IFC 구조생성과 저장 - Hello Wall 2.1.4.1 개요 이 장에서는 빌딩스마트에서 제공하는 HelloWall이란 Visual C++ 기반 예제 프로젝트를 이용하여 Wall이 포함된 IFC객체구조를 직접 컴퓨터 언어를 이용해 생성하는 방법을 다룬다. 이 프로젝트는 IfcEngine.dll 이란 라이브러리를 사용하고 있으며 비상업적인 목적으로 사용할 수 있도록 제공하고 있다. 라이브러리는 내부 소스가 감춰져 있고 API만 노출되어 있다. API는 일종의 함수 집합이고 함수는 함수를 실행할 때 필요한 함수 호출명, 함수 파라메터, 함수 리턴값과 같은 함수 명세(Specification) 구성된다. 그러므로 API를 사용하기 위해서는 반듯이 함수 명세를 포함하는 헤더파일을 API 호출 코드 전에 포함(Include)시켜 컴파일러에 API를 어떤 방식으로 호출하고 파라메터를 전달해 줘야 하는 지 알려줘야 한다. 예제는 대화상자를 통해 Wall 뿐 아니라 Openning, Window를 생성할 수 있는 다양한 옵션을 이용한 IFC파일을 생성하도록 구현되어 있다. 이와 관련해 대화상자를 구현하기 위한 MFC(Microsoft Foundation Class) 사용자 인터페이스 처리 등 부가적인 소스가 많으므로 IFC를 처리하는 핵심적인 부분만 살펴볼 것이다. 2.1.4.2 예제 프로젝트 설치 1. 다음 링크에서 HelloWall MiniExample 을 다운로드한다.
  • 45.
    BIM 표준과 구현© 강태욱 Page 45 of 149 그림 2-8 HelloWall MiniExample 다운로드 페이지(https://hujb2000.gitbooks.io/ifcspecification/content/en/implementation/first_steps_and_tools.html ) 2. Microsoft Visual C++ 를 실행해 [파일][열기][프로젝트/솔류션] 메뉴를 실행하고 다음과 같이 “miniExample.dsw”파일을 선택해 연다. dsw 파일은 Visual Studio 구버전 프로젝트 파일이라 새로운 버전으로 업그레이드해야 한다는 메시지 창이 뜰 것이다. [예]를 선택해 변환하도록 한다.
  • 46.
    BIM 표준과 구현© 강태욱 Page 46 of 149 3. [빌드]메뉴의 [솔류션 빌드] 메뉴를 선택한다. 다음과 같이 설정은 [Debug] 모드로 빌드하도록 한다(*주: 디버그-Debug 모드는 실행파일인 exe파일을 생성할 때 실행파일 안에 실행코드마다 소스코드를 추적할 수 있는 특별한 정보를 덧붙인다. 이런 이유로 실행시 어느 소스코드의 문장을 실행하는 지 사용자가 확인할 수 있지만 실행파일 크기는 릴리즈-Release 모드에서 생성된 실행파일보다 훨씬 크게 생성되고 실행속도도 느리다). 2.1.4.3 프로젝트 실행 1. 이제 디버그 모드에서 실행할 실행파일을 설정한다. 변환 시 구 버전 프로젝트의 경우 가끔 실행파일 경로가 잘못되어 디버깅을 할 수 없는 경우가 있다. 다음과 같이 [솔류션 탐색기]의 “miniExample” 노드를 우클릭해 [속성]메뉴를 선택한다. “miniExample” 속성 페이지에서 [구성속성]의 [디버깅]을 선택해 디버깅 속성값 중 [명령] 실행 파일명 설정 값을 <찾아보기> 메뉴를 이용해 다음과 같이 “Debug”폴더 아래에 “HelloWall.exe”파일로 설정하고 [확인]한다.
  • 47.
    BIM 표준과 구현© 강태욱 Page 47 of 149 2. 빌드된 프로그램을 실행한다. 다음과 같이 실행 버튼을 클릭하거나 F5 단축키를 눌러 실행한다. 그럼 다음과 같이 실행된 결과를 확인할 수 있다. 이 예제는 [IFC File Content] 그룹박스 내에 체크된 정보를 이용해 IFC파일을 생성하는 코드가 구현되어 있다. 생성할 수 있는 객체는 Wall, Opening, Window이며 Wall은 두께, 높이, 폭과 더불어 Wall의 형상을 돌출, B-Rep, 경계박스 형태로 생성할 수 있다. Opening과 Window의 경우도 Wall과 같은 형상 타입을 선택해 출력할 수 있다. [File Name]을 “example.ifc”로 입력하고 출력하고자 하는 폴더를 입력한 후에 [Create IFC File (SPFF)]버튼을 클릭해보자.
  • 48.
    BIM 표준과 구현© 강태욱 Page 48 of 149 내부적으로 IFCEngine 라이브러리를 이용해 체크된 객체의 정보를 IFC로 출력해 파일로 저장한다. 실제 본인이 설정한 경로에 폴더를 보면 다음과 같이 IFC파일을 확인할 수 있다. 다음과 같이 IFC파일을 편집기로 열어보면 IfcWall객체와 관련 파라메터가 생성된 것을 확인할 수 있다.
  • 49.
    BIM 표준과 구현© 강태욱 Page 49 of 149 2.1.4.4 핵심 구조 이 프로그램은 IFC모델의 모든 요소 IFCEngine 라이브러리를 이용해 모델에 Wall이나 Window객체를 추가하여 IFC파일을 생성한다 (*주: STEP Tools를 사용하면 이런 IFC 파서를 포함한 라이브러리를 컴퓨터 언어별로 쉽게 생성할 수 있다. 대부분의 IFC관련 라이브러리는 이런 방식으로 개발되고 있다). IFCEngine 라이브러리는 sdai 머리단어로 시작된다. 예를 들어 IFC 모델을 생성하는 함수 원형은 다음과 같다. int __declspec(dllexport) __stdcall sdaiCreateModelBN( int repository, char * fileName, char * schemaName ); 이외에 IFC파일을 열거나 (sdaiOpenModelBN), IFC객체 및 속성을 정의하고 관계를 연결하는 등에 필요한 API를 지원하고 있다. 지원하는 API는 IFCEngine.h 파일에 정의되어 있다. API를 이용해 객체가 생성될 때 STEP 포맷의 각 행 참조번호와 유사한 객체 참조번호가 리턴된다. 이 값을 이용해 서로 관계를 설정할 수 있다. 프로그램은 구조적 방식으로 개발되어 있어 각 소스 파일이 하나의 재활용 모듈을 이루고 있다. 다음은 이와 관련된 모듈 설명이다. 소스 모듈 명 기능 baseIfc createEmptyIfcFile 함수를 이용해 내용이 빈 IFC파일을 생성한다. saveIfcFile 함수를 이용해 현재 IFCEngine이 관리하는 IFC모델을 IFC파일로 저장한다. IfcProject 객체 생성에 필요한 조작, 단위 등 객체를 생성한다. 관계 객체를 생성하고 관계를 연결하는 함수를 제공한다. baseIfcObject createIfcWall 등 함수를 이용해 벽체, 윈도우 등 건물 부재 객체를 생성한다. boundingBoxIfc IfcShapeRepresentation 객체 생성시 필요한 경계 박스 정보를 생성한다. BRepIfc IfcShapeRepresentation 객체 생성시 B-Rep로 형상 구조를 구성하는 함수를 지원한다.
  • 50.
    BIM 표준과 구현© 강태욱 Page 50 of 149 extrudedPolygonIfc IfcShapeRepresentation 객체의 IfcExtrudedAreaSolid 객체를 이용해 형상 구조를 구성하는 함수를 지원한다. propertiesIfc IfcPropertySet 객체를 생성하고 IfcProperty 객체에 속성명과 속성값을 구성하는 함수를 지원한다. 이외에 수량(Quantity), 벽체 및 윈도우의 기본 속성들을 설정하는 API를 지원한다. 이 프로그램에 포함된 각 소스 모듈들은 IFC 모델에 객체를 편리하게 생성하기 위한 일종의 유틸리티 함수 역활을 하고 있다. 예를 들어 다음과 같이 “propertiesIfc.cpp”파일에 buildPset_WallCommon함수는 “Pset_WallCommon” 벽체 기본 속성을 설정하는 코드를 구현하고 있다. 벽체나 윈도우 객체를 생성해 저장할 때 일반적인 순서는 다음과 같다. 첫번째, IFC 모델을 저장할 최상위 IfcProject객체를 생성하고 벽체 등 건축 부재를 저장하기 위해 IfcProject 객체의 하위 계층 구조를 생성한다. IfcProject는 IfcSite, IfcBuilding, IfcBuildingStorey 객체와 계층구조를 이루고 있다. IfcSite, IfcBuilding, IfcBuildingStorey, IfcSpace는 공간객체로 자체적인 지역좌표계를 가지고 있다. 이 부분은 앞 장에서 IFC구조에 관해 다루었으므로 참고한다. 두번째, IfcBuildingStorey에 벽체 등 건축 부재를 공통 속성들을 포함해 생성하고 그들간 관계를 생성해 연결한다. 세번째, IFC모델을 파일로 저장한다. 시퀀스 구조는 다음과 같다.
  • 51.
    BIM 표준과 구현© 강태욱 Page 51 of 149 Start Input IFC save option Create empty IFC file Create IFC Wall Create IFC Opening Save IFC Wall? Save Opening? Create IFC Window Save Window? [Yes] [Yes] [Yes] End [No] [No] [No] Save IFC File Create IFC Wall sdaiCreateInstanceBN(model, "IFCWALL") Create basic attributes of IfcWall Create IfcRelDefinesByProperties to link between IfcWall and IfcPropertySet Create B-Rep Shape for IfcWall shape representation Return 그림 2-9 HelloWall 처리 시퀀스 구조도 좀 더 깊은 이해를 위해 IFCEngine을 이용해 IFC구조를 만드는 핵심 코드를 확인해 본다. 다음은 빈 IFC모델을 구성하는 C++코드이다. ifcProjectInstance = IfcProject 객체를
  • 52.
    BIM 표준과 구현© 강태욱 Page 52 of 149 getProjectInstance(lengthUnitConversion); ifcSiteInstance = buildSiteInstance(&matrix, NULL, &ifcSiteInstancePlacement); ifcBuildingInstance = buildBuildingInstance(&matrix, ifcSiteInstancePlacement, &ifcBuildingInstancePlacement); ifcBuildingStoreyInstance = buildBuildingStoreyInstance(&matrix, ifcBuildingInstancePlacement, &ifcBuildingStoreyInstancePlacement); buildRelAggregatesInstance("BuildingContainer", "BuildingContainer for BuildigStories", ifcBuildingInstance, ifcBuildingStoreyInstance); buildRelAggregatesInstance("SiteContainer", "SiteContainer For Buildings", ifcSiteInstance, ifcBuildingInstance); buildRelAggregatesInstance("ProjectContainer", "ProjectContainer for Sites", ifcProjectInstance, ifcSiteInstance); sdaiCreateInstanceBN(model, "IFCPROJECT") 함수로 생성하고 기본 속성들을 설정한 후 참조값을 리턴받음. 지역좌표계 정의와 함께 IfcSite 객체를 생성하고 참조값을 리턴받음. 지역좌표계 정의와 함께 IfcBuilding 객체를 생성하고 참조값을 리턴받음. 지역좌표계 정의와 함께 IfcBuildStorey 객체를 생성하고 참조값 리턴받음. 각 객체의 참조값을 전달해 각 객체 간의 IfcRelAggregates 관계를 생성. IfcSite와 IfcBuilding 간 관계를 설정. IfcProject와 IfcSite 간 관계를 설정. 다른 IFC객체를 생성할 때도 유사한 방식을 사용할 수 있으며 객체 종류간 관계만 IFC구조에 맞게 설정하면 된다. 2.1.4.5 실습 이 실습에서는 벽체에 윈도우를 3 개 만들어 넣는 함수를 개발해 보도록 한다. 이를 통해 공간 객체와 건축 부재의 관계를 좀 더 깊게 이해해 본다. 이미 실습에 필요한 코드는 구현되어 있으나 직접 실습할 수 있도록 “/*”와 “*/”로 코드가 주석화되어 있어 컴파일되지는 않는 상태이다. 나머지 장들의 실습 내용도 같은 방식으로 코드가 처리되어 있으니 코딩하고 싶지 않다면 단순히 이 주석기호만 삭제하면 된다. 1. 함수를 생성하기 위해 솔류션 탐색기에서 [miniExample]의 [miniExample] 프로젝트에서 “miniExampleDlg.h”을 다음과 같이 연다.
  • 53.
    BIM 표준과 구현© 강태욱 Page 53 of 149 그리고 CMiniExampleDlg() 함수 바로 아래에 다음 함수를 정의한다. void CreateWindowsAndSave(); “miniExampleDlg.cpp” 소스를 더블클릭해 편집기에서 열고 void CMiniExampleDlg::OnOK() 함수 바로 위에 다음과 같이 CreateWindowsAndSave 함수를 코딩한다. 나머지 “... 중략 ...”으로 표현되어 있는 부분은 기존 주석화된 동일한 함수의 해당 코드를 복사해 붙여 넣는다. 그리고 OnOK()함수안에서 CreateWindowsAndSave() 함수를 호출해 준다. void CMiniExampleDlg::CreateWindowsAndSave() { // Create IFC objects and relationships char ifcSchemaName[512]; m_SchemaName.GetWindowText(ifcSchemaName, 512); if(createEmptyIfcFile(ifcSchemaName, true, _T("MILLI")) == false) return; int ifcWallInstance = createIfcWall(_T("Wall xyz"), 100, 50, 0); buildRelDefinesByProperties(ifcWallInstance, buildPset_WallCommon()); shellStruct* pShell = localCreateShellStructureForCuboid( 0, 0, 0, 8000, 300, 2300); // mm unit createIfcBRepShape(pShell); for(int i = 1; i <= 3; i++) { int ifcOpeningElementInstance = createIfcOpeningElement( CreateWindowAndSave 함수 정의 저장할 IFC파일명을 획득. 빈 IFC 모델을 생성. X, Y, Z위치와 이름을 파라메터로 받아 IfcWall 객체를 생성. 리턴된 IfcWall 객체를 참조해 벽체 공통 속성 설정. B-Rep 구조 생성을 위한 Shell 형태 박스 구조 정의. Shell 형태를 입력받아 IfcWall의 B-Rep를 정의. 개구부와 창 객체를 3 회 생성하기 위한 반복문 실행. 반복문 인덱스 i * 1100 만큼 X위치, 250 만큼 Z위치에 개구부 객체를 생성.
  • 54.
    BIM 표준과 구현© 강태욱 Page 54 of 149 _T("Opening Element xyz"), i * 1100, 0, 250, true); buildRelVoidsElementInstance(ifcWallInstance, ifcOpeningElementInstance); pShell = localCreateShellStructureForCuboid (0, 0, 0, 750, 300, 1400); createIfcBRepShape(pShell); createIfcBoundingBoxShape(750, 190, 1400, _T("Box")); int ifcWindowInstance = createIfcWindow( _T("Window xyz"), 0, 12, 0, true, 1400, 750); buildRelFillsElementInstance(ifcOpeningElementInstance, ifcWindowInstance); buildRelDefinesByProperties(ifcWindowInstance, buildPset_WindowCommon()); pShell = localCreateShellStructureForCuboid (0, 0, 0, 750, 190, 1400); createIfcBRepShape(pShell); createIfcBoundingBoxShape(750, 190, 1400, "Box"); } // Save IFC file ... 중략 ... char ifcFileName[512]; m_FileName.GetWindowText(ifcFileName, 512); saveIfcFile(ifcFileName); 벽체와 개구부 객체 IfcRelVoidSelement 관계 설정. 개구부 형상 좌표를 설정한 Shell 생성. Shell 을 이용해 B-Rep 생성. 최대 경계 박스 설정. 1400mm높이, 750mm폭을 가진 창문 객체 생성. 개구부 객체와 창문 객체간 IfcRelFillSegment 관계 설정. 기본 창문 속성 설정. 창문 형상 좌표를 설정한 Shell 생성. Shell 을 이용해 창문 B-Rep 생성. 최대 경계 박스 설정. IFC 파일 저장. SMC이나 xBIM과 같은 BIM뷰어를 실행해 저장된 IFC파일을 열면 다음과 같은 모델을 확인할 수 있다.
  • 55.
    BIM 표준과 구현© 강태욱 Page 55 of 149 2.1.4.6 결론 본 장에서는 IFCEngine 라이브러리를 이용한 IFC 모델을 생성하고 IFC객체와 관계 객체를 설정하는 방법을 알아보았다. IFC 라이브러리는 IFC 구조를 다룰 수 있는 API를 제공해 주므로 편리하게 본인이 필요한 도구를 개발할 수 있다. IFC구조는 객체간 관계를 통해 서로간에 위상적인 계층 구조, 연관 및 의존 구조를 만들수 있다. 어떤 관계를 설정해야 하는 지는 객체의 종류에 따라 달라진다. 이에 대한 상세한 내용은 앞 장의 IFC 구조에 대한 내용을 참고하길 바란다.
  • 56.
    BIM 표준과 구현© 강태욱 Page 56 of 149 2.1.5 IFC 형상정보추출 – Hello IFC 2.1.5.1 개요 앞 장에서 설명한 HelloWall의 경우에는 IfcEngine이라는 라이브러리를 활용했었다. 이 장에서는 오픈소스를 이용해 형상정보 등을 추출하는 간단한 예제 프로그램을 만들어 본다. 이장에서 사용할 오픈소스는 IfcSdk 이며 다음 링크에서 다운로드 받을 수 있다 (*주: 오픈소스나 프로그램의 링크주소는 버전업이되면서 바뀌는 경우가 많다. 가능한 Google에서 검색해서 다운받는 것이 좋다). 이 오픈소스를 통해 간단한 IFC 정보 추출 및 출력 프로그램을 만들면서 IFC구조에 대해 좀 더 확실한 이해를 가져본다. 다운로드를 받은 후 폴더를 하나 만들어 압축을 해제한다 (*주: 폴더 명은 반드시 영문이어야 한다). 그림 2-10 IFC SDK 다운로드 링크 (https://github.com/cstb/ifc-sdk )
  • 57.
    BIM 표준과 구현© 강태욱 Page 57 of 149 2.1.5.2 오픈소스 프로젝트 빌드 파일 생성 보통 오픈소스는 멀티플랫폼(윈도우, 유닉스, 맥킨토시, iOS 등을 지원)을 지원하는 경우가 많다. 이런 경우 오픈소스를 진행하는 입장에서 각 플랫폼마다 프로젝트를 어떻게 빌드(Build)하고 어떤 파일들을 컴파일해야하는 지 만들기가 매우 번거롭다. 이런 이유로 각 플랫폼 환경에 의존적인 부분만 별도로 정의하고 공통적인 부분을 따로 모아 정의한 Make 파일이란 것을 사용한다. 최근 Make파일을 작성하고 각 플랫폼에 대한 프로젝트 파일을 생성하는 용도로 많이 활용되고 있는 것이 CMake 란 프로젝트 파일 생성 프로그램이다. 그림 2-11 CMake 다운로드 페이지(http://www.cmake.org) CMake 설치파일을 다운받아 설치하고 실행한다. 실행하면 다음과 같은 CMake 대화창이 나타나는 데 소스가 있는 곳을 [Where is the source code] 의 [Browse Source]버튼을 이용해 폴더를 지정해 준다. 그리고 소스가 빌드될 폴더를 지정하는 [Where to build the binaries] 는 같은 폴더로 설정한다 (*주: 폴더명에 한글이 들어있는 경우 에러가 나는 경우가 있으니 주의한다).
  • 58.
    BIM 표준과 구현© 강태욱 Page 58 of 149 이제 [Configure]버튼을 클릭하면 프로젝트 생성 타입을 선택하는 창이 표시되는 데 본인 PC에 설치된 Visual Studio 버전을 선택해 [Finish]버튼을 클릭한다. 그럼 설정된 폴더에서 CMakeLists.txt 파일이 있는 지 확인하고 있다면 이 파일을 로드해 해석한다. 참고로 이 파일은 CMake가 프로젝트 빌드 파일을 생성하기 위한 규칙이 아래와 같이 정의되어 있다. CMake는 이 파일을 로드한 후에 현재 선택된 타입에 선택해야 할 빌드 옵션이 있는 지 확인하고 옵션이 있다면 다음과 같이 적색 표시된 옵션을 선택하도록 표시한다. 본인의 경우에는 ‘ENABLE PRECOMPLIED_HEADER’옵션과 ‘ENABLE_TESTING’ 옵션이 문제가 있어 체크를 해제하고 [Configure]버튼을 다시 클릭해 빌드 설정을 하였다.
  • 59.
    BIM 표준과 구현© 강태욱 Page 59 of 149 설정이 제대로 되면 자동으로 CMakeLists.txt파일을 해석하여 선택된 프로젝트 유형으로 프로젝트 빌드 파일이 생성된다. 다음 그림은 설정이 제대로 완료된 CMake 화면으로 출력 창에 “Configuring done”이라 표시된 것을 확인할 수 있다.
  • 60.
    BIM 표준과 구현© 강태욱 Page 60 of 149 이제 IfcSdk 폴더를 확인해 보면 다음과 같이 선택된 프로젝트 유형에 대한 프로젝트 빌드 파일이 생성되어 있을 것이다. 본인의 경우에는 Visual Studio 2011 로 프로젝트 파일을 생성했었다 (*주: 현재 설치된 개발 도구 버전에 따라 앞과 같이 제대로 빌드 설정이 성공하는 경우가 다르다. 본인의 개발 도구 버전과 환경에 맞도록 프로젝트 빌드 유형을 생성해야 한다). 2.1.5.3 프로젝트 빌드 이제 이 파일을 Visual Studio를 이용해 다음과 같이 열어본다. 그리고 [빌드]메뉴에 [솔류션 빌드]를 실행한다.
  • 61.
    BIM 표준과 구현© 강태욱 Page 61 of 149 빌드가 에러없이 성공했다면 다음과 같이 “DEBUG”폴더에 exe파일이 생성될 것이다. IfcSdk에 포함된 예제 파일을 실행해 보기 위해 다음과 같이 [솔류션 탐색기]에서 “Example Ifc2x3 SDK – readWrite” 프로젝트를 [시작 프로젝트로 설정]한다. 이 예제 프로젝트는 명령창에서 ifc 입력파일을 받고 파싱하여 IfcProject 객체의 정보를 추출해 출력한 후에 파싱된 정보를 “saved.ifc”파일로 저장한다. 그러므로 ifc파일을 하나 설정할 필요가 있는 데 IfcSdk 압축 폴더에 “builtModel.ifc”란 예제 ifc파일이 포함되어 있다. 이를 이용하도록 한다.
  • 62.
    BIM 표준과 구현© 강태욱 Page 62 of 149 우리는 명령창에서 해당 exe파일을 실행하는 것이 아닌 Visual Studio에서 실행하기로 한다. 이를 위해 “Example Ifc2x3 SDK – readWrite” 프로젝트를 우클릭해 [속성] 메뉴를 실행한다. 그리고 다음과 같이 [속성 페이지]창에서 [디버깅] 속성을 선택하고 [명령 인수] 속성을 “....dataifcbuiltModel.ifc”로 설정한다. 이는 “Example Ifc2x3 SDK – readWrite” 프로젝트가 있는 폴더에서 상대경로로 builtModel.ifc 파일을 명령인수로 설정한 것이다. Visual Studio에서 실행하면 이 내용은 다음과 같이 명령창에서 실행할 때와 동일한 결과를 가진다. Visual Studio 에서 실행하면 프로그램 소스의 특정 위치에 실행을 멈추고 그때 ifc객체들의 변수값 등을 확인하며 디버깅을 할 수 있는 장점이 있다.
  • 63.
    BIM 표준과 구현© 강태욱 Page 63 of 149 [디버깅]메뉴의 [디버깅 시작]메뉴를 선택해 실행한다. 정상적으로 실행되었다면 명령창이 띄워지고 다음과 같이 IfcProject 정보가 추출되어 출력되는 것을 확인할 수 있다. 그리고 실행된 폴더에 “saved.ifc”파일이 저장된 것을 확인할 수 있다. 2.1.5.4 핵심 구조 이 예제 프로젝트의 핵심 시퀀스 구조를 분석하고 설명한다. 1. IFC파일 열기 IFC는 표준파일이며 EXPRESS문법으로 정보를 모델링하고 있으므로 이 문법에서 정보를 추출하기 위해서는 문법을 인식하고 의미 정보를 추출하는 파서(Parser)를 이용해 파싱(Parsing)해야 한다. 이를 위해 먼저 IFC파일을 열고 그 안의 텍스트를 읽을 준비를 해야 한다. 다음은 이와 관련된 코드이다. std::ifstream ifcFile; ifcFile.open("example.ifc"); ifc2x3::SPFReader reader; 파일을 읽기 위한 파일스트림 객체를 생성하고 “example.ifc”파일을 연다. ifc2x3 파싱을 위한 객체를
  • 64.
    BIM 표준과 구현© 강태욱 Page 64 of 149 if ( ifcFile.is_open() ) std::cout << "reading file ..." << std::endl; else return false; bool result = reader.read(ifcFile); ifcFile.close(); 생성한다. Ifc2x3 파일을 파싱한다. 파일을 닫는다. 2. IFC파싱 / 객체모델 인스턴스화 IFC 파일을 열고 나면 IfcEngine의 ExpressDataSet을 얻을 수 있다. 이 클래스는 BIM 오브젝트 세트를 관리하는데, 현재 관리 중인 BIM 오브젝트는 instantiateAll() 함수로 모델을 인스턴스화 할 수 있다. 인스턴스화를 한다는 것은 파일로 기록된 객체 정보를 메모리로 로딩하고 객체간의 관계를 연결하여 위상정보를 생성한다. 이를 통해 IFC에서 필요한 정보를 탐색할 수 있다. ifc2x3::ExpressDataSet * expressDataSet = dynamic_cast<ifc2x3::ExpressDataSet*>(reader.getExpressDataSet()); if(expressDataSet == NULL) return false expressDataSet->instantiateAll(); IFC객체집합을 관리하는 ExpressDataSet를 획득한다. IFC파일 파싱을 통해 IFC객체집합을 구성한다. 3. IFC 객체 정보 접근 / 사용 DataSet에서는 IFC객체집합이 포함되어 있고 특정 객체들을 접근해 정보를 얻을 수 있다. 이 엔진은 C++의 표준라이브러리인 STL(Standard Template Library)을 사용하므로 여기서 제공하는 정보 열거자 클래스인 iterator를 이용하면 객체 정보에 쉽게 접근할 수 있다. Step::RefLinkedList< ifc2x3::IfcProject > projects = expressDataSet->getAllIfcProject(); DataSet에서 IfcProject객체들을 참조하는 연결리스트(Linked list)를 획득.
  • 65.
    BIM 표준과 구현© 강태욱 Page 65 of 149 Step::RefPtr< ifc2x3::IfcProject > project = &*(projects.begin()); std::cout << "Project name is: " << project->getName().toLatin1() << std::endl; 연결리스트의 첫번째 요소를 획득. 획득된 IfcProject객체 이름을 얻어 std::cout 함수를 이용해 출력한다. 그리고 난 후 DataSet의 BIM 오브젝트를 열거해 정보를 얻고, 이를 적절히 활용하면 된다. 모든 처리를 마치면 IFC파일을 닫고 파일 리소스를 운영체계에 반납한다 (*주: 운영체계에서 관리하는 메모리, 파일, 네트웍 자원 등은 사용한 후 운영체제에 반납하지 않으면 자원이 부족해 결국 응용어플리케이션이 다운될 수 있다). 2.1.5.5 SimpleIfcViewer 개발 IfcSdk을 사용하여 객체를 읽고 오픈소스 기반 3D그래픽 렌더링 엔진으로 유명한 OpenGL로 간단히 렌더링해보는 SimpleIfcViewer프로그램을 개발해 본다. 이를 통해 형상정보가 어떻게 구체적으로 구성되어 있고 어떻게 형상정보를 이용해 정보를 생성하는 방법을 익혀보도록 한다. 이 장에서는 모든 개발 코드를 싣기에는 지면을 너무 차지하게 되므로 일부 핵심 코드만 설명하고 실제 코드는 본 장에 첨부된 예제 파일 소스 코드를 참고하도록 한다. 또한, OpenGL 및 이를 활용하기 위해 필요한 컴퓨터 그래픽스 관련 내용은 마찬가지 이유로 설명하지 않는다. 이런 내용을 깊게 알고자 한다면 관련 서적을 참고하길 바란다. IFC는 형상정보를 크게 두가지 방법으로 정의하고 있다. 첫번째, B-Rep 구조 정의 - 앞 장의 IFC구조에 대해 설명한 내용처럼 형상구조를 경계표현법으로 정의한다. 경계표현은 형상을 구성하는 정점, 모서리, 면, 쉘(Shell), 솔리드(Solid)로 구조를 정의하는 방법으로 형상을 표현하는 유연성과 활용성이 크다. 다만, 형상이 복잡해 질수록 구조가 복잡해지고 모델 크기가 커지는 문제가 있다. 두번째, 파라메트릭 기반 객체 정의 – 이 방식은 형상을 정의하는 변수를 이용해 파라메트릭하게 형상구조를 정의하는 방식이다. 예를 들어 벽체를 정의할 때 벽체의 바닥면을 둘러싸고 있는 폐합 폴리라인을 정의하고 이를 벽체 높이만큼 돌출(Extrude)시키는 방법으로 벽체 형상을 정의한다. 파라메트릭 기반 객체 정의 방식은 디자인 의도가 포함되어 있으므로 다양하게 정의할 수 있다. 이런 이유로 IFC에서는 파라메트릭 기반 객체 정의 방식의 종류를 객체 유형별로 정의하고 있다.
  • 66.
    BIM 표준과 구현© 강태욱 Page 66 of 149 이 예에서는 B-Rep를 추출하는 실습을 한다. 형상정보만 얻어 화면에 Polyloop를 렌더링 할 것이므로 ExpressDataSet에서 IfcProject에서 위상정보를 이용해 객체들을 검색한다. 검색 방법은 앞 장에서 설명한 IFC 위상구조를 참고해 관계를 탐색하면 된다. 다음은 IfcRelAggregates 관계에 대해서 계층적으로 재귀탐색하는 VisitObjectAggregation 함수 코드 중 일부이다. ifc2x3::Inverse_Set_IfcRelDecomposes_0_n decomposes = pObjectDef->getIsDecomposedBy(); ifc2x3::Inverse_Set_IfcRelDecomposes_0_n::iterator itRel = decomposes.begin(); for(; itRel != decomposes.end(); itRel++) { const ifc2x3::IfcRelDecomposes* pRel = itRel->get();; const ifc2x3::IfcObjectDefinition* pRelatingObject = pRel->getRelatingObject(); ifc2x3::Set_IfcObjectDefinition_1_n ObjectSet = pRel->getRelatedObjects(); ifc2x3::Set_IfcObjectDefinition_1_n::iterator itObject = ObjectSet.begin(); for(; itObject != ObjectSet.end(); itObject++) { const ifc2x3::IfcObjectDefinition* pRelatedObjectDef = itObject->get(); VisitObjectAggregation(pRelatedObjectDef, vPosition); } } IfcObjectDefinition 객체를 구성하고 있는 집합 관계를 획득한다. 집합관계 열거자를 이용해 각 관계를 접근한다. 각 관계에 Relating 객체와 Related 객체를 획득한다. Related 객체집합을 획득한다. Related 객체집합 열거자를 얻는다. 열거자를 통해 Related 객체를 접근한다. 계층적 탐색을 위해 이 함수를 재귀호출한다. 벽체와 같은 건축부재의 형상정보를 파싱하기 위해 별도로 ParsingElement와 Geometry shape을 표현하는 ParsingProductRepresentation 함수를 정의하였다. 이 함수는 IFC객체들을 재귀하면서 정보를 얻는다.
  • 67.
    BIM 표준과 구현© 강태욱 Page 67 of 149 bool IfcFile::ParsingElement (ifc2x3::IfcElement* pElement, Vector3d vPosition) { ifc2x3::IfcObjectPlacement* pPlace = pElement->getObjectPlacement(); if(pPlace->getType().getName() == "IfcLocalPlacement") ... ParsingElement() 함수를 정의한다. 객체의 기하학적 위치를 갖고 있는 IfcLocalPlacement 객체 획득 IFC에서는 각 공간객체가 상위 공간객체의 좌표계에서 상대적으로 정의된다. 예를 들어 IfcBuilding 건물공간객체는 IfcBuildingStorey 건물층 공간객체의 위치를 정의하는 기준좌표계를 정의한다. 건물층은 건물에 대해 지역좌표계를 가지고 있다. IfcLocalPlacement는 각 공간객체의 지역좌표계를 정의하고 있다. 이 부분에는 하위 Element의 Representation객체에 포함된 Geometry 정보가 반영돼야 한다. 다시 말하면 하위 Element의 Position의 x, y, z가 지역 좌표계라면 이것을 절대 좌표 기준을 정의하는 세계 좌표계로 변환해야 한다. 그렇지 않으면 얻어진 형상 정보로 모델이 제대로 표현되지 않는다. 형상정보를 얻기 위해 다음과 같이 IfcElement를 표현하는 IfcProductRepresentation을 얻어 Geometry 정보를 획득한 후 ParsingProductRepresentation 함수를 정의해 형상정보를 추출한다. ifc2x3::IfcProductRepresentation* pRep = pElement->getRepresentation(); ParsingProductRepresentation(pRep, vPosition); for( ifc2x3::Inverse_Set_IfcRelVoidsElement_0_n::const_iterator it = pElement->getHasOpenings().begin(); it != pElement->getHasOpenings().end(); it++) { Step::ObsPtr<ifc2x3::IfcRelVoidsElement> Object = (*it); ifc2x3::IfcElement* pEle = Object->getRelatedOpeningElement(); ParsingElement(pEle, vPosition); Wall객체 내에서도 개구부, 창, 문과 같은 객체가 포함된 재귀적 포함 관계를 가지고 있다. Loop를 이용해 각 포함된 객체들을 열거한다. 객체를 획득해 ParsingElement 함수를 재귀호출한다.
  • 68.
    BIM 표준과 구현© 강태욱 Page 68 of 149 } 다음 소스는 형상 정보 표현을 위해 정의된 함수이다. 이 경우는 객체의 PolyLoop 기하정보만 얻기 위해 IfcFacetedBrep의 정보만 구한다. IFC 구조는 솔리드 모델을 표현하기 위해서 B-Rep을 사용한다. 그러므로 솔리드 모델 계층에 따라 정보를 얻어야 한다. 솔리드 모델은 솔리드에서 면, 모서리, 점을 순서대로 접근해 정보를 얻을 수 있다. 다음은 IfcProductRepresentation 객체에서 형상정보를 취득하는 코드 일부이다. Step::RefPtr< ifc2x3::IfcProductRepresentation > rpValue = pProductRepresentation; Step::RefPtr< ifc2x3::IfcShapeRepresentation > shapeRepresentation; ifc2x3::List_IfcRepresentation_1_n::iterator it; for(it = rpValue->getRepresentations().begin(); it != rpValue ->getRepresentations().end(); it++ ) { ... for(; itRep != shapeRepresentation->getItems().end(); itRep++) { Step::RefPtr<ifc2x3::IfcRepresentationItem> pItem = (*itRep); if(pItem->getType().getName() != "IfcFacetedBrep") continue; ... for(; itFace != pClosedShell->getCfsFaces().end(); itFace++) { Step::RefPtr<ifc2x3::IfcFace> pFace = (*itFace); ifc2x3::Set_IfcFaceBound_1_n::iterator itBound = pFace->getBounds().begin(); for(; itBound != pFace->getBounds().end(); itBound++) { if(pLoop->getType().getName() != "IfcPolyLoop") continue; vector3ds* pPolyline = new vector3ds(); ... for(it = PointList.begin(); it != PointList.end(); ++it) { 함수에서 입력받은 pProductRepresentation 파라메터 획득한다. IfcShapeRepresentation 객체들을 각각 열거하여 얻어 온다. IfcShapeRepresentation객체의 IfcRepresentationItem들을 획득한다. IfcRepresentationItem 중 “IfcFacetedBrep”객체만 처리한다. IfcFacetedBrep에서 Face들을 획득한다. Face를 구성하는 경계선들을 획득한다. 경계선들을 열거하며 각각 얻어온다. 경계선 중 IfcPolyLoop를 얻는다. 폴리라인 정보를 담을 객체 pPolyline 생성한다. 폴리라인을 구성하는 정점들을 열거하여 각 정점을 획득한다.
  • 69.
    BIM 표준과 구현© 강태욱 Page 69 of 149 Step::RefPtr<ifc2x3::IfcCartesianPoint> pt = (*it).get(); ifc2x3::List_IfcLengthMeasure_1_3 coords = pt->getCoordinates(); ... pVertex->x = coords[0] + vPosition.x; pVertex->y = coords[1] + vPosition.y; pVertex->z = coords[2] + vPosition.z; pPolyline->push_back(pVertex); } ... _aPolyline.push_back(pPolyline); } } } } 정점을 구성하는 X, Y, Z좌표를 얻는다. 좌표를 변환한다. 폴리라인 좌표들을 pPolyline 에 추가한다. pPolyline을 Polyline배열객체에 추가한다. 위에서 생성된 aPolyline에 Polyline을 추가하고 리턴한다. 이것을 이용하면 와이어프레임 형태의 IFC 모델을 렌더링 할 수 있다. 이와 같은 식으로 프로그래밍을 해 본다 (*주: 본 장에 첨부된 예제파일 프로젝트를 Visual Studio에서 로드해 작업해도 된다). 실행파일 생성을 위해 디버그(Debug)모드로 빌드해 본다. 빌드된 폴더(IfcSdkbinDebug)에 SimpleIfcViewer.exe 파일이 있을 것이다. 해당 폴더에 앞 장에서 B-Rep구조로 생성한 벽체가 저장된 IFC파일을 복사해 넣고 명령창에서 다음과 같이 실행해 본다. 그럼 다음과 같이 example.ifc파일의 형상정보를 추출해 OpenGL로 렌더링 된 결과를 확인할 수 있다.
  • 70.
    BIM 표준과 구현© 강태욱 Page 70 of 149 그림. IFC기반 뷰어(OpenGL기반 Wireframe 모드 렌더링) 이 프로그램은 IFC의 형상정보 추출에 대한 이해를 돕기 위해 간략한 코드로 개발된 것이므로 몇가지 한계가 있다. 형상의 면처리는 하지 않았는 데 이는 유한요소법 등에서 많이 사용하는 Mesh Processing을 적용해 메쉬 구성하는 삼각요소들을 얻어야 해결할 수 있다. 이와 관련해서도 오픈소스가 많으니 참고하길 바란다. 다른 이슈는 Extrude등을 사용한 파라메트릭 기반 객체 모델 유형이 지원되지 않는다. 이는 B-Rep처리에 비해서는 크게 어렵지 않은 부분이다. 좌표변환시에도 이슈가 있는 데 위치변환만 적용하였고 회전변환은 적용하지 않았다. 이는 주석으로 표시되어 있고 행렬변환식을 사용하면 쉽게 처리되니 참고하길 바란다. 2.1.5.6 결론 IFC모델에서 원하는 건축물 정보를 탐색하고 추출하여 원하는 목적 어플리케이션 정보를 지원하기 위해 정보 처리하는 것은 IFC의 중요한 개발 목적 중 하나이다. IfcSdk는 오픈소스 기반의 IFC 모델 생성 라이브러리며 내부적으로 오픈되어 있으므로 필요한 함수를 추가하여 기능을 개선할 수 있다. IFC모델에 객체를 추가하고 관계를 설정하는 방법은 라이브러리 기반 개발 방식과 거의 동일하다. 다만, 소스가 오픈되어 있으므로 다른 개발환경(예 – iOS, 웹, 리눅스 등)상에서 개발이 가능하다. 실제로 IfcSdk는 멀티플랫폼 CMake 파일을 지원해 아이폰, 아이패드 등에서 IFC모델을 보고 정보를 확인하는 도구를 개발할 수 있다.
  • 71.
    BIM 표준과 구현© 강태욱 Page 71 of 149 2.1.6 결론 IFC는 표준정보포맷일 뿐이므로 IFC파일에서 객체 정보를 획득하기 위해서는 IfcSdk와 같은 파서가 필요하다. 여기서는 오픈소스를 이용해 IFC 표준포맷을 이용한 간단한 목적의 개발을 해 보았다. 이외에 IFC 모델을 다룰 수 있는 오픈소스나 라이브러리는 IfcOpenShell (http://ifcopenshell.org/), IfcGear 등이 있으며 사용방법은 거의 유사한다. 오픈 소스는 내부적으로 어떻게 IFC를 모델링하고 확인하는 데 좋으며 성능을 본인이 개선할 수 있는 장점이 있는 반면 라이브러리는 안전된 기능을 제공하는 대신 제공되는 API는 블랙박스 형태라 내부적으로 어떻 알고리즘으로 실행되는 지 알 수 없고 문제가 발생되었을 경우 개발사가 라이브러리를 릴리즈해 줄 때까지는 해결 방법이 없다. 이런 이유로 개발 목적에 맞는 적절한 IFC개발도구를 활용하는 것이 중요하다.
  • 72.
    BIM 표준과 구현© 강태욱 Page 72 of 149 2.2 BIM 협업과 가시화 도구 구현 2.2.1 BIM모델관리와 협업 - bimServer.org 2.2.1.1 개요 bimServer는 IFC파일을 데이터베이스로 관리할 수 있도록 지원해주는 오픈소스기반 BIM서버이다. bimServer는 다음과 같이 BIM Datastore로써 역활을 하며 협업 지원을 위한 형상관리 기능을 지원한다. 다양한 모델러 및 시스템과 연동을 위해 약 470 개 (1.1 버전)의 Web-service를 지원하고 Map 기능 구현을 위해 Google 등 클라우드 기반 시스템을 활용하고 있다. COBie, CityGML, Collada 등 다양한 파일 포맷을 지원하고 Plugin 형태로 기능을 확장할 수 있다. 이런 Plugin은 일종의 BIM MVD(Model View Definition)로써 동작된다. 그림 2-12 bimServer 개념도 (출처 - bimServer.org, February 2009, BIMserver and the potential of server side BIM, http://www.stress-free.co.nz/bimserver_and_the_potential_of_serverside_bim )
  • 73.
    BIM 표준과 구현© 강태욱 Page 73 of 149 이 오픈소스는 BIM 모델 관리를 위해 버클리DB를 사용하는 데 클라우드 시스템에서 많이 사용되는 Mongo DB와 같은 파일기반으로 처리 속도가 매우 빠르다 (*주: 버클리 DB는 오라클에 인수되었다). 참고로 파일기반 DB는 Key-Value 형식으로 Key에 대한 인덱스를 생성하여 빠른 검색 속도를 보장하면서 파일 기반이라 데이터 레코드 삽입 속도도 매우 빠르다. 2.2.1.2 설치 및 실행 bimServer를 실행하기 위해서는 우선 Java 최신 버전을 다운로드해서 설치해야 한다. bimServer는 윈도우즈, 맥킨토시, 리눅스와 같은 운영체제를 지원한다. 이 장에서는 윈도우에서 실행하는 방식을 사용하는 데 맥킨토시, 리눅스에서도 큰 차이없이 실행이 가능하다. 윈도우는 많이 사용되는 운영체제인 만큼 실행이 편리한 면이 있지만 서버가 실행되는 데 메모리를 많이 차지하는 문제가 있다. 1. 자바는 http://java.com/ 링크에서 다운로드할 수 있다. 각자 운영체제에 맞는 버전을 다운받아 설치를 한다. 2. bimServer를 https://github.com/opensourceBIM/BIMserver/releases (소스코드 - https://github.com/opensourceBIM/BIMserver)에서 다운로드 한다. 파일들이 몇 가지 있는 데 이 중에서 bimServer-1.2.jar 파일을 받는 다(*주: 현재 2013 년 7 월 시점이며 이후에는 더 높은 버전으로 릴리즈 되어 있을 수 있다. 최신 버전으로 다운받으면 된다). 또한, bimServer 관련 문서가 포함되어 있는 bimServer-javadoc-1.2-final.zip 파일도 다운로드 받는다.
  • 74.
    BIM 표준과 구현© 강태욱 Page 74 of 149 3. bimServer 은 Java 코드가 컴파일되어 압축된 jar 을 통해 실행한다. 서버는 서버 역활을 하는 PC가 필요하고 서버를 실행한 후 클라이언트는 서버 PC의 IP 주소를 통해 실행되는 것이 일반적이다. bimServer도 마찬가지이다. 우선 다음과 같이 명령창(cmd)을 실행한다. [cd] 명령을 이용해 폴더를 bimServer 을 다운로드 한곳으로 이동한다. 그리고 다음과 같이 명령창에서 서버 실행명령을 입력하여 서버를 실행한다(*주: bimServer 버전에 따라 jar 확장자를 가진 Java 실행파일 이름이 다를 수 있으므로 만약 발견하지 못한다면 bimServer 홈페이지에서 실행파일 이름을 확인할 필요가 있다). 그럼 Java가 jar 압축파일에 포함된 Menifest 실행정보를 찾은 후 실행한다. Java – jar bimServer-1.2.jar 4. 다음과 같이 BIMserver Stater 창이 나타나는 데 [Start]버튼을 클릭한다. 참고로 [Address]는 현재 IP주소로 서버를 실행함을 의미하고 [Port]는 서버가 클라이언트와 통신할 포트를 말한다. 만약 포트 초기값이 운영체제에서 설정된 방화벽 포트에 추가되어 있다면 제대로 수행되지 않으니 주의하길 바란다.
  • 75.
    BIM 표준과 구현© 강태욱 Page 75 of 149 나머지 [Max Heap Size], [Max Perm Size], [Stack Size]는 서버와 Java 가상 머신이 실행에 필요한 메모리를 설정하는 것으로 메모리 부족 경고 메시지(Out of memory exception)가 표시되면 이 수치를 적절히 조정해야 한다. 이 경우에는 [Max Heap Size]를 올려주는 데 예를 들어 1.3 MByte라면 ‘1300m’을 입력한다 (*주: 1.2 버전부터는 많은 메모리를 사용하므로 최소 4~8 GB이상 메모리를 설치하고 실행하는 것이 좋다). 여전히 메모리 부족 메시지가 출력되어 서버가 시작되지 않는 다면 알집(Alzip)과 같은 압축해제 프로그램을 설치 한 후에 다운받은 jar파일을 더블클릭하면 이 압축파일안에 ‘Plugin’이라는 폴더가 있고 이 안에 용량이 많은 jar 플러그인 파일을 몇개 삭제한 후에 다시 시도하도록 한다. 여전히 메모리 부족으로 서버가 시작되지 않는 경우가 있다. 이 경우에는 본 교재에서 제공하는 예제 폴더에 있는 1.1 버전을 실행한다. 다음과 같이 폴더안에는 bimServer를 실행하기 위한 bimserver.bat 파일이 있다. 이를 더블클릭한다. 마찬가지로 [Start]시 메모리 부족 문제가 있다면 앞에 언급한 것처럼 [Max Heap Size] 등을 증가시켜 보도록 한다.
  • 76.
    BIM 표준과 구현© 강태욱 Page 76 of 149 제대로 [Start]되었다면 아래와 같은 메시지를 볼 수 있다. 5. BIMserver Starter창에서 [Launch Webbrowser]버튼을 클릭해 웹브라우저를 실행한다. 그럼 다음과 같이 웹브라우저가 자동으로 실행되고 지정된 [Address]의 [Port]를 값으로 클라이언트 접속을 시도한다 (*주: 만약 자동으로 접속이 안되면 http://localhost:[Port] 주소값을 직접 입력한다). 서버에 사용자로 등록을 하고 E-mail과 암호를 입력하여 [Login]을 한다. 초기 아이디와 암호는 “Admin”과 “Admin”이다.
  • 77.
    BIM 표준과 구현© 강태욱 Page 77 of 149 2.2.1.3 핵심 구조 bimServer는 IFC기반 BIM서버로써 동작되기 위해 다음과 같은 구조로 구성되어 있다. bimServer는 크게 3 가지 종류로 컴포넌트를 구분할 수 있는 데 BIM모델 및 협업 관리 등을 지원하는 bimServer platform, BIM서버 기능 확장을 위한 Plugins tools, 사용자에게 웹서버를 통한 인터페이스를 제공해 주기 위한 Web server 이다. Plugins되는 모듈들은 IFC파일을 파싱하는 IfcEngine, CityGML파일을 저장하는 Plugin 등 다양하다.
  • 78.
    BIM 표준과 구현© 강태욱 Page 78 of 149 그림 2-13 bimServer 플랫폼 구조 bimServer platform를 구성하는 컴포넌트는 다음과 같다. 컴포넌트 내용 database BIM 모델 정보를 DB로써 관리한다. 현재는 파일 기반 DB인 Berkeley DB를 사용한다. cache 처리 속도 성능을 개선하기 위한 캐쉬 처리를 한다. 자주 사용되는 객체들을 캐쉬 처리하여 처리 성능을 높인다. query BIM 모델에서 필요한 정보를 추출하기 위한 쿼리 연산을 지원한다. notification 협업 및 형상 관리 시 객체 및 사용자 간 주고 받는 통지 메시지를 관리한다. Configuration Mamagement 협업을 위한 모델 형상 관리를 지원한다. 로그인 계정과 모델에 대한 Checkin, Checkout, Revision history 등을 지원한다. Serializers BIM 모델을 다양한 형식의 데이터 포맷과 입출력을 하기 위한 기본 인터페이스를 제공한다. 실제 동작 코드는 각 포맷에 대해 구현된 Plugin 에서 처리된다. webservices 외부 이기종 시스템과 연계를 하기 위해 SOAP 형식의 웹서비스 API를 지원한다. SOAP형식으로 Eclipse와 같은 개발도구를 이용해 API를 bimServer platform cache (EHCache) notifications webservices database (Berkeley DB) query Configuration Management Web server (Apache + Tomcat) MVC Framework (Spring) Serializers IfcEngine CityGML Collada Plugins … Google Plugins interface Map interface API
  • 79.
    BIM 표준과 구현© 강태욱 Page 79 of 149 호출하여 BIM모델 생성이나 형상관리를 할 수 있다. bimServer는 플랫폼 개념으로 개발되어 있어 확장성이 좋다. 다른 이기종 시스템과 연계도 가능하며 이는 webservices를 이용해 처리할 수 있다. 다음은 BIM 모델서버와 다른 이기종 시스템 연계를 위해 디자인된 bimServer 웹서비스 아키텍처이다. BIM 파일이 포맷 변환기를 거쳐 모델서버에 저장되고 모델 뷰 접근을 위해 SOAP 형식으로 웹서비스를 호출하도록 되어 있다. 이와 함께 REST를 지원해 모델 변경 사항이 발생하였을 때 등록된 사용자에게 자동으로 변경통보하는 기능을 지원한다. 이러한 아키텍처로 인해 다른 BIM 소프트웨어와 연동이 가능하다. 그림 2-14 bimServer 웹서비스 아키텍처 (The implementation of BIM SOAP facade pattern, Umit Isikdag, 2012, Design patterns for BIM-based service-oriented architectures, Automation in Construction) 2.2.1.4 프로젝트 생성 본 장의 예제 파일에서 IFC파일 중 하나를 BIM 서버에 등록해 보도록 한다. 서버에 로그인을 하면 다음과 같은 화면이 표시된다.
  • 80.
    BIM 표준과 구현© 강태욱 Page 80 of 149 1. 프로젝트 생성을 위해 [Add project] 버튼을 클릭한다. 프로젝트 추가 페이지가 나타나면 프로젝트 이름을 설정한다. [Geolocate] 체크 박스를 체크해 IFC파일내 포함된 건물의 원점과 방향을 다음과 같이 입력한다. 만약 지도를 이용해 입력하고 싶다면 [Use a map!] 링크를 클릭한다. 화면에 Map 창이 뜨는 데 Map창의 툴바를 이용해 위치를 탐색하고 [Draw line] 메뉴를 이용해 건물의 원점과 방향을 입력할 수 있다. 참고로 Map창 툴바는 지도의 [Zoom in], [Zoom out], [Pan], [Draw line]메뉴를 각각 지원한다.
  • 81.
    BIM 표준과 구현© 강태욱 Page 81 of 149 [Save]버튼을 클릭하면 입력한 이름의 프로젝트가 추가된다.
  • 82.
    BIM 표준과 구현© 강태욱 Page 82 of 149 상단에 메뉴가 있는 데 [Projects] 메뉴를 선택하면 현재 생성된 프로젝트 리스트가 다음과 같이 표시된다. 이 메뉴를 통해 프로젝트를 활성화하거나 삭제할 수 있다. [Users]메뉴는 BIM서버에 사용자를 추가하고 삭제할 수 있는 기능을 지원한다. 다음과 같이 사용자를 만들어보자. 다음 예에서는 Architect, engineer, mep 사용자를 만들었다. 만들어진 사용자를 클릭해 암호를 설정한다. 여기에 등록된 사용자만 생성된 프로젝트에 포함시킬 수 있어 프로젝트 모델을 체크인하거나 체크아웃하여 협업할 수 있다. [Info] 메뉴를 선택하면 라이센스, JVM, 웹서비스 등 설정 정보를 볼 수 있다. 여기서 특이한 것은 [Database]탭인데 데이터베이스 처리 속도를 높이기 위해 파일 DB기반 버클리 DB(Berkeley DB)를 사용하고 있다는 것을 확인할 수 있다 (*주: 클라우드 기반 분산 및 고속 처리를 위해 사용되는 Mongo DB와 같은 방식인 파일 DB기반 방식을 사용하고 있다).
  • 83.
    BIM 표준과 구현© 강태욱 Page 83 of 149 [Web Service]탭을 클릭하면 다음과 같이 웹서비스 지원하는 함수 리스트를 확인할 수 있다. [Log]메뉴를 선택하면 다음과 같이 서버가 어떻게 사용되었는 지 히스토리를 확인할 수 있다. [Server Settings]메뉴를 클릭하면 서버 설정 값 및 서버에 플러그인 된 모듈이 표시되는 데 다음과 같이 CityGML 입출력을 담당하는 Serializer 나 COBie 를 지원하는 COBieCheckSerialize를 지원하는 것을 확인할 수 있다.
  • 84.
    BIM 표준과 구현© 강태욱 Page 84 of 149 [Setting]메뉴를 클릭하면 각종 Addin 을 관리할 수 있는 페이지가 표시된다. 예를 들어 [Render Engines] 탭을 선택하면 다음과 같이 IFC파일을 파싱하고 저장하는 역활을 하는 렌더엔진(RenderEngine)을 추가하거나 삭제할 수 있으며 [Object IDMs] 탭을 선택하면 IDM기반으로 구현된 COBie와 같은 Addin을 관리할 수 있다. 기타 [Serializers]탭을 선택하면 CityGML, Collada와 같은 파일을 저장할 수 있는 Addin이 표시된다. 2. 프로젝트를 사용하기 위해 [Project]메뉴를 클릭해 다음과 같이 프로젝트 명을 클릭한다. 그럼 다음과 같이 “Sample2”의 Project details’페이지가 표시되고 그 아래와 왼쪽에 관련 메뉴나 탭이 표시된다.
  • 85.
    BIM 표준과 구현© 강태욱 Page 85 of 149 [Details]탭은 프로젝트 상세 정보가 표시되어 있어 언제 누구에 의해 생성되고 정보가 최종 갱신되었는 지 등이 표시되어 있다. 프로젝트 하나는 하위에 여러개의 프로젝트로 구성된다. 예를 들어 프로젝트는 건축, 구조, 토목으로 구성될 수 있다. 마찬가지로 각 하위항목도 프로젝트로 취급되어 그 밑에 세부 프로젝트 항목으로 구성될 수 있다. bimServer는 이런 프로젝트 계층 구조를 지원한다. 각 프로젝트마다 별도의 BIM모델을 관리하며 프로젝트에 등록된 여러 사용자간 협업을 위하여 IFC파일을 기반으로 한 Checkin/Checkout과 같은 형상관리를 지원한다. 하위 프로젝트를 생성하기 위해 [Sub Projects]탭을 선택한다. 그리고 [Add subproject]링크를 클릭한다. 그럼 다음과 같이 서브프로젝트 추가 페이지가 나타난다. 이름을 입력하고 [Save]버튼을 누른다. 이런 방식으로 다음과 같이 서브 프로젝트를 생성해 본다. 이렇게 만든 각 서브 프로젝트는 프로젝트 계층 트리안에서 각자 모델 정보를 Checkin, Checkout, Download를 통해 갱신하고 사용자들끼리 협업할 수 있다.
  • 86.
    BIM 표준과 구현© 강태욱 Page 86 of 149 다음과 같이 왼쪽 메뉴 밑에 프로젝트 트리가 표시된 것을 알 수 있다. 3. 프로젝트 사용자 설정을 위해 각 서브 프로젝트를 선택한다. 그럼 서브 프로젝트에 대한 [Project details]페이지가 표시된다. [Authorized users] 탭의 [Add an existing user]에서 “Architect”를 선택하고 [Add]를 하여 사용자를 추가한다. 나머지 프로젝트에도 각각 “Engineering”, “mep”를 설정한다.
  • 87.
    BIM 표준과 구현© 강태욱 Page 87 of 149 [Logout]을 한후 Architect로 로그인을 하면 본인이 수정 권한이 있는 서브 프로젝트만 IFC파일을 업데이트하거나 Checkout할 수 있으며 나머지 서브 프로젝트는 리비전(Revision)할 수 있는 권한이 없는 것을 확인할 수 있다. 다음은 “MEP”서브 프로젝트에 할당된 유저로 로그인한 화면으로 “MEP”만 흰색바탕으로 표시되어 있다. 이 프로젝트만 모델을 Checkin할 수 있다. 선택하면 다음과 같이 [Checkin]메뉴가 활성화되어 있는 것을 알 수 있다. 하지만 다른 서브 프로젝트를 같은 사용자로 로그인하면 오른쪽 그림과 같이 Checkin권한이 없으므로 [Checkin]메뉴를 사용할 수 없다. bimServer는 이런 방식으로 프로젝트의 계층과 다중 사용자간 형상관리를 지원함으로써 협업이 가능하다. 2.2.1.5 BIM 모델 체크인 및 버전별 모델 획득 이제 IFC로 생성된 BIM파일을 생성된 프로젝트에 체크인해 추가해 보도록 한다. 1. 다음과 같이 [Checkin] 메뉴를 클릭한다. 그리고 [파일 선택]버튼을 이용해 IFC파일을 선택한다. 그리고 [Upload]버튼을 클릭한다.
  • 88.
    BIM 표준과 구현© 강태욱 Page 88 of 149 bimServer는 체크인을 할 때 다음과 같이 [Revision] 버전번호가 증가되며 특정 버전의 모델을 다음 [Simple Download]와 [Advanced Download] 링크를 이용해 얻을 수 있다. 이를 이용해 모델을 버전별로 관리할 수 있다.
  • 89.
    BIM 표준과 구현© 강태욱 Page 89 of 149 2. [Project details]페이지에서 [Simple Download]의 [Download]링크를 클릭한다. 그럼 [Download / Checkout]창이 뜨는 데 여기서 “Ifc2x3”를 선택하고 [Checkout]을 클릭한다. 모델을 Checkout하거나 다운로드하는 것은 bimServer에 등록된 Addin을 이용해 CityGML, Collada, KMZ등 다양한 표준 파일 포맷으로 변환해 저장할 수 있다. 이는 Addin이 MVD역활을 하기 때문에 가능하다. 이렇게 Checkout한 경우 다른 사용자로 로그인해 같은 모델을 체크아웃할려 할 때 아래와 같이 이미 다른 사용자가 Checkout을 하였다고 경고 메시지가 출력되고 [Checkout] 버튼이 비활성화되어 다른 사용자가 Checkin하기 전까지 모델 변경을 함부로 하지 않도록 형상관리한다.
  • 90.
    BIM 표준과 구현© 강태욱 Page 90 of 149 누가 Checkout하였는 지 확인하고 싶다면 [Checkouts] 페이지를 선택해 다음과 같이 확인하면 된다. 다시 “Administrator”계정으로 로그인하고 [Checkin]메뉴로 다음과 같이 기존 버전으로 체크인하는 기능인 [OR Checkin existing revision] 링크를 이용해 체크인한다. 다음과 같이 [Checkin existing revision]창이 뜨는 데 리비전하고자 하는 프로젝트와 리비전 번호를 선택하고 주석을 입력한 후에 [Checkin as new revision] 버튼을 선택한다. 그럼 다음과 같이 프로젝트 버전이 증가한 것을 확인할 수 있다.
  • 91.
    BIM 표준과 구현© 강태욱 Page 91 of 149 각 프로젝트의 버전별 모델을 얻고자 한다면 앞에 그림과 같이 [Project details]페이지의 [Revisions]탭의 각 프로젝트 버전에 대한 [Download]링크를 클릭하면 된다. 3. 프로젝트에 등록된 정보를 추출하기 위해 [Query]탭을 클릭한다. 다음과 같이 서버 자체적으로 BIM객체를 버클리 DB에 등록할 때 생성되는 Object ID를 통해 질의(Query)가 가능하고 IFC 객체의 GUID인 Globally Unique ID로 질의가 가능하다. 또한, IFC 객체 종류 별로 IFC Class를 질의할 수 있다. 참고로 bimServer는 이런 질의를 Web service API로 제공한다. Web service는 XML기반의 SOAP(Simple Object Access Protocol)형식으로 웹서버와 클라이언트간 정보 통신을 지원한다. 이를 이용하면 원하는 BIM객체를 주어진 파라메터 값과 부합하는 객체를 리턴받아 다양한 응용 도구를 개발할 수 있다. Berkeley DB Client System bimServer SOAP Web service Ex. BIM Viewer BIM Collaborative System BIM Quality Checker ...
  • 92.
    BIM 표준과 구현© 강태욱 Page 92 of 149 SOAP의 형식은 다음과 같이 Web service API 이름과 API를 호출하는 파라메터로 구성되어 있으며 이를 호출받은 측에서 SOAP메시지를 해석하여 필요한 정보 처리를 한 후에 SOAP 형식으로 리턴한다. bimServer에서 사용할 수 있는 Web service 명세를 보고 싶다면 [Info]탭의 [Web services]탭을 선택하여 SOAP 서비스 기술자를 확인해 보면 된다. 다음은 bimServer의 WSDL(Web Services Description Language)이다. 이 명세에 맞게 Java나 C#과 같은 언어를 이용해 필요한 Web service API를 SOAP메시지로 주고 받으면 된다. 이와 관련된 좀 더 상세한 정보는 bimServer의 wiki페이지인 https://github.com/opensourceBIM/BIMserver/wiki/_pages 에서 확인해 보길 바란다. 이제 등록한 BIM모델 중 일부 정보를 질의해 획득하기 위해 [IFC Class]를 “IfcDoor”로 설정하고 다운로드해 저장할 파일 형식을 “Ifc2x3”로 설정한다. 그리고 [Download]링크를 클릭해본다. 그럼 웹브라우저로 해당 종류의 객체가 다운로드된다.
  • 93.
    BIM 표준과 구현© 강태욱 Page 93 of 149 다운로드 받은 IFC파일을 SMC나 xBIM과 같은 IFC뷰어로 확인해 본다. [Query]탭의 [Advaned]탭은 Java SDK가 설치되어 있는 경우 Java로 필요한 정보를 쿼리할 수 있는 기능을 지원한다.
  • 94.
    BIM 표준과 구현© 강태욱 Page 94 of 149 왼쪽 메뉴 창에서 [Browser] 메뉴를 이용하면 모델 정보를 IFC 엔티티와 관계를 중심으로 좀 더 상세히 확인할 수 있다. 2.2.1.6 결론 bimServer는 프로젝트 계층 트리와 다중 사용자간 형상관리를 지원하는 BIM 모델 협업 서버이다. 기본적으로 버클리 파일 DB상에서 동작하므로 일반적인 RDBMS에 비해 BIM파일을 등록하거나 인출하는 등의 연산속도가 빠르고 다양한 응용 도구와 연계를 할 수 있도록 Web service를 지원한다. 이런 Web service를 이용해 다양한 방식의 BIM 정보쿼리를 포함한 응용 도구를 개발할 수 있다.
  • 95.
    BIM 표준과 구현© 강태욱 Page 95 of 149 2.2.2 BIM정보 시각화와 쿼리언어 개발 - xBIM 2.2.2.1 개요 xBIM(eXtensible Building Information Modeling) Toolkit은 오픈소스 기반 소프트웨어 개발 BIM 도구이며 IFC를 지원한다. xBIM은 IFC포맷을 읽고 쓰는 기능을 지원하며 형상 표현을 위한 메쉬 프로세싱, 위상 정보 연산 처리 등을 지원한다. xBIM은 IFC 기반 어플리케이션 개발 시 IFC 처리 엔진으로써 동작될 수 있다. xBIM은 C#으로 개발되어 있어 기능을 확장하기가 용이하며 객체지향적으로 구조화되어 있다. 3D 모델 가시화는 솔리드 모델링 엔진 오픈소스인 Open CASCADE 를 이용해 3D 가시화를 처리하고 IFC 파서는 기존의 IFC파서 대신에 Gardens Point Parser Generator(http://gppg.codeplex.com/) 를 이용한 파서를 활용하고 있다. 이 파서는 다른 오픈스스 기반의 파서와는 다르게 처리속도가 빠른 장점이 있다. 그래서 다른 오픈소스기반 뷰어와는 다르게 IFC파일 로딩 속도가 빠르다. 그림 2-15 xBIM Xplorer 실행 모습 (https://docs.xbim.net/ ) xBIM은 BIM모델을 읽고 생성하는 기능과 더불어 그래픽 가시화처리 기능을 포함하고 있다. xBIM을 기반으로 제공되는 Xplorer는 IFC 파일 보기, IFC 객체 속성 확인, 객체 가시화 처리, ifcXML, ifcZIP파일 출력 등을 지원한다.
  • 96.
    BIM 표준과 구현© 강태욱 Page 96 of 149 2.2.2.2 설치 및 실행 xBIM을 설치하는 방법은 크게 두가지가 있다. 하나는 기존 구버전을 설치하는 방법이고 다른하나는 최신 버전을 설치하는 방법이다. 구버전은 본 장의 첨부 압축파일로 제공하므로 압축만 풀면 활용이 가능하지만 최신 버전에 비해 기능이 제약적이며 Visual Studio 2010 버전에서 제대로 동작된다. 현재 최신 버전인 2.4.1 버전은 운영체제, 개발환경 및 도구 등의 설정에 민감하게 반응하며 Visual Studio 2012 로 컴파일시 C++ 템플릿과 관련된 부분에서 문법 에러가 나는 경우가 있다 (*주: 오픈소스를 사용할 때는 제공되는 프로젝트 파일 버전 이외의 개발도구를 사용할 경우 빈번한 에러를 만나는 경우가 많다. 가능한 테스트된 버전의 개발도구를 사용하는 것이 좋고 만약 예기치 않은 에러가 발생될 경우 에러 메시지를 복사해 Google 사이트 등에서 검색하여 솔류션 찾아야 한다). 다만, 본 장에서는 향후 최신버전에서 이 부분이 개선될 수도 있고 어떤 환경에서는 큰 문제 없이 실행되므로 구버전과 최신버전 모두 설치 방법을 다루도록 한다. 1. xBIM 구버전 설치 구버전은 2013 년 초에 개발된 버전으로 예제파일 중에 본 장의 xBIM폴더에 압축파일로 저장되어 있다. 압축을 풀고 다음과 같이 하위 폴더의 “XbimFrameworkRelRC3”폴더를 연다. 그리고 “XbimComplete.sln”파일이 있는 지 확인한다. 이 파일을 더블클릭해 Visual Studio 2010 버전으로 열거나 이 개발도구를 실행해 [파일][열기][프로젝트/솔류션]메뉴를 통해 해당 프로젝트 파일을 로드한다. 2. xBIM 2.4.1 버전 설치
  • 97.
    BIM 표준과 구현© 강태욱 Page 97 of 149 xBIM을 설치하기 위해서는 다음과 같이 소스코드 다운로드 페이지의 해당 링크를 클릭해 최신 파일을 다운로드 받아야 한다. 파일은 압축파일이므로 다운 받은 후에 적절한 곳에 폴더를 만든 후 압축해제를 한다. 그림 2-16 소스 다운로드 페이지 (http://xbim.codeplex.com/releases) 만약 이 오픈소스 프로젝트에 접근할 권한을 얻었을 경우 아래와 같이 소스 제어를 위한 서버 정보를 다음과 같이 입력하면 된다. 이렇게 설정하면 소스 프로젝트 파일을 열면 자동으로 소스 관리 서버와 연결되어 최신 소스를 소스 형상관리 기능을 통해 쉽게 받을 수 있다. Server Name: tfs.codeplex.com Path: tfs Protocol: https Port number: 443 압축을 풀면 다음과 같이 소스 파일을 프로젝트 별로 묶어 주는 C# 프로젝트 파일(*.csproj) 및 프로젝트 파일을 묶어 관리하는 솔류션 파일(*.sln)파일을 확인할 수 있다. 오프소스 프로젝트 소스 제어 권한이 없는 경우가 일반적이므로 로컬PC에서 xBIM 프로젝트 파일을 열어 작업해야 한다. 이를 위해 다음과 같이 압축을 푼 파일들의 [읽기 전용] 및 [숨김]속성을 해제해 줘야 한다. 읽기 전용 속성으로 된 프로젝트 파일을 로드할 경우 Visual Studio은 해당 파일 편집 시 자동으로 소스 제어 기능을 사용하게 되어 문제가 발생할 수 있다. xBIM의 하위 폴더 파일들도 마찬가지로 해당 속성을 모두 해제한다.
  • 98.
    BIM 표준과 구현© 강태욱 Page 98 of 149 Visual Studio 2012 C#를 실행해 [도구][옵션]메뉴에서 [소스 제어]의 [환경] 항목을 클릭한다. 그리고 표시되는 속성 중 [소스 제어 환경 설정] 항목을 [단독 개발자]로 설정한다. 프로젝트 파일 로드를 위해 [파일][열기][프로젝트/솔류션] 메뉴를 실행한다. 그리고 “XbimComplete.sln”파일을 연다.
  • 99.
    BIM 표준과 구현© 강태욱 Page 99 of 149 그럼 Visual Studio 가 솔류션안에 포함된 프로젝트 파일을 로드하고 프로젝트 파일 안에 포함된 C# 소스 파일과 리소스 파일 등을 차례대로 로드한다. 만약 다음과 같은 메시지가 출력되면 [아니오]를 선택한다. 그리고 몇몇 프로젝트 로드시 구 버전 프로젝트 라이브러리 업데이트 메시지가 보여질 수 있다. 이 경우에는 업데이트를 선택하도록 한다. xBIM은 32 비트와 64 비트를 지원한다. 32 비트일 경우에는 다음과 같이 [솔류션 탐색기]의 “XbimComplete” 솔류션을 우클릭하고 [속성]메뉴를 선택한 후에 [구성 속성]의 [구성]항목을 선택하고 [구성 관리자]버튼을 선택해 구성관리자 창을 띄운다. 그리고 설정을 x86 으로 설정한다. 만약 x86 설정이 없을 경우 [새로 만들기]를 하고 설정한다.
  • 100.
    BIM 표준과 구현© 강태욱 Page 100 of 149 3. 프로젝트 실행 이제 프로젝트들을 빌드하고 xBIM Xplorer를 실행해 보기 위해 [솔류션 탐색기]에서 “Samples”폴더 아래 “xBimXplorer” 프로젝트 찾은 후 우클릭한 후 [시작 프로젝트로 설정] 메뉴를 선택한다. 그리고 [디버깅]메뉴의 [디버깅 시작]메뉴를 선택하면 각 프로젝트 파일의 소스들이 빌드되어 DLL 라이브러리나 EXE 실행파일이 생성된다. 에러가 없다면 “xBimXplorer”에서 생성된 실행파일이 실행된다.
  • 101.
    BIM 표준과 구현© 강태욱 Page 101 of 149 실행한 후 다음과 같은 프로그램이 실행되면 성공한 것이다. 본 장의 예제 폴더에 “AC11-Institute-Var-2-IFC.ifc”파일을 [File][Open]메뉴를 이용해 로드해 본다. 이 프로그램은 xBIM을 이용해 개발된 간단한 뷰어로 왼쪽에 IFC객체 트리가 표시되며 화면상에서 특정 객체를 선택하고 우클릭을 하면 해당 객체의 속성창을 보거나 해당 객체 클래스를 Hide/Show할 수 있는 기능을 제공한다. IFC가 로드되면 xBIM파일 포맷인 “.xbim”확장자 파일로 변환되어 저장된다.
  • 102.
    BIM 표준과 구현© 강태욱 Page 102 of 149 2.2.2.3 핵심 구조 분석 본 장에서는 xBIM을 이용한 실습을 위해 필요한 핵심 구조를 설명한다. xBIM 컴포넌트 구조는 다음과 같다. 그림 2-17 xBIM 컴포넌트 다이어그램 (UML) xBIM 은 핵심적인 컴포넌트가 4 개가 있는 데 Xbim.Ifc, Xbim.IO, Xbim.ModelGeometry.Scene, Xbim.Presentation이다. 컴포넌트 역활 Xbim.Ifc IFC 객체들을 관리한다. IFC의 클래스인 IfcProduct 등을 구현하고 있다. Xbim.IO IFC파일과 입출력을 위한 기능을 제공한다. XbimModelServer 등의 클래스를 구현하고 있다. Xbim.ModelGeometry.Scene IFC 형상정보를 가시화하여 그래픽 장면(Scene)을 만들기 위한 기능이 구현되어 있다. 주로 메쉬처리와 좌표변환을 담당한다. Xbim.Presentation 윈도우에서 3D를 가시화할 수 있도록 DrawingView3D XbimXplorer Xbim.Ifc Xbim.Ifc.Extensions Xbim.IO Xbim.ModelGeometry.Scene Xbim.Presentation Xbim.DOM
  • 103.
    BIM 표준과 구현© 강태욱 Page 103 of 149 클래스를 제공하고, 3D모델 배경이 되는 Skybox와 모델 탐색을 위한 Pan 등 기능을 지원한다. 또한, 이 도면 뷰에서 마우스 클릭 등 이벤트가 발생하였을 때 선택된 객체를 탐색해 리턴해 주는 기능을 제공한다. XbimXplorer BIM뷰어는 앞서 설명한 컴포넌트를 모두 사용해 개발된 것이다. BIM뷰어의 로직 처리 구조를 살펴보기 위해 “XbimXplorer”프로젝트의 “XplorerMainWindow.xaml”하위에 “XplorerMainWindow.xaml.cs” 소스파일을 더블클릭하여 C#소스를 에디터창에 로드한다. 그리고 키워드 탐색을 위해 Ctrl+F키를 눌러 “OpenIfcFile”함수를 찾아본다. private void OpenIfcFile(object s, DoWorkEventArgs args) { BackgroundWorker worker = s as BackgroundWorker; string ifcFilename = args.Argument as string; IModel model = new XbimFileModelServer(); model.Open(ifcFilename, worker.ReportProgress); XbimScene geomEngine = new XbimScene(model); ModelProvider.Scene = geomEngine; } OpenIfcFile 함수 정의. IFC로드 시 처리 진행 표시를 위한 백그라운드 작업 생성. XbimFileModelServer 객체 생성. 모델서버 객체를 로드할 IFC이름을 받아 Open 함. 모델서버에 저장된 BIM정보를 화면에 표시하기 위한 XbimScene 객체 생성. 모델 정보를 제공하는 객체에 XbimScene객체를 할당. IFC로드를 위해서는 IFC문법에 맞게 Text를 파싱(Parsing)해야 한다. XbimFileModelServer는 IfcInputStream객체를 이용해 IFC파일 TEXT 데이터 스트림을 로드한 후 파서를 이용해 IFC문법을 체크하고 IFC정보를 읽어들인다.
  • 104.
    BIM 표준과 구현© 강태욱 Page 104 of 149 xBIM은 앞에서 언급한 XbimFileModelServer에서 Open함수를 이용해 IFC를 로드한다. XbimFileModelServer는 IFC파일을 Open하거나 IFC를 출력하는 ExportIfc를 제공하며 Open함수로 로드된 객체들을 IfcProject 를 루트(Root)객체로 관리하고 있다. 이 IfcProject객체를 이용해 모든 IFC객체 계층 구조를 탐색하고 필요한 정보를 추출할 수 있다. 각 객체는 IFC 구조에서 다루었듯이 IfcObjectDefinition의 IfcRelationship 객체들을 통해 탐색할 수 있도록 되어 있다. 다음은 이를 표현한 클래스 다이어그램이다.
  • 105.
    BIM 표준과 구현© 강태욱 Page 105 of 149 그림 2-18 XBimModelServer와 IFC객체의 관계도 앞의 객체 관계도를 참고해 XbimFileModelServer 객체에 저장된 IfcSite에 접근하는 코드는 다음과 같다. IFC객체의 관계도와 비교해 보면 코드가 이를 반영해 관련 정보를 탐색하였음을 알 수 있다. private string GetIfcSiteName(IModel model) { string SiteName = ""; foreach (var relation in model.IfcProject.IsDecomposedBy) { foreach( IfcObject obj XbimFileModelServer객체의 인터페이스를 받아 IfcSite 이름을 얻는 함수. IfcProject의 IsDecomposedBy 관계들을 획득. 획득한 관계 객체의 RelatedObjects에 XbimFileModelServer +Open(inputFileName) XbimModelServer +IfcProject +PrintProperties() +Open(inputFileName) +ExportIfc(filename, compress, isGZip) +ExportIfcXml(ifcxmlFileName) +Save() IfcProject -_project IfcObject +ObjectType IfcObjectDefinition +HasAssignments: IfcRelAssigns +IsDecomposedBy: IfcRelDecomposes +Decomposes: IfcRelDecomposes +HasAssociations: IfcRelAssociates IfcRelDecomposes +RelatingObject +RelatedObjects * IfcRelAssigns +RelatedObjects * IfcRelAssociates +RelatedObjects *
  • 106.
    BIM 표준과 구현© 강태욱 Page 106 of 149 in relation.RelatedObjects) { SiteName = obj.Name; break; } } return SiteName; } 포함된 객체들을 얻음. Whole/Part에서 Part에 해당함. Part에 해당하는 객체를 얻은 후 이름을 리턴. IfcProject의 경우 Part 객체는 IfcSite임. 얻은 객체 이름을 리턴함. 참고로 “foreach ... in ...”문은 in에 명시된 객체를 포함한 컨테이너 요소를 각각 얻어 foreach 다음의 변수에 할당하고 코드블럭을 실행하는 반복문이다. 예를 들어 다음과 같은 코드는 list안에 포함된 객체들을 각각 차례대로 접근해 var 변수형의 object 변수에 설정한 후 { ... } 안의 코드 블럭을 실행하라는 의미이다. 당연히 list 는 컨테이너 변수고 이 안에 객체들이 미리 추가되어 있다고 가정한다. foreach( var object in list) { } 지금까지 xBIM의 구조를 살펴보았다. 이런 이해를 바탕으로 간단한 실습 소스 코드를 개발한다. 2.2.2.4 실습 실습에서는 XbimXplorer 프로그램 메뉴에 Open한 IFC객체에서 간단한 정보를 추출하는 기능을 구현해 보도록 한다. 이를 위해 정보를 추출할 때 사용자와 인터페이스를 구성하는 메뉴를 추가할 필요가 있다. 1. 다음과 같이 솔류션 탐색기의 “XbimXplorer”의 “XplorerMainWindow.xaml”파일을 더블클릭하여 주 윈도우 UI(User Interface)를 띄운다. 그리고 뷰어 메뉴 객체를 클릭한다.
  • 107.
    BIM 표준과 구현© 강태욱 Page 107 of 149 그럼 메뉴 UI를 생성하는 XML형식의 스크립트코드가 바로 아래 [XAML]창에 표시된다. 2. 다음과 같은 기능을 수행할 두 개 메뉴를 추가해 보도록 한다. 메뉴 명 기능 Site name 열려진 프로젝트의 부지 이름을 확인한다. Query objects 주어진 속성 조건에 맞는 객체를 탐색해 이름을 리턴한다. 이를 위해 “Import”메뉴 아래에 다음 스크립트를 추가한다. <MenuItem Header="_Import" Click="FileImport_Click"/> <MenuItem Header="Information"> <MenuItem Header="Site name" Click="FileSitename_Click"/> <MenuItem Header="Query objects" Click="FileQueryobject_Click"/> </MenuItem>
  • 108.
    BIM 표준과 구현© 강태욱 Page 108 of 149 3. “XplorerMainWindow.xaml.cs” 소스 파일을 열고 다음 코드를 FileOpen_Click 함수 블럭 아래에 추가한다. 이 함수는 앞의 MenuItem 스크립트에서 해당 메뉴를 클릭할 때 연결되어 호출되는 함수이다. private void FileSitename_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Site name"); // 메시지 박스 출력 } private void FileQueryobject_Click(object sender, RoutedEventArgs e) { MessageBox.Show("Query name"); // 메시지 박스 출력 } 이제 다음과 같이 실행해 보고 추가한 메뉴를 실행해 메시지 박스가 출력되는 지 확인한다. 4. 앞서 설명한 IfcSite 의 이름을 획득하는 GetIfcSiteName 함수를 FileSitename_Click 함수 코드 블럭 앞에 추가하고 FileSitename_Click함수에서 다음과 같이 코딩해 그 함수를 호출해 주도록 한다. private void FileSitename_Click(object sender, RoutedEventArgs e) { if (ModelProvider.Scene == null) // 현재 로드된 BIM모델 객체가 없다면 { MessageBox.Show("There isn't a BIM model."); return; } IModel model = ModelProvider.Scene.Graph.Model; // 로드된 모델 객체 획득
  • 109.
    BIM 표준과 구현© 강태욱 Page 109 of 149 string SiteName = GetIfcSiteName(model); // 부지 명 획득 MessageBox.Show("Site name = " + SiteName); // 메시지 박스 출력} } Visual Studio에서 [Debug][Start Debugging]메뉴를 실행한다. 그리고 해당 메뉴를 클릭해 다음과 같이 부지 명이 출력되는 지 확인한다. 5. 특정 객체를 탐색할 쿼리 문자열을 입력받아 탐색된 객체들의 유형만 화면에 표시하는 예제를 만들어 본다. 이를 위해서는 IFC 구조에 대한 이해가 필수적이다. 정보 추출을 위한 쿼리를 정의하기 위해 간단한 문법을 가진 sBQL(simple BIM Query Language)이라는 이름의 언어를 정의한다. 보통 언어를 개발할 때는 LEX(LEXical analyzer)나 YACC(Yet Another Compiler Compiler)같은 토큰 분석기와 파서 생성기를 사용한다. 이 경우에는 언어의 문법성을 강조하기 위해 LEX/YACC 로 다음과 같이 정의했다. 이에 대해 자세하 알고 싶다면 http://www.gnu.org/software/bison/ 를 참고하길 바란다. 실제로는 간단한 문자열 연산을 통해 구현해 보도록 한다. %token PROPERTY_NAME %token STRING %% Variable : PROPERTY_NAME Value
  • 110.
    BIM 표준과 구현© 강태욱 Page 110 of 149 : STRING AssignOP : ‘=’ SimpleExpression : Variables AssignOP Value LogicOp : ‘&’ Expression : SimpleExpression | SimpleExpression LogicOp Expression %% 이러한 문법의 결과로 아래와 같은 질의문을 문법적으로 정의하는 것이 가능하다. sBQL Query: Type=IfcWindow&Name=Window xyz 그럼 이 의미를 해석하는 로직이 속성명이 Type이고 값이 IfcWindow인 객체와 그 객체의 Name 속성값이 Window xyz 인 조건에 부합하는 모든 객체를 추출해 리턴한다. 시퀀스 구조는 크게 세 부분으로 구분된다. 첫번째 단계는 입력받은 sBQL 쿼리 문자열에서 문자열 연산을 이용해 토큰들을 분리하는 단계이다. 두번째 단계는 BIM객체를 입력 받아 PSet 속성 리스트를 얻고 sBQL 토큰들에 포함된 속성 조건에 맞는 지 체크하는 단계이다. 세번째 단계는 sBQL 쿼리문 조건에 부합된 객체 리스트를 리턴받아 화면에 표시해 주는 단계이다. 시퀀스 구조도는 다음과 같다.
  • 111.
    BIM 표준과 구현© 강태욱 Page 111 of 149 Analyze query token Input sBQL query string Check sBQL grammar QueryBimObjects( model, IfcProject, sBQLQueryTokens , ObjectList) Start End [Yes] [No] QueryBimObjects(model, obj, sBQLQueryTokens, ObjectList) Return Show objects using ObjectList PSetList = obj.GetAllPropertySets() Extract Property Names and Values from PSetList Search the objects which has the conditions of sBQL query with sBQLQueryTokens Add the objects to ObjectList The obj has IfcRelContainedInSpatialStruct ures? Call QueryBimObjects(model, element, QueryTokens, ObjectList) about the elements in IfcRelContainedInSpatialStructures of the obj Call QueryBimObjects(model, part, QueryTokens, ObjectList) about the parts in IsDecomposedBy of the obj [Yes] [No] 그림 2-19 sBQL 시퀀스 구조도 이를 고려해 xBIM 엔진을 이용해 c#에서 구현하기 위해서는 몇가지 절차가 필요하다. 첫번째로 xBIM 엔진에서 필요한 라이브러리를 사용한다고 “using”문을 이용해 선언해야 한다. 이렇게 해야 라이브러리 안에 구현되어 있는 객체와 기능을 사용할 수 있다.
  • 112.
    BIM 표준과 구현© 강태욱 Page 112 of 149 두번째로 sBQL 을 입력받는 입력 UI를 만들어야 한다. 이 부분은 본 책의 주제와 큰 관계가 없는 것이므로 자세히 설명하지 않는다. 이미 제공되는 소스에 InputQueryStringBox 함수로 구현해 놓았으므로 사용만 하면 된다. 세번째로 xBIM에서 IFC 모델을 관리하는 IModel을 이용하기 위해 ModelProvider.Scene.Graph.Model 을 통해 IModel 객체를 획득해야 한다. sBQL 쿼리 결과 얻은 BIM객체들만 화면에 표시하기 위해 DrawingControl 객체의 Hide, Show 함수를 호출한다. 다음 코드는 sBQL 쿼리 문자열을 입력받아 쿼리 조건에 부합되는 BIM객체들을 리턴하는 함수 코드에 대한 설명이다. using Xbim.IO; ... 중략 ... using Xbim.ModelGeometry.Scene; private void FileQueryobject_Click(object sender, RoutedEventArgs e) { if (ModelProvider.Scene == null) { MessageBox.Show("There isn't a BIM model."); return; } InputQueryStringBox InputBox = new InputQueryStringBox(); InputBox.ShowDialog(); string sBQLQuery = InputBox.QueryTextBox.Text; if (sBQLQuery == "") return; char[] Seperators = { '=', '&' }; string[] QueryTokens = sBQLQuery.Split(Seperators); if (QueryTokens.Length < 2) return; IModel model = ModelProvider.Scene.Graph.Model; List<IfcObject> ObjectList = new List<IfcObject>(); QueryObjects(model, model.IfcProject, QueryTokens, Xbim 라이브러리 사용을 선언. 추가된 “Query object”메뉴가 클릭될 때 호출되는 함수 정의. IFC 모델이 있는 지 체크. sBQL 쿼리 문자열 입력 받음. sBQL 쿼리 스트링에서 토큰들을 분리함. sBQL 쿼리 스트링 자체에 문제가 없는 지 체크. sBQL 쿼리 조건에 부합하는 BIM객체들을 추출하는 함수 호출.
  • 113.
    BIM 표준과 구현© 강태욱 Page 113 of 149 ObjectList); foreach(IfcProduct Product in model.IfcProducts.Items) DrawingControl.Hide(Product.GetType()); foreach (IfcObject obj in ObjectList) DrawingControl.Show(obj.GetType()); } xBIM의 DrawingControl에서 모든 BIM객체 숨기기. 추출한 BIM객체들 보이기. 다음 코드는 sBQL 쿼리 문자열을 입력받아 쿼리 조건에 부합되는 BIM객체들을 리턴하는 함수 코드에 대한 설명이다. 이 함수는 코드 라인수를 줄이고 효과적인 처리를 할 수 있도록 재귀함수로 작성되어 있다. 이는 IFC구조가 Whole/Part 계층 구조로 되어 있기 때문에 이런 효과적인 처리가 가능한 것이다 (*주: IFC구조는 이렇게 정보 처리 효율성을 고려해 모델링되어 있다). private void QueryBimObjects(IModel model, IfcObject obj, string[] QueryTokens, List<IfcObject> ObjectList) { if (obj == null) return; List<string> Names = new List<string>(); List<string> Values = new List<string>(); Names.Add("Name"); Values.Add(obj.Name); Names.Add("GUID"); Values.Add(obj.GlobalId); Names.Add("Description"); Values.Add(obj.Description); List<IfcPropertySet> PSetList = obj.GetAllPropertySets(); foreach (IfcPropertySet PSet in PSetList) { foreach (IfcProperty Prop in PSet.HasProperties) { string Name = Prop.Name; IfcPropertySingleValue SingleValue sBQL 쿼리 조건에 부합하는 BIM객체를 리턴하는 함수 정의. 재귀함수로 동작함. 속성명 리스트를 생성. 속성값 리스트를 생성. 객체명 추가. 객체명 값 추가. GUID명 추가 GUID값 추가. Description명 추가. Description값 추가. IFC객체인 obj 에서 속성집합들을 획득. 속성집합들로부터 속성명과 속성값을 획득. 속성유형 중에 단일값 속성만 처리.
  • 114.
    BIM 표준과 구현© 강태욱 Page 114 of 149 = Prop as IfcPropertySingleValue; if (SingleValue == null) continue; if (SingleValue.NominalValue == null || SingleValue.NominalValue.Value == null) continue; string Value = SingleValue.NominalValue.Value as string; if (Value == null) Value = SingleValue.NominalValue .Value.ToString(); Names.Add(Name); Values.Add(Value); } } bool sBQLEqualQueryValue = true; for (int i = 0; i < QueryTokens.Length - 1; i += 2) { string QueryName = QueryTokens[i]; string QueryValue = QueryTokens[i + 1]; bool Find = false; for (int j = 0; j < Names.Count; j++) { string Name = Names[j]; string Value = Values[j]; if (Name == QueryName && Value == QueryValue) { Find = true; break; } } if (Find == false) sBQLEqualQueryValue = false; if (sBQLEqualQueryValue == false) break; } 속성값을 획득. PSet의 속성명 추가. PSet의 속성값 추가. 쿼리조건과 일치여부 판단 플래그 설정. 쿼리 토큰들을 파싱하면서 쿼리조건과 부합여부를 판단함. 쿼리 토큰명 획득. 쿼리 토큰값 획득. 탐색 성공 플래그 설정. 각 쿼리명들에 대해 조건 부합여부 판단 처리. 속성명 획득. 속성값 획득. 쿼리 토큰명과 속성명의 일치여부와 쿼리 토큰값과 속성값의 일치여부 판단 조건이 일치하였다면 탐색 성공 플래그 설정. 탐색 루프 탈출. 조건에 부합하는 속성값 탐색 못하였으면 sBQL쿼리의 리턴값은 없는 것임.
  • 115.
    BIM 표준과 구현© 강태욱 Page 115 of 149 if (sBQLEqualQueryValue) ObjectList.Add(obj); IEnumerable<IfcRelContainedInSpatialStructure> RelContains = null; IfcBuildingStorey Storey = obj as IfcBuildingStorey; if(Storey != null) RelContains = Storey.ContainsElements; IfcSpace Space = obj as IfcSpace; if(Space != null) RelContains = Space.ContainsElements; if (RelContains != null) { foreach (IfcRelContainedInSpatialStructure RelContain in RelContains) { foreach (IfcObject element in RelContain.RelatedElements) { QueryBimObjects(model, element, QueryTokens, ObjectList); } } } foreach (var relation in obj.IsDecomposedBy) { foreach (IfcObject part in relation.RelatedObjects) { QueryBimObjects(model, part, QueryTokens, ObjectList); } } } sBQL 쿼리 조건에 부합된 객체이면 ObjectList에 추가. 함수에 입력된 파라메터인 obj 가 공간객체로써 IfcRelContainedInSpatialStructure 관계들을 가지고 있는 지 판단함. 만약 그 관계를 가지고 있다면. obj와 IfcRelContainedInSpatialStructure 관계를 가진 element를 얻어 QueryObject함수를 재귀호출함. Whole/Part관계를 확인해 obj와 관계된 part 객체를 열거하여 QueryObject함수를 재귀호출함. sBQL 처리 시퀀스 구조도를 앞의 소스 코드와 비교하여 각 의미를 파악해 보면 IFC구조가 반영되어 처리되었음을 알 수 있다.
  • 116.
    BIM 표준과 구현© 강태욱 Page 116 of 149 XplorerMainWindow.xaml.cs 소스 파일을 열고 앞의 소스코드를 입력한 후 실행을 해 본다 (*주: 직접 입력하기 어려우면 추가된 함수를 찾아 “/*”, “*/” 로 주석 표시 기호를 삭제한다. 그러면 그 사이에 주석처리된 소스코드가 컴파일될 수 있게 된다.) 다음과 같은 Xbiom Xplorer가 뜨면 본 장의 예제 파일 중 SimpleWallWindow.ifc 파일을 [Open]한다. 그리고 [File][Information][Query object] 메뉴를 실행하여 sBQL 쿼리문인 “FireExit=False&SmokeStop=False” 를 대소문자 구분하여 정확히 입력하고 [OK]버튼을 클릭한다. 그럼 다음과 같이 “FireExit”속성값이 “False”이며 “SmokeStop”속성값이 “False”인 BIM객체가 쿼리되어 해당 객체만 화면에 표시된다.
  • 117.
    BIM 표준과 구현© 강태욱 Page 117 of 149 참고로 본 장에서 제공된 소스는 처리 속도와 같은 성능 확보 보다는 IFC구조를 이용한 BIM 정보 추출 방법을 쉽게 이해하는 데 초점이 맞춰진 코드이다. 만약 sBQL의 처리 속도 및 편의성을 개선하고자 한다면 속성명 탐색시 Hash 함수를 이용한 검색 방식을 사용하고 sBQL 을 좀 더 개선하여 예를 들어 다음과 같이 공백(Space) 문자나 OR 논리 등을 지원하도록 개선해 본다. sBQL Query: Type = IfcWindow AND ( Name = ‘Window xyz’ OR FireExit = False ) 2.2.2.5 결론 본 장에서는 BIM에서 가장 중요한 유스케이스(Use-case) 중 하나인 BIM 정보 추출(Information Takeoff)의 원리를 직접 개발함으로써 확인해 보았다. 이와 유사한 방식으로 필요한 정보만 필터링해서 추출한 후 엑셀 스프레드시트와 같은 특정 파일 포맷으로 저장을 할 수 있다. COBie와 같은 MVD도 이와 유사한 방식으로 개발할 수 있다. IFC구조는 객체간에 객체지향적인 구조로 관계들이 연결되어 있어 이를 고려해 개발을 한다면 효과적 방법으로 필요한 기능을 수월하게 구현할 수 있다. xBIM은 이런 기능을 효과적으로 테스트하고 본인에 필요한 기능들을 개발할 수 있는 오픈소스를 제공한다. 만약 xBIM자체에 제공되는 API가 부족하다면 오픈소스 기반으로 추가해 나갈 수 있다. buildingSMART에서는 IFC표준 포맷을 기반으로 학생, 연구자, 개발자, 건축가, 엔지니어 들이 필요한 기능을 손쉽게 개발할 수 있는 오픈소스나 툴킷을 제공한다. 이를 이용하면 상용 소프트웨어에서 제공할 수 없는 것들을 직접 개발하고 쇼셜 커뮤니티 등을 통해 공헌할 수 있다. 2.3 Ontology와 Semantic BIM query 2.3.1 Ontology 이 글은 BIM기반 지식 서비스 개발을 위한 유용한 모델인 온톨로지(Ontology) 구조에 대해 이야기한다. 더불어, 데이터와 지식의 차이, 온톨로지와 시멘틱을 표현하는 방법을 간략히 설명하고, 관련 오픈소스를 소개한다.
  • 118.
    BIM 표준과 구현© 강태욱 Page 118 of 149 2.3.2 데이터와 지식의 차이 데이터를 아무리 많이 저장해 보아도, 여기서 지식을 얻는 것은 쉽지 않다. 데이터 간의 관계를 만들고, 추론할 수 있는 구조가 없으면, 쓸모없는 파일일 뿐이다. 그래서, 데이터를 어떻게 구조화하면 지식을 효과적으로 검색할 수 있는 지에 대한 연구가 오랫동안 있어 왔다. 이 글은 다음 ? 에 해당하는 것이다. 데이터 > 빅데이터 저장 > ? > 지식 검색 2.3.3 지식 추론 기능 지식은 사용자의 관점에 따라 상대적인 개념이다. 예를 들어, 다음과 같은 사실 데이터가 있다고 하자. A는 B를 가진다. B는 C를 가진다. 사실 데이터는 트리플(triple)인 주어, 목적어, 술어를 가진다. 여기서 지식은 사실 데이터를 이용해 다음과 같이 추론 될 수 있다. A는 C를 가진다. 지식은 다양한 방법으로 얻을 수 있다. 사람은 지식을 얻을 때 연역, 귀납, 유추의 방법을 사용한다. 위 지식은 연역을 사용한 것이다. 귀납은 관찰된 사실을 일반화하는 것이다. 유추는 유사성을 바탕으로 대상의 성질을 추측한다. 사람은 계산을 통해, 확률 통계적 지식을 얻을 수 있다. 지식 추론 기능 = {연역, 귀납, 유추, 확률 통계}
  • 119.
    BIM 표준과 구현© 강태욱 Page 119 of 149 이 4 가지를 지식 추론 기능이라 한다. 이 기능은 컴퓨터 계산기능으로 대치될 수 있다. 위 기능에서 연역, 귀납, 유추는 서로 유사한 면이 있다. 수치를 다루는 확률 통계는 이 글에서 다루지 않는다. 이 부분은 인공지능 머신러닝, 데이터 마이닝의 수치해석적 기능에 속한다. 이 글에서는 특히 연역 기능을 컴퓨터에서 구현하기 위한 사실 데이터 표현 방법인 온톨로지와 추론 기능에 해당하는 시멘틱 정보 검색 방법을 간략히 설명한다. 2.3.4 지식의 표현과 시멘틱 지식은 그래프 구조로 나타낼 수 있는 데, 특히, 멀티미디어가 많은 자료들은 그래프 형식으로 자료를 매달아 놓고, 그래프 노드 간의 관계를 정의해 놓으면, 지식을 효과적으로 추가, 삭제, 검색할 수 있는 매우 유연한 구조로 만들 수 있다. 데이터를 그래프로 표현하가 각 데이터의 관계를 정의해 놓으면 다음과 같은 의미있는 질의를 할 수 있다. John likes Neo. 이는 John과 Neo 사이에 어떤 관계가 있는 지를 질의하는 기능을 구현함으로써 가능하다. 시멘틱(semantic. 의미)은 사실관계가 있는 데이터를 그래프 형식으로 나타내어 검색할 수 있을 때 가능한 것이다. 이것이 가능한 데이터베이스를 시멘틱(semantic) 데이터베이스라 하며, 이 데이터베이스의 구조를 온톨로지 데이터 구조라 한다. 참고로, 시멘틱의 개념은 복잡 다양한 웹의 데이터를 효과적으로 검색하기 위한 방법을 개발하기 위해 발생되었다.
  • 120.
    BIM 표준과 구현© 강태욱 Page 120 of 149 데이터와 시멘틱의 차이 2.3.5 온톨로지 개념과 트리플 데이터 구조 시멘틱 데이터베이스를 만들수 있는 도구는 온톨로지(ontology)가 있다. 온톨로지는 도메인에 의존된 지식과 관계를 형식 기술 언어로 명세화한 것이다. 좀 더 쉽게 말하면 사물과 사물 간의 관계를 표현하는 방법이다. An ontology is a formal, explicit specification of a shared conceptualization of a domain of interest) - T. Gruber 예를 들어, 다음과 같은 사물과 관계가 포함되어 있는 문장이 있다고 하자. John friend Susan. 이 문장에는 많은 관계와 가정이 지식으로 포함되어 있다. 예를 들어, John, Susan은 사물이다. 그들과의 관계는 friend이며 friend는 최소 1 명 이상 제약조건이 있다. 이를 OWL로 명세화하면 다음과 같다. John rdf:type owl:Thing . Susan rdf:type owl:Thing . John rdf:type _:x . _:x owl:onProperty friend . _:x owl:minCardinality "1"^^xsd:nonNegativeInteger . 이렇게 사물과의 관계와 의미를 명확히 형식화하는 방법을 온톨로지라 한다. 온톨로지에 대한 상세한 설명은 다음 링크를 참고한다. OWL Web Ontology Language Semantics and Abstract Syntax Appendix B. Examples (Informative)
  • 121.
    BIM 표준과 구현© 강태욱 Page 121 of 149 온톨로지는 그래프 형식으로 지식을 표현하는 저장소 역할을 할 수 있다. 온톨로지는 보통 Triple 형식으로 데이터를 표현하는 데, 최근 실용적으로 많이 사용되는 것은 산업표준인 TTL(Terse RDF Triple Language. Turtle) 그래프 형식의 트리플 포맷이다. 트리플 형식은 다음과 같이 기본적으로 주어, 술어, 목적어 형식의 3 개 데이터를 가진다. 이를 서로 연결하면 그래프 온톨로지 구조가 된다. 주어나 목적어는 그래프의 노드, 술어는 링크로 표현된다. 이를 이용해 복잡한 모델을 간단한 그래프 구조로 만들 수 있다. 이를 이용해 그래프 데이터모델에서 지식을 얻기 위한 추론을 다음과 같이 할 수 있다. Mike → said → (triples → can be → objects) A → has B (B → has C) 온톨로지 그래프 데이터 모델 예시(ontotext)
  • 122.
    BIM 표준과 구현© 강태욱 Page 122 of 149 다음은 온톨로지 저장소는 이런 그래프 데이터 형식으로 구성된 database이다. 이 database에서 추론 등 다양한 query를 하기 위한 정보 질의 표준 언어가 SPARQL이다. 이 언어는 위 그래프 지식 모델에서 A has C? 라는 질문에 대한 결과를 답하기 위해, 그래프 검색을 수행한다. 만약, IoT 데이터를 온톨로지로 구현한다면 온톨로지를 표현하는 스키마 구조를 만들어야 하고, 다음과 같이 스키마가 반영된 온톨로지 데이터 저장소에 데이터를 얻어 저장해야 한다. Room → has → Property set Property set → has → Property IoT sensor Property IoT sensor → has → IoT temperature sensor 온톨로지 표현을 위한 그래프 구조는 확장성이 좋고, 데이터 간 상호운용성 지원이 편리하고, 지식을 탐색하기 용이한 방법이다. 그래프 데이터는 편집기로 작성할 수도 있지만, 전용 편집기를 이용하면 편리하다. 다음과 같은 오픈소스 도구를 이용하면 좀 더 편하게 만들 수 있다.  Ontology Editor  Protege  Fluent Editor 지식 서비스 시스템 구조와 질의 언어 다음은 이를 이용한 일반적인 지식 서비스 시스템 구조를 보여준다. 대부분의 지식 서비스는 다음과 같은 구조를 가진다.
  • 123.
    BIM 표준과 구현© 강태욱 Page 123 of 149 지식 서비스 시스템 구조 그래프 형식으로 표현된 지식을 검색하기 위해서는 검색 언어가 필요하다. 초창기는 SPARQL을 지원하는 JENA란 오픈소스를 사용했으나 자바를 사용하고 무거워, 최근에는 SPARQL을 좀 더 가볍고 편리하게 사용하는 Node.js기반 도구를 이용하는 경향이 많다.  SPARQL 예제 앞의 지식 서비스 시스템을 구현하기 위해서는 지식 데이터를 CRUD(create, read, update, delete)하고 지식을 검색하는 서버를 제공해야 하는 데, Node.js는 서버를 매우 쉽게 만들 수 있다. 게다가, 수많은 무료 도구를 손쉽게 설치할 수 있다. 이외에 페이스 북에서는 수많은 SNS 데이터에서 지식을 검새하기 위해 그래프 DB를 오픈소스로 공개했다.
  • 124.
    BIM 표준과 구현© 강태욱 Page 124 of 149  Facebook - The power of graph  GraphDB and Dragon query engine of Facebook 이를 이용해 다음과 같은 SNS 지식 검색을 수행할 수 있다. Who is John's friend? And does John's friend have family, live in Seattle, and like traveling as a hobby? What is John's annual income and how much will he earn at the next 10 years? How much will Sunny's house price rise in 10 years, and how much will maintenance cost? 물론 검색에 필요한 사실 데이터는 모두 그래프 데이터베이스에 입력되어 있어야 하며, 사실 데이터가 수치일 경우, 머신 러닝 및 통계 패키지를 이용해 계산된 예측값이 그래프 노드 어딘가에 입력되어 있어야 한다. 당연히 예측값 계산은 다양한 통계기법(회귀식, 커브피팅, 딥러닝 등)을 이용해 미리 준비해 놓어야 한다. 2.4 Semantic BIM query 오픈소스 도구 2.4.1 개요 시멘틱 데이터를 만들기 위한 온톨로지 도구는 다양하다. 오픈소스에도 많은 Knowledge base 구조를 제공하는 프로젝트가 많다. 도구는 크게 3 가지로 나뉘는 데, 지식 그래프 모델링 및 질의 도구, wiki 지식 기반 도구, 텍스트 마이닝(text mining)가 있다. wiki도구는 단순한 키워드 검색 추론을 제공한다. 온톨로지 기반의 시멘틱 검색은 그래프 링크에 해당하는 술어 관계도 포함해 지식 검색이 가능하다. 텍스트 마이닝은 텍스트에서 추출한 사실 데이터의 그래프 모델에서 지식을 질의하는 서비스를 가능하게 한다. 이때 텍스트는 워드, 문서, 도면 등이 될 수 있다. 이런 데이터는 ETL(Extract, Transform and Load) 도구를 이용해 추출할 수 있다. 다음은 이와 관련된 기능을 제공하는 오픈소스 링크이다.
  • 125.
    BIM 표준과 구현© 강태욱 Page 125 of 149  Text mining using tidytext  Dgraph graph database  Neo4j graph database  GraphDB and Dragon query engine of Facebook  Wiki tools  Knowledge graph js  Ontology store  Node JS with semantic data  Jena for building semantic web and linked data  Fuseki SPARQL server  Ontology dapi based on Blockchain 이외 최근 딥러닝(Deep Learning)이 발달하면서, 이를 기반으로 한 텍스트 마이닝 기술이 발전하고 있다.
  • 126.
    BIM 표준과 구현© 강태욱 Page 126 of 149 2.4.2 Fuseki 기반 간단한 SPARQL 서버 실행 미리 이런 도구를 설치해 놓고 필요할 때 꺼내서 사용하는 도커(docker) 기반 SPARQL 서버도 있다. fuseki는 편리한 SPARQL 서버로 미리 트리플 형식 데이터를 놓고 업로드해 놓으면 손쉽게 SPARQL 질의를 할 수 있고, 이는 인터넷 상에서 서버로 동작시킬 수 있다. 참고로, 도커는 가상머신처럼 동작하는 컨테이너이다. 이를 이용하면 복잡한 환경과 프로그램을 배포하기 쉽게 이미지로 만든 후 재사용할 수 있다. 사용은 간단하다. 아래 링크를 클릭해 도커를 설치한다.  https://docs.docker.com/desktop/windows/install 다음과 같이 도커 명령행 인터페이스에서 명령을 입력한다. docker run -p 3030:3030 -e ADMIN_PASSWORD=pw123 stain/jena-fuseki Docker에서 fuseki 이미지 실행 모습 크롬에서 localhost:3030 주소를 입력하고, 아이디와 암호를 admin, pw123 으로 입력한다. 그럼, 다음과 같이 query를 사용할 수 있다.
  • 127.
    BIM 표준과 구현© 강태욱 Page 127 of 149 도커에서 실행된 fuseki 기반 SPARQL 서버 참고로, 이 글에서 사용한 fuseki 도커 이미지에 대한 상세한 설명은 아래를 참고하길 바란다. Jena Fuseki 2 docker image doc 각 도구는 목적에 맞게 활용해야 이익을 얻을 수 있다. 그러므로, 도구가 목적에 맞는 지 분석하여 기능을 이용한 후 사용해야 한다. 2.5 BIM 지식 서비스 지원 시멘틱 정보 질의 방법 개발 이 글은 지식 서비스를 위한 BIM 시멘틱 정보 질의 방법을 간단히 알아본다. 이 내용은 시멘틱, 온톨로지, SPARQL, BIM(Building Information Modeling), 트리플(triple), 도커(docker) 등의 개념은 알고 있다는 가정하에 진행한다. 이와 관련된 사항은 아래 링크를 참고한다.  지식 서비스 개발을 위한 그래프 모델과 온톨로지 구조  SPARQL 문법 예제  가상 이미지 컨테이너 도커 사용하기
  • 128.
    BIM 표준과 구현© 강태욱 Page 128 of 149 이 글에서는 온톨로지 모델로 트리플 구조를 사용한다. 트리플 설명, Turtle 파일 포맷, 예제는 다음 링크를 참고한다.  트리블 구조 및 질의 예제  Turtle 설명 및 예제 2.5.1 Jena Fuseki 서버 동작 이 글은 Jena Fuseki 서버를 사용한다. 이미 만들어진 도커 이미지를 이용해 서버를 구동시킨다. 도커 이미지는 stain/jena-fuseki 를 사용한다. Jena Fuseki 서버에 관한 상세 내용은 다음 링크를 참고하라.  Jena Fuseki server 도커 명령 인터페이스(DCI. Docker Command Interface)에서 stain/jena-fuseki 도커를 다운로드 받는다. 도커 이미지를 run하기 전에, 도커 내 Jena Fuseki 작업 데이터를 보관(persist) 및 저장(save)하려면 다음 같이 도커 volume를 먼저 만들어야 한다. 이 경우 사용하기 편리한 busybox를 사용한다. volume 이름은 fuseki-data 이다. docker run --name fuseki-data -v /fuseki busybox 이제 다음과 같이 생성된 도커 volume fuseki-data가 지정된 Jena Fuseki 이미지를 실행한다. docker run -d --name fuseki -p 3030:3030 -e ADMIN_PASSWORD=pw123 --volumes-from fuseki-data stain/jena-fuseki
  • 129.
    BIM 표준과 구현© 강태욱 Page 129 of 149 도커 이미지를 구동한 후 localhost:3030 을 접속하면 다음과 같은 Apache Jena Fuseki 서버 데쉬보드 화면을 볼 수 있다. 참고로 아이디아와 암호는 admin, pw123 이다.
  • 130.
    BIM 표준과 구현© 강태욱 Page 130 of 149 2.5.2 BIM 온토롤지 파일 업로드 Apache Jena Fuseki 메뉴를 이용해 Spider란 이름의 Dataset을 만들고, 다음과 같이 spider.ttl 파일을 저장 후 Jena 에 upload한다. @base <http://example.org/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix rel: <http://www.perceive.net/schemas/relationship/> . <#green-goblin> rel:enemyOf <#spiderman> ; a foaf:Person ; # in the context of the Marvel universe foaf:name "Green Goblin" . <#spiderman> rel:enemyOf <#green-goblin> ; a foaf:Person ; foaf:name "Spiderman", "Человек-паук"@ru . dataset 생성 후 파일 업로드
  • 131.
    BIM 표준과 구현© 강태욱 Page 131 of 149 등록된 그래프 데이터 리스트 결과 질의를 다음과 같이 해보자. PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX foaf: <http://xmlns.com/foaf/0.1/> PREFIX rel: <http://www.perceive.net/schemas/relationship/> SELECT ?subject WHERE { ?subject foaf:name 'Green Goblin' } 그럼 다음과 같이 이름이 Green Goblin 인 subject가 검색된다 .
  • 132.
    BIM 표준과 구현© 강태욱 Page 132 of 149 그래프 데이터 모델 검색 결과 2.5.3 SPARQL 질의 Dataset을 만들고, ifc2x3 ttl 파일을 다운로드하여 다음과 같이 Jena 에 upload한다.
  • 133.
    BIM 표준과 구현© 강태욱 Page 133 of 149 dataset 생성 ttl upload files 업로드된 ifc2x3 ttl 일부 내용
  • 134.
    BIM 표준과 구현© 강태욱 Page 134 of 149 query를 다음과 같이 실행한다. 질의 방법은 PREFIX로 용어를 정의한 네임 스페이스를 설정한 후, SPARQL 구문으로 IfcBuildingElement의 하위 클래스를 질의한다. PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX dce: <http://purl.org/dc/elements/1.1/> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX vann: <http://purl.org/vocab/vann/> PREFIX list: <https://w3id.org/list#> PREFIX expr: <https://w3id.org/express#> PREFIX ifc: <http://ifcowl.openbimstandards.org/IFC2X3_Final#> PREFIX cc: <http://creativecommons.org/ns#> SELECT ?subject WHERE { ?subject rdfs:subClassOf ifc:IfcBuildingElement } 결과는 다음과 같다.
  • 135.
    BIM 표준과 구현© 강태욱 Page 135 of 149 질의 모습
  • 136.
    BIM 표준과 구현© 강태욱 Page 136 of 149 질의 결과 fuseki 도커 서버의 로그를 확인하려면 다음 명령을 입력한다.
  • 137.
    BIM 표준과 구현© 강태욱 Page 137 of 149 서버 종료를 위해 다음과 같이 도커 stop명령을 입력한다. docker stop fuseki 도커 fuseki 서버를 재시작하려면 다음 명령을 입력한다. 참고로 fuseki 서버 run 시 옵션이 저장되므로, 모두 입력할 필요는 없다. docker restart fuseki 다음처럼, 앞서 생성한 dataset 등이 모두 잘 보관되어 실행되는 것을 확인할 수 있다.
  • 138.
    BIM 표준과 구현© 강태욱 Page 138 of 149 데이터 복원된 도커 Jena Fuseki 서버 실행 모습 2.6 마무리 SPARQL을 이용하면 좀 더 복잡하고, 추론적인 질의가 가능하다. 이를 이용해 BIM기반의 다양한 지식 서비스를 좀 더 손쉽게 구현할 수 있다. 요즘에는 딥러닝 기반 채봇 등이 있어, 이와 연결하면 좀 더 인공지능적인 서비스 구현이 가능하다. 다만, 이런 서비스를 위해서는 BIM과 연계된 지식 서비스 구축을 위해서는 대상 소스의 데이터를 <주어-술어-목적어> 트리플 형식으로 구조화해 데이터베이스를 구축해야 한다. 만약, 텍스트 파일에서 트리플 데이터를 생성하기 위해서는 텍스트 마이닝 기법을 사용해야 한다.
  • 139.
    BIM 표준과 구현© 강태욱 Page 139 of 149 3. BIM 응용과 개발 사례 3.1 개요 최근, 건축, 건설 분야에서 스마트 홈, 스마트 빌딩으로 시작된 효과적인 에너지 및 시설물 성능 관리와 운영에 대한 이슈가 스마트 시티로 확대되는 모양이다. 이런 시점에서 건물에 대한 상세한 정보 모델을 지원하는 BIM과 건물 주변의 공간에 대한 정보를 제공하는 GIS의 융합은 필연적인 단계이다. 이 장에서는 BIM-GIS 기반으로 FM을 적용한 사례를 간단히 언급하고, 그 기술적인 프레임웍과 개념에 대해서 논한다. 3.2 LA Aiport FM 사례 이 사례는 BIM Forum에서 LA Airport 에 대한 BIM 기반 FM (Facility Management) 사례를 Frank Peters와 Doug Betts가 나와 발표 한 사례이다. 그림. LAX 모습 (Frank Peters, Doug Betts, LAX FM, 2012, BIMForum) 이 시스템 개발로 위치기반 유지관리, 작업 흐름 개선, 데이터 취득 및 데이터베이스 축척을 통한 지식 베이스 확보 및 데이터 검증 등의 효과를 얻으려 하였다. 아래 그림은 기존에 시설물 관리를 위해 필요한 메뉴얼, 도면, 박스 등을 보여주고 있습니다. 이런 것들을 관리하는 것은 너무 귀찮은 일이다.
  • 140.
    BIM 표준과 구현© 강태욱 Page 140 of 149 그림. 시설물관리 운영 메뉴얼 및 도면, 문서들 (Frank Peters, Doug Betts, LAX FM, 2012, BIMForum) 이 FM 시스템의 아이디어는 아래와 같이 데이베이스를 구축해 프로젝트 데이터와 시공 후 As-built 모델을 연계해 시설물을 관리하는 것이다. 시설물의 As-Built 모델은 역설계(reverse sengineering) 기술을 이용해 모델링하고, 시설물의 위치정보는 GIS 정보를 최대한 활용하였다. 그림. BIM기반 시설물관리 시스템 아이디어
  • 141.
    BIM 표준과 구현© 강태욱 Page 141 of 149 개발을 위해, 각 시설물들의 정보를 효과적으로 분류, 탐색, 관리해야 한다. 이를 위해, 아래와 같이 정보 분류 체계를 정리하였다. 그리고 관리할 시설물에 대한 파라메터를 정의하였다. 그림. 정보분류체계와 시설물 파라메터 정의 시스템의 기반 플랫폼은 마이크로소프트의 Sharepoint 를 사용하였다. 참고로 Sharepoint는 신뢰성있는 협업 플랫폼으로 형상관리과 협업에 필요한 다양한 기능들을 지원하고 API를 통해 사용자가 자동화할 수 있는 플랫폼이다. 그리고 N-Screen 기반이다. 다음 그림은 이러한 플랫폼 기반위에서 Asset, Spare Parts, Safety 등을 관리하게 끔 개발된 LAX FM Project Data 시스템이다. 그림. LAX BIM+FM Project Data
  • 142.
    BIM 표준과 구현© 강태욱 Page 142 of 149 이 시스템에 사용자는 FM에 필요한 정보를 입력을 한다. 정보나 As-built 모델을 웹기반이나 프로젝트 파일 관리 시스템으로 Subcontractor가 입력하도록 하였고, Field Data는 3D scan 모델을 자산 데이터와 함께 역설계해 시설물 객체를 모델링하였다. 이 시스템이 앞의 Project Data 시스템과 통합되어 CAFM, CMMS, GIS 와 연계되어 활용된다. 다음은 사용자가 보고 활용하는 BIM+FM 시스템이다. 그림. LAX BIM+FM 시스템 사용자는 위 시스템을 이용해 시설물을 관리할 수 있다. 왼쪽에 객체 트리는 시설물들이 카테고리 별로 분류가 되어 있다. 이를 이용해 정보를 탐색하면 중앙 화면에 해당 시설물이 자연스럽게 Zoom in되며 보여지고, 오른쪽 아래 화면에서 적절히 필요한 부분만 필터링할 수 있도록 되어 있다. 모든 FM정보는 시각적인 위치 좌표 정보와 함께, 관련된 속성, 메뉴얼, 이력정보, 작업지시정보 등이 연계, 통합되어 있다. 3.3 BIM-GIS FM 기술 프레임웍 프레임워크는 어플리케이션의 구조와 틀을 제공하는 하부의 구조이다. 시스템 개발 시 특정 문제 해결을 쉽게 할 수 있는 기능과 절차를 미리 개발해 놓아 필요할 때 재활용할 수 있도록 한 것이다.
  • 143.
    BIM 표준과 구현© 강태욱 Page 143 of 149 현재는 많은 프로젝트 개발에서 공통 기능의 구현에 있어 프레임워크를 사용하는 사례가 증가하고 있다. 프레임워크의 사용은 일관성 있는 개발방법으로 인해 불필요한 인터페이스 개발 시간을 줄이고 향후 프로그램의 호환성을 높여 지속적인 유지보수를 가능하게 하며 개발 사용자의 수가 늘어남에 따라 기능 구현 시 타 프로그램의 참조가 용이하게 만들어 준다. 도시 시설물 관리의 참조 모델 프레임웍은 아래 표와 같이 정보수집, 정보통합/가공, 정보 활용으로 구분할 수 있다. BIM기반 도시 시설물 관리 참조 모델은 정보 수집통합 연계서비스를 통해 다양한 도시정보를 수집하고 수집된 정보를 내부 시스템과 연계함으로서 통합 시설물 관리에 필요한 서비스는 물론 분야별 정보를 융합한 통합운영 서비스가 Open API로 제공되어야 한다. 또한, 도로 및 지하시설물은 물론 BIM을 통한 건축물까지 포함된 종합적인 도시시설물을 통합하여 관리하고 센서, 현장데이터 등 시설물 유지관리를 위한 데이터를 수집하여 도시시설물 통합 관제가 가능하도록 구성되어야 한다. Open API로 제공되는 인터페이스는 웹 기반의 표준 인터페이스를 준수하여 모바일 등 다양한 환경에서도 동일한 데이터가 제공될 수 있다. 다음 그림에서 우측의 다이어그램은 이러한 워크플로우와 공통 기술 요소를 프레임웍 구조로 정의한 그림이다. 아울러 이 프레임웍을 이용해, 유스케이스 관점에서 정보를 추출하여 사용하는 예를 좌측 그림으로 표현하였다. 그림 속 예시에서는, 도시 시설물 관리자가, 특정 도로 선형 근처 1km 반경 내에 있는 중요 시설물 중, PCI (Performance Condition Index)가 50% 미만인 시설물 정보를 획득해, 오름차순으로 정렬한 후, 그 정보를 유스케이스의 액터(actor)에 던져 준다.
  • 144.
    BIM 표준과 구현© 강태욱 Page 144 of 149 그림. BIM-GIS based FM Integration Framework Reference Model (BG-FM IFRM, Tae-Wook Kang, Jun-Hee Youn, Jang-Wook Kim, Hyun-Sang Choi, 2014, A Study on BIM-based Reference Model for Effective Urban Facility Management, Korea Academia-Industrial cooperation Society) 통합 플랫폼 구성 요소에 대한 정의는 다음과 같다. 표. Integrated Platform Reference Model Component Definition Category Description Urban FM Integrated Urban Information Control (UIC) Controling the Urban Information for the facility management. Open Integrated Urban FM Platform UFM Integrated DB Spatial DB Context Processing DB Data Collection Integration Linkage Service Data Query Engine Adaptive LOD IFC-CityGML Converter 3D Visualization Context Awareness Web Service Component (Security, Log, Session, Exception, Message) BIM-GIS-FM Data Linkage Component (Neutral File Format, Converter, ETL) Open API Service Interface Urban FM System BIM on GIS System Facility Information Management FM Decision Supporting System FM Reporting System FM DB BIM Model Management GIS Model Management BIM-GIS Integration BIM DB GIS DB Urban FM Integrated Control Center Urban Information Control Real-time Remote Monitoring Real-time Context Management Urban Facility Management Urban Energy Management Indoor/Outdoor Navigation Agency Field Data USN /CCTV Urban FM Applications SELECT * FROM Alignment, Building WHERE Buffer(Alignment, Building, ‘1km’) AND Building.Pset(‘FM’).PCI < ‘50%’ ORDERBY Building.Pset(‘FM’).PCI Urban Facility Manager Smart city operator … Use-case driven model
  • 145.
    BIM 표준과 구현© 강태욱 Page 145 of 149 Control Center (ICC) Real-time Remote Monitoring (RRM) FM data monitoring related to FM such as CCTV, Field data, USN data etc. Real-time Context Management (RCM) Facility management by using the context awareness. Urban FM Application (UFMA) Urban Facility Management (UFM) Urban facility management application to support UIC. Urban Energy Management (UEM) Facility management application considering energy optimization. Indoor/Outdoor Navigation (ION) The navigation application for FM operating activities. Open Integrated Urban FM Platform Open API Service Interface The application program interface to support the UFMA's functions. Web Service Component The component which supports the Open API Service Interface. Data Query Engine The query engine for searching the needed FM data which is similar to SQL(Structured Query Language). Adaptive LOD The LOD generation technology for the geometry and property representation performance about the large volume BIM and GIS objects. 3D Visualization BIM and GIS 3D object representation function. IFC-CityGML Converter The converting functions to represent the BIM objects on GIS. Context Awareness The function for operating FM activities considering the FM context effectively. BIM-GIS-FM Data Linkage Component The needed data integration function between BIM, GIS and FM. Context Processing DB DB for managing the context awareness rule about FM. UFM Integrated DB The integrated DB from BIM, GIS and FM. Spatial DB BIM and GIS spatial object such as the polyline,
  • 146.
    BIM 표준과 구현© 강태욱 Page 146 of 149 3D solid DB. Data Collection Integrated Linkage Service The linkage service to extract the data related to FM from the various sensor such as USN, CCTV, Field device etc. Urban FM System Facility Information Management Facility objects CRUD function support. FM Reporting System Facility reporting function to support the decision making. FM Decision Supporting System(DSS) FM DSS function by using the data mining. FM DB Facility Management Database BIM on GIS System BIM-GIS integration BIM-GIS integration function such as BIM-GIS coordination and topology mapping. BIM Model Management BIM model management including the object(Building, Wall, Slab, Door etc). GIS Model Management GIS model management including the object(Road, Sewage, Pipe, Site, Railway etc). GIS DB GIS Database BIM DB BIM Database BIM-GIS기반 FM을 구현하는 요구사항을 정의하는 프레임웍은 유스케이스 관점에 따라 약간의 차이는 있겠으나, 개념적으로 보았을 때는, 크게, 이러한 구성요소가 포함되어야, 도시, 캠퍼스, 대규모 시설물 등을 운영 및 관리하기 위한 유스케이스를 효과적으로 지원할 수 있을 것이다. 이 프레임웍에서 유스케이스에 따라 구현되어야 할 UFMA및 ICC 레이어는 비지니스 모델의 시나리오와 정보 교환 방식을 따라야 하는 것은 당연한 것이다. 비지니스 모델에 근거한 유스케이스 드리븐(use-case driven) 모델에서 시나리오, 정보 교환 모델이 파생되어야 하며, 이러한 정보와 시나리오에 따른 워크플로우를 공통적으로 제공하는 구조와 기술이 뒷맏침되어야 한다.
  • 147.
    BIM 표준과 구현© 강태욱 Page 147 of 149 3.4 결론 지금까지 BIM-GIS기반 FM 사례 및 기술 프레임웍에 대한 내용을 설명해 보았다. 앞서 언급하였다시피, 스마트 시티, 스마트 빌딩, 스마트 홈 시대에서 실내외의 공간 정보를 효과적으로 다루는 기술은 그 중요성이 점점 높아질 수 밖에 없다. 이런 관점에서, 실내외 3 차원 정보 모델을 유스케이스 모델에 따라, 유연하게 정의, 관리하고 서비스하는 기술의 가치는 더욱 높아질 것이라 생각한다.
  • 148.
    BIM 표준과 구현© 강태욱 Page 148 of 149 4. 레퍼런스 ISO/TS 19166:2021, Geographic information — BIM to GIS conceptual mapping (B2GM) BIM principle and philosophy bimprinciple.blogspot.com daddynkidsmakers.blogspot.com IFC specifications database Open Semantic Search buildingSMART international, IFC4 Silk (The Linked Data Integration Framework) Best text analysis and mining tools (#2) KNIME Text Processing Apache OpenNLP Google cloud natural language API Natural Language Toolkit Text mining software BIM ontology, BOT app and BIM ontology visualization Semantic Building Information Model for Facility Management Intelligent System for Facility Management Ontology change management approach for facility management Ontology based facility data model for energy management Ontology based Reference Data Model Ontology based platform for BIM BIM Ontology Linked Open Vocabularies for IoT BIM Topology Ontology, DTU
  • 149.
    BIM 표준과 구현© 강태욱 Page 149 of 149 shorttext