Skip to content

Commit dba435b

Browse files
committed
fix and test all distribution elements
1 parent 220d11f commit dba435b

29 files changed

+2489
-1412
lines changed

src/bim2fem/ifcplus/api/distribution_element.py

Lines changed: 336 additions & 483 deletions
Large diffs are not rendered by default.

src/bim2fem/ifcplus/api/geometry.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,36 @@ def add_cylindrical_extruded_area_solid(
180180
return extruded_area_solid
181181

182182

183+
def add_hollow_cylindrical_extruded_area_solid(
184+
ifc4_file: ifcopenshell.file,
185+
radius: float,
186+
extrusion_depth: float,
187+
wall_thickness: float,
188+
repositioned_origin: tuple[float, float, float] = (0.0, 0.0, 0.0),
189+
repositioned_z_axis: tuple[float, float, float] = (0.0, 0.0, 1.0),
190+
repositioned_x_axis: tuple[float, float, float] = (1.0, 0.0, 0.0),
191+
) -> ifcopenshell.entity_instance:
192+
"""Add hollow cylindrical IfcExtrudedAreaSolid"""
193+
194+
profile = bim2fem.ifcplus.api.profile.add_parameterized_profile(
195+
ifc4_file=ifc4_file,
196+
profile_class="IfcCircleHollowProfileDef",
197+
dimensions=[radius, wall_thickness],
198+
check_for_duplicate=True,
199+
)
200+
201+
extruded_area_solid = add_extruded_area_solid(
202+
ifc4_file=ifc4_file,
203+
profile=profile,
204+
extrusion_depth=extrusion_depth,
205+
repositioned_origin=repositioned_origin,
206+
repositioned_z_axis=repositioned_z_axis,
207+
repositioned_x_axis=repositioned_x_axis,
208+
)
209+
210+
return extruded_area_solid
211+
212+
183213
def add_sphere(
184214
ifc4_file: ifcopenshell.file,
185215
radius: float,
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
ISO-10303-21;
2+
3+
/* NOTE standard header information according to ISO 10303-21 ----------------- */
4+
HEADER;
5+
6+
FILE_DESCRIPTION(('ViewDefinition [ReferenceView_V1.2]'),'2;1');
7+
8+
FILE_NAME(
9+
/* name */ 'air_filtration_containment_housing.ifc',
10+
/* time_stamp */ '2025-10-14T18:05:58-04:00',
11+
/* author */ ('Leeable Partee'),
12+
/* organization */ ('Architects Without Ballpens'),
13+
/* preprocessor_version */ 'IfcOpenShell 0.8.3.post2',
14+
/* originating_system */ 'IfcOpenShell - IfcOpenShell - 0.8.3.post2',
15+
/* authorization */ 'none');
16+
17+
FILE_SCHEMA(('IFC4'));
18+
19+
ENDSEC;
20+
21+
DATA;
22+
23+
/* Person and Organization */
24+
#1=IFCPERSON('LPARTEE','Partee','Leeable',$,$,$,$,$);
25+
#2=IFCORGANIZATION('AWB','Architects Without Ballpens',$,$,$);
26+
#3=IFCPERSONANDORGANIZATION(#1,#2,$);
27+
#4=IFCACTORROLE(.USERDEFINED.,'CONTRIBUTOR',$);
28+
#5=IFCORGANIZATION('IfcOpenShell','IfcOpenShell','IfcOpenShell is an open source software library that helps users and software developers to work with IFC data.',(#4),(#6));
29+
#6=IFCTELECOMADDRESS(.USERDEFINED.,$,'WEBPAGE',$,$,$,$,'https://ifcopenshell.org',$);
30+
#7=IFCAPPLICATION(#5,'0.8.3.post2','IfcOpenShell','IfcOpenShell');
31+
#8=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
32+
33+
/* Project, representation contexts, and Units */
34+
#9=IFCPROJECT('3jomKJ2x90rvwph9jxqthg',#8,'My Project',$,$,$,$,(#14),#29);
35+
#10=IFCCARTESIANPOINT((0.,0.,0.));
36+
#11=IFCDIRECTION((0.,0.,1.));
37+
#12=IFCDIRECTION((1.,0.,0.));
38+
#13=IFCAXIS2PLACEMENT3D(#10,#11,#12);
39+
#14=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,0.0001,#13,$);
40+
#15=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$);
41+
#16=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.);
42+
#17=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
43+
#18=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
44+
#19=IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.);
45+
#20=IFCSIUNIT(*,.FORCEUNIT.,$,.NEWTON.);
46+
#21=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
47+
#22=IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
48+
#23=IFCDERIVEDUNITELEMENT(#19,1);
49+
#24=IFCDERIVEDUNITELEMENT(#16,-3);
50+
#25=IFCDERIVEDUNIT((#23,#24),.MASSDENSITYUNIT.,$);
51+
#26=IFCDERIVEDUNITELEMENT(#20,1);
52+
#27=IFCDERIVEDUNITELEMENT(#16,-2);
53+
#28=IFCDERIVEDUNIT((#26,#27),.MODULUSOFELASTICITYUNIT.,$);
54+
#29=IFCUNITASSIGNMENT((#20,#22,#25,#21,#16,#17,#18,#19,#28));
55+
#30=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1760479558,#3,#7,1760479558);
56+
57+
/* IfcSite */
58+
#31=IFCSITE('0oKnl6kc56zB0zLwD50Emo',#30,'Site-01',$,$,#38,$,$,$,$,$,$,$,$);
59+
#32=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
60+
61+
/* Aggregation Relationship */
62+
#33=IFCRELAGGREGATES('1vD8hBmQf5IQXNTelmF5PB',#32,$,$,#9,(#31));
63+
#34=IFCCARTESIANPOINT((0.,0.,0.));
64+
#35=IFCDIRECTION((0.,0.,1.));
65+
#36=IFCDIRECTION((1.,0.,0.));
66+
#37=IFCAXIS2PLACEMENT3D(#34,#35,#36);
67+
#38=IFCLOCALPLACEMENT($,#37);
68+
#39=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
69+
70+
/* IfcDistributionSystem */
71+
#40=IFCDISTRIBUTIONSYSTEM('01Rk2S8$T2iQDk8QRevUna',#39,'CVS',$,$,'Central Ventilation System',.VENTILATION.);
72+
#41=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1760479558,#3,#7,1760479558);
73+
74+
/* IfcFilter */
75+
#42=IFCFILTER('0JJY0IGbLD0AMAwxtzENpi',#41,'HEPA',$,$,#83,#78,$,.AIRPARTICLEFILTER.);
76+
#43=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
77+
78+
/* Spatial Structure Containment */
79+
#44=IFCRELCONTAINEDINSPATIALSTRUCTURE('2Sb0R2RlfFbv6gu_$tTPVd',#43,$,$,(#42),#31);
80+
#45=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
81+
82+
/* Assignments to Group */
83+
#46=IFCRELASSIGNSTOGROUP('3Uc7yqmI98o8JIi6TKoPYt',#45,$,$,(#42),$,#40);
84+
#47=IFCCARTESIANPOINT((0.64,0.,0.));
85+
#48=IFCDIRECTION((0.,0.,1.));
86+
#49=IFCDIRECTION((1.,0.,0.));
87+
#50=IFCAXIS2PLACEMENT3D(#47,#48,#49);
88+
#51=IFCBLOCK(#50,6.72,1.,2.);
89+
#52=IFCCARTESIANPOINT((7.36,0.,2.));
90+
#53=IFCDIRECTION((1.,0.,0.));
91+
#54=IFCDIRECTION((0.,0.,-1.));
92+
#55=IFCAXIS2PLACEMENT3D(#52,#53,#54);
93+
#56=IFCRECTANGULARPYRAMID(#55,2.,1.,0.96);
94+
#57=IFCCARTESIANPOINT((0.64,0.,0.));
95+
#58=IFCDIRECTION((-1.,0.,0.));
96+
#59=IFCDIRECTION((0.,0.,1.));
97+
#60=IFCAXIS2PLACEMENT3D(#57,#58,#59);
98+
#61=IFCRECTANGULARPYRAMID(#60,2.,1.,0.96);
99+
#62=IFCCARTESIANPOINT((-0.64,0.,0.));
100+
#63=IFCDIRECTION((0.,0.,1.));
101+
#64=IFCDIRECTION((1.,0.,0.));
102+
#65=IFCAXIS2PLACEMENT3D(#62,#63,#64);
103+
#66=IFCBLOCK(#65,0.64,1.,2.);
104+
#67=IFCCARTESIANPOINT((8.,0.,0.));
105+
#68=IFCDIRECTION((0.,0.,1.));
106+
#69=IFCDIRECTION((1.,0.,0.));
107+
#70=IFCAXIS2PLACEMENT3D(#67,#68,#69);
108+
#71=IFCBLOCK(#70,0.64,1.,2.);
109+
#72=IFCBOOLEANRESULT(.UNION.,#51,#56);
110+
#73=IFCBOOLEANRESULT(.UNION.,#72,#61);
111+
#74=IFCBOOLEANRESULT(.DIFFERENCE.,#73,#66);
112+
#75=IFCBOOLEANRESULT(.DIFFERENCE.,#74,#71);
113+
#76=IFCCSGSOLID(#75);
114+
#77=IFCSHAPEREPRESENTATION(#15,'Body','SolidModel',(#76));
115+
#78=IFCPRODUCTDEFINITIONSHAPE($,$,(#77));
116+
#79=IFCCARTESIANPOINT((0.,0.,0.));
117+
#80=IFCDIRECTION((0.,0.,1.));
118+
#81=IFCDIRECTION((1.,0.,0.));
119+
#82=IFCAXIS2PLACEMENT3D(#79,#80,#81);
120+
#83=IFCLOCALPLACEMENT(#38,#82);
121+
#84=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
122+
123+
/* IfcFilterType */
124+
#85=IFCFILTERTYPE('3z1KnKpJ51FhNyNa4UowyR',#84,'AIR_FILTRATION_CONTAINMENT_HOUSING',$,$,$,$,$,$,.NOTDEFINED.);
125+
#86=IFCOWNERHISTORY(#3,#7,.READWRITE.,.ADDED.,1760479558,#3,#7,1760479558);
126+
#87=IFCRELDEFINESBYTYPE('04kRgnjunFDPd4wi1smNLP',#86,$,$,(#42),#85);
127+
#88=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1760479558,#3,#7,1760479558);
128+
129+
/* Port */
130+
#89=IFCDISTRIBUTIONPORT('0719RKTMjBxPoCW3D0n4bi',#88,$,$,$,#96,$,.SINK.,.DUCT.,.VENTILATION.);
131+
#90=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1760479558,#3,#7,1760479558);
132+
#91=IFCRELNESTS('3dkRek$Kv5feTWzpk4gwyM',#90,$,$,#42,(#89,#98));
133+
#92=IFCCARTESIANPOINT((0.,0.5,1.));
134+
#93=IFCDIRECTION((1.,0.,0.));
135+
#94=IFCDIRECTION((0.,1.,0.));
136+
#95=IFCAXIS2PLACEMENT3D(#92,#93,#94);
137+
#96=IFCLOCALPLACEMENT(#83,#95);
138+
#97=IFCOWNERHISTORY(#3,#7,.READWRITE.,.MODIFIED.,1760479558,#3,#7,1760479558);
139+
140+
/* Port */
141+
#98=IFCDISTRIBUTIONPORT('1F7d81poH4mxfwIHic66U_',#97,$,$,$,#103,$,.SOURCE.,.DUCT.,.VENTILATION.);
142+
#99=IFCCARTESIANPOINT((8.,0.5,1.));
143+
#100=IFCDIRECTION((1.,0.,0.));
144+
#101=IFCDIRECTION((0.,1.,0.));
145+
#102=IFCAXIS2PLACEMENT3D(#99,#100,#101);
146+
#103=IFCLOCALPLACEMENT(#83,#102);
147+
148+
ENDSEC;
149+
150+
END-ISO-10303-21;

0 commit comments

Comments
 (0)