SlideShare a Scribd company logo
1 of 149
Download to read offline
오픈소스 이용하는 방법
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 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)
BIM 표준과 구현 (standard and development)

More Related Content

What's hot

디지털 트윈, 스마트 시티, 그리고 오픈소스
디지털 트윈, 스마트 시티, 그리고 오픈소스 디지털 트윈, 스마트 시티, 그리고 오픈소스
디지털 트윈, 스마트 시티, 그리고 오픈소스 SANGHEE SHIN
 
공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)
공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)
공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)SANGHEE SHIN
 
다분야 공동활용 디지털 플랫폼 사례 공유
다분야 공동활용 디지털 플랫폼 사례 공유다분야 공동활용 디지털 플랫폼 사례 공유
다분야 공동활용 디지털 플랫폼 사례 공유SANGHEE SHIN
 
공간정보 최근 동향과 디지털트윈, 메타버스
공간정보 최근 동향과 디지털트윈, 메타버스공간정보 최근 동향과 디지털트윈, 메타버스
공간정보 최근 동향과 디지털트윈, 메타버스SANGHEE SHIN
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기Chris Ohk
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초 slhead1
 
공간정보, 디지털 트윈, 그리고 스마트 시티
공간정보, 디지털 트윈, 그리고 스마트 시티공간정보, 디지털 트윈, 그리고 스마트 시티
공간정보, 디지털 트윈, 그리고 스마트 시티SANGHEE SHIN
 
디지털트윈 기술 및 스마트시티 적용 사례
디지털트윈 기술 및  스마트시티 적용 사례 디지털트윈 기술 및  스마트시티 적용 사례
디지털트윈 기술 및 스마트시티 적용 사례 SANGHEE SHIN
 
Employers Information Requirements (EIR) Explanatory Notes - P21+ and BIM
Employers Information Requirements (EIR) Explanatory Notes - P21+ and BIMEmployers Information Requirements (EIR) Explanatory Notes - P21+ and BIM
Employers Information Requirements (EIR) Explanatory Notes - P21+ and BIMSimon Owen
 
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for UnrealKyu-sung Choi
 
오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래
오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래
오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래park jinwoo
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현kdh24
 
How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...
How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...
How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...Fabio Roberti
 
2009-2016 기본기(손맵)의 중요성
2009-2016 기본기(손맵)의 중요성2009-2016 기본기(손맵)의 중요성
2009-2016 기본기(손맵)의 중요성Gunho Shin
 
디지털트윈, 스마트시티, 메타버스
디지털트윈, 스마트시티, 메타버스디지털트윈, 스마트시티, 메타버스
디지털트윈, 스마트시티, 메타버스SANGHEE SHIN
 
ゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤー
ゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤーゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤー
ゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤーTatsuya Iwama
 
원격지 개발사업 관리가이드 발표20121020
원격지 개발사업 관리가이드 발표20121020원격지 개발사업 관리가이드 발표20121020
원격지 개발사업 관리가이드 발표20121020hiachim
 
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdfTae wook kang
 
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版小林 信行
 

What's hot (20)

디지털 트윈, 스마트 시티, 그리고 오픈소스
디지털 트윈, 스마트 시티, 그리고 오픈소스 디지털 트윈, 스마트 시티, 그리고 오픈소스
디지털 트윈, 스마트 시티, 그리고 오픈소스
 
공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)
공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)
공간정보와 도시 디지털트윈(부산DX컨퍼런스 발표자료)
 
다분야 공동활용 디지털 플랫폼 사례 공유
다분야 공동활용 디지털 플랫폼 사례 공유다분야 공동활용 디지털 플랫폼 사례 공유
다분야 공동활용 디지털 플랫폼 사례 공유
 
공간정보 최근 동향과 디지털트윈, 메타버스
공간정보 최근 동향과 디지털트윈, 메타버스공간정보 최근 동향과 디지털트윈, 메타버스
공간정보 최근 동향과 디지털트윈, 메타버스
 
청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기청강대 특강 - 프로젝트 제대로 해보기
청강대 특강 - 프로젝트 제대로 해보기
 
QGIS 기초
QGIS 기초 QGIS 기초
QGIS 기초
 
공간정보, 디지털 트윈, 그리고 스마트 시티
공간정보, 디지털 트윈, 그리고 스마트 시티공간정보, 디지털 트윈, 그리고 스마트 시티
공간정보, 디지털 트윈, 그리고 스마트 시티
 
디지털트윈 기술 및 스마트시티 적용 사례
디지털트윈 기술 및  스마트시티 적용 사례 디지털트윈 기술 및  스마트시티 적용 사례
디지털트윈 기술 및 스마트시티 적용 사례
 
Employers Information Requirements (EIR) Explanatory Notes - P21+ and BIM
Employers Information Requirements (EIR) Explanatory Notes - P21+ and BIMEmployers Information Requirements (EIR) Explanatory Notes - P21+ and BIM
Employers Information Requirements (EIR) Explanatory Notes - P21+ and BIM
 
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
게임엔진과 공간정보 3D 콘텐츠 융합 : Cesium for Unreal
 
오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래
오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래
오픈소스 기반의 Digital Twin Platform mago3D의 과거, 현재 그리고 미래
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현
 
How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...
How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...
How to Create a Rock Star BIM Execution Plan (BEP) and MPDT* (Responsibility ...
 
2009-2016 기본기(손맵)의 중요성
2009-2016 기본기(손맵)의 중요성2009-2016 기본기(손맵)의 중요성
2009-2016 기본기(손맵)의 중요성
 
디지털트윈, 스마트시티, 메타버스
디지털트윈, 스마트시티, 메타버스디지털트윈, 스마트시티, 메타버스
디지털트윈, 스마트시티, 메타버스
 
ゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤー
ゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤーゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤー
ゲームエンジンの文法【UE4】No.006 3次元座標(直交座標系) ,UE4の単位,アウトライナ,レイヤー
 
원격지 개발사업 관리가이드 발표20121020
원격지 개발사업 관리가이드 발표20121020원격지 개발사업 관리가이드 발표20121020
원격지 개발사업 관리가이드 발표20121020
 
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
오픈소스로 쉽게 따라해보는 Unreal과 IoT 연계 및 개발 방법 소개.pdf
 
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版『THE COMPREHENSIVE PBR GUIDE  Volume 1: The Theory of PBR by Allegorithmic』私家訳版
『THE COMPREHENSIVE PBR GUIDE Volume 1: The Theory of PBR by Allegorithmic』私家訳版
 

Similar to BIM 표준과 구현 (standard and development)

Operation Logic Manager
Operation Logic ManagerOperation Logic Manager
Operation Logic ManagerLee Seungki
 
스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)YOONSEOK JANG
 
ifcpp build guide
ifcpp build guideifcpp build guide
ifcpp build guideJUNHEEKIM27
 
소프트웨어설계론
소프트웨어설계론소프트웨어설계론
소프트웨어설계론JeongDong Kim
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션DoHyun Jung
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요Hankyo
 
왜 클리커일까요
왜 클리커일까요왜 클리커일까요
왜 클리커일까요CiscoKorea
 
Abim ipd studies draft 1 (final version)
Abim ipd studies draft 1 (final version)Abim ipd studies draft 1 (final version)
Abim ipd studies draft 1 (final version)Tae wook kang
 
IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30InGuen Hwang
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Yeon Soo Kim
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Sa-ryong Kang
 
[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트
[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트
[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트미래웹기술연구소 (MIRAE WEB)
 

Similar to BIM 표준과 구현 (standard and development) (20)

bsk_3_1_1
bsk_3_1_1bsk_3_1_1
bsk_3_1_1
 
bsk_02_01
bsk_02_01bsk_02_01
bsk_02_01
 
bsk_01_01
bsk_01_01bsk_01_01
bsk_01_01
 
bsk_3_1_2
bsk_3_1_2bsk_3_1_2
bsk_3_1_2
 
Operation Logic Manager
Operation Logic ManagerOperation Logic Manager
Operation Logic Manager
 
스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)스마트 팩토리 표준화(RAMI 4.0 quick review)
스마트 팩토리 표준화(RAMI 4.0 quick review)
 
bsk_02_04
bsk_02_04bsk_02_04
bsk_02_04
 
bsk_3_4_2
bsk_3_4_2bsk_3_4_2
bsk_3_4_2
 
ifcpp build guide
ifcpp build guideifcpp build guide
ifcpp build guide
 
소프트웨어설계론
소프트웨어설계론소프트웨어설계론
소프트웨어설계론
 
SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션SOSCON2015 SI이노베이션
SOSCON2015 SI이노베이션
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요
 
왜 클리커일까요
왜 클리커일까요왜 클리커일까요
왜 클리커일까요
 
Abim ipd studies draft 1 (final version)
Abim ipd studies draft 1 (final version)Abim ipd studies draft 1 (final version)
Abim ipd studies draft 1 (final version)
 
bsk_03_02
bsk_03_02bsk_03_02
bsk_03_02
 
IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30IT표준화-아키텍처,프로세스-2015.09.30
IT표준화-아키텍처,프로세스-2015.09.30
 
Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수Spring3 발표자료 - 김연수
Spring3 발표자료 - 김연수
 
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
Droid knights 2019 - (Large-scale App을 위한) Android Architecture 총정리
 
bsk_04_01
bsk_04_01bsk_04_01
bsk_04_01
 
[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트
[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트
[Sencha 엔터프라이즈 웹애플리케이션 세미나] MVC 아키텍트를 적용한 모니터링 관제시스템 구축 _인젠트
 

More from Tae wook kang

3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약Tae wook kang
 
Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화Tae wook kang
 
ISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mappingISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mappingTae wook kang
 
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발Tae wook kang
 
오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발Tae wook kang
 
한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개Tae wook kang
 
Coding, maker and SDP
Coding, maker and SDPCoding, maker and SDP
Coding, maker and SDPTae wook kang
 
오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커Tae wook kang
 
AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트Tae wook kang
 
건설 스타트업과 오픈소스
건설 스타트업과 오픈소스건설 스타트업과 오픈소스
건설 스타트업과 오픈소스Tae wook kang
 
블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약Tae wook kang
 
4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인Tae wook kang
 
Case Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard modelCase Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard modelTae wook kang
 
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기 도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기 Tae wook kang
 
Smart BIM for Facility Management
Smart BIM for Facility ManagementSmart BIM for Facility Management
Smart BIM for Facility ManagementTae wook kang
 
메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것Tae wook kang
 
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용Tae wook kang
 
IoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIMIoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIMTae wook kang
 
스마트시티 프레임웍과 기술분류체계
스마트시티 프레임웍과 기술분류체계스마트시티 프레임웍과 기술분류체계
스마트시티 프레임웍과 기술분류체계Tae wook kang
 
스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준
스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준
스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준Tae wook kang
 

More from Tae wook kang (20)

3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약3D 모델러 ADDIN 개발과정 요약
3D 모델러 ADDIN 개발과정 요약
 
Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화Python과 node.js기반 데이터 분석 및 가시화
Python과 node.js기반 데이터 분석 및 가시화
 
ISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mappingISO 19166 BIM-GIS conceptual mapping
ISO 19166 BIM-GIS conceptual mapping
 
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
SBF(Scan-BIM-Field) 기반 스마트 시설물 관리 기술 개발
 
오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발오픈소스 ROS기반 건설 로보틱스 기술 개발
오픈소스 ROS기반 건설 로보틱스 기술 개발
 
한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개한국 건설 기술 전망과 건설 테크 스타트업 소개
한국 건설 기술 전망과 건설 테크 스타트업 소개
 
Coding, maker and SDP
Coding, maker and SDPCoding, maker and SDP
Coding, maker and SDP
 
오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커오픈 데이터, 팹시티와 메이커
오픈 데이터, 팹시티와 메이커
 
AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트AI - Media Art. 인공지능과 미디어아트
AI - Media Art. 인공지능과 미디어아트
 
건설 스타트업과 오픈소스
건설 스타트업과 오픈소스건설 스타트업과 오픈소스
건설 스타트업과 오픈소스
 
블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약블록체인 기반 건설 스마트 서비스와 계약
블록체인 기반 건설 스마트 서비스와 계약
 
4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인4차산업혁명과 건설, 그리고 블록체인
4차산업혁명과 건설, 그리고 블록체인
 
Case Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard modelCase Study about BIM on GIS platform development project with the standard model
Case Study about BIM on GIS platform development project with the standard model
 
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기 도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
도시 인프라 공간정보 데이터 커넥션-통합 기술 표준화를 위한 ISO TC211 19166 개발 이야기
 
Smart BIM for Facility Management
Smart BIM for Facility ManagementSmart BIM for Facility Management
Smart BIM for Facility Management
 
메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것메이커 시티와 메이커 운동 참여를 통해 얻은 것
메이커 시티와 메이커 운동 참여를 통해 얻은 것
 
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
최신 3차원 이미지 스캔 역설계 기술 전망 및 건설 활용
 
IoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIMIoT 기반 건설 지능화와 BIM
IoT 기반 건설 지능화와 BIM
 
스마트시티 프레임웍과 기술분류체계
스마트시티 프레임웍과 기술분류체계스마트시티 프레임웍과 기술분류체계
스마트시티 프레임웍과 기술분류체계
 
스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준
스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준
스마트시티 공간정보 서비스 지원을 위한 BIM-GIS 객체 맵핑 표준
 

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 )