Pendahuluan
Sehubungan dengan kebijakan Partai dan Pemerintah , ada perubahan aktif dalam undang-undang untuk memperkenalkan teknologi BIM - Membangun Pemodelan Informasi. Sebagai kelanjutan dari garis Partai, kami akan mempertimbangkan format presentasi terbuka BIM - IFC (Kelas Yayasan Industri).

Sejarah IFC dimulai pada 1995 (pada kenyataannya, pada musim panas 1993
[1] ), ketika Autodesk Corporation dengan sekelompok "kawan-kawan" mengorganisir perjanjian kartel untuk mengembangkan format pertukaran untuk berbagai sistem CAD untuk desain bangunan. Setahun kemudian, kawan-kawan sampai pada pemahaman bahwa format ini harus dibuka dan dikembangkan oleh organisasi dengan keanggotaan terbuka, sebagaimana Aliansi Internasional untuk Interoperabilitas muncul pada tahun 1996. Kemudian, pada 2008, organisasi ini berganti nama menjadi gedung SMART - untuk glamor yang lebih besar.
Pengembang IFC tidak memiliki imajinasi yang kaya, dan tidak memiliki kesempatan untuk menerapkannya - mereka menetapkan tenggat waktu yang sangat sederhana, dan tugas tersebut terlihat sangat global. Oleh karena itu, mereka mengambil format LANGKAH (Standar untuk Pertukaran data model Produk), atau lebih tepatnya Protokol Aplikasi 225: Elemen Bangunan sebagai dasar. Saya harus mengatakan bahwa sekitar LANGKAH infrastruktur yang kaya telah dibuat dalam bentuk banyak spesifikasi dalam status standar ISO. Infrastruktur ini didasarkan pada bahasa pemodelan data EXPRESS dan inkarnasi grafisnya EXPRESS-G, bahasa ini dikembangkan untuk kenyamanan menghasilkan kode secara otomatis dalam berbagai bahasa pemrograman.
Pengembangan IFC dimulai pada September 1995, IFC 1.0 diterbitkan pada Juni 1996, versi finalnya pada Januari 1997. Faktanya, tujuan dari versi pertama IFC adalah untuk menunjukkan kemungkinan mewujudkan tujuan, berbagai perusahaan mempresentasikan demonstrasi ekspor / impor dalam format ini.
Versi berikutnya dirilis pada November 1997 - 1.5, tetapi upaya untuk mengimplementasikannya dengan cepat mengungkapkan banyak kesalahan yang membutuhkan pengembangan versi tetap 1.5.1, yang diperkenalkan bersamaan dengan pengembangan versi 2.0 - yang diperkenalkan pada Maret 1999.
Semua versi ini sekarang sudah tidak digunakan lagi.
Versi 2.1 dirilis pada November 2000. Ini adalah versi tertua untuk dokumentasi yang tersedia. Itu kemudian diterbitkan sebagai ISO / PAS 16739: 2005.
Sekarang versi yang paling umum (yang dipahami sebagian besar program) adalah IFC 2.3.
Perangkat lunak
Untuk membaca IFC, editor teks dengan penyorotan sintaks berguna, misalnya, saya menggunakan kode n ++ dan vs dengan pengaturan sintaksis IFC yang kikuk.
Tetapi alat lain yang diperlukan adalah program yang mampu memvisualisasikan grafik di IFC. Sekarang ada banyak pemirsa untuk ini dan bahkan yang gratis, secara pribadi, saya lebih suka
XbimXplorer dari proyek
xBIM . Saya juga menggunakan Revit, tetapi saya harus mengatakan bahwa Revit murni tidak terlalu bersahabat dengan IFC - bahkan tidak dapat membaca file yang dibuatnya (ya, Autodesk's Revit tidak tahu cara bekerja dengan format yang ditemukan oleh Autodesk - ini adalah kartu panggil Autodesk Tetapi mereka tidak membuat Revit, tetapi membelinya - seperti biasa), tetapi dia tidak memiliki plugin yang buruk untuk ini -
IFC untuk Revit (saat menulis artikel, dia menemukan beberapa kesalahan, itu perlu diperbaiki ketika ada waktu ...)
Saya harus mengatakan bahwa format IFC sangat membingungkan sehingga tidak ada program yang menanganinya dengan benar - masing-masing melakukannya dengan caranya sendiri. Jadi XbimXplorer mengabaikan grafik 2d dan beberapa kesalahan sintaksis.
Deskripsi
Format IFC ada dalam tiga bentuk: IFC-SPF (.ifc), IFC-XML (.ifcXML), IFC-ZIP (.ifcZIP)
IFC-SPF adalah format teks yang didefinisikan dalam ISO 10303-21 - sebenarnya itu adalah file LANGKAH
IFC-XML adalah format XML yang didefinisikan dalam ISO 10303-28 ("STEP-XML")
IFC-ZIP - Arsip zip yang mungkin berisi .ifc atau .ifcXML
Struktur file IFC-SPF dijelaskan dalam
ISO 10303-21 (ada GOST ISO 10303-21-2002) dalam notasi Wirth. Ini adalah file teks yang hanya menggunakan karakter dengan kode dalam kisaran 32-126 (edisi ketiga memungkinkan penggunaan karakter dengan kode 127-255, tetapi tidak disarankan - untuk kompatibilitas)
Komentar multi-baris ditandai dengan pasangan karakter / * * /
Ada beberapa cara untuk menulis karakter dalam pengkodean yang berbeda
Rekam ISO 8859 :
Arahan \ S \ - kode karakter setelah arahan menunjukkan kode karakter pada tabel ISO 8859-1
Arahan \ P * \ - di sini, alih-alih * harus berupa huruf Latin huruf besar, ini menunjukkan jumlah tabel ISO 8859 yang digunakan untuk arahan \ S \, A berarti ISO 8859-1, B berarti ISO 8859-2, dll.
Rekam ISO 10646 :
Arahan \ X \ - arahan diikuti oleh angka heksadesimal dua digit yang menunjukkan karakter dalam kisaran dari U + 0000 hingga U + 00FF
Arahan \ X2 \ * \ X0 \ dan \ X4 \ * \ X0 \ - di sini bukan * ada urutan bilangan heksadesimal dua digit (X2) atau empat digit (X4) yang menunjukkan karakter yang sesuai
Halo Dunia! => \ X2 \ 041F04400438043204350442 \ X0 \, \ X2 \ 041C04380440 \ X0 \!
Panjang string mentah maksimum - 32769 byte
Struktur file - file dimulai dengan baris ISO-10303-21; dan berakhir dengan garis END-ISO-10303-21; meskipun mungkin masih ada bagian tanda tangan SIGNATURE_SECTION, tapi saya tidak akan mempertimbangkan opsi ini.
Di antara baris-baris ini harus ada bagian tajuk HEADER_SECTION, setelah itu dapat ada bagian ANCHOR_SECTION dan / atau REFERENCE_SECTION, serta satu atau lebih DATA_SECTION (di IFC hanya ada satu)
HEADER_SECTION - Struktur bagian tajuk IFC hanya mengizinkan tiga elemen di bagian ini: FILE_DESCRIPTION, FILE_NAME, FILE_SCHEMA
ENTITY file_description;
description : LIST [1:?] OF STRING (256) ;
implementation_level : STRING (256) ;
END_ENTITY;
Opsi minimum:
FILE_DESCRIPTION (('ViewDefinition [CoordinationView_V2.0]'), '2; 1');
Konten deskripsi sangat penting untuk IFC - itu mencantumkan add-on ViewDefinition yang digunakan, konten ExchangeRequirement dan opsi
[2] , tetapi hanya elemen ViewDefinition yang diperlukan.
implement_level terdiri dari dua digit, yang pertama menunjukkan revisi ISO-10303-21 (tiga di antaranya), yang kedua - mode kompatibilitas (dua di antaranya), dijelaskan dalam klausul 4.3 ISO-10303-21. Untuk IFC, implementasi_level selalu penting - 2; 1
Opsi lain:
FILE_DESCRIPTION (('ViewDefinition [CoordinationView_V2.0, QuantityTakeOffAddOnView]', 'ExchangeRequirement [Struktural]'), '2; 1');
ENTITY file_name;
name : STRING (256) ;
time_stamp : time_stamp_text ;
author : LIST [ 1 : ? ] OF STRING (256) ;
organization : LIST [ 1 : ? ] OF STRING (256) ;
preprocessor_version : STRING (256) ;
originating_system : STRING (256) ;
authorization : STRING (256) ;
END_ENTITY;
Semua nilai dapat dibiarkan kosong. Nama file, cap waktu, penulis, organisasi, versi preprosesor, program penulisan, otorisasi.
ENTITY file_schema;
schema_identifiers : LIST [1:?] OF UNIQUE schema_name;
END_ENTITY;
Nama skema yang menjelaskan konten bagian data (lihat kolom Identifier pada tabel di atas)
Bagian data dimulai dengan kata kunci DATA; dan diakhiri dengan ENDSEC; Isi bagian ini adalah urutan entitas dari sintaks berikut:
# <entitas index> = <entitas name> (<daftar atribut>);
Entitas yang memungkinkan dan parameternya dijelaskan dalam bagan IFC.
File IFC kosong:
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1');
FILE_NAME('','',(''),(''),'','','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
ENDSEC;
END-ISO-10303-21;
Bagian data
Elemen root dari IFC adalah
IfcProject . Di sini perlu untuk mengetahui bagaimana daftar atribut terbentuk, yang diperlukan untuk membuat entitas, pertama, entitas dapat memiliki atribut sendiri, dan kedua, ia dapat mewarisinya dari leluhur, urutan atribut ditentukan - dari leluhur ke keturunan. Untuk IfcProject, rantai warisan adalah sebagai berikut: IfcRoot => IfcObjectDefinition => IfcObject => IfcProject.
IFCPROJECT(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>, <LongName>,<Phase>, (<RepresentationContexts>),<UnitsInContext>);
Sekarang, untuk membuat Proyek Ifc, kita perlu mengatur nilai untuk semua atribut. Atribut pertama yang diwarisi dari IfcRoot - GlobalId, memiliki nilai IfcGloballyUniqueId. Ini adalah tipe sederhana - string dengan panjang 22 karakter, Anda perlu menulis GUID atau UUID unik di dalamnya, sehingga angka 128-bit dimasukkan ke 22 karakter - ada algoritma khusus yang diterbitkan di situs web buildingSMART
[3] . Atribut OwnerHistory berikut disetel ke IfcOwnerHistory. Elemen ini menjawab pertanyaan - siapa, bagaimana dan kapan membuat elemen IFC ini, pada kenyataannya, untuk hampir setiap objek di IFC penulisnya dapat ditunjukkan melalui elemen ini. Untuk mengisi atribut ini, Anda dapat membuat elemen "di tempat", tetapi lebih baik melakukannya di tempat lain, dan di tempat hanya merujuknya dengan catatan dari formulir # <entitas index>. Simbol $ juga berarti nilai nol, simbol * digunakan jika keturunan memberikan nilai pada atribut leluhur. Nilai tipe enum ditulis antara dua poin - .ELEMENT.
Contoh membuat IfcProject:
#1=IFCPROJECT('abcdefghijklmnopqrs101', #2, 'sample project', $, $, '','',$,$);
#2=IFCOWNERHISTORY(#3,#6,.READWRITE.,.ADDED.,87763554,#3,#6,87763554);
#3=IFCPERSONANDORGANIZATION(#4,#5,());
#4=IFCPERSON('Public','Jane','Q.',(),(),(),(),());
#5=IFCORGANIZATION($,'Architecture by Jane Q. Public, Inc.',$,(),());
#6=IFCAPPLICATION(#7,'Version 1.0','Building Architecture Toolkit','BAT1.0');
#7=IFCORGANIZATION($,'Creating Instance Software, Inc.',$,(),());
Elemen-elemen berikut <Name>, <Description>, <ObjectType>, <LongName>, <Phase> - opsional dan teks (IfcLabel, IfcText) - deskripsi proyek untuk seseorang
RepresentationContexts adalah daftar ruang / konteks, idenya adalah bahwa kita dapat memiliki beberapa ruang / konteks, misalnya: sketsa, proyek, dan dokumentasi kerja. Dan objek yang berbeda mungkin memiliki representasi berbeda dalam konteks yang berbeda. Misalnya, dinding dalam sketsa hanyalah sebuah garis, dalam proyek itu sudah memiliki ketebalan, dan dalam dokumentasi kerja itu terdiri dari lapisan yang berbeda. Namun dalam IFC2x3 konsep telah berubah, konteks 'Sketsa', 'Garis Besar', 'Desain', 'Detail' telah dibatalkan atau mereka pindah ke IfcGeometricRepresentationSubContext. Dan kelas IfcRepresentationContext itu sendiri menjadi abstrak, dengan satu keturunan - IfcGeometricRepresentationContext, yang dapat berupa volumetrik ContextType = 'Model', CoordinateSpaceDimension = 3, flat ContextType = 'Plan', CoordinateSpaceDimension = 2 dan FIG tahu apa yang ContextType = Tidak '.
IFCGEOMETRICREPRESENTATIONCONTEXT(<>,<>,< >,< - >,< >,< >)
UnitsInContext - objek IfcUnitAssignment yang membentuk daftar elemen IfcUnit dengan deskripsi unit proyek, perlu untuk impor yang tepat, jika tidak, perangkat lunak akan menggunakan pengaturan default - misalnya, di Revit ada kaki (ia menyimpan semua kaki).
#2= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#3= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#4= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#5= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#6= IFCUNITASSIGNMENT((#2,#3,#4,#5));
Dari elemen IfcProject root, pohon elemen terbentuk, turunan dari tipe IfcSpatialStructureElement (IfcBuilding (bangunan), IfcBuildingStorey (lantai), IfcSpace (ruang atau ruang), IfcSite (situs)). Tetapi elemen-elemen ini tidak terhubung secara langsung, tetapi melalui elemen IfcRelAggregates khusus, dalam hubungan satu ke banyak.
IFCRELAGGREGATES(<GlobalId>, <OwnerHistory>, <>, <>, < >, (< >));
Elemen-elemen ini hanya dapat dihubungkan dengan urutan berikut: IfcSite => IfcBuilding => IfcBuildingStorey => IfcSpace, dan elemen-elemen dari tipe yang sama dapat dihubungkan, tetapi kemudian atribut CompositionType mereka harus memiliki nilai yang berbeda dan hanya dalam urutan tertentu COMPLEX => ELEMENT => PARTIAL
Struktur proyek yang memungkinkan:
IfcSite.COMPLEX => IfcSite.ELEMENT => IfcSite.PARTIAL => IfcBuilding.COMPLEX => IfcBuilding.ELEMENT => IfcBuilding.PARTIAL => IfcBuildingStorey.COMPLEX => IfcBuildingStorey.COMPRE = = IfcSpace.ELEMENT => IfcSpace.PARTIAL
file ifcMeskipun semua elemen bersifat opsional, hanya urutan warisan yang diperlukan
Diasumsikan bahwa Anda menggambarkan sebuah Bangunan, yang terdiri dari lantai Storey dan di mana ada ruang, Anda perlu menunjukkan bantuan Situs yang ada di mana Anda memasuki gedung Anda.
IFCSITE(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<LongName>,<CompositionType>,<RefLatitude>,<RefLongitude>,<RefElevation>,<LandTitleNumber>,<SiteAddress>);
Atribut Representasi yang diwarisi dari IfcProduct menunjuk ke objek IfcProductRepresentation, memiliki dua keturunan IfcProductDefinitionShape untuk menggambarkan bentuk objek dan IfcMaterialDefinitionRepresentation untuk menggambarkan materi (gaya visualisasi), mereka menghubungkan representasi yang berbeda melalui atribut Representasi.
IfcProductDefinitionShape(<>,<>,(<Representations>))
IfcMaterialDefinitionRepresentation(<>, <>,<Representations>),<RepresentedMaterial>)
IfcMaterialDefinitionRepresentation for Representations hanya menerima IfcStyledRepresentation - deskripsi gaya
Atribut RepresentedMaterial menyediakan deskripsi tekstual dari materi objek.
IfcProductDefinitionShape for Representations hanya menerima IfcShapeRepresentation atau IfcTopologyRepresentation (IfcShapeModel)
IfcShapeRepresentation adalah kelas yang paling penting di IFC karena bertanggung jawab untuk representasi geometrik objek. Tipe geometri yang tersedia: Curve2D (garis datar), GeometricSet (titik, garis, permukaan, 2d dan 3d), SurfaceModel (permukaan), SolidModel (badan), tipe tambahan (BoundingBox, SectionedSpine, MappedRepresentation)
IFCSHAPEREPRESENTATION(<>,<RepresentationIdentifier>,< >,< >);
Inti dari setiap geometri adalah elemen IfcCartesianPoint - hanya sebuah titik.
#13= IFCCARTESIANPOINT((0.,0.,0.));
#16= IFCCARTESIANPOINT((1.,0.,0.));
#22= IFCPOLYLINE((#13, #16));
#510= IFCBSPLINECURVEWITHKNOTS(3,(#511,#512,#513,#514,#511,#512,#513),.UNSPECIFIED.,.T.,.T.,(1,1,1,1,1,1,1,1,1,1,1),(-7.0,-6.0,-5.0,-4.0,-3.0,-2.0,-1.0,0.0,1.0,2.0,3.0),.UNSPECIFIED.);
#511= IFCCARTESIANPOINT((239.758213537139,192.193559404919,-83.9999999999991));
#512= IFCCARTESIANPOINT((0.0,275.591853484122,-83.9999999999991));
#513= IFCCARTESIANPOINT((-239.75821353295,192.193559404918,-83.9999999999991));
#514= IFCCARTESIANPOINT((0.0,-108.13323051355,-83.9999999999991));
#34= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#35));
#35= IFCEXTRUDEDAREASOLID(#36,#8,#37,0.5);
#36= IFCRECTANGLEPROFILEDEF(.AREA.,$,#38,0.5,0.5);
#37= IFCDIRECTION((0.,0.,1.));
#38= IFCAXIS2PLACEMENT2D(#39,#9);
#7= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#8,#9);
#8= IFCAXIS2PLACEMENT3D(#10,$,$);
#9= IFCDIRECTION((0.,1.));
#39= IFCCARTESIANPOINT((0.,0.));
Geometri mungkin hanya terdiri dari daftar titik, atau mungkin memiliki struktur yang kompleks dengan banyak parameter dan anak-anak.
Pertimbangkan
IfcExtrudedAreaSolid(<SweptArea>,<Position>,<ExtrudedDirection>,<Depth>)

Ini adalah badan yang diperoleh dengan mengekstrusi garis datar asli asli SweptArea yang terletak di ruang Posisi yang diekstrusi ke arah ExtrudedDirection ke kedalaman ExtrudedDirection. Atribut SweptArea adalah tipe IfcProfileDef - ini adalah kelas abstrak dengan sejumlah besar keturunan "untuk semua kesempatan", dalam hal ini
IfcRectangleProfileDef(<ProfileType>,<ProfileName>,<Position>,<XDim>,<YDim>)
ProfileType - tipe profil dan nilai tipe IfcProfileTypeEnum (Nilai: CURVE, AREA). Nama profil ProfileName opsional, penentuan posisi, dan ukuran menurut koordinat XY adalah XDim, YDim.

Atau IfcFacetedBrep yang lebih kompleks, terdiri dari satu IfcClosedShell yang tertutup, yang pada gilirannya terdiri dari daftar wajah IfcFace, yang terdiri dari tepi IfcFaceBound, yang dijelaskan oleh loop IfcLoop, yang sudah terdiri dari titik IfcCartesianPoint. Representasi batas (brep) menentukan banyak kondisi pada strukturnya - dijelaskan secara rinci dalam dokumentasi dan literatur terkait.
#57= IFCSHAPEREPRESENTATION(#7, 'Body', 'Brep', (#58));
#58= IFCFACETEDBREP(#59);
#59= IFCCLOSEDSHELL((#80, #81, #82, #83, #84, #85));
#60 = IFCCARTESIANPOINT((0.,0.,0.));
#61 = IFCCARTESIANPOINT((1.,0.,0.));
#62 = IFCCARTESIANPOINT((1.,1.,0.));
#63 = IFCCARTESIANPOINT((0.,1.,0.));
#64 = IFCCARTESIANPOINT((0.,0.,1.));
#65 = IFCCARTESIANPOINT((1.,0.,1.));
#66 = IFCCARTESIANPOINT((1.,1.,1.));
#67 = IFCCARTESIANPOINT((0.,1.,1.));
#68= IFCPOLYLOOP((#60, #61, #62, #63));
#69= IFCPOLYLOOP((#64, #65, #66, #67));
#70= IFCPOLYLOOP((#60, #61, #65, #64));
#71= IFCPOLYLOOP((#61, #62, #66, #65));
#72= IFCPOLYLOOP((#62, #63, #67, #66));
#73= IFCPOLYLOOP((#63, #60, #64, #67));
#74= IFCFACEOUTERBOUND(#68, .T.);
#75= IFCFACEOUTERBOUND(#69, .T.);
#76= IFCFACEOUTERBOUND(#70, .T.);
#77= IFCFACEOUTERBOUND(#71, .T.);
#78= IFCFACEOUTERBOUND(#72, .T.);
#79= IFCFACEOUTERBOUND(#73, .T.);
#80= IFCFACE((#74));
#81= IFCFACE((#75));
#82= IFCFACE((#76));
#83= IFCFACE((#77));
#84= IFCFACE((#78));
#85= IFCFACE((#79));

IfcAdvancedBrep telah muncul di IFC4, ujung-ujungnya dapat dijelaskan oleh kurva NURBS

Objek IfcSpatialStructureElement dapat memiliki geometri sendiri, tetapi secara umum, bangunan terdiri dari objek lain: dinding, lantai, atap, jendela, pintu, dll. Di IFC, semua objek ini dijelaskan oleh objek yang sesuai: IfcWall, IfcSlab, IfcRoof, IfcWindow, IfcDoor - semua mereka adalah keturunan dari IfcProduct. Semua objek ini dapat dikaitkan dengan objek IfcSpatialStructureElement yang sesuai, melalui objek IfcRelContainedInSpatialStructure yang sesuai

IFCRELCONTAINEDINSPATIALSTRUCTURE(<GlobalId>,<OwnerHistory>,<>,<>, (<RelatedElements>),<RelatingStructure>)
Untuk dinding dengan ketebalan konstan, biasanya menggunakan IfcWallStandardCase (dianggap usang di IFC4), untuk kasus lain kami menggunakan IfcWall. Dalam kasus IfcWallStandardCase, Anda perlu menggunakan kontur dinding SweptSolid - ekstrusi hingga ketinggian tertentu
IFCWALLSTANDARDCASE(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>);
#8= IFCAXIS2PLACEMENT3D(#10,$,$);
#10= IFCCARTESIANPOINT((0.,0.,0.));
#13= IFCLOCALPLACEMENT($,#8);
#22= IFCDIRECTION((0.,0.,1.));
#23= IFCAXIS2PLACEMENT2D(#24,#25);
#24= IFCCARTESIANPOINT((0.,0.));
#25= IFCDIRECTION((1.,0.));
#26= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs107',$,'wall1',$,'',#13,#27,'');
#27= IFCPRODUCTDEFINITIONSHAPE($,$,(#28));
#28= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#29));
#29= IFCEXTRUDEDAREASOLID(#30,#32,#22,1000.);
#30= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,100.,1000.);
#31= IFCCARTESIANPOINT((500.,0.,100.));
#32= IFCAXIS2PLACEMENT3D(#31,$,$);
Pintu dijelaskan oleh objek IfcDoor, dapat ditambahkan ke IfcRelContainedInSpatialStructure, tetapi objek ini tidak membuat "memotong" di dinding untuk dirinya sendiri

Objek khusus "IfcOpeningElement" bertanggung jawab atas "cut", yang dikaitkan dengan objek "induk" melalui IfcRelVoidsElement. Di IfcOpeningElement, Anda bisa "memasukkan" pintu menggunakan objek IfcRelFillsElement. Dengan IfcOpeningElement Anda dapat membuat tidak hanya melalui lubang, tetapi juga ceruk.


IFCDOOR(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<OverallHeight>,<OverallWidth>)
IFCWINDOW(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<OverallHeight>,<OverallWidth>)
Objek IfcWindow sangat mirip digunakan, ifcDoor, OverallHeight, OverallWidth - dimensi nominal, Anda tidak dapat menentukan - maka nilai-nilai ini akan diambil dari geometri
Objek IfcRoof tersirat oleh objek yang kompleks - itu harus menggambarkan seluruh atap, untuk menghubungkan semua anak dengan itu - Anda perlu menggunakan IfcRelAggregates. Tetapi pada saat yang sama, IfcRoof dapat memiliki geometri Representasi sendiri.
IFCSLAB(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<PredefinedType>);
IFCROOF(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<IfcRoofTypeEnum>);
Menulis IFC
Sekarang, dengan berbekal pengetahuan ini, kami akan mencoba menggambarkan sebuah rumah sederhana, untuk awalnya kami akan mengambil file IFC kosong - deskripsi yang telah saya berikan
file IFC kosongISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1');
FILE_NAME('','',(''),(''),'','','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
ENDSEC;
END-ISO-10303-21;
Selanjutnya, kita perlu mengisi konten bagian DATA. Objek yang diperlukan pertama harus IFCPROJECT (meskipun bisa di akhir file, tetapi hanya perlu), kita juga perlu IFCUNITASSIGNMENT, jika kita tentu ingin program membaca model dalam satuan ukuran yang ada dalam pikiran kita. Kami juga membutuhkan setidaknya satu IFCGEOMETRICREPRESENTATIONCONTEXT - jika tidak, kami tidak akan dapat menambahkan deskripsi geometri.
IFCPROJECT, IFCUNITASSIGNMENT, IFCGEOMETRICREPRESENTATIONCONTEXT#1=IFCPROJECT('abcdefghijklmnopqrs101', $, 'Project #1', $, $, '','', (#7), #6);
/* */
#2= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#3= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#4= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#5= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#6= IFCUNITASSIGNMENT((#2,#3,#4,#5));
/* */
#7= IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.01,#8,#9);
#8= IFCAXIS2PLACEMENT3D(#10,$,$);
#9= IFCDIRECTION((0.,1.));
#10= IFCCARTESIANPOINT((0.,0.,0.));
Struktur rumah
IFCBUILDING => IFCBUILDINGSTOREY => IFCRELCONTAINEDINSPATIALSTRUKTUR/* */
#11= IFCBUILDING('abcdefghijklmnopqrs102', $, $, $, $, #13, $, $, .ELEMENT., $, $, $);
#12= IFCRELAGGREGATES('abcdefghijklmnopqrs103', $, $, $, #1, (#11));
#13= IFCLOCALPLACEMENT($,#8);
/* */
#14= IFCBUILDINGSTOREY('abcdefghijklmnopqrs104',$,'level1',$,'',#13,$,'',.ELEMENT.,0.);
#15= IFCRELAGGREGATES('abcdefghijklmnopqrs103', $, $, $, #11, (#14));
#16= IFCRELCONTAINEDINSPATIALSTRUCTURE('abcdefghijklmnopqrs105',$,$,$,(#17, #26, #33, #39, #46, #57, #94, #101),#14);
Mari kita gambarkan gendernya - IFCSLAB#17= IFCSLAB('abcdefghijklmnopqrs106',$,'slab',$,'',#13,#18,'',.BASESLAB.);
#18= IFCPRODUCTDEFINITIONSHAPE($,$,(#19));
#19= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#20));
#20= IFCEXTRUDEDAREASOLID(#21,#8,#22,100.);
#21= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,1000.,1000.);
#22= IFCDIRECTION((0.,0.,1.));
#23= IFCAXIS2PLACEMENT2D(#24,#25);
#24= IFCCARTESIANPOINT((0.,0.));
#25= IFCDIRECTION((1.,0.));
Empat dinding#26= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs107',$,'wall1',$,'',#13,#27,'');
#27= IFCPRODUCTDEFINITIONSHAPE($,$,(#28));
#28= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#29));
#29= IFCEXTRUDEDAREASOLID(#30,#32,#22,1000.);
#30= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,100.,1000.);
#31= IFCCARTESIANPOINT((500.,0.,100.));
#32= IFCAXIS2PLACEMENT3D(#31,$,$);
#33= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs108',$,'wall2',$,'',#13,#34,'');
#34= IFCPRODUCTDEFINITIONSHAPE($,$,(#35));
#35= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#36));
#36= IFCEXTRUDEDAREASOLID(#30,#38,#22,1000.);
#37= IFCCARTESIANPOINT((-500.,0.,100.));
#38= IFCAXIS2PLACEMENT3D(#37,$,$);
#39= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs110',$,'wall3',$,'',#13,#40,'');
#40= IFCPRODUCTDEFINITIONSHAPE($,$,(#41));
#41= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#42));
#42= IFCEXTRUDEDAREASOLID(#43,#45,#22,1000.);
#43= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,1000.,100.);
#44= IFCCARTESIANPOINT((0.,-500.,100.));
#45= IFCAXIS2PLACEMENT3D(#44,$,$);
#46= IFCWALLSTANDARDCASE('abcdefghijklmnopqrs109',$,'wall4',$,'',#13,#47,'');
#47= IFCPRODUCTDEFINITIONSHAPE($,$,(#48));
#48= IFCSHAPEREPRESENTATION(#7,'Body','SweptSolid',(#49));
#49= IFCEXTRUDEDAREASOLID(#50,#52,#22,1000.);
#50= IFCRECTANGLEPROFILEDEF(.AREA.,$,#23,1000.,100.);
#51= IFCCARTESIANPOINT((0.,500.,100.));
#52= IFCAXIS2PLACEMENT3D(#51,$,$);
Pintu#57= IFCDOOR('abcdefghijklmnopqrs111',$,'door',$,'',#88,#86,'',$,$);
#86= IFCPRODUCTDEFINITIONSHAPE($,$,(#87));
#87= IFCSHAPEREPRESENTATION(#7,'Body','Brep',(#58));
#58= IFCFACETEDBREP(#59);
#59= IFCCLOSEDSHELL((#80, #81, #82, #83, #84, #85));
#60 = IFCCARTESIANPOINT((0.,0.,0.));
#61 = IFCCARTESIANPOINT((200.,0.,0.));
#62 = IFCCARTESIANPOINT((200.,200.,0.));
#63 = IFCCARTESIANPOINT((0.,200.,0.));
#64 = IFCCARTESIANPOINT((0.,0.,500.));
#65 = IFCCARTESIANPOINT((200.,0.,500.));
#66 = IFCCARTESIANPOINT((200.,200.,500.));
#67 = IFCCARTESIANPOINT((0.,200.,500.));
#68= IFCPOLYLOOP((#60, #61, #62, #63));
#69= IFCPOLYLOOP((#64, #65, #66, #67));
#70= IFCPOLYLOOP((#60, #61, #65, #64));
#71= IFCPOLYLOOP((#61, #62, #66, #65));
#72= IFCPOLYLOOP((#62, #63, #67, #66));
#73= IFCPOLYLOOP((#63, #60, #64, #67));
#74= IFCFACEOUTERBOUND(#68, .T.);
#75= IFCFACEOUTERBOUND(#69, .T.);
#76= IFCFACEOUTERBOUND(#70, .T.);
#77= IFCFACEOUTERBOUND(#71, .T.);
#78= IFCFACEOUTERBOUND(#72, .T.);
#79= IFCFACEOUTERBOUND(#73, .T.);
#80= IFCFACE((#74));
#81= IFCFACE((#75));
#82= IFCFACE((#76));
#83= IFCFACE((#77));
#84= IFCFACE((#78));
#85= IFCFACE((#79));
#88= IFCLOCALPLACEMENT($,#89);
#89= IFCAXIS2PLACEMENT3D(#90,$,$);
#90= IFCCARTESIANPOINT((-100.,400.,100.));
#91= IFCRELVOIDSELEMENT('abcdefghijklmnopqrs112',$,$,$,#46,#92);
#92= IFCOPENINGELEMENT('abcdefghijklmnopqrs113',$,$,$,'Opening',#88,#86,$);
#93= IFCRELFILLSELEMENT('abcdefghijklmnopqrs114',$,$,$,#92,#57);
Untuk menggambarkan pintu, kami menggunakan IFCFACETEDBREP dan menggunakannya untuk IFCOPENINGELEMENT di mana pintu kami dimasukkan. Dengan menggunakan IFCLOCALPLACEMENTs yang berbeda, kita dapat menyisipkan geometri yang sama di tempat yang berbeda dan untuk mewakili objek yang berbeda - misalnya, kita dapat menggunakan IFCFACETEDBREP yang sama untuk jendela.
Jendelanya#94= IFCWINDOW('abcdefghijklmnopqrs115',$,$,$,$,#95,#86,$,$,$);
#95= IFCLOCALPLACEMENT($,#96);
#96= IFCAXIS2PLACEMENT3D(#97,$,$);
#97= IFCCARTESIANPOINT((-100.,-600.,400.));
#98= IFCRELVOIDSELEMENT('abcdefghijklmnopqrs116',$,$,$,#39,#99);
#99= IFCOPENINGELEMENT('abcdefghijklmnopqrs117',$,$,$,'Opening',#95,#86,$);
#100= IFCRELFILLSELEMENT('abcdefghijklmnopqrs118',$,$,$,#99,#94);
Atap#101= IFCROOF('abcdefghijklmnopqrs119',$,$,$,$,#105,$,$,.FLAT_ROOF.);
#102= IFCSLAB('abcdefghijklmnopqrs120',$,'roof',$,'',#105,#18,'',.ROOF.);
#103= IFCAXIS2PLACEMENT3D(#104,$,$);
#104= IFCCARTESIANPOINT((0.,0.,1100.));
#105= IFCLOCALPLACEMENT(#13,#103);
#106= IFCRELAGGREGATES('abcdefghijklmnopqrs121',$,$,$,#101,(#102));
file selesai

Kesimpulan
Sekarang, pembaca yang budiman, Anda dapat menulis rumah impian Anda. Sayangnya, saya tidak mempertimbangkan IfcMaterialDefinitionRepresentation, yang ditolak untuk gaya menampilkan objek, tidak mempertimbangkan IfcTopologyRepresentation - Saya tidak benar-benar mengerti untuk apa itu dan saya tidak tahu bagaimana memvisualisasikannya. Saya tidak mempertimbangkan opsi IFC dan set properti tambahan. Tetapi sebaliknya ini tidak akan menjadi pengantar singkat.
Format IFC berisi sejumlah besar objek, yang hanya menjadi lebih dari versi ke versi. Dalam teks spesifikasi ada catatan yang tidak tercermin dalam skema EXPRESS, tetapi sangat mempengaruhi pemrosesan file. Oleh karena itu, sulit untuk mengimplementasikan format ini tanpa harus dengan cermat membaca semua dokumentasi, tetapi ini hampir tidak mungkin untuk satu orang, oleh karena itu tidak ada program - yang membacanya dengan benar, masing-masing memiliki kekhasan tersendiri. Dan jika dalam kasus program open source selalu ada kesempatan untuk memperbaiki kesalahan yang terdeteksi, untuk program berpemilik ini tidak memungkinkan untuk sepenuhnya menggunakan format IFC.
Format IFC sama sekali tidak cocok untuk menyimpan informasi dari bagian rencana umum, tetapi saat ini ada pekerjaan aktif pada bagian ini, pekerjaan ini harus diselesaikan pada akhir April 2020 dan menjadi bagian dari IFC5. Juga sekarang, pekerjaan sedang berlangsung di Jalan IFC, Bandara IFC dan Prakiraan IFC4 (pracetak). Jembatan IFC muncul di IFC4x2, di mana mereka datang dengan objek geometris khusus - IfcSectionedSolidHorizontal

Perubahan terbaru dalam IFC membawanya sangat dekat dengan GML, bahkan IfcCoordinateReferenceSystem telah muncul - deskripsi sistem koordinat geodetik. Pada saat yang sama, IFC berfokus pada deskripsi struktur internal objek, dan GML menjelaskan representasi eksternalnya. Tetapi perbedaan utama antara IFC adalah bahwa dimungkinkan untuk merujuk ke objek yang sama di tempat yang berbeda - titik yang sama dapat digunakan dalam deskripsi geometri dinding dan jendela. Dalam GML, setiap objek geometris sepenuhnya independen.
Referensi:
1. www.ibpsa.org/proceedings/BS1997/BS97_P125.pdf2. standards.buildingsmart.org/documents/Implementation/ImplementationGuide_IFCHeaderData_Version_1.0.2.pdf3. technical.buildingsmart.org/resources/ifcimplementationguidance/ifc-guid