مقدمة
فيما يتعلق بسياسة الحزب والحكومة ، هناك تغيير نشط في التشريعات من أجل إدخال تكنولوجيا BIM - نمذجة معلومات البناء. استمرارًا لخط الحزب ، سننظر في تنسيق العرض التقديمي المفتوح BIM - IFC (فئات المؤسسات الصناعية).

يبدأ تاريخ مؤسسة التمويل الدولية في عام 1995 (في الواقع ، في صيف عام 1993
[1] ) ، عندما نظمت شركة Autodesk Corporation ومجموعة من "الرفاق" اتفاقية كارتل لتطوير صيغة تبادل لمختلف أنظمة CAD لتصميم المباني. بعد سنة ، توصل الرفاق إلى أن هذا التنسيق يجب أن يكون مفتوحًا وتطويره من قبل منظمة ذات عضوية مفتوحة ، كما ظهر التحالف الدولي للتشغيل البيني في عام 1996. في وقت لاحق ، في عام 2008 ، تم تغيير اسم المنظمة إلى buildingSMART - لمزيد من التألق.
لم يكن لدى مطوري مؤسسة التمويل الدولية خيال غني ، ولم تتح لهم الفرصة لتطبيقه - لقد تم تحديد مواعيد نهائية متواضعة للغاية ، وكانت المهمة تبدو عالمية جدًا. لذلك ، أخذوا تنسيق STEP (قياسي لتبادل بيانات طراز المنتج) ، أو بالأحرى بروتوكول التطبيق 225: عناصر البناء كأساس. يجب أن أقول أنه حول STEP تم إنشاء بنية تحتية غنية في شكل مجموعة من المواصفات في حالة معايير ISO. تعتمد هذه البنية الأساسية على لغة نمذجة بيانات EXPRESS وتجسيدها الرسومي EXPRESS-G ؛ وقد تم تطوير هذه اللغة لتوفير الراحة في إنشاء التعليمات البرمجية التلقائية بلغات البرمجة المختلفة.
بدأ تطوير مؤسسة التمويل الدولية في سبتمبر 1995 ، وتم نشر مؤسسة التمويل الدولية 1.0 في يونيو 1996 ، وكانت النسخة النهائية في يناير 1997. في الواقع ، كان الهدف من الإصدار الأول من مؤسسة التمويل الدولية هو إظهار إمكانية تحقيق الهدف ، حيث قدمت العديد من الشركات عروضها المتعلقة بالتصدير / الاستيراد في هذا التنسيق.
في نوفمبر 1997 ، تم إصدار الإصدار التالي - 1.5 ، لكن محاولة تنفيذه سرعان ما كشفت عن العديد من الأخطاء التي تتطلب تطوير إصدار ثابت 1.5.1 ، والذي تم تقديمه بالتوازي مع تطوير الإصدار 2.0 - والذي تم تقديمه في مارس 1999.
يتم الآن إهمال كل هذه الإصدارات.
تم إصدار الإصدار 2.1 في نوفمبر 2000. هذا هو الإصدار الأقدم الذي تتوفر فيه المستندات. تم نشره لاحقًا باسم ISO / PAS 16739: 2005.
الآن الإصدار الأكثر شيوعًا (الذي تفهمه معظم البرامج) هو IFC 2.3.
ناعم
لقراءة IFC ، يعد محرر النصوص بتمييز بناء الجملة مفيدًا ، على سبيل المثال ، استخدمت n ++ و vs code مع إعدادات بناء جملة IFC الخرقاء الخاصة بي.
ولكن هناك أداة أخرى ضرورية ستكون برنامجًا قادرًا على تصور الرسومات في IFC. يوجد الآن الكثير من المشاهدين لهذا وحتى المشاهدين ؛ شخصيًا ، أفضل
XbimXplorer من مشروع
xBIM . لقد استخدمت Revit أيضًا ، لكن يجب أن أقول إن Revit الخالص ليس ودودًا للغاية مع IFC - إنه ليس قادرًا حتى على قراءة الملف الذي أنشأه (نعم ، لا يعرف Revit Autodesk كيفية التعامل مع التنسيق الذي اخترعه Autodesk - هذه هي بطاقة اتصال Autodesk لكنهم لم يتوصلوا إلى Revit ، لكنهم اشتروها - كالمعتاد) ، لكن ليس لديه مكون إضافي سيئ لهذا -
IFC for Revit (أثناء كتابة المقال ، وجد عدة أخطاء ، سوف تحتاج إلى إصلاح عندما يكون هناك وقت ...)
يجب أن أقول أن تنسيق IFC مربك للغاية لدرجة أنه لا يوجد برنامج يعالجه بشكل صحيح - يقوم كل منهم بذلك بطريقته الخاصة. حتى XbimXplorer يتجاهل الرسومات 2D وبعض الأخطاء في بناء الجملة.
وصف
يوجد تنسيق IFC بثلاثة أشكال: IFC-SPF (.ifc) ، IFC-XML (.ifcXML) ، IFC-ZIP (.ifcZIP)
IFC-SPF هو تنسيق نصي معرف في ISO 10303-21 - في الواقع هو ملف STEP
IFC-XML هو تنسيق XML معرف في ISO 10303-28 ("STEP-XML")
IFC-ZIP - أرشيف مضغوط قد يحتوي على .ifc أو .ifcXML
تم وصف هيكل ملف IFC-SPF في
المواصفة القياسية ISO 10303-21 (هناك GOST ISO 10303-21-2002) بترميز Wirth. هذا ملف نصي يستخدم فقط الأحرف التي تحتوي على رموز في النطاق 32-126 (الإصدار الثالث يسمح باستخدام الأحرف ذات الرموز 127-255 ، ولكن لا ينصح به - من أجل التوافق)
يتم تمييز التعليقات متعددة الأسطر بأزواج من الأحرف / * * /
هناك عدة طرق لكتابة الأحرف بترميز مختلف
سجل ISO 8859 :
التوجيه \ S \ - يشير رمز الحرف بعد التوجيه إلى رمز الحرف في الجدول ISO 8859-1
التوجيه \ P * \ - هنا ، بدلاً من * يجب أن يكون حرفًا لاتينيًا كبيرًا ، فإنه يشير إلى رقم الجدول ISO 8859 المستخدم للتوجيه \ S \ ، A تعني ISO 8859-1 ، B تعني ISO 8859-2 ، إلخ.
سجل ISO 10646 :
التوجيه \ X \ - يتبع التوجيه رقم سداسي عشري مكون من رقمين يشير إلى وجود حرف في النطاق من U + 0000 إلى U + 00FF
التوجيهات \ X2 \ * \ X0 \ و \ X4 \ * \ X0 \ - هنا بدلاً من * يوجد تسلسل من الأرقام السداسية المكونة من رقمين (X2) أو أربعة أرقام (X4) التي تشير إلى الأحرف المقابلة
مرحبا العالم! => \ X2 \ 041F04400438043204350442 \ X0 \ ، \ X2 \ 041C04380440 \ X0 \!
الحد الأقصى لطول السلسلة الخام - 32769 بايت
بنية الملف - يبدأ الملف بالسطر ISO-10303-21 ؛ وينتهي بخط END-ISO-10303-21 ؛ رغم أنه قد لا يزال هناك قسم توقيع SIGNATURE_SECTION ، إلا أنني لن أفكر في هذا الخيار.
بين هذه السطور ، يجب أن يكون هناك قسم رأس HEADER_SECTION ، بعد أن يكون هناك قسمان ANCHOR_SECTION و / أو REFERENCE_SECTION ، بالإضافة إلى قسم أو أكثر من DATA_SECTION (في IFC يوجد قسم واحد فقط)
HEADER_SECTION - تسمح بنية قسم رأس مؤسسة التمويل الدولية بثلاثة عناصر فقط في هذا القسم: FILE_DESCRIPTION ، FILE_NAME ، FILE_SCHEMA
ENTITY file_description;
description : LIST [1:?] OF STRING (256) ;
implementation_level : STRING (256) ;
END_ENTITY;
الخيار الأدنى:
FILE_DESCRIPTION (('ViewDefinition [CoordView_V2.0]')، '2؛ 1')؛
يعد محتوى الوصف مهمًا للغاية بالنسبة إلى IFC - فهو يسرد الوظائف الإضافية المستخدمة في ViewDefinition ومحتوى ExchangeRequirement وخيارات الخيار
[2] ، ولكن عنصر ViewDefinition فقط هو المطلوب
يتكون التنفيذ من رقمين ، الأول يشير إلى إصدار ISO-10303-21 (هناك ثلاثة منهم) ، والثاني هو وضع التوافق (يوجد اثنان منهم) ، الموصوف في الفقرة 4.3 من ISO-10303-21. بالنسبة إلى مؤسسة التمويل الدولية ، فالتطبيق على الدوام مهم - 2 ؛ 1
خيار آخر:
FILE_DESCRIPTION (('ViewDefinition [CoordView_V2.0، QuantityTakeOffAddOnView]'، 'ExchangeRequirement [Structural]')، '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;
يمكن ترك جميع القيم فارغة. اسم الملف ، ختم الوقت ، المؤلف ، المنظمة ، إصدار المعالج الأولي ، برنامج التأليف ، التفويض.
ENTITY file_schema;
schema_identifiers : LIST [1:?] OF UNIQUE schema_name;
END_ENTITY;
اسم المخطط الذي يصف محتويات قسم البيانات (انظر عمود المعرف في الجدول أعلاه)
يبدأ قسم البيانات بكلمة DATA الأساسية ؛ وينتهي ENDSEC ؛. محتويات هذا القسم هي سلسلة من الكيانات للبناء التالي:
# <فهرس الكيان> = <الكيان اسم> (<قائمة السمات>) ؛
الكيانات المحتملة ومعلماتها موصوفة في مخطط IFC.
ملف IFC فارغ:
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1');
FILE_NAME('','',(''),(''),'','','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
ENDSEC;
END-ISO-10303-21;
قسم البيانات
العنصر الجذر في IFC هو
IfcProject . من الضروري هنا معرفة كيفية تكوين قائمة السمات ، وهو أمر ضروري لإنشاء الكيان ، أولاً ، يمكن أن يكون للكيان سماته الخاصة ، وثانيًا ، يمكنه أن يرثها من الأسلاف ، ويتم تعيين ترتيب السمات من السلف إلى السليل. بالنسبة إلى IfcProject ، ستكون سلسلة الميراث كما يلي: IfcRoot => IfcObjectDefinition => IfcObject => IfcProject.
IFCPROJECT(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>, <LongName>,<Phase>, (<RepresentationContexts>),<UnitsInContext>);
الآن ، لإنشاء IfcProject ، نحتاج إلى تعيين القيم لجميع السمات. السمة الأولى الموروثة من IfcRoot - GlobalId ، لها القيمة IfcGloballyUniqueId. هذا نوع بسيط - سلسلة بطول 22 حرفًا ، تحتاج إلى كتابة GUID أو UUID فريدة من نوعها فيها ، بحيث يتم نقل رقم 128 بت إلى 22 حرفًا - هناك خوارزمية خاصة منشورة على موقع buildingSMART على الويب
[3] . يتم تعيين السمة OwnerHistory التالية على IfcOwnerHistory. يجيب هذا العنصر على الأسئلة - من وكيف وكيف ومتى تم إنشاء عنصر IFC هذا ، في الواقع ، لكل كائن في IFC تقريبًا يمكن الإشارة إلى مؤلفه من خلال هذا العنصر. لملء هذه السمة ، يمكنك إنشاء عنصر "في المكان" ، لكن من الأفضل القيام بذلك في مكان آخر ، والرجوع إليه في المكان فقط مع سجل النموذج # <فهرس الكيان>. أيضًا ، يشير الرمز $ إلى قيمة فارغة ، ويتم استخدام الرمز * إذا كان السليل يعين القيمة لسمة السلف. تتم كتابة قيم نوع التعداد بين نقطتين - .ELEMENT.
مثال على إنشاء 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.',$,(),());
العناصر التالية <اسم> ، <وصف> ، <نوع> ، <اسم طويل> ، <المرحلة> - اختياري ونص (IfcLabel ، IfcText) - وصف للمشروع لشخص
التمثيل هو عبارة عن قائمة من المسافات / السياقات ، كانت الفكرة أنه يمكن أن يكون لدينا عدة مسافات / سياقات ، على سبيل المثال: رسم ، مشروع ووثائق عمل. والكائنات المختلفة قد يكون لها تمثيلات مختلفة في سياقات مختلفة. على سبيل المثال ، الجدار الموجود في الرسم هو مجرد خط ، وفي المشروع بالفعل سمك ، وفي وثائق العمل يتكون من طبقات مختلفة. لكن في IFC2x3 تم تغيير المفهوم ، إما أن سياقات "Sketch" ، "Outline" ، "Design" ، "Detail" إما تم إلغاؤها أو تم نقلها إلى IfcGeometricReprاضرationSubContext. وأصبحت الفئة IfcRepresentationContext نفسها مجردة ، مع سليل واحد - IfcGeometricRepresentationContext ، والذي يمكن أن يكون ContumTric ContextType = 'Model' ، CoordinateSpaceDimension = 3 ، Flat ContextType = 'Plan' ، CoordinateSpaceDimension = 2 و FIG يعرف ما ContextType = 2
IFCGEOMETRICREPRESENTATIONCONTEXT(<>,<>,< >,< - >,< >,< >)
UnitsInContext - كائن IfcUnitAssignment الذي يشكل قائمة بعناصر IfcUnit مع وصف لوحدات المشروع ، فمن الضروري للاستيراد المناسب ، وإلا فإن البرنامج سوف يستخدم إعداداته الافتراضية - على سبيل المثال ، في Revit هناك أقدام (يخزن كل شيء بالأقدام).
#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));
من عنصر الجذر IfcProject ، يتم تكوين شجرة من العناصر ، أحفاد نوع IfcSpatialStructureElement (IfcBuilding (building) ، IfcBuildingStorey (floor) ، IfcSpace (space أو room) ، IfcSite (site)). لكن هذه العناصر غير مرتبطة مباشرة ، ولكن من خلال عنصر خاص في IfcRelAggregates ، في علاقة رأس بأطراف.
IFCRELAGGREGATES(<GlobalId>, <OwnerHistory>, <>, <>, < >, (< >));
لا يمكن توصيل هذه العناصر إلا بالترتيب التالي: IfcSite => IfcBuilding => IfcBuildingStorey => IfcSpace ، ويمكن أن تكون العناصر من نفس النوع متصلة ، ولكن بعد ذلك يجب أن يكون للسمة CompositionType قيمة مختلفة وفقط بترتيب معين COMPLEX => ELEMENT => PARTIAL
هيكل المشروع الكامل الممكن:
IfcSite.COMPLEX => IfcSite.ELEMENT => IfcSite.PARTIAL => IfcBuilding.COMPLEX => IfcBuilding.ELEMENT => IfcBuilding.PARTIAL => IfcBuildingStorey.COMPLEX => IfcBuildingStorey.COMPLEX => IfcBuildingStoreyCIAL = PARTIRE> = IfcSpace.ELEMENT => IfcSpace.PARTIAL
ملف ifcعلى الرغم من أن جميع العناصر اختيارية ، فإن ترتيب الوراثة فقط هو المطلوب
من المفترض أنك تصف مبنى ، يتكون من طوابق طوابق وفي أي مسافات ، فأنت بحاجة إلى إظهار موقع الإغاثة الحالي الذي تدخل فيه المبنى
IFCSITE(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<LongName>,<CompositionType>,<RefLatitude>,<RefLongitude>,<RefElevation>,<LandTitleNumber>,<SiteAddress>);
تحتوي السمة التمثيل الموروثة من نقاط IfcProduct إلى كائن IfcProductRepresentation ، ولديها أحفاد IfcProductDefinitionShape لوصف شكل الكائن و IfcMaterialDefinitionRepr Presentation لوصف المادة (نمط التصور) ، فإنها تربط بين تمثيلات مختلفة من خلال السمة التمثيل.
IfcProductDefinitionShape(<>,<>,(<Representations>))
IfcMaterialDefinitionRepresentation(<>, <>,<Representations>),<RepresentedMaterial>)
IfcMaterialDefinitionRepr Presentation for Presentations يقبل IfcStyledRepr Presentation - أوصاف النمط فقط
توفر السمة RepresentedMaterial وصفًا نصيًا لمواد الكائن.
IfcProductDefinitionShape for Presentations لا يقبل إلا IfcShapeRepre Presentation أو IfcTopologyRepre Presentation (IfcShapeModel)
IfcShapeRepresentation هي الفئة الأكثر أهمية في IFC لأنها مسؤولة عن التمثيل الهندسي للكائنات. أنواع الأشكال الهندسية المتاحة: Curve2D (الخطوط المسطحة) ، GeometricSet (النقاط والخطوط والأسطح ثنائية وثلاثية الأبعاد) و SurfaceModel (السطوح) و SolidModel (الأجسام) وأنواع إضافية (BoundingBox و SectionedSpine و MappedRepre Presentation)
IFCSHAPEREPRESENTATION(<>,<RepresentationIdentifier>,< >,< >);
في قلب أي هندسة ، يوجد عنصر IfcCartesianPoint - مجرد نقطة.
#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.));
قد تتكون الهندسة ببساطة من قائمة بالنقاط ، أو قد تحتوي على بنية معقدة مع مجموعة من المعلمات والأطفال.
ضع في اعتبارك
IfcExtrudedAreaSolid(<SweptArea>,<Position>,<ExtrudedDirection>,<Depth>)

هذا هو الجسم الذي تم الحصول عليه عن طريق بثق محيط مستو SweptArea الأصلي الموجود في مساحة الموضع المبثوق في اتجاه ExtrudedDirection إلى عمق ExtrudedDirection. سمة SweptArea هي من النوع IfcProfileDef - هذه فئة تجريدية تحتوي على عدد كبير من المتحدرين "لجميع المناسبات" ، في هذه الحالة يتم استخدام
IfcRectangleProfileDef(<ProfileType>,<ProfileName>,<Position>,<XDim>,<YDim>)
ProfileType - قيمة التعداد لنوع ملف التعريف من النوع IfcProfileTypeEnum (القيم: CURVE ، AREA). اسم ملف تعريف ProfileName الاختياري وموضع الموضع والحجم حسب إحداثيات XY هي XDim و YDim.

أو IfcFacetedBrep الأكثر تعقيدًا ، فهو يتكون من IfcClosedShell مغلق واحد ، والذي يتكون بدوره من قائمة وجوه IfcFace ، والتي تتكون من حواف IfcFaceBound ، والتي تم وصفها بواسطة حلقات IfcLoop ، والتي تتكون بالفعل من نقاط IfcCartesianPoint. يفرض تمثيل الحدود (brep) الكثير من الشروط على بنيته - الموصوفة بالتفصيل في الوثائق والأدبيات ذات الصلة.
#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 في IFC4 ، يمكن وصف حوافها بواسطة منحنيات NURBS

يمكن أن تحتوي كائنات العنصر IfcSpatialStructure على هندسة خاصة بها ، ولكن بشكل عام ، تتكون المباني من كائنات أخرى: الجدران والأرضيات والسقوف والنوافذ والأبواب ، إلخ. في IFC ، يتم وصف كل هذه الكائنات بالكائنات المقابلة: IfcWall ، IfcSlab ، IfcRoof ، IfcWindow ، IfcWindow ، IfcDoor - all هم أحفاد IfcProduct. يمكن ربط كل هذه الكائنات بكائن IfcSpatialStructureElement المقابل ، من خلال كائن IfcRelContainedInSpatialStructure الخاص.

IFCRELCONTAINEDINSPATIALSTRUCTURE(<GlobalId>,<OwnerHistory>,<>,<>, (<RelatedElements>),<RelatingStructure>)
بالنسبة للجدران ذات السماكة الثابتة ، من المعتاد استخدام IfcWallStandardCase (يعتبر قديمًا في IFC4) ، وفي حالات أخرى نستخدم IfcWall. في حالة IfcWallStandardCase ، يلزمك استخدام SweptSolid - كفاف الجدار المبثوق إلى ارتفاع معين
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,$,$);
تم وصف الباب بواسطة كائن IfcDoor ، ويمكن إضافته إلى IfcRelContainedInSpatialStructure ، لكن هذا الكائن لا يجعل "القطع" في الجدار لنفسه

الكائن الخاص "IfcOpeningElement" هو المسؤول عن "القص" ، المرتبط بالكائن "الأصل" من خلال IfcRelVoidsElement. في IfcOpeningElement ، يمكنك "إدراج" باب باستخدام كائن IfcRelFillsElement. مع IfcOpeningElement ، لا يمكنك القيام فقط من خلال الثقوب ، ولكن أيضًا الاستراحة.


IFCDOOR(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<OverallHeight>,<OverallWidth>)
IFCWINDOW(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<OverallHeight>,<OverallWidth>)
كائن IfcWindow متشابه للغاية في الاستخدام ، ifcDoor ، OverallHeight ، OverallWidth - الأبعاد الاسمية ، لا يمكنك تحديد - ثم سيتم أخذ هذه القيم من الشكل الهندسي
إذا تم تضمين كائن IfcRoof بواسطة كائن معقد - يجب أن يصف السقف بأكمله ، لربط جميع الأطفال به - تحتاج إلى استخدام IfcRelAggregates. ولكن في الوقت نفسه ، يمكن أن يكون لدى IfcRoof هندسة التمثيل الخاصة به.
IFCSLAB(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<PredefinedType>);
IFCROOF(<GlobalId>,<OwnerHistory>,<>,<>,<ObjectType>,<ObjectPlacement>,<Representation>,<Tag>,<IfcRoofTypeEnum>);
كتابة IFC
الآن ، مسلحين بهذه المعرفة ، سنحاول وصف منزل بسيط ، لبداية سنأخذ ملف IFC فارغًا - الوصف الذي أعطيته بالفعل
ملف IFC فارغISO-10303-21;
HEADER;
FILE_DESCRIPTION(('ViewDefinition [CoordinationView_V2.0]'),'2;1');
FILE_NAME('','',(''),(''),'','','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
ENDSEC;
END-ISO-10303-21;
بعد ذلك ، نحتاج إلى ملء محتويات قسم البيانات. يجب أن يكون الكائن المطلوب الأول هو IFCPROJECT (على الرغم من أنه يمكن أن يكون في نهاية الملف ، ولكن يجب أن يكون فقط) ، نحتاج أيضًا إلى IFCUNITASSIGNMENT ، إذا كنا نريد بالتأكيد أن تقرأ البرامج النموذج في وحدات القياس التي نضعها في الاعتبار. سنحتاج أيضًا إلى واحد على الأقل من IFCGEOMETRICREPRESENTATIONCONTEXT - وإلا فلن نتمكن من إضافة وصف للهندسة.
IFCPROJECT ، IFCUNITIGNIGNATION ، 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.));
هيكل المنزل
IFCBUILDING => IFCBUILDINGSTOREY => IFCRELCONTAINEDINSPATIALSTRUCTURE/* */
#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);
دعونا وصف الجنس - 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.));
أربعة جدران#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,$,$);
الباب#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);
لوصف الباب ، نستخدم IFCFACETEDBREP ونستخدمه في IFCOPENINGELEMENT الذي تم إدخال بابنا فيه. باستخدام IFCLOCALPLACEMENTs مختلفة ، يمكننا إدراج نفس الهندسة في أماكن مختلفة وتمثيل كائنات مختلفة - على سبيل المثال ، يمكننا استخدام IFCFACETEDBREP نفسه للإطار.
النافذة#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);
السقف#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));
ملف الانتهاء

استنتاج
الآن ، يا عزيزي القارئ ، يمكنك كتابة منزل أحلامك. لسوء الحظ ، لم أضع في الإعتبار IfcMaterialDefinitionRepre Presentation ، الذي تم رفضه لطريقة عرض الكائنات ، لم أفكر في IfcTopologyReprاضرation - أنا لا أفهم حقًا ما هو الأمر ولا أعرف كيف أتخيله. لم أفكر في خيارات IFC ومجموعات الخصائص الإضافية. ولكن على خلاف ذلك ، لن تكون هذه مقدمة موجزة.
يحتوي تنسيق IFC على عدد كبير من الكائنات ، والذي يصبح أكثر من إصدار إلى آخر. في نص المواصفات ، توجد ملاحظات لا تنعكس في نظام EXPRESS ، ولكنها تؤثر بشدة على معالجة الملف. لذلك ، من الصعب تنفيذ هذا التنسيق دون قراءة جميع الوثائق بعناية ، لكن هذا بالكاد ممكن لشخص واحد ، وبالتالي لا يوجد برنامج - يقرأه بشكل صحيح تمامًا ، لكل منها خصوصياته الخاصة. وإذا كانت هناك دائمًا فرصة في حالة وجود برامج مفتوحة المصدر لتصحيح الأخطاء المكتشفة ، فبالنسبة لبرامج الملكية ، فإن ذلك يجعل من المستحيل استخدام تنسيق IFC بالكامل.
لا يعد تنسيق IFC مناسبًا تمامًا لتخزين معلومات قسم الخطة العامة ، ولكن يوجد حاليًا عمل نشط في هذا القسم ، يجب إكمال هذا العمل بحلول نهاية أبريل 2020 ويكون جزءًا من IFC5. الآن ، يجري العمل على طريق IFC Road ومطار IFC و IFC4precast (الجاهزة). ظهرت IFC Bridge في IFC4x2 ، والتي توصلوا إليها بشيء هندسي خاص - IfcSectionedSolidHorizontal

التغييرات الأخيرة في IFC تجعلها قريبة جدًا من GML ، حتى إذا ظهر IfcCoordinateReferenceSystem - وصف لنظام الإحداثيات الجيوديسية. في الوقت نفسه ، تركز IFC على وصف الهياكل الداخلية للكائن ، ويصف GML تمثيله الخارجي. لكن الفرق الرئيسي بين IFC هو أنه من الممكن الإشارة إلى نفس الكائنات في أماكن مختلفة - يمكن استخدام نفس النقطة في وصف هندسة الجدار والنافذة. في GML ، كل كائن هندسي مستقل تمامًا.
المراجع:
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