diff --git a/src/bonsai/bonsai/bim/module/system/data.py b/src/bonsai/bonsai/bim/module/system/data.py index 65faca50d5..57773ba849 100644 --- a/src/bonsai/bonsai/bim/module/system/data.py +++ b/src/bonsai/bonsai/bim/module/system/data.py @@ -221,6 +221,8 @@ class SystemDecorationData: Port data includes: - local port position in SI units - port flow direction + - the port entity itself (e.g. so the decorator can look up its + neighbour to infer a tangent direction for curved fittings) """ if element not in cls.elements_ports_positions: @@ -232,6 +234,7 @@ class SystemDecorationData: port_data = { "position": position, "flow_direction": port.FlowDirection, + "port": port, } ports_data.append(port_data) cls.elements_ports_positions[element] = ports_data diff --git a/src/bonsai/bonsai/tool/system.py b/src/bonsai/bonsai/tool/system.py index 1deb454695..618a03c893 100644 --- a/src/bonsai/bonsai/tool/system.py +++ b/src/bonsai/bonsai/tool/system.py @@ -51,6 +51,130 @@ _DIRECTION_FROM_FLOW_PAIR: dict[tuple[str, str], str] = { ("SOURCEANDSINK", "SOURCEANDSINK"): "SOURCEANDSINK", } +# Cubic-bezier control-point offset, as a fraction of the distance from each +# port to the tangent lines' intersection ("corner") point. 0.5523 is the +# standard constant for approximating a 90 degree circular arc with a single +# cubic bezier; it's a reasonable single approximation for other bend angles +# too since decoration is illustrative, not a precise arc reconstruction. +BEND_CURVE_KAPPA = 0.5523 +# Points sampled along the bezier to build the polyline actually drawn. +BEND_CURVE_SAMPLES = 12 +# If a "curved" fit deviates from the straight chord by less than this +# (in SI units), treat the ports as collinear and fall back to a straight line. +BEND_CURVE_MIN_SAGITTA = 1e-4 + + +def _rays_closest_point_distances( + pos_a: Vector, axis_a: Vector, pos_b: Vector, axis_b: Vector +) -> Union[tuple[float, float], None]: + """Distances ``(s, t)`` along ``axis_a`` from ``pos_a`` and along ``axis_b`` + from ``pos_b`` to the closest approach between the two rays. Used to find + where a port's tangent line would meet the other port's tangent line (the + corner a bend's two straight legs would meet at if extended). + + Returns ``None`` when the axes are (near) parallel, i.e. no well-defined + corner exists - the caller should fall back to a straight line.""" + w0 = pos_a - pos_b + b = axis_a.dot(axis_b) + denom = 1 - b * b + if abs(denom) < 1e-6: + return None + d = axis_a.dot(w0) + e = axis_b.dot(w0) + s = (b * e - d) / denom + t = (e - b * d) / denom + return s, t + + +def _sample_cubic_bezier(p0: Vector, p1: Vector, p2: Vector, p3: Vector, n: int) -> list[Vector]: + points = [] + for i in range(n + 1): + t = i / n + mt = 1 - t + point = p0 * (mt**3) + p1 * (3 * mt**2 * t) + p2 * (3 * mt * t**2) + p3 * (t**3) + points.append(point) + return points + + +def _curve_length_table(points: list[Vector]) -> tuple[list[float], float]: + """Cumulative arc-length at each sample point, and the total length.""" + cumulative = [0.0] + for i in range(len(points) - 1): + cumulative.append(cumulative[-1] + (points[i + 1] - points[i]).length) + return cumulative, cumulative[-1] + + +def _point_and_tangent_at_length( + points: list[Vector], cumulative: list[float], target_length: float, fallback_tangent: Vector +) -> tuple[Vector, Vector]: + """Position and unit tangent at arc-length ``target_length`` along the + polyline ``points`` (with precomputed cumulative lengths).""" + total = cumulative[-1] + s = max(0.0, min(total, target_length)) + for i in range(len(points) - 1): + seg_start, seg_end = cumulative[i], cumulative[i + 1] + if s <= seg_end or i == len(points) - 2: + seg_length = seg_end - seg_start + local_t = 0.0 if seg_length < 1e-9 else (s - seg_start) / seg_length + position = points[i].lerp(points[i + 1], local_t) + segment = points[i + 1] - points[i] + tangent = segment.normalized() if segment.length > 1e-9 else fallback_tangent + return position, tangent + return points[-1], fallback_tangent + + +def bend_curve_points( + pos_a: Vector, axis_a: Union[Vector, None], pos_b: Vector, axis_b: Union[Vector, None] +) -> Union[list[Vector], None]: + """Sampled points of a cubic bezier that leaves ``pos_a`` tangent to + ``axis_a`` and arrives at ``pos_b`` tangent to ``axis_b``, approximating + a bend fitting's curved centerline instead of the straight port-to-port + chord. + + ``axis_a``/``axis_b`` are unit vectors pointing "into" the fitting from + each port (i.e. the direction the connected straight run was already + heading as it reaches that port - see ``System.get_port_neighbour_axis``). + + Returns ``None`` - meaning "just draw the straight chord" - whenever the + axes are missing, degenerate, or the resulting curve would be + indistinguishable from a straight line (collinear ports).""" + if axis_a is None or axis_b is None: + return None + if axis_a.length < 1e-6 or axis_b.length < 1e-6: + return None + axis_a = axis_a.normalized() + axis_b = axis_b.normalized() + + chord = pos_b - pos_a + chord_length = chord.length + if chord_length < 1e-9: + return None + chord_dir = chord / chord_length + + corner = _rays_closest_point_distances(pos_a, axis_a, pos_b, axis_b) + if corner is None: + return None + s, t = corner + # Tangent lines meeting "behind" a port (non-convex), or so far ahead that + # the axes are nearly parallel (an extreme, near-180-degree turn), aren't + # a shape this single-bezier approximation handles well - fall back. + if s <= 1e-6 or t <= 1e-6 or s > 3 * chord_length or t > 3 * chord_length: + return None + + control_a = pos_a + axis_a * (s * BEND_CURVE_KAPPA) + control_b = pos_b + axis_b * (t * BEND_CURVE_KAPPA) + + points = _sample_cubic_bezier(pos_a, control_a, control_b, pos_b, BEND_CURVE_SAMPLES) + max_sagitta = 0.0 + for point in points: + offset = point - pos_a + lateral = offset - chord_dir * offset.dot(chord_dir) + max_sagitta = max(max_sagitta, lateral.length) + if max_sagitta < BEND_CURVE_MIN_SAGITTA: + return None + + return points + def direction_from_port_pair(port_a: ifcopenshell.entity_instance, port_b: ifcopenshell.entity_instance) -> str: """Derive the ``direction`` arg for ``ifcopenshell.api.system.connect_port`` @@ -188,6 +312,44 @@ class System(bonsai.core.tool.System): rel = port.Nests[0] if port.Nests else None return rel.RelatingObject if rel else None + @classmethod + def get_port_neighbour_axis(cls, port: ifcopenshell.entity_instance) -> Union[Vector, None]: + """World-space unit vector giving the pipe axis direction at ``port``, + pointing from the connected neighbour's far end towards ``port`` (i.e. + the direction the neighbour's straight run was already heading as it + reaches this connection). + + A bend fitting's own two ports share the same local rotation in + Bonsai's authored geometry (only their positions differ), so the + port's own placement can't tell you which way it turns. The + neighbouring segment's own two ports can: as long as that neighbour + is a simple two-port run, its own axis at the shared connection point + equals this port's true tangent, by physical continuity. + + Returns ``None`` when a tangent can't be determined unambiguously: + no connection, the neighbour has other than exactly one other port, + or no Blender object backs the neighbour.""" + connected_port = cls.get_connected_port(port) + if connected_port is None: + return None + neighbour = cls.get_port_relating_element(connected_port) + if neighbour is None: + return None + far_ports = [p for p in cls.get_ports(neighbour) if p.id() != connected_port.id()] + if len(far_ports) != 1: + return None + neighbour_obj = tool.Ifc.get_object(neighbour) + if neighbour_obj is None: + return None + near_pos = tool.Model.get_element_matrix(connected_port, keep_local=True).translation + far_pos = tool.Model.get_element_matrix(far_ports[0], keep_local=True).translation + near_world = neighbour_obj.matrix_world @ near_pos + far_world = neighbour_obj.matrix_world @ far_pos + direction = near_world - far_world + if direction.length < 1e-6: + return None + return direction.normalized() + @classmethod def get_port_predefined_type(cls, mep_element: ifcopenshell.entity_instance) -> str: split_camel_case = lambda x: re.findall("[A-Z][^A-Z]*", x) @@ -373,6 +535,30 @@ class System(bonsai.core.tool.System): verts = range(start_vert_i, start_vert_i + len(port_data)) edges = [(i, i + 1) for i in range(start_vert_i, start_vert_i + len(port_data) - 1)] + # A bend (or other 2-port) fitting's ports sit at the true curved + # centerline's endpoints, but a straight port-to-port edge cuts the + # corner instead of following the bend. Where each port's true + # tangent can be recovered from its neighbouring straight run, + # replace the chord with a bezier that leaves/arrives tangent to + # those axes. Segments, terminals, and fittings whose tangent + # can't be determined (or whose ports are collinear anyway) keep + # the original straight edge untouched. + curve_points = None + if len(port_data) == 2 and element.is_a("IfcFlowFitting"): + axis_a = cls.get_port_neighbour_axis(port_data[0]["port"]) + axis_b = cls.get_port_neighbour_axis(port_data[1]["port"]) + curve_points = bend_curve_points(verts_pos[0], axis_a, verts_pos[1], axis_b) + if curve_points is not None: + curve_interior = curve_points[1:-1] + interior_start = start_vert_i + len(verts_pos) + chain = ( + [start_vert_i] + + list(range(interior_start, interior_start + len(curve_interior))) + + [start_vert_i + 1] + ) + edges = [(chain[i], chain[i + 1]) for i in range(len(chain) - 1)] + verts_pos.extend(curve_interior) + def get_flow_direction(port_data): # diagram - https://i.imgur.com/ioYL7bZ.png flow_dirs = [p["flow_direction"] for p in port_data] @@ -396,11 +582,14 @@ class System(bonsai.core.tool.System): and selected_element and (flow_direction := get_flow_direction(port_data)) != FlowDirection.AMBIGUOUS ): - edge_verts = verts_pos.copy() + edge_verts = verts_pos[:2] + arrow_curve_points = curve_points both_directions = flow_direction == FlowDirection.BOTH if not both_directions: edge_verts = edge_verts[:: flow_direction.value] + if arrow_curve_points is not None and flow_direction.value == -1: + arrow_curve_points = list(reversed(arrow_curve_points)) # create direction lines direction_lines_offset = 0.4 @@ -417,37 +606,78 @@ class System(bonsai.core.tool.System): # for now it's hardcoded to local Y axis to avoid using viewport data # for performance reasons - for j in range(2): - edge_ortho = obj.matrix_world.col[j].to_3d().normalized() - second_ortho = edge_dir.cross(edge_ortho) - edge_ortho = second_ortho.cross(edge_dir) - # direction lines should be around the edge center - n_direction_lines, start_offset = divmod(edge_length, direction_lines_offset) - n_direction_lines = int(n_direction_lines) + 1 - start_offset /= 2 - start_offset = edge_dir * start_offset + base_vert + if arrow_curve_points is not None: + curve_cumulative, curve_length = _curve_length_table(arrow_curve_points) + verts_before_arrows = len(verts_pos) - if both_directions: - cur_vert_index = start_vert_i + len(port_data) + j * 2 * n_direction_lines - else: - cur_vert_index = start_vert_i + len(port_data) + j * 3 * n_direction_lines + for j in range(2): + ortho_axis = obj.matrix_world.col[j].to_3d().normalized() + + n_direction_lines, start_offset = divmod(curve_length, direction_lines_offset) + n_direction_lines = int(n_direction_lines) + 1 + start_offset /= 2 - for i in range(n_direction_lines): - cur_offset = start_offset + edge_dir * i * direction_lines_offset if both_directions: - verts_pos.append(cur_offset + edge_ortho * direction_lines_width) - verts_pos.append(cur_offset - edge_ortho * direction_lines_width) - edges.append((cur_vert_index, cur_vert_index + 1)) - cur_vert_index += 2 + cur_vert_index = start_vert_i + verts_before_arrows + j * 2 * n_direction_lines else: - arrow_base = cur_offset - edge_dir * direction_lines_width - verts_pos.append(arrow_base + edge_ortho * direction_lines_width) - verts_pos.append(cur_offset) - verts_pos.append(arrow_base - edge_ortho * direction_lines_width) - edges.append((cur_vert_index, cur_vert_index + 1)) - edges.append((cur_vert_index + 1, cur_vert_index + 2)) - cur_vert_index += 3 + cur_vert_index = start_vert_i + verts_before_arrows + j * 3 * n_direction_lines + + for i in range(n_direction_lines): + arc_length = start_offset + i * direction_lines_offset + cur_offset, local_dir = _point_and_tangent_at_length( + arrow_curve_points, curve_cumulative, arc_length, edge_dir + ) + second_ortho = local_dir.cross(ortho_axis) + edge_ortho = second_ortho.cross(local_dir) + if edge_ortho.length < 1e-9: + edge_ortho = ortho_axis + + if both_directions: + verts_pos.append(cur_offset + edge_ortho * direction_lines_width) + verts_pos.append(cur_offset - edge_ortho * direction_lines_width) + edges.append((cur_vert_index, cur_vert_index + 1)) + cur_vert_index += 2 + else: + arrow_base = cur_offset - local_dir * direction_lines_width + verts_pos.append(arrow_base + edge_ortho * direction_lines_width) + verts_pos.append(cur_offset) + verts_pos.append(arrow_base - edge_ortho * direction_lines_width) + edges.append((cur_vert_index, cur_vert_index + 1)) + edges.append((cur_vert_index + 1, cur_vert_index + 2)) + cur_vert_index += 3 + else: + for j in range(2): + edge_ortho = obj.matrix_world.col[j].to_3d().normalized() + second_ortho = edge_dir.cross(edge_ortho) + edge_ortho = second_ortho.cross(edge_dir) + + # direction lines should be around the edge center + n_direction_lines, start_offset = divmod(edge_length, direction_lines_offset) + n_direction_lines = int(n_direction_lines) + 1 + start_offset /= 2 + start_offset = edge_dir * start_offset + base_vert + + if both_directions: + cur_vert_index = start_vert_i + len(port_data) + j * 2 * n_direction_lines + else: + cur_vert_index = start_vert_i + len(port_data) + j * 3 * n_direction_lines + + for i in range(n_direction_lines): + cur_offset = start_offset + edge_dir * i * direction_lines_offset + if both_directions: + verts_pos.append(cur_offset + edge_ortho * direction_lines_width) + verts_pos.append(cur_offset - edge_ortho * direction_lines_width) + edges.append((cur_vert_index, cur_vert_index + 1)) + cur_vert_index += 2 + else: + arrow_base = cur_offset - edge_dir * direction_lines_width + verts_pos.append(arrow_base + edge_ortho * direction_lines_width) + verts_pos.append(cur_offset) + verts_pos.append(arrow_base - edge_ortho * direction_lines_width) + edges.append((cur_vert_index, cur_vert_index + 1)) + edges.append((cur_vert_index + 1, cur_vert_index + 2)) + cur_vert_index += 3 all_vertices.extend(verts_pos) diff --git a/src/bonsai/test/files/mep-duct-bend-flow-direction.ifc b/src/bonsai/test/files/mep-duct-bend-flow-direction.ifc new file mode 100644 index 0000000000..5565861e5d --- /dev/null +++ b/src/bonsai/test/files/mep-duct-bend-flow-direction.ifc @@ -0,0 +1,1449 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('ViewDefinition[DesignTransferView]'),'2;1'); +FILE_NAME('ductFitting.ifc','2025-03-05T20:14:00+01:00',(''),(''),'IfcOpenShell 0.8.2-alpha250304','Bonsai 0.8.2-alpha250304-3fc3127','Nobody'); +FILE_SCHEMA(('IFC4')); +ENDSEC; +DATA; +#1=IFCPROJECT('2H_aLOWNn48xhstQXYeSNw',$,'My Project',$,$,$,$,(#14,#26),#9); +#2=IFCSIUNIT(*,.LENGTHUNIT.,$,.METRE.); +#3=IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.); +#4=IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.); +#5=IFCDIMENSIONALEXPONENTS(0,0,0,0,0,0,0); +#6=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); +#7=IFCMEASUREWITHUNIT(IFCREAL(0.0174532925199433),#6); +#8=IFCCONVERSIONBASEDUNIT(#5,.PLANEANGLEUNIT.,'degree',#7); +#9=IFCUNITASSIGNMENT((#8,#3,#4,#2)); +#10=IFCCARTESIANPOINT((0.,0.,0.)); +#11=IFCDIRECTION((0.,0.,1.)); +#12=IFCDIRECTION((1.,0.,0.)); +#13=IFCAXIS2PLACEMENT3D(#10,#11,#12); +#14=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#13,$); +#15=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#14,$,.GRAPH_VIEW.,$); +#17=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Box','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#18=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.SECTION_VIEW.,$); +#19=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.ELEVATION_VIEW.,$); +#20=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.MODEL_VIEW.,$); +#21=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Model',*,*,*,*,#14,$,.PLAN_VIEW.,$); +#22=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Profile','Model',*,*,*,*,#14,$,.ELEVATION_VIEW.,$); +#23=IFCCARTESIANPOINT((0.,0.)); +#24=IFCDIRECTION((1.,0.)); +#25=IFCAXIS2PLACEMENT2D(#23,#24); +#26=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Plan',2,1.E-05,#25,$); +#27=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Plan',*,*,*,*,#26,$,.GRAPH_VIEW.,$); +#28=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Body','Plan',*,*,*,*,#26,$,.PLAN_VIEW.,$); +#29=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#26,$,.PLAN_VIEW.,$); +#30=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Annotation','Plan',*,*,*,*,#26,$,.REFLECTED_PLAN_VIEW.,$); +#31=IFCSITE('1MLz9LJ_zFzOL2RC8meS6g',$,'My Site',$,$,#54,$,$,$,$,$,$,$,$); +#37=IFCBUILDING('1_oxqN68L5dvW4K$eO8G7t',$,'My Building',$,$,#60,$,$,$,$,$,$); +#43=IFCBUILDINGSTOREY('1Mi$N_OoD24AxpqT7y$rlK',$,'My Storey',$,$,#66,$,$,$,$); +#49=IFCRELAGGREGATES('3_cDnmWfP1fupTY61_kXvD',$,$,$,#1,(#31)); +#50=IFCCARTESIANPOINT((0.,0.,0.)); +#51=IFCDIRECTION((0.,0.,1.)); +#52=IFCDIRECTION((1.,0.,0.)); +#53=IFCAXIS2PLACEMENT3D(#50,#51,#52); +#54=IFCLOCALPLACEMENT($,#53); +#55=IFCRELAGGREGATES('0CApGnOUf59efa_6X9lYyM',$,$,$,#31,(#37)); +#56=IFCCARTESIANPOINT((0.,0.,0.)); +#57=IFCDIRECTION((0.,0.,1.)); +#58=IFCDIRECTION((1.,0.,0.)); +#59=IFCAXIS2PLACEMENT3D(#56,#57,#58); +#60=IFCLOCALPLACEMENT(#54,#59); +#61=IFCRELAGGREGATES('0XrJXDR7v4AQK6D15eOgzJ',$,$,$,#37,(#43)); +#62=IFCCARTESIANPOINT((0.,0.,0.)); +#63=IFCDIRECTION((0.,0.,1.)); +#64=IFCDIRECTION((1.,0.,0.)); +#65=IFCAXIS2PLACEMENT3D(#62,#63,#64); +#66=IFCLOCALPLACEMENT(#60,#65); +#67=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-point'),$); +#68=IFCPROPERTYSET('27lmSbeAXC08EWkEq8XdUG',$,'EPset_Annotation',$,(#67)); +#69=IFCTYPEPRODUCT('0UrP0fLdD5OwzwD41aRKao',$,'SETOUT-POINT',$,'IfcAnnotation/SYMBOL',(#68),$,$); +#70=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('control-point'),$); +#71=IFCPROPERTYSET('23aN9DsdjFcfWq8KGSIVoN',$,'EPset_Annotation',$,(#70)); +#72=IFCTYPEPRODUCT('3IQrQOSFP0WfkuLk0ak7_0',$,'CONTROL-POINT',$,'IfcAnnotation/SYMBOL',(#71),$,$); +#73=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('traverse-point'),$); +#74=IFCPROPERTYSET('1j7aFM1Rb9BRuKgUEn1U10',$,'EPset_Annotation',$,(#73)); +#75=IFCTYPEPRODUCT('3wvbaiaIz8agQgDRzt01vz',$,'TRAVERSE-POINT',$,'IfcAnnotation/SYMBOL',(#74),$,$); +#76=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('dashed'),$); +#77=IFCPROPERTYSET('27smSHyiv39vhBRSwfDVCD',$,'EPset_Annotation',$,(#76)); +#78=IFCTYPEPRODUCT('0p5ZTfTnX9ZOywroa7Ffql',$,'DASHED',$,'IfcAnnotation/LINEWORK',(#77),$,$); +#79=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('fine'),$); +#80=IFCPROPERTYSET('0gVTuDcZ5ByRdR3sZnEZUR',$,'EPset_Annotation',$,(#79)); +#81=IFCTYPEPRODUCT('2EvrG9Vuf6t9etgMeWFuJ2',$,'FINE',$,'IfcAnnotation/LINEWORK',(#80),$,$); +#82=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thin'),$); +#83=IFCPROPERTYSET('0t6c$uCeT9092GYkbm8hDS',$,'EPset_Annotation',$,(#82)); +#84=IFCTYPEPRODUCT('0IeM1ywXn1qhR_6NhB6N4s',$,'THIN',$,'IfcAnnotation/LINEWORK',(#83),$,$); +#85=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('medium'),$); +#86=IFCPROPERTYSET('2uTJ11lF98GeN8pPIf340N',$,'EPset_Annotation',$,(#85)); +#87=IFCTYPEPRODUCT('1jZVbCwrTCGhZdKbH4uqTP',$,'MEDIUM',$,'IfcAnnotation/LINEWORK',(#86),$,$); +#88=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('thick'),$); +#89=IFCPROPERTYSET('2XQxgO16v9vxjvuIJpaPpG',$,'EPset_Annotation',$,(#88)); +#90=IFCTYPEPRODUCT('38zW9E1uH2ae$zat9KrieS',$,'THICK',$,'IfcAnnotation/LINEWORK',(#89),$,$); +#91=IFCPROPERTYSINGLEVALUE('Classes',$,IFCLABEL('strong'),$); +#92=IFCPROPERTYSET('0TcB8Gal96vebTrLWa5CEw',$,'EPset_Annotation',$,(#91)); +#93=IFCTYPEPRODUCT('3G2s7ZLzfDJh5J$2iIzHw9',$,'STRONG',$,'IfcAnnotation/LINEWORK',(#92),$,$); +#94=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('setout-tag'),$); +#95=IFCPROPERTYSET('39$oNFI052cBhtpZCVVLfj',$,'EPset_Annotation',$,(#94)); +#96=IFCCARTESIANPOINT((0.,0.,0.)); +#97=IFCDIRECTION((0.,0.,1.)); +#98=IFCDIRECTION((1.,0.,0.)); +#99=IFCAXIS2PLACEMENT3D(#96,#97,#98); +#105=IFCCARTESIANPOINT((0.,0.,0.)); +#106=IFCDIRECTION((0.,0.,1.)); +#107=IFCDIRECTION((1.,0.,0.)); +#108=IFCAXIS2PLACEMENT3D(#105,#106,#107); +#109=IFCPLANAREXTENT(1000.,1000.); +#110=IFCTEXTLITERALWITHEXTENT('E ``round({{easting}}, 0.001)``',#108,.RIGHT.,#109,'center'); +#111=IFCCARTESIANPOINT((0.,0.,0.)); +#112=IFCDIRECTION((0.,0.,1.)); +#113=IFCDIRECTION((1.,0.,0.)); +#114=IFCAXIS2PLACEMENT3D(#111,#112,#113); +#115=IFCPLANAREXTENT(1000.,1000.); +#116=IFCTEXTLITERALWITHEXTENT('N ``round({{northing}}, 0.001)``',#114,.RIGHT.,#115,'center'); +#117=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#110,#116)); +#118=IFCREPRESENTATIONMAP(#99,#117); +#119=IFCTYPEPRODUCT('3pq2B$0k52ZOv2bFuRYkxO',$,'SETOUT-TAG',$,'IfcAnnotation/TEXT',(#95),(#118),$); +#120=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('door-tag'),$); +#121=IFCPROPERTYSET('3xUNoLKPT9kB4LMdoctm5k',$,'EPset_Annotation',$,(#120)); +#122=IFCCARTESIANPOINT((0.,0.,0.)); +#123=IFCDIRECTION((0.,0.,1.)); +#124=IFCDIRECTION((1.,0.,0.)); +#125=IFCAXIS2PLACEMENT3D(#122,#123,#124); +#131=IFCCARTESIANPOINT((0.,0.,0.)); +#132=IFCDIRECTION((0.,0.,1.)); +#133=IFCDIRECTION((1.,0.,0.)); +#134=IFCAXIS2PLACEMENT3D(#131,#132,#133); +#135=IFCPLANAREXTENT(1000.,1000.); +#136=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#134,.RIGHT.,#135,'center'); +#137=IFCCARTESIANPOINT((0.,0.,0.)); +#138=IFCDIRECTION((0.,0.,1.)); +#139=IFCDIRECTION((1.,0.,0.)); +#140=IFCAXIS2PLACEMENT3D(#137,#138,#139); +#141=IFCPLANAREXTENT(1000.,1000.); +#142=IFCTEXTLITERALWITHEXTENT('{{Name}}',#140,.RIGHT.,#141,'center'); +#143=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#136,#142)); +#144=IFCREPRESENTATIONMAP(#125,#143); +#145=IFCTYPEPRODUCT('11M3ahhrr9NBdB29YEazzw',$,'DOOR-TAG',$,'IfcAnnotation/TEXT',(#121),(#144),$); +#146=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('window-tag'),$); +#147=IFCPROPERTYSET('2MqzSGkXDBcPSolaAQvYO4',$,'EPset_Annotation',$,(#146)); +#148=IFCCARTESIANPOINT((0.,0.,0.)); +#149=IFCDIRECTION((0.,0.,1.)); +#150=IFCDIRECTION((1.,0.,0.)); +#151=IFCAXIS2PLACEMENT3D(#148,#149,#150); +#157=IFCCARTESIANPOINT((0.,0.,0.)); +#158=IFCDIRECTION((0.,0.,1.)); +#159=IFCDIRECTION((1.,0.,0.)); +#160=IFCAXIS2PLACEMENT3D(#157,#158,#159); +#161=IFCPLANAREXTENT(1000.,1000.); +#162=IFCTEXTLITERALWITHEXTENT('{{Name}}',#160,.RIGHT.,#161,'center'); +#163=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#162)); +#164=IFCREPRESENTATIONMAP(#151,#163); +#165=IFCTYPEPRODUCT('1eE8Y$BVDFDgG8Fj6d9wiV',$,'WINDOW-TAG',$,'IfcAnnotation/TEXT',(#147),(#164),$); +#166=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('space-tag'),$); +#167=IFCPROPERTYSET('2zKuFdTPj3DhNdQ0U2kd5u',$,'EPset_Annotation',$,(#166)); +#168=IFCCARTESIANPOINT((0.,0.,0.)); +#169=IFCDIRECTION((0.,0.,1.)); +#170=IFCDIRECTION((1.,0.,0.)); +#171=IFCAXIS2PLACEMENT3D(#168,#169,#170); +#177=IFCCARTESIANPOINT((0.,0.,0.)); +#178=IFCDIRECTION((0.,0.,1.)); +#179=IFCDIRECTION((1.,0.,0.)); +#180=IFCAXIS2PLACEMENT3D(#177,#178,#179); +#181=IFCPLANAREXTENT(1000.,1000.); +#182=IFCTEXTLITERALWITHEXTENT('{{Name}}',#180,.RIGHT.,#181,'center'); +#183=IFCCARTESIANPOINT((0.,0.,0.)); +#184=IFCDIRECTION((0.,0.,1.)); +#185=IFCDIRECTION((1.,0.,0.)); +#186=IFCAXIS2PLACEMENT3D(#183,#184,#185); +#187=IFCPLANAREXTENT(1000.,1000.); +#188=IFCTEXTLITERALWITHEXTENT('{{Description}}',#186,.RIGHT.,#187,'center'); +#189=IFCCARTESIANPOINT((0.,0.,0.)); +#190=IFCDIRECTION((0.,0.,1.)); +#191=IFCDIRECTION((1.,0.,0.)); +#192=IFCAXIS2PLACEMENT3D(#189,#190,#191); +#193=IFCPLANAREXTENT(1000.,1000.); +#194=IFCTEXTLITERALWITHEXTENT('``round({{Qto_SpaceBaseQuantities.NetFloorArea}}, 0.01)``',#192,.RIGHT.,#193,'center'); +#195=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#182,#188,#194)); +#196=IFCREPRESENTATIONMAP(#171,#195); +#197=IFCTYPEPRODUCT('0vvfHSiaPBxewA$32C4LdW',$,'SPACE-TAG',$,'IfcAnnotation/TEXT',(#167),(#196),$); +#198=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('rectangle-tag'),$); +#199=IFCPROPERTYSET('1x86VNVk1Drwe5XOj$GZX3',$,'EPset_Annotation',$,(#198)); +#200=IFCCARTESIANPOINT((0.,0.,0.)); +#201=IFCDIRECTION((0.,0.,1.)); +#202=IFCDIRECTION((1.,0.,0.)); +#203=IFCAXIS2PLACEMENT3D(#200,#201,#202); +#209=IFCCARTESIANPOINT((0.,0.,0.)); +#210=IFCDIRECTION((0.,0.,1.)); +#211=IFCDIRECTION((1.,0.,0.)); +#212=IFCAXIS2PLACEMENT3D(#209,#210,#211); +#213=IFCPLANAREXTENT(1000.,1000.); +#214=IFCTEXTLITERALWITHEXTENT('{{material.Name}}',#212,.RIGHT.,#213,'center'); +#215=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#214)); +#216=IFCREPRESENTATIONMAP(#203,#215); +#217=IFCTYPEPRODUCT('36lTcd9yT8UBNDejQUNWrq',$,'MATERIAL-TAG',$,'IfcAnnotation/TEXT',(#199),(#216),$); +#218=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#219=IFCPROPERTYSET('3BeqEbDzX0xORamqqSx_kZ',$,'EPset_Annotation',$,(#218)); +#220=IFCCARTESIANPOINT((0.,0.,0.)); +#221=IFCDIRECTION((0.,0.,1.)); +#222=IFCDIRECTION((1.,0.,0.)); +#223=IFCAXIS2PLACEMENT3D(#220,#221,#222); +#229=IFCCARTESIANPOINT((0.,0.,0.)); +#230=IFCDIRECTION((0.,0.,1.)); +#231=IFCDIRECTION((1.,0.,0.)); +#232=IFCAXIS2PLACEMENT3D(#229,#230,#231); +#233=IFCPLANAREXTENT(1000.,1000.); +#234=IFCTEXTLITERALWITHEXTENT('{{type.Name}}',#232,.RIGHT.,#233,'center'); +#235=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#234)); +#236=IFCREPRESENTATIONMAP(#223,#235); +#237=IFCTYPEPRODUCT('1rxhEX6I16oPqglXaGZ7Sw',$,'TYPE-TAG',$,'IfcAnnotation/TEXT',(#219),(#236),$); +#238=IFCPROPERTYSINGLEVALUE('Symbol',$,IFCLABEL('capsule-tag'),$); +#239=IFCPROPERTYSET('11L$PtdnX8LfYigzRZ$g0a',$,'EPset_Annotation',$,(#238)); +#240=IFCCARTESIANPOINT((0.,0.,0.)); +#241=IFCDIRECTION((0.,0.,1.)); +#242=IFCDIRECTION((1.,0.,0.)); +#243=IFCAXIS2PLACEMENT3D(#240,#241,#242); +#249=IFCCARTESIANPOINT((0.,0.,0.)); +#250=IFCDIRECTION((0.,0.,1.)); +#251=IFCDIRECTION((1.,0.,0.)); +#252=IFCAXIS2PLACEMENT3D(#249,#250,#251); +#253=IFCPLANAREXTENT(1000.,1000.); +#254=IFCTEXTLITERALWITHEXTENT('{{Name}}',#252,.RIGHT.,#253,'center'); +#255=IFCSHAPEREPRESENTATION(#20,'Annotation','Annotation2D',(#254)); +#256=IFCREPRESENTATIONMAP(#243,#255); +#257=IFCTYPEPRODUCT('0sws1hxNb2Og1etXqyoEh1',$,'NAME-TAG',$,'IfcAnnotation/TEXT',(#239),(#256),$); +#258=IFCBEAMTYPE('2E$V5l4b54dxuToJ1A6IHp',$,'B1',$,$,$,$,$,$,.NOTDEFINED.); +#259=IFCRELASSOCIATESMATERIAL('3PUNnY7cj8LhyXbHKVqZnf',$,$,$,(#258),#263); +#260=IFCMATERIAL('Unknown',$,$); +#261=IFCISHAPEPROFILEDEF(.AREA.,'DEMO-I',$,0.1,0.2,0.005,0.01,0.005,$,$); +#262=IFCMATERIALPROFILE($,$,#260,#261,$,$); +#263=IFCMATERIALPROFILESET($,$,(#262),$); +#264=IFCBEAMTYPE('3qutoZTvP0lvLWNXyjPhPm',$,'B2',$,$,$,$,$,$,.NOTDEFINED.); +#265=IFCRELASSOCIATESMATERIAL('3dGyQf42H2ahch2bSYPPHP',$,$,$,(#264),#268); +#266=IFCCSHAPEPROFILEDEF(.AREA.,'DEMO-C',$,0.2,0.1,0.0015,0.03,0.005); +#267=IFCMATERIALPROFILE($,$,#260,#266,$,$); +#268=IFCMATERIALPROFILESET($,$,(#267),$); +#269=IFCCOLUMNTYPE('278sjptdDDzgOZseERj390',$,'C1',$,$,$,$,$,$,.NOTDEFINED.); +#270=IFCRELASSOCIATESMATERIAL('1ppYXw39v6kBwi3rrIm4ZE',$,$,$,(#269),#273); +#271=IFCRECTANGLEPROFILEDEF(.AREA.,'500x600',$,0.5,0.6); +#272=IFCMATERIALPROFILE($,$,#260,#271,$,$); +#273=IFCMATERIALPROFILESET($,$,(#272),$); +#274=IFCCOLUMNTYPE('3aSZOvGmr7jggSNwsq5PJE',$,'C2',$,$,$,$,$,$,.NOTDEFINED.); +#275=IFCRELASSOCIATESMATERIAL('1AtNJPaD14DgINbAjXvbU4',$,$,$,(#274),#278); +#276=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,'500.0x5.0 CHS',$,0.25,0.005); +#277=IFCMATERIALPROFILE($,$,#260,#276,$,$); +#278=IFCMATERIALPROFILESET($,$,(#277),$); +#279=IFCCOLUMNTYPE('28iv3Kru12yQ7R7RRwNjvD',$,'C3',$,$,$,$,$,$,.NOTDEFINED.); +#280=IFCRELASSOCIATESMATERIAL('2M_oL$n3j6rBRnOW5RSk87',$,$,$,(#279),#283); +#281=IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,'150x75x2.0 RHS',$,0.075,0.15,0.002,0.005,0.005); +#282=IFCMATERIALPROFILE($,$,#260,#281,$,$); +#283=IFCMATERIALPROFILESET($,$,(#282),$); +#284=IFCCOVERINGTYPE('0iLxgfHB9F2hRH2vMcw7Yv',$,'COV10',$,$,$,$,$,$,.NOTDEFINED.); +#285=IFCRELASSOCIATESMATERIAL('0yvFX0zgb9uvJ3ARnf4mfe',$,$,$,(#284),#287); +#286=IFCMATERIALLAYER(#260,0.01,$,$,$,$,$); +#287=IFCMATERIALLAYERSET((#286),$,$); +#288=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS2'),$); +#289=IFCPROPERTYSET('18ICCZ0fjDG9UXMyzrsFBA',$,'EPset_Parametric',$,(#288)); +#290=IFCCOVERINGTYPE('15Riw2WTrAUPwvfLyKXJ2g',$,'COV20',$,$,(#289),$,$,$,.NOTDEFINED.); +#291=IFCRELASSOCIATESMATERIAL('1iAOG6NK9FBxitFtzN9qP5',$,$,$,(#290),#293); +#292=IFCMATERIALLAYER(#260,0.02,$,$,$,$,$); +#293=IFCMATERIALLAYERSET((#292),$,$); +#294=IFCPROPERTYSINGLEVALUE('LayerSetDirection',$,IFCLABEL('AXIS3'),$); +#295=IFCPROPERTYSET('3qCbs1tuDCvuOXam5RrA$a',$,'EPset_Parametric',$,(#294)); +#296=IFCCOVERINGTYPE('0gEOtYULD0F9KD9zPoA6cJ',$,'COV30',$,$,(#295),$,$,$,.NOTDEFINED.); +#297=IFCRELASSOCIATESMATERIAL('0xd6dsjf13JA98q9fnAMpQ',$,$,$,(#296),#299); +#298=IFCMATERIALLAYER(#260,0.03,$,$,$,$,$); +#299=IFCMATERIALLAYERSET((#298),$,$); +#300=IFCCARTESIANPOINT((0.,0.,0.)); +#301=IFCDIRECTION((0.,0.,1.)); +#302=IFCDIRECTION((1.,0.,0.)); +#303=IFCAXIS2PLACEMENT3D(#300,#301,#302); +#310=IFCCARTESIANPOINTLIST3D(((0.955000162124634,0.,2.09000015258789),(0.955000162124634,0.0549999885261059,2.09000015258789),(0.970000028610229,0.0549999922513962,2.10500001907349),(0.,0.0999999940395355,0.),(0.970000028610229,0.0999999940395355,2.10500001907349),(0.0399999916553497,0.0999999940395355,2.10500001907349),(0.0399999916553497,0.0549999922513962,2.10500001907349),(0.0550000071525574,0.0549999885261059,2.09000015258789),(0.0550000071525574,0.,2.09000015258789),(0.,0.,2.14500021934509),(0.,0.100000001490116,2.14500021934509),(0.0449999868869781,0.0999999940395355,2.09999990463257),(0.0449999868869781,0.0599999949336052,2.09999990463257),(0.965000033378601,0.0599999949336052,2.09999990463257),(0.965000033378601,0.0999999940395355,2.09999990463257),(0.965000033378601,0.0999999940395355,0.),(0.965000033378601,0.0599999949336052,0.),(0.0449999868869781,0.0599999949336052,0.),(0.0449999868869781,0.0999999940395355,0.),(0.,0.,0.),(0.0550000071525574,0.,0.),(0.0550000071525574,0.0549999922513962,0.),(0.0399999916553497,0.0549999922513962,0.),(0.0399999916553497,0.0999999940395355,0.),(1.01000034809113,0.,2.14500021934509),(1.01000034809113,0.100000001490116,2.14500021934509),(0.955000162124634,0.,0.),(0.955000162124634,0.0549999885261059,0.),(0.970000028610229,0.0549999922513962,0.),(0.970000028610229,0.0999999940395355,0.),(1.01000034809113,0.,0.),(1.01000034809113,0.100000001490116,0.))); +#311=IFCINDEXEDPOLYGONALFACE((2,3,29,28)); +#312=IFCINDEXEDPOLYGONALFACE((27,28,29,30,32,31)); +#313=IFCINDEXEDPOLYGONALFACE((7,6,5,3)); +#314=IFCINDEXEDPOLYGONALFACE((8,7,3,2)); +#315=IFCINDEXEDPOLYGONALFACE((23,24,6,7)); +#316=IFCINDEXEDPOLYGONALFACE((21,20,4,24,23,22)); +#317=IFCINDEXEDPOLYGONALFACE((11,10,25,26)); +#318=IFCINDEXEDPOLYGONALFACE((25,1,27,31)); +#319=IFCINDEXEDPOLYGONALFACE((24,4,11,6)); +#320=IFCINDEXEDPOLYGONALFACE((20,21,9,10)); +#321=IFCINDEXEDPOLYGONALFACE((9,8,2,1)); +#322=IFCINDEXEDPOLYGONALFACE((10,9,1,25)); +#323=IFCINDEXEDPOLYGONALFACE((22,23,7,8)); +#324=IFCINDEXEDPOLYGONALFACE((4,20,10,11)); +#325=IFCINDEXEDPOLYGONALFACE((21,22,8,9)); +#326=IFCINDEXEDPOLYGONALFACE((6,11,26,5)); +#327=IFCINDEXEDPOLYGONALFACE((5,26,32,30)); +#328=IFCINDEXEDPOLYGONALFACE((1,2,28,27)); +#329=IFCINDEXEDPOLYGONALFACE((26,25,31,32)); +#330=IFCINDEXEDPOLYGONALFACE((3,5,30,29)); +#331=IFCPOLYGONALFACESET(#310,.T.,(#311,#312,#313,#314,#315,#316,#317,#318,#319,#320,#321,#322,#323,#324,#325,#326,#327,#328,#329,#330),$); +#332=IFCINDEXEDPOLYGONALFACE((17,16,15,14)); +#333=IFCINDEXEDPOLYGONALFACE((12,13,14,15)); +#334=IFCINDEXEDPOLYGONALFACE((16,19,12,15)); +#335=IFCINDEXEDPOLYGONALFACE((19,16,17,18)); +#336=IFCINDEXEDPOLYGONALFACE((19,18,13,12)); +#337=IFCINDEXEDPOLYGONALFACE((18,17,14,13)); +#338=IFCPOLYGONALFACESET(#310,.T.,(#332,#333,#334,#335,#336,#337),$); +#339=IFCSHAPEREPRESENTATION(#15,'Body','Tessellation',(#331,#338)); +#340=IFCREPRESENTATIONMAP(#303,#339); +#341=IFCCARTESIANPOINT((0.,0.,0.)); +#342=IFCDIRECTION((0.,0.,1.)); +#343=IFCDIRECTION((1.,0.,0.)); +#344=IFCAXIS2PLACEMENT3D(#341,#342,#343); +#350=IFCCARTESIANPOINTLIST2D(((0.964999914169312,1.0200001001358),(0.965000033378601,0.0999999940395355),(0.925000011920929,0.0999999940395355),(0.924999952316284,1.0200001001358),(0.964999914169312,1.0200001001358),(0.844915807247162,1.01212930679321),(0.726886332035065,0.988651752471924),(0.612931072711945,0.949969172477722),(0.504999756813049,0.896743297576904),(0.404939234256744,0.829885005950928),(0.314461469650269,0.750538170337677),(0.235114604234695,0.660060405731201),(0.168256282806396,0.559999823570251),(0.115030474960804,0.452068567276001),(0.0763478726148605,0.338113307952881),(0.0528703518211842,0.220083817839622),(0.0449996180832386,0.099999688565731))); +#351=IFCINDEXEDPOLYCURVE(#350,$,$); +#352=IFCCARTESIANPOINTLIST2D(((0.970000028610229,0.0549999922513962),(0.955000162124634,0.0549999922513962),(0.955000162124634,0.),(1.01000034809113,0.),(1.01000034809113,0.0999999940395355),(0.970000028610229,0.0999999940395355))); +#353=IFCINDEXEDPOLYCURVE(#352,(IFCLINEINDEX((1,2,3,4,5,6,1))),$); +#354=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.,0.0999999940395355),(0.0399999916553497,0.0999999940395355),(0.0399999916553497,0.0549999922513962),(0.0550000071525574,0.0549999922513962),(0.0550000071525574,0.))); +#355=IFCINDEXEDPOLYCURVE(#354,(IFCLINEINDEX((1,2,3,4,5,6,1))),$); +#356=IFCGEOMETRICCURVESET((#351,#353,#355)); +#357=IFCSHAPEREPRESENTATION(#28,'Body','Annotation2D',(#356)); +#358=IFCREPRESENTATIONMAP(#344,#357); +#359=IFCDOORTYPE('2j0vIBgkH0ERnBCP0cpcCz',$,'DT01',$,$,$,(#340,#358),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); +#360=IFCSTYLEDITEM(#331,(#363),'Frame'); +#361=IFCCOLOURRGB($,0.0429765619337559,0.0429765619337559,0.0429765619337559); +#362=IFCSURFACESTYLESHADING(#361,0.); +#363=IFCSURFACESTYLE('Frame',.BOTH.,(#362)); +#364=IFCSTYLEDITEM(#338,(#367),'Panel'); +#365=IFCCOLOURRGB($,0.184475064277649,0.184475019574165,0.184475019574165); +#366=IFCSURFACESTYLESHADING(#365,0.); +#367=IFCSURFACESTYLE('Panel',.BOTH.,(#366)); +#368=IFCPILETYPE('25MTkMtaH5QeCf$gFbvSSw',$,'P1',$,$,$,$,$,$,.NOTDEFINED.); +#369=IFCRELASSOCIATESMATERIAL('09FXUZCnrFEffxBrtg16gx',$,$,$,(#368),#372); +#370=IFCCIRCLEPROFILEDEF(.AREA.,$,$,0.3); +#371=IFCMATERIALPROFILE($,$,#260,#370,$,$); +#372=IFCMATERIALPROFILESET($,$,(#371),$); +#373=IFCRAMPTYPE('2yW1ePlyb8cOR6HdEntpRh',$,'RAM200',$,$,$,$,$,$,.NOTDEFINED.); +#374=IFCRELASSOCIATESMATERIAL('1x9ZyVim19AQtJhfEE06XR',$,$,$,(#373),#376); +#375=IFCMATERIALLAYER(#260,0.2,$,$,$,$,$); +#376=IFCMATERIALLAYERSET((#375),$,$); +#377=IFCSLABTYPE('1Akbal7tP5DAPW0ti$Qp30',$,'FLR200',$,$,$,$,$,$,.NOTDEFINED.); +#378=IFCRELASSOCIATESMATERIAL('0jzkXlkBL4HhmQ_FTWW6Cj',$,$,$,(#377),#380); +#379=IFCMATERIALLAYER(#260,0.2,$,$,$,$,$); +#380=IFCMATERIALLAYERSET((#379),$,$); +#381=IFCSLABTYPE('0$gpYNi3T08BrxaR67CxgI',$,'FLR300',$,$,$,$,$,$,.NOTDEFINED.); +#382=IFCRELASSOCIATESMATERIAL('3a6kjEM29DleYTlSkA8_DK',$,$,$,(#381),#384); +#383=IFCMATERIALLAYER(#260,0.3,$,$,$,$,$); +#384=IFCMATERIALLAYERSET((#383),$,$); +#385=IFCWALLTYPE('2F1k78lI53fwS0rg3rqrRb',$,'WAL50',$,$,$,$,$,$,.NOTDEFINED.); +#386=IFCRELASSOCIATESMATERIAL('0khP_Smdj12f2JrOTRbRKj',$,$,$,(#385),#388); +#387=IFCMATERIALLAYER(#260,0.05,$,$,$,$,$); +#388=IFCMATERIALLAYERSET((#387),$,$); +#389=IFCWALLTYPE('3R5onkTtX1IxdCMPoThRaw',$,'WAL100',$,$,$,$,$,$,.NOTDEFINED.); +#390=IFCRELASSOCIATESMATERIAL('0$mXRPCT16nP6Q70XFNvZv',$,$,$,(#389),#392); +#391=IFCMATERIALLAYER(#260,0.1,$,$,$,$,$); +#392=IFCMATERIALLAYERSET((#391),$,$); +#393=IFCWALLTYPE('1juanculbDJPqvqT2FCm8m',$,'WAL200',$,$,$,$,$,$,.NOTDEFINED.); +#394=IFCRELASSOCIATESMATERIAL('0FsB2A$frFn9AZW2IG38ny',$,$,$,(#393),#396); +#395=IFCMATERIALLAYER(#260,0.2,$,$,$,$,$); +#396=IFCMATERIALLAYERSET((#395),$,$); +#397=IFCWALLTYPE('05UYduR9r1vRxZZgP64Rdw',$,'WAL300',$,$,$,$,$,$,.NOTDEFINED.); +#398=IFCRELASSOCIATESMATERIAL('2FYhYrvmv4SBoZHVWDTTte',$,$,$,(#397),#400); +#399=IFCMATERIALLAYER(#260,0.3,$,$,$,$,$); +#400=IFCMATERIALLAYERSET((#399),$,$); +#401=IFCCARTESIANPOINT((0.,0.,0.)); +#402=IFCDIRECTION((0.,0.,1.)); +#403=IFCDIRECTION((1.,0.,0.)); +#404=IFCAXIS2PLACEMENT3D(#401,#402,#403); +#411=IFCCARTESIANPOINTLIST3D(((0.899999976158142,0.,1.20000004768372),(0.899999976158142,0.,0.),(0.,0.,1.20000004768372),(0.,0.,0.),(0.0999999940395355,0.,0.0999999940395355),(0.0999999940395355,0.,1.10000002384186),(0.800000011920929,0.,1.10000002384186),(0.800000011920929,0.,0.0999999940395355),(0.0999999940395355,0.0199999995529652,0.0999999940395355),(0.0999999940395355,0.0199999995529652,1.10000002384186),(0.800000011920929,0.0199999995529652,1.10000002384186),(0.800000011920929,0.0199999995529652,0.0999999940395355),(0.0999999940395355,0.0500000007450581,0.0999999940395355),(0.0999999940395355,0.0500000007450581,1.10000002384186),(0.800000011920929,0.0500000007450581,1.10000002384186),(0.800000011920929,0.0500000007450581,0.0999999940395355),(0.,0.0500000007450581,0.),(0.,0.0500000007450581,1.20000004768372),(0.899999976158142,0.0500000007450581,1.20000004768372),(0.899999976158142,0.0500000007450581,0.),(0.0999999940395355,0.0299999993294477,0.0999999940395355),(0.0999999940395355,0.0299999993294477,1.10000002384186),(0.800000011920929,0.0299999993294477,1.10000002384186),(0.800000011920929,0.0299999993294477,0.0999999940395355))); +#412=IFCINDEXEDPOLYGONALFACE((13,17,18,14)); +#413=IFCINDEXEDPOLYGONALFACE((5,6,3,4)); +#414=IFCINDEXEDPOLYGONALFACE((7,8,2,1)); +#415=IFCINDEXEDPOLYGONALFACE((6,7,1,3)); +#416=IFCINDEXEDPOLYGONALFACE((8,5,4,2)); +#417=IFCINDEXEDPOLYGONALFACE((15,19,20,16)); +#418=IFCINDEXEDPOLYGONALFACE((14,18,19,15)); +#419=IFCINDEXEDPOLYGONALFACE((16,20,17,13)); +#420=IFCINDEXEDPOLYGONALFACE((4,17,20,2)); +#421=IFCINDEXEDPOLYGONALFACE((2,20,19,1)); +#422=IFCINDEXEDPOLYGONALFACE((8,16,13,5)); +#423=IFCINDEXEDPOLYGONALFACE((7,15,16,8)); +#424=IFCINDEXEDPOLYGONALFACE((1,19,18,3)); +#425=IFCINDEXEDPOLYGONALFACE((3,18,17,4)); +#426=IFCINDEXEDPOLYGONALFACE((6,14,15,7)); +#427=IFCINDEXEDPOLYGONALFACE((5,13,14,6)); +#428=IFCPOLYGONALFACESET(#411,.T.,(#412,#413,#414,#415,#416,#417,#418,#419,#420,#421,#422,#423,#424,#425,#426,#427),$); +#429=IFCINDEXEDPOLYGONALFACE((12,11,10,9)); +#430=IFCINDEXEDPOLYGONALFACE((24,21,22,23)); +#431=IFCINDEXEDPOLYGONALFACE((11,23,22,10)); +#432=IFCINDEXEDPOLYGONALFACE((10,22,21,9)); +#433=IFCINDEXEDPOLYGONALFACE((9,21,24,12)); +#434=IFCINDEXEDPOLYGONALFACE((12,24,23,11)); +#435=IFCPOLYGONALFACESET(#411,.T.,(#429,#430,#431,#432,#433,#434),$); +#436=IFCSHAPEREPRESENTATION(#15,'Body','Tessellation',(#428,#435)); +#437=IFCREPRESENTATIONMAP(#404,#436); +#438=IFCCARTESIANPOINT((0.,0.,0.)); +#439=IFCDIRECTION((0.,0.,1.)); +#440=IFCDIRECTION((1.,0.,0.)); +#441=IFCAXIS2PLACEMENT3D(#438,#439,#440); +#447=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.0200000032782555),(0.800000011920929,0.0200000032782555),(0.800000011920929,0.0300000011920929),(0.100000023841858,0.0300000011920929))); +#448=IFCINDEXEDPOLYCURVE(#447,(IFCLINEINDEX((1,2,3,4,1))),$); +#449=IFCCARTESIANPOINTLIST2D(((0.899999976158142,0.0500000007450581),(0.800000011920929,0.0500000007450581),(0.800000011920929,0.),(0.899999976158142,0.))); +#450=IFCINDEXEDPOLYCURVE(#449,(IFCLINEINDEX((1,2,3,4,1))),$); +#451=IFCCARTESIANPOINTLIST2D(((0.,0.),(0.100000023841858,0.),(0.100000023841858,0.0500000007450581),(0.,0.0500000007450581))); +#452=IFCINDEXEDPOLYCURVE(#451,(IFCLINEINDEX((1,2,3,4,1))),$); +#453=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.0500000007450581),(0.800000011920929,0.0500000007450581))); +#454=IFCINDEXEDPOLYCURVE(#453,$,$); +#455=IFCCARTESIANPOINTLIST2D(((0.100000023841858,0.),(0.800000011920929,0.))); +#456=IFCINDEXEDPOLYCURVE(#455,$,$); +#457=IFCGEOMETRICCURVESET((#448,#450,#452,#454,#456)); +#458=IFCSHAPEREPRESENTATION(#28,'Body','Annotation2D',(#457)); +#459=IFCREPRESENTATIONMAP(#441,#458); +#460=IFCWINDOWTYPE('0bK3c4PWL3eOMNwkPN$rlg',$,'WT01',$,$,$,(#437,#459),$,$,.NOTDEFINED.,.NOTDEFINED.,$,$); +#461=IFCSTYLEDITEM(#428,(#363),'Frame'); +#462=IFCSTYLEDITEM(#435,(#465),'Glass'); +#463=IFCCOLOURRGB($,0.800000011920929,1.,1.); +#464=IFCSURFACESTYLESHADING(#463,0.799999997019768); +#465=IFCSURFACESTYLE('Glass',.BOTH.,(#464)); +#466=IFCCARTESIANPOINT((0.,0.,0.)); +#467=IFCDIRECTION((0.,0.,1.)); +#468=IFCDIRECTION((1.,0.,0.)); +#469=IFCAXIS2PLACEMENT3D(#466,#467,#468); +#476=IFCCARTESIANPOINTLIST3D(((-0.0757642686367035,-0.0121694896370173,0.220662087202072),(-0.105255022644997,-0.0141069469973445,0.230906546115875),(-0.164038479328156,-0.0962571799755096,0.263201057910919),(-0.0149683114141226,-0.0434482358396053,0.228664547204971),(-0.0426693223416805,-0.0120228659361601,0.222334340214729),(0.0788992568850517,-0.0767349451780319,0.173714026808739),(0.0953715369105339,-0.0409212671220303,0.16986283659935),(-0.0719772353768349,-0.0949608311057091,0.171763256192207),(0.0735535696148872,-0.0462111458182335,0.199328601360321),(-0.160245850682259,0.0397466160356998,0.298533588647842),(0.106730677187443,-0.0124975387006998,0.138676866889),(0.0139651391655207,-0.0423045344650745,0.229461222887039),(0.0967235639691353,-0.0144418459385633,0.168111309409142),(-0.219927728176117,-0.0414205342531204,0.239053592085838),(-0.198184996843338,-0.0742136090993881,0.172668352723122),(-0.162167191505432,-0.0434498824179173,0.289568781852722),(-0.189809292554855,-0.0716947764158249,0.281713783740997),(0.0152298724278808,-0.0849794447422028,0.205268412828445),(-0.123513199388981,-0.0452961064875126,0.264716774225235),(-0.188629180192947,-0.119135543704033,0.233101561665535),(-0.0130218090489507,-0.0651145428419113,0.222954735159874),(-0.196876853704453,0.0119782146066427,0.138698890805244),(0.0431601963937283,-0.0451620146632195,0.22145189344883),(-0.216075524687767,-0.016599427908659,0.204968154430389),(-0.0582821778953075,0.0224160328507423,0.331800371408463),(-0.190823614597321,-0.102445237338543,0.260164886713028),(-0.0431380830705166,-0.0991964489221573,0.176975786685944),(-0.0522686094045639,0.0494366958737373,0.351232975721359),(-0.0895938724279404,0.0322130136191845,0.318689584732056),(0.013082567602396,-0.0668555349111557,0.223062723875046),(-0.106145963072777,-0.0415130592882633,0.22882467508316),(0.0448657646775246,-0.0776780471205711,0.203667193651199),(-0.10371295362711,-0.00366749544627964,0.314385384321213),(-0.21360756456852,-0.0169711355119944,0.233581200242043),(-0.138989388942719,-0.0749303176999092,0.265050023794174),(0.105769321322441,-0.0415658876299858,0.138697892427444),(0.0992072820663452,-0.0677607133984566,0.138679757714272),(-0.135680645704269,-0.0402409471571445,0.287896603345871),(-0.17496183514595,-0.0425181090831757,0.0743281096220016),(-0.161954745650291,-0.0129314502701163,0.289540559053421),(-0.208628505468369,-0.103418782353401,0.201527774333954),(0.0640031322836876,-0.0677034556865692,0.197900995612144),(0.100172616541386,0.0126537960022688,0.138708665966988),(-0.168615952134132,0.0482185557484627,0.30722576379776),(-0.0140691194683313,-0.0847146064043045,0.205532997846603),(0.0702492073178291,-0.1020467877388,0.138582319021225),(-0.181213811039925,0.0992056727409363,0.328065633773804),(-0.0152021609246731,-0.112156376242638,0.0183885656297207),(0.0162124074995518,-0.111216500401497,0.021827794611454),(-0.133747041225433,-0.0159911345690489,0.290624916553497),(-0.216561943292618,-0.0709330290555954,0.202728658914566),(-0.0427242144942284,-0.0426300838589668,0.222017183899879),(-0.159124106168747,-0.0738818794488907,0.283847242593765),(-0.103956542909145,0.0154779236763716,0.320181280374527),(-0.136982098221779,-0.102321907877922,0.0194435473531485),(-0.183684900403023,0.0396271869540215,0.295159220695496),(-0.107928916811943,-0.010153891518712,0.291135489940643),(-0.103886745870113,-0.101836994290352,0.0180104468017817),(-0.0461161360144615,-0.119219377636909,0.138967230916023),(-0.0461340732872486,-0.061420276761055,0.21500451862812),(-0.211329713463783,-0.0169732719659805,0.138692498207092),(-0.165825873613358,0.0170033983886242,0.294365167617798),(-0.162926822900772,0.0167535953223705,0.259086668491364),(0.044605728238821,-0.0985531806945801,0.171382486820221),(-0.0834082290530205,0.00335463741794229,0.315553486347198),(-0.15971240401268,0.0247225016355515,0.197611734271049),(-0.16489240527153,0.105032727122307,0.322820842266083),(-0.215148985385895,-0.0462404675781727,0.266269713640213),(0.074162483215332,0.0414574705064297,0.138786911964417),(0.0142031144350767,-0.105447888374329,0.170478105545044),(0.0141690038144588,-0.0131895141676068,0.229208543896675),(0.0433205515146255,-0.101634204387665,0.0178499221801758),(-0.194831639528275,0.00855887122452259,0.19867131114006),(-0.190071240067482,0.00837886054068804,0.263859361410141),(0.0146396514028311,0.0503562577068806,0.171330958604813),(-0.0466328002512455,-0.0789417400956154,0.203323245048523),(-0.0142267476767302,-0.0157651714980602,0.22864143550396),(-0.214272990822792,-0.0700500085949898,0.258544147014618),(-0.0187377445399761,0.0234869290143251,0.211539566516876),(-0.169090524315834,0.130419373512268,0.343455374240875),(-0.0730840340256691,-0.0585213899612427,0.211252138018608),(-0.211533859372139,-0.0429056100547314,0.138715773820877),(-0.0739177912473679,0.0154376216232777,0.210008263587952),(-0.07377789914608,-0.0735882744193077,0.200627535581589),(-0.186267927289009,-0.121167339384556,0.205986142158508),(0.0892870724201202,0.0163372419774532,0.167569145560265),(-0.163796290755272,0.0387952998280525,0.138641089200974),(-0.197594255208969,-0.07469642162323,0.138668864965439),(-0.157580107450485,0.132616892457008,0.328512966632843),(-0.0735077708959579,0.0393004417419434,0.326341509819031),(-0.133432641625404,-0.0800390690565109,0.240147277712822),(-0.161642774939537,-0.107512913644314,0.235317841172218),(-0.103187024593353,0.0151489116251469,0.293316811323166),(-0.131257891654968,-0.0962524563074112,0.0883080363273621),(-0.0977480411529541,0.0540151223540306,0.138882651925087),(-0.015323237515986,-0.12871652841568,0.138334348797798),(0.102820813655853,-0.0720862969756126,0.0782168358564377),(0.0691742300987244,0.00961552746593952,0.196848139166832),(-0.0784864947199821,-0.104707300662994,0.0244421008974314),(-0.129387423396111,-0.0837726294994354,0.201711267232895),(0.10028512775898,0.0147631969302893,0.106750056147575),(0.0725274235010147,-0.0733503252267838,0.0162904672324657),(0.0907945036888123,-0.0631996393203735,0.166820541024208),(-0.0685850381851196,0.0688069462776184,0.138255223631859),(-0.0430277064442635,-0.107757613062859,0.022122398018837),(0.102449595928192,-0.0650743395090103,0.0278087817132473),(-0.0123228346928954,-0.128916323184967,0.0516869872808456),(0.0133168455213308,-0.126367673277855,0.0497013293206692),(-0.211436733603477,-0.0425778105854988,0.171008050441742),(-0.135128378868103,-0.0737440511584282,0.028781833127141),(-0.0713493376970291,-0.0974928066134453,0.048680767416954),(-0.0144545361399651,-0.10740352421999,0.169533520936966),(-0.0520200654864311,-0.106458351016045,0.0468626022338867),(-0.0383422300219536,-0.121899470686913,0.0537898242473602),(-0.135303497314453,0.00472360569983721,0.269406676292419),(-0.222012773156166,-0.0435851588845253,0.201951056718826),(-0.150152832269669,0.0706916153430939,0.296226799488068),(-0.205232128500938,-0.0530128739774227,0.172492980957031),(0.0815067514777184,-0.0842671692371368,0.0463023483753204),(0.101917430758476,-0.0744422674179077,0.0511590167880058),(-0.104162633419037,-0.0769466981291771,0.197300210595131),(-0.165175527334213,0.100392691791058,0.295828104019165),(0.0624474883079529,-0.0914158597588539,0.172223627567291),(-0.0696270391345024,0.0371879562735558,0.345104366540909),(-0.129096910357475,-0.0715842396020889,0.0532362163066864),(-0.102229714393616,-0.0918472409248352,0.0500270053744316),(0.0328243598341942,-0.0628630220890045,0.219847500324249),(-0.0929397568106651,-0.0598123446106911,0.212814390659332),(-0.140351414680481,-0.0651696026325226,0.281688511371613),(-0.0299176927655935,0.0646412074565887,0.345614969730377),(-0.210334226489067,-0.019161444157362,0.170468419790268),(-0.189835593104362,-0.0147899463772774,0.284663945436478),(-0.0706062465906143,-0.0353134833276272,0.219783633947372),(-0.196250692009926,-0.0419037826359272,0.286000579595566),(-0.189289301633835,0.015417193993926,0.167268991470337),(-0.165491297841072,0.119253136217594,0.309156060218811),(-0.188711583614349,-0.0422543436288834,0.0857931450009346),(-0.137549817562103,-0.0175594426691532,0.048555850982666),(-0.0439321398735046,0.0188035927712917,0.209587976336479),(-0.166142821311951,0.0438390895724297,0.269286632537842),(-0.100659042596817,0.0212050415575504,0.210695147514343),(-0.165524810552597,0.0681574642658234,0.275103896856308),(-0.131917878985405,-0.0432314537465572,0.0469778589904308),(-0.0393056124448776,-0.127956256270409,0.0805243328213692),(-0.0148295955732465,-0.134464859962463,0.078124076128006),(0.0156515818089247,-0.132012516260147,0.0775675550103188),(0.128680378198624,-0.0638554841279984,0.0486980155110359),(0.011726126074791,-0.12689021229744,0.138521879911423),(-0.104669205844402,-0.0973712056875229,0.0786209478974342),(-0.0722803771495819,-0.0994613841176033,0.0782437026500702),(-0.0900976955890656,0.0289249792695045,0.304527103900909),(-0.131665915250778,-0.0805337652564049,0.0729337483644485),(-0.17888680100441,0.0127522293478251,0.288278430700302),(-0.131906762719154,0.0216084867715836,0.211986422538757),(0.0438910871744156,0.0446652211248875,0.170035198330879),(0.126842275261879,-0.0620891898870468,0.0720244571566582),(-0.181458547711372,0.0720020085573196,0.30515855550766),(-0.105359517037868,0.0106867477297783,0.222205132246017),(-0.0755681917071342,-0.105624243617058,0.10775239020586),(-0.130771055817604,0.0436740666627884,0.171749204397202),(-0.133024662733078,0.049973726272583,0.138679206371307),(-0.11655567586422,-0.016352504491806,0.262825727462769),(-0.192813113331795,0.00962049700319767,0.228011801838875),(-0.0995994955301285,0.0463632792234421,0.169919461011887),(-0.0153328543528914,0.07756557315588,0.138280719518661),(-0.0149811441078782,0.0544508099555969,0.170514196157455),(-0.0777326822280884,0.0189591310918331,0.297642737627029),(-0.0429378487169743,0.0526389256119728,0.171193689107895),(-0.210668057203293,-0.0934961810708046,0.245899826288223),(-0.162400558590889,0.0198477655649185,0.223333954811096),(0.112556174397469,-0.0415905937552452,0.087884321808815),(-0.0984991043806076,0.0341813936829567,0.19681504368782),(-0.125417664647102,0.00907643139362335,0.292186677455902),(0.0127286352217197,0.0715995132923126,0.138794869184494),(-0.184464573860168,-0.063567191362381,0.0917578190565109),(-0.159845903515816,0.0349735803902149,0.277037382125854),(-0.163954228162766,-0.073273241519928,0.079649306833744),(-0.130220845341682,0.0479081235826015,0.111017473042011),(-0.105627626180649,-0.103251308202744,0.104907594621181),(-0.0447412990033627,-0.130966305732727,0.105820834636688),(-0.0145897325128317,-0.137667417526245,0.107010833919048),(0.0177259147167206,-0.133680522441864,0.11051332205534),(-0.20410780608654,-0.015498636290431,0.265768945217133),(-0.163662612438202,-0.0963144749403,0.108248025178909),(-0.133774682879448,-0.102946348488331,0.108776144683361),(-0.152653515338898,-0.093793697655201,0.0112244309857488),(-0.169374197721481,0.0769077241420746,0.31595915555954),(-0.15337011218071,0.0495448186993599,0.289855599403381),(-0.14865180850029,0.0935175195336342,0.306516766548157),(-0.163774311542511,-0.100279614329338,0.138708546757698),(-0.114786863327026,-0.0349755696952343,0.251059830188751),(0.0435214228928089,-0.123003117740154,0.107089169323444),(0.0122568001970649,0.0234032459557056,0.212896287441254),(-0.132915586233139,-0.105148307979107,0.138666361570358),(-0.103796437382698,-0.10418801009655,0.13867013156414),(-0.0721595510840416,-0.1059859842062,0.138681977987289),(0.0412953048944473,-0.0123581402003765,0.221496060490608),(-0.0697300583124161,0.0507166534662247,0.170578330755234),(0.0441036224365234,-0.114852353930473,0.138935402035713),(-0.0128488391637802,0.0388977639377117,0.196252673864365),(-0.124916173517704,-0.00659546442329884,0.306106418371201),(-0.218161851167679,-0.071009561419487,0.230814844369888),(-0.163197606801987,-0.0973011329770088,0.173606932163239),(-0.106259688735008,-0.0960564464330673,0.167294099926949),(-0.134439319372177,-0.0996981337666512,0.164969086647034),(-0.160570159554482,-0.110724151134491,0.202919006347656),(-0.120365753769875,-0.00549432123079896,0.253050655126572),(-0.133883744478226,0.0106024611741304,0.23326064646244),(-0.0365464128553867,0.062771737575531,0.351498425006866),(-0.0698662772774696,0.0357129909098148,0.305281817913055),(-0.135447904467583,-0.0874549821019173,0.184239640831947),(-0.112891294062138,0.00657996907830238,0.271908432245255),(-0.0499069318175316,0.0498133301734924,0.325594484806061),(-0.135738432407379,-0.100006818771362,-7.45058059692383E-09),(0.0123523958027363,-0.101531967520714,-7.45058059692383E-09),(-0.102930329740047,-0.0987276136875153,-7.45058059692383E-09),(-0.158383101224899,0.0353976972401142,0.167762398719788),(0.0585155189037323,-0.0887269079685211,0.0169257298111916),(-0.202236160635948,-0.0440891794860363,0.107780121266842),(0.12652799487114,-0.0424845181405544,0.0317913927137852),(0.0445115864276886,-0.111490845680237,0.0452388003468513),(0.0178857706487179,0.0359265469014645,0.199328750371933),(0.0685334727168083,-0.0978689268231392,0.0533365905284882),(0.138488471508026,-0.0432419404387474,0.0493728704750538),(0.0406565591692924,0.062880277633667,0.138536900281906),(0.0871811881661415,-0.0870387107133865,0.138694822788239),(-0.0505233928561211,0.0300182458013296,0.313426643610001),(0.0435324311256409,-0.119963906705379,0.0792121887207031),(0.0723142325878143,-0.100660108029842,0.0801471099257469),(0.0880676060914993,-0.086207315325737,0.078484445810318),(0.136276960372925,-0.0405644066631794,0.078633114695549),(0.0735301449894905,0.0462804175913334,0.10518267005682),(-0.180783584713936,0.120272636413574,0.33598318696022),(-0.155802026391029,-0.042164009064436,0.0622472763061523),(-0.192451253533363,-0.0732510983943939,0.112686090171337),(0.0313579067587852,0.0240139346569777,0.208784699440002),(0.0728883668780327,-0.103513494133949,0.107350297272205),(0.0885002017021179,-0.0885679498314857,0.105739302933216),(0.100790202617645,-0.0713259652256966,0.10683286935091),(0.109439946711063,-0.0426978133618832,0.107300646603107),(-0.18864569067955,-0.0167884975671768,0.0867345333099365),(-0.0709428116679192,0.0352016389369965,0.19365206360817),(-0.0357190407812595,0.0615072995424271,0.335724234580994),(0.0447911284863949,0.0144118629395962,-7.45058059692383E-09),(0.0369860865175724,0.0369828194379807,-7.45058059692383E-09),(0.0461129434406757,-0.0748821049928665,-7.45058059692383E-09),(0.104031659662724,-0.0135611081495881,0.0148804550990462),(0.0986066535115242,0.0066530667245388,0.0271508432924747),(0.103960558772087,-0.0420542061328888,0.0150693515315652),(0.121874935925007,-0.0147962821647525,0.0282622296363115),(0.0696230307221413,0.0340555869042873,0.168976783752441),(0.0729203075170517,0.015480482019484,0.0226278305053711),(-0.0445376336574554,0.0741409137845039,0.139188349246979),(0.046685803681612,0.0460076108574867,0.0192816369235516),(0.132462680339813,-0.0147683853283525,0.079218864440918),(0.123972199857235,0.00519884005188942,0.0471794344484806),(0.13483801484108,-0.0135693158954382,0.0477543026208878),(0.101557418704033,0.0150842368602753,0.0500984787940979),(-0.151446789503098,0.125798091292381,0.318272113800049),(0.0826703608036041,0.023927254602313,0.0464257299900055),(0.0693408101797104,0.0435765013098717,0.0500893704593182),(-0.0420871675014496,0.0380131863057613,0.193471923470497),(-0.0971032008528709,0.0616641864180565,-7.45058059692383E-09),(-0.0130963791161776,0.064698226749897,0.0197515171021223),(-0.157119512557983,0.00803167372941971,-7.45058059692383E-09),(0.113602519035339,-0.0132037419825792,0.0879008769989014),(-0.069912314414978,0.066078893840313,0.0191369466483593),(0.0389328189194202,0.0351467467844486,0.194373697042465),(0.0768988505005836,0.0420413166284561,0.0788332372903824),(0.10157422721386,0.0134498169645667,0.0773250162601471),(0.123080961406231,0.00395354814827442,0.0694246292114258),(-0.211960434913635,-0.102200835943222,0.224356546998024),(0.110181555151939,-0.0136255938559771,0.109196342527866),(-0.102282598614693,0.0414383597671986,0.019612405449152),(-0.172445297241211,0.11539913713932,0.340771019458771),(-0.181048646569252,0.112369157373905,0.34296378493309),(0.0725264996290207,-0.0152853392064571,0.200319215655327),(-0.183978870511055,0.0709394812583923,0.317676812410355),(-0.153028383851051,-0.0384657420217991,-7.45058059692383E-09),(-0.154637187719345,-0.0691222250461578,-7.45058059692383E-09),(-0.152765303850174,-0.0738510563969612,0.015262059867382),(-0.153248697519302,-0.0919284746050835,-7.45058059692383E-09),(-0.16192090511322,-0.0145302480086684,-7.45058059692383E-09),(-0.161076262593269,-0.0149271814152598,0.0173035766929388),(-0.139386385679245,-0.0480194091796875,0.0201432537287474),(-0.15407682955265,-0.0336258858442307,0.0154564278200269),(-0.141747921705246,-0.0158547051250935,0.0288874395191669),(-0.0563743449747562,-0.108996540307999,0.0737379342317581),(-0.0461691729724407,0.0890766233205795,0.110146202147007),(-0.0146415047347546,0.0512426868081093,-7.45058059692383E-09),(-0.156508177518845,0.00872325897216797,0.0127747664228082),(-0.0932494476437569,0.0622886717319489,0.0157215017825365),(-0.134241998195648,0.0180515833199024,0.0220324043184519),(-0.0754619538784027,0.0455531552433968,0.0509162880480289),(-0.103701874613762,0.0273517612367868,0.0517874732613564),(-0.131066977977753,0.0115249017253518,0.0524038933217525),(-0.062931016087532,0.0692232176661491,0.0536416172981262),(-0.132335588335991,0.0322872921824455,0.19751612842083),(-0.0452888980507851,0.0760203972458839,0.0472172982990742),(-0.163926124572754,0.0142420912161469,0.0823174566030502),(-0.174691706895828,-0.0135900285094976,0.0736509189009666),(-0.0486402213573456,0.0849898308515549,0.0788175389170647),(-0.0689510703086853,0.0702485665678978,0.0784279331564903),(-0.0810153111815453,0.0491584502160549,0.0748984813690186),(-0.0429749675095081,0.0617619827389717,-7.45058059692383E-09),(0.0349937379360199,0.00642204098403454,0.219141826033592),(-0.202323064208031,-0.0122631303966045,0.109208643436432),(-0.188646167516708,0.0148954978212714,0.108683586120605),(-0.0744052901864052,0.0735662579536438,0.106222227215767),(-0.161729156970978,0.0381991006433964,0.108166508376598),(-0.104008600115776,0.0453929454088211,-7.45058059692383E-09),(0.0388389863073826,0.0702219158411026,0.10972835123539),(-0.0412575826048851,0.0688836574554443,0.0204634200781584),(-0.132600158452988,0.0162683837115765,-7.45058059692383E-09),(0.0419384241104126,0.0643723532557487,0.0487342029809952),(-0.0230755694210529,0.0902970731258392,0.106796741485596),(0.0122685618698597,0.0503091886639595,-7.45058059692383E-09),(0.0420029424130917,0.0680971890687943,0.0789963230490685),(-0.0132175851613283,0.00625489093363285,0.222308561205864),(0.0146723045036197,0.00723757036030293,0.223271667957306),(0.0720149055123329,-0.0120490025728941,0.00231547281146049),(0.013688700273633,0.0642379224300385,0.0262222941964865),(0.033619936555624,0.0599825419485569,0.0301631242036819),(0.0156846102327108,0.0726122707128525,0.0497567467391491),(-0.0139973452314734,0.0766579210758209,0.0474896989762783),(-0.0166601836681366,0.0857705846428871,0.0790435597300529),(0.0127416122704744,0.0787845030426979,0.0776184424757957),(-0.137325063347816,0.0222998633980751,0.0709470063447952),(-0.103061355650425,0.0392319709062576,0.082869827747345),(-0.133015736937523,0.0387391112744808,0.0904415026307106),(-0.151931047439575,0.0321191623806953,0.0878717452287674),(0.0125869233161211,0.0806632563471794,0.105742789804935),(-0.0995742082595825,0.049370177090168,0.106232292950153),(-0.0746603757143021,0.0656085163354874,-7.45058059692383E-09),(0.0122953318059444,0.017735980451107,-7.45058059692383E-09),(-0.0146934473887086,0.0262711010873318,-7.45058059692383E-09),(-0.0429374538362026,0.0298651698976755,-7.45058059692383E-09),(-0.103215932846069,0.0137835666537285,-7.45058059692383E-09),(0.0444422401487827,-0.0129836350679398,-7.45058059692383E-09),(-0.0746518895030022,0.0316607765853405,-7.45058059692383E-09),(0.0123018361628056,-0.0127876792103052,-7.45058059692383E-09),(-0.0147215090692043,-0.0133242877200246,-7.45058059692383E-09),(-0.101430043578148,-0.0147481001913548,-7.45058059692383E-09),(-0.0429213680326939,-0.0151002155616879,-7.45058059692383E-09),(-0.132630944252014,-0.0134387537837029,-7.45058059692383E-09),(-0.0746475011110306,-0.0111579261720181,-7.45058059692383E-09),(0.0461949594318867,-0.0483818538486958,-7.45058059692383E-09),(0.0123028568923473,-0.0431565642356873,-7.45058059692383E-09),(0.0676943361759186,-0.0439984127879143,0.00213921279646456),(-0.0147214606404305,-0.0419304519891739,-7.45058059692383E-09),(-0.0429213680326939,-0.0426230616867542,-7.45058059692383E-09),(-0.134391859173775,-0.0420995727181435,-7.45058059692383E-09),(0.0123003236949444,-0.0714240521192551,-7.45058059692383E-09),(-0.0147217661142349,-0.0719940662384033,-7.45058059692383E-09),(-0.0746477097272873,-0.0698381289839745,-7.45058059692383E-09),(-0.0429213680326939,-0.0721928924322128,-7.45058059692383E-09),(-0.101144231855869,-0.0718697011470795,-7.45058059692383E-09),(0.0347950644791126,-0.096686989068985,-7.45058059692383E-09),(-0.132067084312439,-0.0720017328858376,-7.45058059692383E-09),(-0.159548789262772,-0.0125050684437156,0.0618688985705376),(-0.0169071108102798,-0.107485927641392,-7.45058059692383E-09),(-0.0746394321322441,-0.103576719760895,-7.45058059692383E-09),(-0.0428757518529892,-0.105996340513229,-7.45058059692383E-09),(-0.0746474862098694,-0.0418127365410328,-7.45058059692383E-09),(-0.101288944482803,-0.0456511229276657,-7.45058059692383E-09),(0.061871238052845,0.0245271548628807,0.191577181220055),(-0.0470216795802116,0.0414715930819511,0.344332307577133),(-0.0351001992821693,0.0582603961229324,0.352131396532059),(-0.043320570141077,0.0422725304961205,0.325726985931396),(-0.0332878455519676,0.056865319609642,0.334871053695679),(-0.0782285928726196,0.010980136692524,0.334277510643005),(-0.0612197890877724,0.0185103937983513,0.30783212184906),(-0.0876919776201248,0.0268637835979462,0.333815038204193),(-0.0750949084758759,-0.00158989988267422,0.21651217341423),(-0.0432584583759308,0.000724630663171411,0.217384174466133))); +#477=IFCINDEXEDPOLYGONALFACE((187,278,44)); +#478=IFCINDEXEDPOLYGONALFACE((21,52,60)); +#479=IFCINDEXEDPOLYGONALFACE((91,100,31)); +#480=IFCINDEXEDPOLYGONALFACE((162,19,191)); +#481=IFCINDEXEDPOLYGONALFACE((288,180,159)); +#482=IFCINDEXEDPOLYGONALFACE((241,219,307)); +#483=IFCINDEXEDPOLYGONALFACE((54,93,173)); +#484=IFCINDEXEDPOLYGONALFACE((60,45,21)); +#485=IFCINDEXEDPOLYGONALFACE((58,110,55)); +#486=IFCINDEXEDPOLYGONALFACE((64,18,70)); +#487=IFCINDEXEDPOLYGONALFACE((2,207,162)); +#488=IFCINDEXEDPOLYGONALFACE((10,176,188)); +#489=IFCINDEXEDPOLYGONALFACE((105,114,113)); +#490=IFCINDEXEDPOLYGONALFACE((220,106,249)); +#491=IFCINDEXEDPOLYGONALFACE((252,321,244)); +#492=IFCINDEXEDPOLYGONALFACE((162,57,19)); +#493=IFCINDEXEDPOLYGONALFACE((224,147,220)); +#494=IFCINDEXEDPOLYGONALFACE((90,373,124)); +#495=IFCINDEXEDPOLYGONALFACE((70,199,64)); +#496=IFCINDEXEDPOLYGONALFACE((256,248,258)); +#497=IFCINDEXEDPOLYGONALFACE((115,212,207)); +#498=IFCINDEXEDPOLYGONALFACE((103,36,7)); +#499=IFCINDEXEDPOLYGONALFACE((71,306,320)); +#500=IFCINDEXEDPOLYGONALFACE((297,267,294)); +#501=IFCINDEXEDPOLYGONALFACE((57,50,19)); +#502=IFCINDEXEDPOLYGONALFACE((117,44,188)); +#503=IFCINDEXEDPOLYGONALFACE((62,56,153)); +#504=IFCINDEXEDPOLYGONALFACE((106,147,120)); +#505=IFCINDEXEDPOLYGONALFACE((254,244,245)); +#506=IFCINDEXEDPOLYGONALFACE((208,207,2)); +#507=IFCINDEXEDPOLYGONALFACE((256,257,250)); +#508=IFCINDEXEDPOLYGONALFACE((203,205,211)); +#509=IFCINDEXEDPOLYGONALFACE((56,278,157)); +#510=IFCINDEXEDPOLYGONALFACE((103,7,9)); +#511=IFCINDEXEDPOLYGONALFACE((63,140,176)); +#512=IFCINDEXEDPOLYGONALFACE((15,109,118)); +#513=IFCINDEXEDPOLYGONALFACE((59,159,180)); +#514=IFCINDEXEDPOLYGONALFACE((158,154,208)); +#515=IFCINDEXEDPOLYGONALFACE((300,241,308)); +#516=IFCINDEXEDPOLYGONALFACE((23,32,42)); +#517=IFCINDEXEDPOLYGONALFACE((44,278,56)); +#518=IFCINDEXEDPOLYGONALFACE((189,259,67)); +#519=IFCINDEXEDPOLYGONALFACE((309,304,333)); +#520=IFCINDEXEDPOLYGONALFACE((136,89,259)); +#521=IFCINDEXEDPOLYGONALFACE((31,191,19)); +#522=IFCINDEXEDPOLYGONALFACE((295,304,294)); +#523=IFCINDEXEDPOLYGONALFACE((50,38,19)); +#524=IFCINDEXEDPOLYGONALFACE((44,62,10)); +#525=IFCINDEXEDPOLYGONALFACE((369,25,227)); +#526=IFCINDEXEDPOLYGONALFACE((136,47,233)); +#527=IFCINDEXEDPOLYGONALFACE((33,54,201)); +#528=IFCINDEXEDPOLYGONALFACE((333,304,329)); +#529=IFCINDEXEDPOLYGONALFACE((281,110,285)); +#530=IFCINDEXEDPOLYGONALFACE((275,80,276)); +#531=IFCINDEXEDPOLYGONALFACE((119,106,120)); +#532=IFCINDEXEDPOLYGONALFACE((276,80,233)); +#533=IFCINDEXEDPOLYGONALFACE((232,318,312)); +#534=IFCINDEXEDPOLYGONALFACE((208,63,115)); +#535=IFCINDEXEDPOLYGONALFACE((150,288,159)); +#536=IFCINDEXEDPOLYGONALFACE((286,287,284)); +#537=IFCINDEXEDPOLYGONALFACE((286,285,287)); +#538=IFCINDEXEDPOLYGONALFACE((285,286,279)); +#539=IFCINDEXEDPOLYGONALFACE((239,171,240)); +#540=IFCINDEXEDPOLYGONALFACE((233,47,276)); +#541=IFCINDEXEDPOLYGONALFACE((124,213,90)); +#542=IFCINDEXEDPOLYGONALFACE((157,278,47)); +#543=IFCINDEXEDPOLYGONALFACE((187,47,157)); +#544=IFCINDEXEDPOLYGONALFACE((268,75,222)); +#545=IFCINDEXEDPOLYGONALFACE((101,269,232)); +#546=IFCINDEXEDPOLYGONALFACE((277,7,13)); +#547=IFCINDEXEDPOLYGONALFACE((140,63,74)); +#548=IFCINDEXEDPOLYGONALFACE((140,74,56)); +#549=IFCINDEXEDPOLYGONALFACE((74,153,56)); +#550=IFCINDEXEDPOLYGONALFACE((57,201,50)); +#551=IFCINDEXEDPOLYGONALFACE((320,236,193)); +#552=IFCINDEXEDPOLYGONALFACE((222,236,268)); +#553=IFCINDEXEDPOLYGONALFACE((173,50,201)); +#554=IFCINDEXEDPOLYGONALFACE((299,267,297)); +#555=IFCINDEXEDPOLYGONALFACE((162,212,57)); +#556=IFCINDEXEDPOLYGONALFACE((208,115,207)); +#557=IFCINDEXEDPOLYGONALFACE((267,292,274)); +#558=IFCINDEXEDPOLYGONALFACE((98,197,277)); +#559=IFCINDEXEDPOLYGONALFACE((295,328,329)); +#560=IFCINDEXEDPOLYGONALFACE((158,208,2)); +#561=IFCINDEXEDPOLYGONALFACE((201,57,33)); +#562=IFCINDEXEDPOLYGONALFACE((187,47,278)); +#563=IFCINDEXEDPOLYGONALFACE((241,307,308)); +#564=IFCINDEXEDPOLYGONALFACE((335,317,245)); +#565=IFCINDEXEDPOLYGONALFACE((328,330,329)); +#566=IFCINDEXEDPOLYGONALFACE((84,128,121)); +#567=IFCINDEXEDPOLYGONALFACE((331,330,328)); +#568=IFCINDEXEDPOLYGONALFACE((300,331,328)); +#569=IFCINDEXEDPOLYGONALFACE((129,19,38)); +#570=IFCINDEXEDPOLYGONALFACE((154,298,66)); +#571=IFCINDEXEDPOLYGONALFACE((317,322,323)); +#572=IFCINDEXEDPOLYGONALFACE((302,297,303)); +#573=IFCINDEXEDPOLYGONALFACE((212,93,167)); +#574=IFCINDEXEDPOLYGONALFACE((94,185,184)); +#575=IFCINDEXEDPOLYGONALFACE((211,121,100)); +#576=IFCINDEXEDPOLYGONALFACE((212,173,93)); +#577=IFCINDEXEDPOLYGONALFACE((317,254,245)); +#578=IFCINDEXEDPOLYGONALFACE((51,15,41)); +#579=IFCINDEXEDPOLYGONALFACE((321,339,244)); +#580=IFCINDEXEDPOLYGONALFACE((244,335,245)); +#581=IFCINDEXEDPOLYGONALFACE((211,204,121)); +#582=IFCINDEXEDPOLYGONALFACE((246,72,358)); +#583=IFCINDEXEDPOLYGONALFACE((300,360,301)); +#584=IFCINDEXEDPOLYGONALFACE((234,177,39)); +#585=IFCINDEXEDPOLYGONALFACE((125,152,177)); +#586=IFCINDEXEDPOLYGONALFACE((338,314,311)); +#587=IFCINDEXEDPOLYGONALFACE((149,94,152)); +#588=IFCINDEXEDPOLYGONALFACE((39,175,137)); +#589=IFCINDEXEDPOLYGONALFACE((334,292,267)); +#590=IFCINDEXEDPOLYGONALFACE((343,338,340,346)); +#591=IFCINDEXEDPOLYGONALFACE((283,286,284)); +#592=IFCINDEXEDPOLYGONALFACE((129,16,53)); +#593=IFCINDEXEDPOLYGONALFACE((102,249,106)); +#594=IFCINDEXEDPOLYGONALFACE((197,12,23)); +#595=IFCINDEXEDPOLYGONALFACE((330,310,178)); +#596=IFCINDEXEDPOLYGONALFACE((307,61,22,308)); +#597=IFCINDEXEDPOLYGONALFACE((300,310,331)); +#598=IFCINDEXEDPOLYGONALFACE((205,190,194)); +#599=IFCINDEXEDPOLYGONALFACE((133,2,31)); +#600=IFCINDEXEDPOLYGONALFACE((85,92,20)); +#601=IFCINDEXEDPOLYGONALFACE((360,39,301)); +#602=IFCINDEXEDPOLYGONALFACE((122,47,136)); +#603=IFCINDEXEDPOLYGONALFACE((281,282,186)); +#604=IFCINDEXEDPOLYGONALFACE((2,191,31)); +#605=IFCINDEXEDPOLYGONALFACE((250,249,247)); +#606=IFCINDEXEDPOLYGONALFACE((58,214,216)); +#607=IFCINDEXEDPOLYGONALFACE((234,138,143)); +#608=IFCINDEXEDPOLYGONALFACE((141,298,154)); +#609=IFCINDEXEDPOLYGONALFACE((27,45,76)); +#610=IFCINDEXEDPOLYGONALFACE((146,181,145)); +#611=IFCINDEXEDPOLYGONALFACE((144,181,180)); +#612=IFCINDEXEDPOLYGONALFACE((195,185,179)); +#613=IFCINDEXEDPOLYGONALFACE((228,223,229)); +#614=IFCINDEXEDPOLYGONALFACE((49,358,72)); +#615=IFCINDEXEDPOLYGONALFACE((74,34,183)); +#616=IFCINDEXEDPOLYGONALFACE((221,218,223)); +#617=IFCINDEXEDPOLYGONALFACE((146,107,108)); +#618=IFCINDEXEDPOLYGONALFACE((194,204,205)); +#619=IFCINDEXEDPOLYGONALFACE((352,359,280,279)); +#620=IFCINDEXEDPOLYGONALFACE((46,64,199)); +#621=IFCINDEXEDPOLYGONALFACE((366,86,251)); +#622=IFCINDEXEDPOLYGONALFACE((48,114,105)); +#623=IFCINDEXEDPOLYGONALFACE((198,95,164)); +#624=IFCINDEXEDPOLYGONALFACE((372,65,167)); +#625=IFCINDEXEDPOLYGONALFACE((74,132,153)); +#626=IFCINDEXEDPOLYGONALFACE((21,12,4)); +#627=IFCINDEXEDPOLYGONALFACE((288,111,113)); +#628=IFCINDEXEDPOLYGONALFACE((75,225,174)); +#629=IFCINDEXEDPOLYGONALFACE((166,262,200)); +#630=IFCINDEXEDPOLYGONALFACE((223,230,229)); +#631=IFCINDEXEDPOLYGONALFACE((26,92,3)); +#632=IFCINDEXEDPOLYGONALFACE((219,88,82)); +#633=IFCINDEXEDPOLYGONALFACE((355,357,365,364)); +#634=IFCINDEXEDPOLYGONALFACE((322,325,324)); +#635=IFCINDEXEDPOLYGONALFACE((257,220,250)); +#636=IFCINDEXEDPOLYGONALFACE((289,104,253)); +#637=IFCINDEXEDPOLYGONALFACE((228,108,221)); +#638=IFCINDEXEDPOLYGONALFACE((119,218,102)); +#639=IFCINDEXEDPOLYGONALFACE((367,124,25)); +#640=IFCINDEXEDPOLYGONALFACE((327,325,326)); +#641=IFCINDEXEDPOLYGONALFACE((40,115,63)); +#642=IFCINDEXEDPOLYGONALFACE((321,248,247)); +#643=IFCINDEXEDPOLYGONALFACE((158,83,141)); +#644=IFCINDEXEDPOLYGONALFACE((13,98,277)); +#645=IFCINDEXEDPOLYGONALFACE((352,345,343,365)); +#646=IFCINDEXEDPOLYGONALFACE((5,374,1)); +#647=IFCINDEXEDPOLYGONALFACE((339,347,348,341)); +#648=IFCINDEXEDPOLYGONALFACE((135,87,22)); +#649=IFCINDEXEDPOLYGONALFACE((156,224,231)); +#650=IFCINDEXEDPOLYGONALFACE((163,63,170)); +#651=IFCINDEXEDPOLYGONALFACE((56,142,140)); +#652=IFCINDEXEDPOLYGONALFACE((362,355,356,363)); +#653=IFCINDEXEDPOLYGONALFACE((88,203,15)); +#654=IFCINDEXEDPOLYGONALFACE((24,163,73)); +#655=IFCINDEXEDPOLYGONALFACE((14,78,68)); +#656=IFCINDEXEDPOLYGONALFACE((248,260,258)); +#657=IFCINDEXEDPOLYGONALFACE((78,26,17)); +#658=IFCINDEXEDPOLYGONALFACE((16,17,53)); +#659=IFCINDEXEDPOLYGONALFACE((161,164,95)); +#660=IFCINDEXEDPOLYGONALFACE((291,287,293)); +#661=IFCINDEXEDPOLYGONALFACE((127,18,32)); +#662=IFCINDEXEDPOLYGONALFACE((182,199,148)); +#663=IFCINDEXEDPOLYGONALFACE((319,71,320)); +#664=IFCINDEXEDPOLYGONALFACE((225,232,312)); +#665=IFCINDEXEDPOLYGONALFACE((302,309,289)); +#666=IFCINDEXEDPOLYGONALFACE((13,36,11)); +#667=IFCINDEXEDPOLYGONALFACE((308,87,310)); +#668=IFCINDEXEDPOLYGONALFACE((353,348,347,246)); +#669=IFCINDEXEDPOLYGONALFACE((262,79,200)); +#670=IFCINDEXEDPOLYGONALFACE((131,73,135)); +#671=IFCINDEXEDPOLYGONALFACE((370,213,243)); +#672=IFCINDEXEDPOLYGONALFACE((92,100,91)); +#673=IFCINDEXEDPOLYGONALFACE((89,233,80)); +#674=IFCINDEXEDPOLYGONALFACE((332,165,174)); +#675=IFCINDEXEDPOLYGONALFACE((1,374,2)); +#676=IFCINDEXEDPOLYGONALFACE((28,368,209)); +#677=IFCINDEXEDPOLYGONALFACE((189,136,259)); +#678=IFCINDEXEDPOLYGONALFACE((326,332,327)); +#679=IFCINDEXEDPOLYGONALFACE((117,122,189)); +#680=IFCINDEXEDPOLYGONALFACE((132,16,40)); +#681=IFCINDEXEDPOLYGONALFACE((263,334,311)); +#682=IFCINDEXEDPOLYGONALFACE((134,183,68)); +#683=IFCINDEXEDPOLYGONALFACE((157,122,142)); +#684=IFCINDEXEDPOLYGONALFACE((239,230,97)); +#685=IFCINDEXEDPOLYGONALFACE((180,96,59)); +#686=IFCINDEXEDPOLYGONALFACE((99,113,111)); +#687=IFCINDEXEDPOLYGONALFACE((22,131,135)); +#688=IFCINDEXEDPOLYGONALFACE((321,249,349)); +#689=IFCINDEXEDPOLYGONALFACE((156,120,147)); +#690=IFCINDEXEDPOLYGONALFACE((148,181,182)); +#691=IFCINDEXEDPOLYGONALFACE((152,126,149)); +#692=IFCINDEXEDPOLYGONALFACE((346,340,337,344)); +#693=IFCINDEXEDPOLYGONALFACE((358,215,353,246)); +#694=IFCINDEXEDPOLYGONALFACE((275,89,80)); +#695=IFCINDEXEDPOLYGONALFACE((240,37,239)); +#696=IFCINDEXEDPOLYGONALFACE((14,183,34)); +#697=IFCINDEXEDPOLYGONALFACE((293,295,274)); +#698=IFCINDEXEDPOLYGONALFACE((350,351,344,342)); +#699=IFCINDEXEDPOLYGONALFACE((148,112,96)); +#700=IFCINDEXEDPOLYGONALFACE((313,325,264)); +#701=IFCINDEXEDPOLYGONALFACE((154,170,208)); +#702=IFCINDEXEDPOLYGONALFACE((226,123,46)); +#703=IFCINDEXEDPOLYGONALFACE((351,364,346,344)); +#704=IFCINDEXEDPOLYGONALFACE((355,362,216,357)); +#705=IFCINDEXEDPOLYGONALFACE((349,339,321)); +#706=IFCINDEXEDPOLYGONALFACE((318,324,327)); +#707=IFCINDEXEDPOLYGONALFACE((338,311,334,340)); +#708=IFCINDEXEDPOLYGONALFACE((326,299,302)); +#709=IFCINDEXEDPOLYGONALFACE((112,59,96)); +#710=IFCINDEXEDPOLYGONALFACE((262,198,242)); +#711=IFCINDEXEDPOLYGONALFACE((272,51,41)); +#712=IFCINDEXEDPOLYGONALFACE((318,261,315)); +#713=IFCINDEXEDPOLYGONALFACE((167,57,212)); +#714=IFCINDEXEDPOLYGONALFACE((271,266,255)); +#715=IFCINDEXEDPOLYGONALFACE((218,246,102)); +#716=IFCINDEXEDPOLYGONALFACE((94,179,185)); +#717=IFCINDEXEDPOLYGONALFACE((343,346,364,365)); +#718=IFCINDEXEDPOLYGONALFACE((40,153,132)); +#719=IFCINDEXEDPOLYGONALFACE((345,314,338,343)); +#720=IFCINDEXEDPOLYGONALFACE((8,121,204)); +#721=IFCINDEXEDPOLYGONALFACE((32,64,123)); +#722=IFCINDEXEDPOLYGONALFACE((88,109,82)); +#723=IFCINDEXEDPOLYGONALFACE((133,128,81)); +#724=IFCINDEXEDPOLYGONALFACE((193,319,320)); +#725=IFCINDEXEDPOLYGONALFACE((370,367,369)); +#726=IFCINDEXEDPOLYGONALFACE((6,9,42)); +#727=IFCINDEXEDPOLYGONALFACE((214,186,282)); +#728=IFCINDEXEDPOLYGONALFACE((200,75,166)); +#729=IFCINDEXEDPOLYGONALFACE((375,79,139)); +#730=IFCINDEXEDPOLYGONALFACE((95,309,333)); +#731=IFCINDEXEDPOLYGONALFACE((221,49,72)); +#732=IFCINDEXEDPOLYGONALFACE((36,273,11)); +#733=IFCINDEXEDPOLYGONALFACE((69,155,251)); +#734=IFCINDEXEDPOLYGONALFACE((316,302,289)); +#735=IFCINDEXEDPOLYGONALFACE((297,304,303)); +#736=IFCINDEXEDPOLYGONALFACE((195,159,196)); +#737=IFCINDEXEDPOLYGONALFACE((110,186,55)); +#738=IFCINDEXEDPOLYGONALFACE((323,324,315)); +#739=IFCINDEXEDPOLYGONALFACE((172,83,242)); +#740=IFCINDEXEDPOLYGONALFACE((61,219,82)); +#741=IFCINDEXEDPOLYGONALFACE((283,291,265)); +#742=IFCINDEXEDPOLYGONALFACE((184,175,177)); +#743=IFCINDEXEDPOLYGONALFACE((349,246,347)); +#744=IFCINDEXEDPOLYGONALFACE((174,166,75)); +#745=IFCINDEXEDPOLYGONALFACE((48,363,361)); +#746=IFCINDEXEDPOLYGONALFACE((199,237,46)); +#747=IFCINDEXEDPOLYGONALFACE((164,242,198)); +#748=IFCINDEXEDPOLYGONALFACE((290,317,335,336)); +#749=IFCINDEXEDPOLYGONALFACE((217,298,160)); +#750=IFCINDEXEDPOLYGONALFACE((193,200,79)); +#751=IFCINDEXEDPOLYGONALFACE((253,166,165)); +#752=IFCINDEXEDPOLYGONALFACE((202,116,51)); +#753=IFCINDEXEDPOLYGONALFACE((236,366,268)); +#754=IFCINDEXEDPOLYGONALFACE((170,73,163)); +#755=IFCINDEXEDPOLYGONALFACE((360,328,296)); +#756=IFCINDEXEDPOLYGONALFACE((354,350,348,353)); +#757=IFCINDEXEDPOLYGONALFACE((359,357,216,214)); +#758=IFCINDEXEDPOLYGONALFACE((143,110,125)); +#759=IFCINDEXEDPOLYGONALFACE((265,314,345,283)); +#760=IFCINDEXEDPOLYGONALFACE((252,261,260)); +#761=IFCINDEXEDPOLYGONALFACE((305,337,340,334)); +#762=IFCINDEXEDPOLYGONALFACE((131,116,24)); +#763=IFCINDEXEDPOLYGONALFACE((104,168,253)); +#764=IFCINDEXEDPOLYGONALFACE((126,99,111)); +#765=IFCINDEXEDPOLYGONALFACE((47,275,276)); +#766=IFCINDEXEDPOLYGONALFACE((230,120,97)); +#767=IFCINDEXEDPOLYGONALFACE((279,283,345,352)); +#768=IFCINDEXEDPOLYGONALFACE((67,89,275)); +#769=IFCINDEXEDPOLYGONALFACE((257,271,255)); +#770=IFCINDEXEDPOLYGONALFACE((257,231,224)); +#771=IFCINDEXEDPOLYGONALFACE((316,253,165)); +#772=IFCINDEXEDPOLYGONALFACE((17,3,53)); +#773=IFCINDEXEDPOLYGONALFACE((273,171,266)); +#774=IFCINDEXEDPOLYGONALFACE((260,270,258)); +#775=IFCINDEXEDPOLYGONALFACE((362,58,216)); +#776=IFCINDEXEDPOLYGONALFACE((48,108,107)); +#777=IFCINDEXEDPOLYGONALFACE((57,65,33)); +#778=IFCINDEXEDPOLYGONALFACE((160,172,164)); +#779=IFCINDEXEDPOLYGONALFACE((190,235,184)); +#780=IFCINDEXEDPOLYGONALFACE((354,353,215,361)); +#781=IFCINDEXEDPOLYGONALFACE((258,271,256)); +#782=IFCINDEXEDPOLYGONALFACE((155,366,251)); +#783=IFCINDEXEDPOLYGONALFACE((365,357,359,352)); +#784=IFCINDEXEDPOLYGONALFACE((169,20,26)); +#785=IFCINDEXEDPOLYGONALFACE((312,174,225)); +#786=IFCINDEXEDPOLYGONALFACE((273,43,11)); +#787=IFCINDEXEDPOLYGONALFACE((264,317,290)); +#788=IFCINDEXEDPOLYGONALFACE((287,296,293)); +#789=IFCINDEXEDPOLYGONALFACE((159,149,150)); +#790=IFCINDEXEDPOLYGONALFACE((267,305,334)); +#791=IFCINDEXEDPOLYGONALFACE((206,211,100)); +#792=IFCINDEXEDPOLYGONALFACE((126,150,149)); +#793=IFCINDEXEDPOLYGONALFACE((288,114,144)); +#794=IFCINDEXEDPOLYGONALFACE((266,101,273)); +#795=IFCINDEXEDPOLYGONALFACE((123,42,32)); +#796=IFCINDEXEDPOLYGONALFACE((255,171,231)); +#797=IFCINDEXEDPOLYGONALFACE((34,116,14)); +#798=IFCINDEXEDPOLYGONALFACE((91,3,92)); +#799=IFCINDEXEDPOLYGONALFACE((287,143,138)); +#800=IFCINDEXEDPOLYGONALFACE((77,12,71)); +#801=IFCINDEXEDPOLYGONALFACE((95,178,161)); +#802=IFCINDEXEDPOLYGONALFACE((285,280,281)); +#803=IFCINDEXEDPOLYGONALFACE((242,139,262)); +#804=IFCINDEXEDPOLYGONALFACE((332,318,327)); +#805=IFCINDEXEDPOLYGONALFACE((226,239,37)); +#806=IFCINDEXEDPOLYGONALFACE((175,219,137)); +#807=IFCINDEXEDPOLYGONALFACE((177,94,184)); +#808=IFCINDEXEDPOLYGONALFACE((103,226,37)); +#809=IFCINDEXEDPOLYGONALFACE((372,371,65)); +#810=IFCINDEXEDPOLYGONALFACE((341,335,244,339)); +#811=IFCINDEXEDPOLYGONALFACE((101,69,43)); +#812=IFCINDEXEDPOLYGONALFACE((146,192,182)); +#813=IFCINDEXEDPOLYGONALFACE((52,77,5)); +#814=IFCINDEXEDPOLYGONALFACE((133,60,52)); +#815=IFCINDEXEDPOLYGONALFACE((28,243,213)); +#816=IFCINDEXEDPOLYGONALFACE((110,126,125)); +#817=IFCINDEXEDPOLYGONALFACE((140,188,176)); +#818=IFCINDEXEDPOLYGONALFACE((341,342,336,335)); +#819=IFCINDEXEDPOLYGONALFACE((82,131,61)); +#820=IFCINDEXEDPOLYGONALFACE((290,336,337,305)); +#821=IFCINDEXEDPOLYGONALFACE((109,51,116)); +#822=IFCINDEXEDPOLYGONALFACE((210,29,90)); +#823=IFCINDEXEDPOLYGONALFACE((45,30,21)); +#824=IFCINDEXEDPOLYGONALFACE((204,196,8)); +#825=IFCINDEXEDPOLYGONALFACE((229,238,237)); +#826=IFCINDEXEDPOLYGONALFACE((161,217,160)); +#827=IFCINDEXEDPOLYGONALFACE((305,264,290)); +#828=IFCINDEXEDPOLYGONALFACE((84,60,81)); +#829=IFCINDEXEDPOLYGONALFACE((185,190,184)); +#830=IFCINDEXEDPOLYGONALFACE((5,133,52)); +#831=IFCINDEXEDPOLYGONALFACE((189,187,117)); +#832=IFCINDEXEDPOLYGONALFACE((226,237,238)); +#833=IFCINDEXEDPOLYGONALFACE((23,277,197)); +#834=IFCINDEXEDPOLYGONALFACE((76,8,27)); +#835=IFCINDEXEDPOLYGONALFACE((294,274,295)); +#836=IFCINDEXEDPOLYGONALFACE((145,114,107)); +#837=IFCINDEXEDPOLYGONALFACE((188,44,10)); +#838=IFCINDEXEDPOLYGONALFACE((41,203,85)); +#839=IFCINDEXEDPOLYGONALFACE((13,43,86)); +#840=IFCINDEXEDPOLYGONALFACE((355,364,351,356)); +#841=IFCINDEXEDPOLYGONALFACE((234,125,177)); +#842=IFCINDEXEDPOLYGONALFACE((40,38,50)); +#843=IFCINDEXEDPOLYGONALFACE((272,85,20)); +#844=IFCINDEXEDPOLYGONALFACE((215,48,361)); +#845=IFCINDEXEDPOLYGONALFACE((39,241,301)); +#846=IFCINDEXEDPOLYGONALFACE((311,292,263)); +#847=IFCINDEXEDPOLYGONALFACE((69,86,43)); +#848=IFCINDEXEDPOLYGONALFACE((310,161,178)); +#849=IFCINDEXEDPOLYGONALFACE((202,169,78)); +#850=IFCINDEXEDPOLYGONALFACE((248,250,247)); +#851=IFCINDEXEDPOLYGONALFACE((296,138,360)); +#852=IFCINDEXEDPOLYGONALFACE((42,9,23)); +#853=IFCINDEXEDPOLYGONALFACE((203,206,85)); +#854=IFCINDEXEDPOLYGONALFACE((202,272,169)); +#855=IFCINDEXEDPOLYGONALFACE((342,344,337,336)); +#856=IFCINDEXEDPOLYGONALFACE((129,35,19)); +#857=IFCINDEXEDPOLYGONALFACE((2,162,191)); +#858=IFCINDEXEDPOLYGONALFACE((366,306,98)); +#859=IFCINDEXEDPOLYGONALFACE((361,363,356,354)); +#860=IFCINDEXEDPOLYGONALFACE((68,17,134)); +#861=IFCINDEXEDPOLYGONALFACE((54,173,201)); +#862=IFCINDEXEDPOLYGONALFACE((210,167,151)); +#863=IFCINDEXEDPOLYGONALFACE((156,171,97)); +#864=IFCINDEXEDPOLYGONALFACE((54,151,93)); +#865=IFCINDEXEDPOLYGONALFACE((59,8,196)); +#866=IFCINDEXEDPOLYGONALFACE((213,210,90)); +#867=IFCINDEXEDPOLYGONALFACE((54,371,373)); +#868=IFCINDEXEDPOLYGONALFACE((130,243,209)); +#869=IFCINDEXEDPOLYGONALFACE((359,214,282,280)); +#870=IFCINDEXEDPOLYGONALFACE((142,117,188)); +#871=IFCINDEXEDPOLYGONALFACE((28,367,368)); +#872=IFCINDEXEDPOLYGONALFACE((237,228,229)); +#873=IFCINDEXEDPOLYGONALFACE((362,105,99)); +#874=IFCINDEXEDPOLYGONALFACE((291,314,265)); +#875=IFCINDEXEDPOLYGONALFACE((45,70,18)); +#876=IFCINDEXEDPOLYGONALFACE((210,372,167)); +#877=IFCINDEXEDPOLYGONALFACE((62,63,176)); +#878=IFCINDEXEDPOLYGONALFACE((91,19,35)); +#879=IFCINDEXEDPOLYGONALFACE((206,203,211)); +#880=IFCINDEXEDPOLYGONALFACE((269,260,261)); +#881=IFCINDEXEDPOLYGONALFACE((53,35,129)); +#882=IFCINDEXEDPOLYGONALFACE((54,29,151)); +#883=IFCINDEXEDPOLYGONALFACE((130,368,370)); +#884=IFCINDEXEDPOLYGONALFACE((67,187,189)); +#885=IFCINDEXEDPOLYGONALFACE((371,25,124)); +#886=IFCINDEXEDPOLYGONALFACE((130,209,368)); +#887=IFCINDEXEDPOLYGONALFACE((243,130,370)); +#888=IFCINDEXEDPOLYGONALFACE((213,227,210)); +#889=IFCINDEXEDPOLYGONALFACE((227,372,210)); +#890=IFCINDEXEDPOLYGONALFACE((167,93,151)); +#891=IFCINDEXEDPOLYGONALFACE((372,227,25)); +#892=IFCINDEXEDPOLYGONALFACE((373,29,54)); +#893=IFCINDEXEDPOLYGONALFACE((213,369,227)); +#894=IFCINDEXEDPOLYGONALFACE((371,124,373)); +#895=IFCINDEXEDPOLYGONALFACE((341,348,350,342)); +#896=IFCINDEXEDPOLYGONALFACE((135,66,217)); +#897=IFCINDEXEDPOLYGONALFACE((65,371,33)); +#898=IFCINDEXEDPOLYGONALFACE((350,354,356,351)); +#899=IFCINDEXEDPOLYGONALFACE((333,330,178)); +#900=IFCINDEXEDPOLYGONALFACE((315,254,323)); +#901=IFCINDEXEDPOLYGONALFACE((127,12,30)); +#902=IFCINDEXEDPOLYGONALFACE((100,128,31)); +#903=IFCINDEXEDPOLYGONALFACE((319,5,77)); +#904=IFCINDEXEDPOLYGONALFACE((374,158,2)); +#905=IFCINDEXEDPOLYGONALFACE((375,83,374)); +#906=IFCINDEXEDPOLYGONALFACE((314,274,311)); +#907=IFCINDEXEDPOLYGONALFACE((21,4,52)); +#908=IFCINDEXEDPOLYGONALFACE((288,144,180)); +#909=IFCINDEXEDPOLYGONALFACE((241,137,219)); +#910=IFCINDEXEDPOLYGONALFACE((60,76,45)); +#911=IFCINDEXEDPOLYGONALFACE((10,62,176)); +#912=IFCINDEXEDPOLYGONALFACE((220,147,106)); +#913=IFCINDEXEDPOLYGONALFACE((90,29,373)); +#914=IFCINDEXEDPOLYGONALFACE((70,148,199)); +#915=IFCINDEXEDPOLYGONALFACE((103,37,36)); +#916=IFCINDEXEDPOLYGONALFACE((71,197,306)); +#917=IFCINDEXEDPOLYGONALFACE((117,187,44)); +#918=IFCINDEXEDPOLYGONALFACE((62,44,56)); +#919=IFCINDEXEDPOLYGONALFACE((254,252,244)); +#920=IFCINDEXEDPOLYGONALFACE((59,196,159)); +#921=IFCINDEXEDPOLYGONALFACE((158,141,154)); +#922=IFCINDEXEDPOLYGONALFACE((300,301,241)); +#923=IFCINDEXEDPOLYGONALFACE((23,127,32)); +#924=IFCINDEXEDPOLYGONALFACE((309,303,304)); +#925=IFCINDEXEDPOLYGONALFACE((295,329,304)); +#926=IFCINDEXEDPOLYGONALFACE((369,367,25)); +#927=IFCINDEXEDPOLYGONALFACE((119,102,106)); +#928=IFCINDEXEDPOLYGONALFACE((232,269,318)); +#929=IFCINDEXEDPOLYGONALFACE((208,170,63)); +#930=IFCINDEXEDPOLYGONALFACE((239,97,171)); +#931=IFCINDEXEDPOLYGONALFACE((124,28,213)); +#932=IFCINDEXEDPOLYGONALFACE((268,155,75)); +#933=IFCINDEXEDPOLYGONALFACE((101,270,269)); +#934=IFCINDEXEDPOLYGONALFACE((277,9,7)); +#935=IFCINDEXEDPOLYGONALFACE((320,306,236)); +#936=IFCINDEXEDPOLYGONALFACE((222,193,236)); +#937=IFCINDEXEDPOLYGONALFACE((173,115,50)); +#938=IFCINDEXEDPOLYGONALFACE((299,313,267)); +#939=IFCINDEXEDPOLYGONALFACE((162,207,212)); +#940=IFCINDEXEDPOLYGONALFACE((98,306,197)); +#941=IFCINDEXEDPOLYGONALFACE((295,296,328)); +#942=IFCINDEXEDPOLYGONALFACE((84,81,128)); +#943=IFCINDEXEDPOLYGONALFACE((302,299,297)); +#944=IFCINDEXEDPOLYGONALFACE((212,115,173)); +#945=IFCINDEXEDPOLYGONALFACE((317,323,254)); +#946=IFCINDEXEDPOLYGONALFACE((211,205,204)); +#947=IFCINDEXEDPOLYGONALFACE((39,177,175)); +#948=IFCINDEXEDPOLYGONALFACE((334,263,292)); +#949=IFCINDEXEDPOLYGONALFACE((283,279,286)); +#950=IFCINDEXEDPOLYGONALFACE((129,38,16)); +#951=IFCINDEXEDPOLYGONALFACE((102,349,249)); +#952=IFCINDEXEDPOLYGONALFACE((197,71,12)); +#953=IFCINDEXEDPOLYGONALFACE((330,331,310)); +#954=IFCINDEXEDPOLYGONALFACE((300,308,310)); +#955=IFCINDEXEDPOLYGONALFACE((205,203,190)); +#956=IFCINDEXEDPOLYGONALFACE((133,1,2)); +#957=IFCINDEXEDPOLYGONALFACE((85,206,92)); +#958=IFCINDEXEDPOLYGONALFACE((360,234,39)); +#959=IFCINDEXEDPOLYGONALFACE((122,157,47)); +#960=IFCINDEXEDPOLYGONALFACE((281,280,282)); +#961=IFCINDEXEDPOLYGONALFACE((250,220,249)); +#962=IFCINDEXEDPOLYGONALFACE((58,55,214)); +#963=IFCINDEXEDPOLYGONALFACE((234,360,138)); +#964=IFCINDEXEDPOLYGONALFACE((141,172,298)); +#965=IFCINDEXEDPOLYGONALFACE((27,112,45)); +#966=IFCINDEXEDPOLYGONALFACE((146,182,181)); +#967=IFCINDEXEDPOLYGONALFACE((144,145,181)); +#968=IFCINDEXEDPOLYGONALFACE((195,194,185)); +#969=IFCINDEXEDPOLYGONALFACE((228,221,223)); +#970=IFCINDEXEDPOLYGONALFACE((49,215,358)); +#971=IFCINDEXEDPOLYGONALFACE((74,163,34)); +#972=IFCINDEXEDPOLYGONALFACE((221,72,218)); +#973=IFCINDEXEDPOLYGONALFACE((146,145,107)); +#974=IFCINDEXEDPOLYGONALFACE((194,195,204)); +#975=IFCINDEXEDPOLYGONALFACE((46,123,64)); +#976=IFCINDEXEDPOLYGONALFACE((366,98,86)); +#977=IFCINDEXEDPOLYGONALFACE((48,107,114)); +#978=IFCINDEXEDPOLYGONALFACE((198,104,95)); +#979=IFCINDEXEDPOLYGONALFACE((74,183,132)); +#980=IFCINDEXEDPOLYGONALFACE((21,30,12)); +#981=IFCINDEXEDPOLYGONALFACE((288,150,111)); +#982=IFCINDEXEDPOLYGONALFACE((75,155,225)); +#983=IFCINDEXEDPOLYGONALFACE((166,168,262)); +#984=IFCINDEXEDPOLYGONALFACE((223,119,230)); +#985=IFCINDEXEDPOLYGONALFACE((26,20,92)); +#986=IFCINDEXEDPOLYGONALFACE((219,235,88)); +#987=IFCINDEXEDPOLYGONALFACE((322,264,325)); +#988=IFCINDEXEDPOLYGONALFACE((257,224,220)); +#989=IFCINDEXEDPOLYGONALFACE((289,309,104)); +#990=IFCINDEXEDPOLYGONALFACE((228,146,108)); +#991=IFCINDEXEDPOLYGONALFACE((119,223,218)); +#992=IFCINDEXEDPOLYGONALFACE((367,28,124)); +#993=IFCINDEXEDPOLYGONALFACE((327,324,325)); +#994=IFCINDEXEDPOLYGONALFACE((40,50,115)); +#995=IFCINDEXEDPOLYGONALFACE((321,252,248)); +#996=IFCINDEXEDPOLYGONALFACE((13,86,98)); +#997=IFCINDEXEDPOLYGONALFACE((5,375,374)); +#998=IFCINDEXEDPOLYGONALFACE((135,217,87)); +#999=IFCINDEXEDPOLYGONALFACE((156,147,224)); +#1000=IFCINDEXEDPOLYGONALFACE((163,74,63)); +#1001=IFCINDEXEDPOLYGONALFACE((56,157,142)); +#1002=IFCINDEXEDPOLYGONALFACE((88,190,203)); +#1003=IFCINDEXEDPOLYGONALFACE((24,34,163)); +#1004=IFCINDEXEDPOLYGONALFACE((14,202,78)); +#1005=IFCINDEXEDPOLYGONALFACE((248,252,260)); +#1006=IFCINDEXEDPOLYGONALFACE((78,169,26)); +#1007=IFCINDEXEDPOLYGONALFACE((16,134,17)); +#1008=IFCINDEXEDPOLYGONALFACE((161,160,164)); +#1009=IFCINDEXEDPOLYGONALFACE((291,284,287)); +#1010=IFCINDEXEDPOLYGONALFACE((127,30,18)); +#1011=IFCINDEXEDPOLYGONALFACE((182,192,199)); +#1012=IFCINDEXEDPOLYGONALFACE((319,77,71)); +#1013=IFCINDEXEDPOLYGONALFACE((225,69,232)); +#1014=IFCINDEXEDPOLYGONALFACE((302,303,309)); +#1015=IFCINDEXEDPOLYGONALFACE((13,7,36)); +#1016=IFCINDEXEDPOLYGONALFACE((308,22,87)); +#1017=IFCINDEXEDPOLYGONALFACE((262,139,79)); +#1018=IFCINDEXEDPOLYGONALFACE((131,24,73)); +#1019=IFCINDEXEDPOLYGONALFACE((370,369,213)); +#1020=IFCINDEXEDPOLYGONALFACE((92,206,100)); +#1021=IFCINDEXEDPOLYGONALFACE((89,136,233)); +#1022=IFCINDEXEDPOLYGONALFACE((332,316,165)); +#1023=IFCINDEXEDPOLYGONALFACE((189,122,136)); +#1024=IFCINDEXEDPOLYGONALFACE((326,316,332)); +#1025=IFCINDEXEDPOLYGONALFACE((117,142,122)); +#1026=IFCINDEXEDPOLYGONALFACE((132,134,16)); +#1027=IFCINDEXEDPOLYGONALFACE((134,132,183)); +#1028=IFCINDEXEDPOLYGONALFACE((239,238,230)); +#1029=IFCINDEXEDPOLYGONALFACE((180,181,96)); +#1030=IFCINDEXEDPOLYGONALFACE((99,105,113)); +#1031=IFCINDEXEDPOLYGONALFACE((22,61,131)); +#1032=IFCINDEXEDPOLYGONALFACE((321,247,249)); +#1033=IFCINDEXEDPOLYGONALFACE((156,97,120)); +#1034=IFCINDEXEDPOLYGONALFACE((148,96,181)); +#1035=IFCINDEXEDPOLYGONALFACE((152,125,126)); +#1036=IFCINDEXEDPOLYGONALFACE((240,36,37)); +#1037=IFCINDEXEDPOLYGONALFACE((14,68,183)); +#1038=IFCINDEXEDPOLYGONALFACE((293,296,295)); +#1039=IFCINDEXEDPOLYGONALFACE((148,70,112)); +#1040=IFCINDEXEDPOLYGONALFACE((313,299,325)); +#1041=IFCINDEXEDPOLYGONALFACE((154,66,170)); +#1042=IFCINDEXEDPOLYGONALFACE((226,6,123)); +#1043=IFCINDEXEDPOLYGONALFACE((349,347,339)); +#1044=IFCINDEXEDPOLYGONALFACE((318,315,324)); +#1045=IFCINDEXEDPOLYGONALFACE((326,325,299)); +#1046=IFCINDEXEDPOLYGONALFACE((112,27,59)); +#1047=IFCINDEXEDPOLYGONALFACE((262,168,198)); +#1048=IFCINDEXEDPOLYGONALFACE((272,202,51)); +#1049=IFCINDEXEDPOLYGONALFACE((318,269,261)); +#1050=IFCINDEXEDPOLYGONALFACE((167,65,57)); +#1051=IFCINDEXEDPOLYGONALFACE((271,270,266)); +#1052=IFCINDEXEDPOLYGONALFACE((218,72,246)); +#1053=IFCINDEXEDPOLYGONALFACE((94,149,179)); +#1054=IFCINDEXEDPOLYGONALFACE((40,62,153)); +#1055=IFCINDEXEDPOLYGONALFACE((8,84,121)); +#1056=IFCINDEXEDPOLYGONALFACE((32,18,64)); +#1057=IFCINDEXEDPOLYGONALFACE((88,15,109)); +#1058=IFCINDEXEDPOLYGONALFACE((133,31,128)); +#1059=IFCINDEXEDPOLYGONALFACE((193,79,319)); +#1060=IFCINDEXEDPOLYGONALFACE((370,368,367)); +#1061=IFCINDEXEDPOLYGONALFACE((6,103,9)); +#1062=IFCINDEXEDPOLYGONALFACE((214,55,186)); +#1063=IFCINDEXEDPOLYGONALFACE((200,222,75)); +#1064=IFCINDEXEDPOLYGONALFACE((375,319,79)); +#1065=IFCINDEXEDPOLYGONALFACE((95,104,309)); +#1066=IFCINDEXEDPOLYGONALFACE((221,108,49)); +#1067=IFCINDEXEDPOLYGONALFACE((36,240,273)); +#1068=IFCINDEXEDPOLYGONALFACE((69,225,155)); +#1069=IFCINDEXEDPOLYGONALFACE((316,326,302)); +#1070=IFCINDEXEDPOLYGONALFACE((297,294,304)); +#1071=IFCINDEXEDPOLYGONALFACE((195,179,159)); +#1072=IFCINDEXEDPOLYGONALFACE((110,281,186)); +#1073=IFCINDEXEDPOLYGONALFACE((323,322,324)); +#1074=IFCINDEXEDPOLYGONALFACE((172,141,83)); +#1075=IFCINDEXEDPOLYGONALFACE((61,307,219)); +#1076=IFCINDEXEDPOLYGONALFACE((283,284,291)); +#1077=IFCINDEXEDPOLYGONALFACE((184,235,175)); +#1078=IFCINDEXEDPOLYGONALFACE((349,102,246)); +#1079=IFCINDEXEDPOLYGONALFACE((174,165,166)); +#1080=IFCINDEXEDPOLYGONALFACE((48,105,363)); +#1081=IFCINDEXEDPOLYGONALFACE((199,192,237)); +#1082=IFCINDEXEDPOLYGONALFACE((164,172,242)); +#1083=IFCINDEXEDPOLYGONALFACE((217,66,298)); +#1084=IFCINDEXEDPOLYGONALFACE((193,222,200)); +#1085=IFCINDEXEDPOLYGONALFACE((253,168,166)); +#1086=IFCINDEXEDPOLYGONALFACE((202,14,116)); +#1087=IFCINDEXEDPOLYGONALFACE((236,306,366)); +#1088=IFCINDEXEDPOLYGONALFACE((170,66,73)); +#1089=IFCINDEXEDPOLYGONALFACE((360,300,328)); +#1090=IFCINDEXEDPOLYGONALFACE((143,285,110)); +#1091=IFCINDEXEDPOLYGONALFACE((252,254,261)); +#1092=IFCINDEXEDPOLYGONALFACE((131,109,116)); +#1093=IFCINDEXEDPOLYGONALFACE((104,198,168)); +#1094=IFCINDEXEDPOLYGONALFACE((126,58,99)); +#1095=IFCINDEXEDPOLYGONALFACE((47,67,275)); +#1096=IFCINDEXEDPOLYGONALFACE((230,119,120)); +#1097=IFCINDEXEDPOLYGONALFACE((67,259,89)); +#1098=IFCINDEXEDPOLYGONALFACE((257,256,271)); +#1099=IFCINDEXEDPOLYGONALFACE((257,255,231)); +#1100=IFCINDEXEDPOLYGONALFACE((316,289,253)); +#1101=IFCINDEXEDPOLYGONALFACE((17,26,3)); +#1102=IFCINDEXEDPOLYGONALFACE((273,240,171)); +#1103=IFCINDEXEDPOLYGONALFACE((362,99,58)); +#1104=IFCINDEXEDPOLYGONALFACE((48,49,108)); +#1105=IFCINDEXEDPOLYGONALFACE((160,298,172)); +#1106=IFCINDEXEDPOLYGONALFACE((190,88,235)); +#1107=IFCINDEXEDPOLYGONALFACE((258,270,271)); +#1108=IFCINDEXEDPOLYGONALFACE((155,268,366)); +#1109=IFCINDEXEDPOLYGONALFACE((169,272,20)); +#1110=IFCINDEXEDPOLYGONALFACE((312,332,174)); +#1111=IFCINDEXEDPOLYGONALFACE((273,101,43)); +#1112=IFCINDEXEDPOLYGONALFACE((264,322,317)); +#1113=IFCINDEXEDPOLYGONALFACE((287,138,296)); +#1114=IFCINDEXEDPOLYGONALFACE((159,179,149)); +#1115=IFCINDEXEDPOLYGONALFACE((267,313,305)); +#1116=IFCINDEXEDPOLYGONALFACE((126,111,150)); +#1117=IFCINDEXEDPOLYGONALFACE((288,113,114)); +#1118=IFCINDEXEDPOLYGONALFACE((266,270,101)); +#1119=IFCINDEXEDPOLYGONALFACE((123,6,42)); +#1120=IFCINDEXEDPOLYGONALFACE((255,266,171)); +#1121=IFCINDEXEDPOLYGONALFACE((34,24,116)); +#1122=IFCINDEXEDPOLYGONALFACE((91,35,3)); +#1123=IFCINDEXEDPOLYGONALFACE((287,285,143)); +#1124=IFCINDEXEDPOLYGONALFACE((77,4,12)); +#1125=IFCINDEXEDPOLYGONALFACE((95,333,178)); +#1126=IFCINDEXEDPOLYGONALFACE((285,279,280)); +#1127=IFCINDEXEDPOLYGONALFACE((242,83,139)); +#1128=IFCINDEXEDPOLYGONALFACE((332,312,318)); +#1129=IFCINDEXEDPOLYGONALFACE((226,238,239)); +#1130=IFCINDEXEDPOLYGONALFACE((175,235,219)); +#1131=IFCINDEXEDPOLYGONALFACE((177,152,94)); +#1132=IFCINDEXEDPOLYGONALFACE((103,6,226)); +#1133=IFCINDEXEDPOLYGONALFACE((372,25,371)); +#1134=IFCINDEXEDPOLYGONALFACE((101,232,69)); +#1135=IFCINDEXEDPOLYGONALFACE((146,228,192)); +#1136=IFCINDEXEDPOLYGONALFACE((52,4,77)); +#1137=IFCINDEXEDPOLYGONALFACE((133,81,60)); +#1138=IFCINDEXEDPOLYGONALFACE((28,209,243)); +#1139=IFCINDEXEDPOLYGONALFACE((110,58,126)); +#1140=IFCINDEXEDPOLYGONALFACE((140,142,188)); +#1141=IFCINDEXEDPOLYGONALFACE((82,109,131)); +#1142=IFCINDEXEDPOLYGONALFACE((109,15,51)); +#1143=IFCINDEXEDPOLYGONALFACE((210,151,29)); +#1144=IFCINDEXEDPOLYGONALFACE((45,18,30)); +#1145=IFCINDEXEDPOLYGONALFACE((204,195,196)); +#1146=IFCINDEXEDPOLYGONALFACE((229,230,238)); +#1147=IFCINDEXEDPOLYGONALFACE((161,87,217)); +#1148=IFCINDEXEDPOLYGONALFACE((305,313,264)); +#1149=IFCINDEXEDPOLYGONALFACE((84,76,60)); +#1150=IFCINDEXEDPOLYGONALFACE((185,194,190)); +#1151=IFCINDEXEDPOLYGONALFACE((5,1,133)); +#1152=IFCINDEXEDPOLYGONALFACE((226,46,237)); +#1153=IFCINDEXEDPOLYGONALFACE((23,9,277)); +#1154=IFCINDEXEDPOLYGONALFACE((76,84,8)); +#1155=IFCINDEXEDPOLYGONALFACE((294,267,274)); +#1156=IFCINDEXEDPOLYGONALFACE((145,144,114)); +#1157=IFCINDEXEDPOLYGONALFACE((41,15,203)); +#1158=IFCINDEXEDPOLYGONALFACE((13,11,43)); +#1159=IFCINDEXEDPOLYGONALFACE((234,143,125)); +#1160=IFCINDEXEDPOLYGONALFACE((40,16,38)); +#1161=IFCINDEXEDPOLYGONALFACE((272,41,85)); +#1162=IFCINDEXEDPOLYGONALFACE((215,49,48)); +#1163=IFCINDEXEDPOLYGONALFACE((39,137,241)); +#1164=IFCINDEXEDPOLYGONALFACE((311,274,292)); +#1165=IFCINDEXEDPOLYGONALFACE((69,251,86)); +#1166=IFCINDEXEDPOLYGONALFACE((310,87,161)); +#1167=IFCINDEXEDPOLYGONALFACE((248,256,250)); +#1168=IFCINDEXEDPOLYGONALFACE((68,78,17)); +#1169=IFCINDEXEDPOLYGONALFACE((156,231,171)); +#1170=IFCINDEXEDPOLYGONALFACE((59,27,8)); +#1171=IFCINDEXEDPOLYGONALFACE((54,33,371)); +#1172=IFCINDEXEDPOLYGONALFACE((237,192,228)); +#1173=IFCINDEXEDPOLYGONALFACE((362,363,105)); +#1174=IFCINDEXEDPOLYGONALFACE((291,293,314)); +#1175=IFCINDEXEDPOLYGONALFACE((45,112,70)); +#1176=IFCINDEXEDPOLYGONALFACE((62,40,63)); +#1177=IFCINDEXEDPOLYGONALFACE((91,31,19)); +#1178=IFCINDEXEDPOLYGONALFACE((269,270,260)); +#1179=IFCINDEXEDPOLYGONALFACE((53,3,35)); +#1180=IFCINDEXEDPOLYGONALFACE((67,47,187)); +#1181=IFCINDEXEDPOLYGONALFACE((135,73,66)); +#1182=IFCINDEXEDPOLYGONALFACE((333,329,330)); +#1183=IFCINDEXEDPOLYGONALFACE((315,261,254)); +#1184=IFCINDEXEDPOLYGONALFACE((127,23,12)); +#1185=IFCINDEXEDPOLYGONALFACE((100,121,128)); +#1186=IFCINDEXEDPOLYGONALFACE((319,375,5)); +#1187=IFCINDEXEDPOLYGONALFACE((374,83,158)); +#1188=IFCINDEXEDPOLYGONALFACE((375,139,83)); +#1189=IFCINDEXEDPOLYGONALFACE((314,293,274)); +#1190=IFCPOLYGONALFACESET(#476,.F.,(#477,#478,#479,#480,#481,#482,#483,#484,#485,#486,#487,#488,#489,#490,#491,#492,#493,#494,#495,#496,#497,#498,#499,#500,#501,#502,#503,#504,#505,#506,#507,#508,#509,#510,#511,#512,#513,#514,#515,#516,#517,#518,#519,#520,#521,#522,#523,#524,#525,#526,#527,#528,#529,#530,#531,#532,#533,#534,#535,#536,#537,#538,#539,#540,#541,#542,#543,#544,#545,#546,#547,#548,#549,#550,#551,#552,#553,#554,#555,#556,#557,#558,#559,#560,#561,#562,#563,#564,#565,#566,#567,#568,#569,#570,#571,#572,#573,#574,#575,#576,#577,#578,#579,#580,#581,#582,#583,#584,#585,#586,#587,#588,#589,#590,#591,#592,#593,#594,#595,#596,#597,#598,#599,#600,#601,#602,#603,#604,#605,#606,#607,#608,#609,#610,#611,#612,#613,#614,#615,#616,#617,#618,#619,#620,#621,#622,#623,#624,#625,#626,#627,#628,#629,#630,#631,#632,#633,#634,#635,#636,#637,#638,#639,#640,#641,#642,#643,#644,#645,#646,#647,#648,#649,#650,#651,#652,#653,#654,#655,#656,#657,#658,#659,#660,#661,#662,#663,#664,#665,#666,#667,#668,#669,#670,#671,#672,#673,#674,#675,#676,#677,#678,#679,#680,#681,#682,#683,#684,#685,#686,#687,#688,#689,#690,#691,#692,#693,#694,#695,#696,#697,#698,#699,#700,#701,#702,#703,#704,#705,#706,#707,#708,#709,#710,#711,#712,#713,#714,#715,#716,#717,#718,#719,#720,#721,#722,#723,#724,#725,#726,#727,#728,#729,#730,#731,#732,#733,#734,#735,#736,#737,#738,#739,#740,#741,#742,#743,#744,#745,#746,#747,#748,#749,#750,#751,#752,#753,#754,#755,#756,#757,#758,#759,#760,#761,#762,#763,#764,#765,#766,#767,#768,#769,#770,#771,#772,#773,#774,#775,#776,#777,#778,#779,#780,#781,#782,#783,#784,#785,#786,#787,#788,#789,#790,#791,#792,#793,#794,#795,#796,#797,#798,#799,#800,#801,#802,#803,#804,#805,#806,#807,#808,#809,#810,#811,#812,#813,#814,#815,#816,#817,#818,#819,#820,#821,#822,#823,#824,#825,#826,#827,#828,#829,#830,#831,#832,#833,#834,#835,#836,#837,#838,#839,#840,#841,#842,#843,#844,#845,#846,#847,#848,#849,#850,#851,#852,#853,#854,#855,#856,#857,#858,#859,#860,#861,#862,#863,#864,#865,#866,#867,#868,#869,#870,#871,#872,#873,#874,#875,#876,#877,#878,#879,#880,#881,#882,#883,#884,#885,#886,#887,#888,#889,#890,#891,#892,#893,#894,#895,#896,#897,#898,#899,#900,#901,#902,#903,#904,#905,#906,#907,#908,#909,#910,#911,#912,#913,#914,#915,#916,#917,#918,#919,#920,#921,#922,#923,#924,#925,#926,#927,#928,#929,#930,#931,#932,#933,#934,#935,#936,#937,#938,#939,#940,#941,#942,#943,#944,#945,#946,#947,#948,#949,#950,#951,#952,#953,#954,#955,#956,#957,#958,#959,#960,#961,#962,#963,#964,#965,#966,#967,#968,#969,#970,#971,#972,#973,#974,#975,#976,#977,#978,#979,#980,#981,#982,#983,#984,#985,#986,#987,#988,#989,#990,#991,#992,#993,#994,#995,#996,#997,#998,#999,#1000,#1001,#1002,#1003,#1004,#1005,#1006,#1007,#1008,#1009,#1010,#1011,#1012,#1013,#1014,#1015,#1016,#1017,#1018,#1019,#1020,#1021,#1022,#1023,#1024,#1025,#1026,#1027,#1028,#1029,#1030,#1031,#1032,#1033,#1034,#1035,#1036,#1037,#1038,#1039,#1040,#1041,#1042,#1043,#1044,#1045,#1046,#1047,#1048,#1049,#1050,#1051,#1052,#1053,#1054,#1055,#1056,#1057,#1058,#1059,#1060,#1061,#1062,#1063,#1064,#1065,#1066,#1067,#1068,#1069,#1070,#1071,#1072,#1073,#1074,#1075,#1076,#1077,#1078,#1079,#1080,#1081,#1082,#1083,#1084,#1085,#1086,#1087,#1088,#1089,#1090,#1091,#1092,#1093,#1094,#1095,#1096,#1097,#1098,#1099,#1100,#1101,#1102,#1103,#1104,#1105,#1106,#1107,#1108,#1109,#1110,#1111,#1112,#1113,#1114,#1115,#1116,#1117,#1118,#1119,#1120,#1121,#1122,#1123,#1124,#1125,#1126,#1127,#1128,#1129,#1130,#1131,#1132,#1133,#1134,#1135,#1136,#1137,#1138,#1139,#1140,#1141,#1142,#1143,#1144,#1145,#1146,#1147,#1148,#1149,#1150,#1151,#1152,#1153,#1154,#1155,#1156,#1157,#1158,#1159,#1160,#1161,#1162,#1163,#1164,#1165,#1166,#1167,#1168,#1169,#1170,#1171,#1172,#1173,#1174,#1175,#1176,#1177,#1178,#1179,#1180,#1181,#1182,#1183,#1184,#1185,#1186,#1187,#1188,#1189),$); +#1191=IFCSHAPEREPRESENTATION(#15,'Body','Tessellation',(#1190)); +#1192=IFCREPRESENTATIONMAP(#469,#1191); +#1193=IFCCARTESIANPOINT((0.,0.,0.)); +#1194=IFCDIRECTION((0.,0.,1.)); +#1195=IFCDIRECTION((1.,0.,0.)); +#1196=IFCAXIS2PLACEMENT3D(#1193,#1194,#1195); +#1202=IFCCARTESIANPOINTLIST2D(((-0.161386370658875,0.000390071421861649),(-0.16297847032547,0.0306398719549179),(-0.152914509177208,0.0576198659837246),(-0.148716494441032,0.0795774236321449),(-0.149392008781433,0.102066904306412),(-0.15144681930542,0.125798091292381),(-0.157580137252808,0.132616892457008),(-0.169090509414673,0.130419373512268),(-0.180844187736511,0.118465758860111),(-0.182052731513977,0.0906300097703934),(-0.183831930160522,0.0552833341062069),(-0.183684945106506,0.0396271869540215),(-0.192724362015724,-0.00467484071850777))); +#1203=IFCINDEXEDPOLYCURVE(#1202,$,$); +#1204=IFCCARTESIANPOINTLIST2D(((-0.173348978161812,0.0203548446297646),(-0.16315957903862,0.0617493018507957),(-0.157428041100502,0.0974122136831284),(-0.165070101618767,0.119064696133137))); +#1205=IFCINDEXEDPOLYCURVE(#1204,$,$); +#1206=IFCCARTESIANPOINTLIST2D(((-0.160456106066704,0.03740194439888),(-0.130220890045166,0.0479081235826015),(-0.0977480411529541,0.0540151223540306),(-0.074405312538147,0.0735662579536438),(-0.0373027324676514,0.0895451977849007),(-0.00524431467056274,0.0854801684617996),(0.0449999570846558,0.0689153224229813),(0.0768988728523254,0.0420413166284561),(0.100000023841858,0.0200000032782555),(0.112531423568726,-0.0134119689464569),(0.11093932390213,-0.0415389761328697),(0.101917445659637,-0.0744422599673271),(0.128680348396301,-0.0638554915785789),(0.138488471508026,-0.0432419404387474),(0.134837985038757,-0.0135693177580833),(0.123972177505493,0.00519884377717972),(0.100000023841858,0.0200000032782555))); +#1207=IFCINDEXEDPOLYCURVE(#1206,$,$); +#1208=IFCCARTESIANPOINTLIST2D(((-0.0413289070129395,0.0605994611978531),(-0.0554808378219604,0.0468897596001625),(-0.0780355930328369,0.0367180481553078),(-0.0992635488510132,0.0185858532786369),(-0.136412382125854,0.00443390011787415))); +#1209=IFCINDEXEDPOLYCURVE(#1208,$,$); +#1210=IFCCARTESIANPOINTLIST2D(((-0.14391028881073,0.00847188383340836),(-0.127020835876465,0.0233357548713684),(-0.0995742082595825,0.049370177090168),(-0.0685850381851196,0.0688069462776184),(-0.0296431183815002,0.0763391554355621),(-0.0267347097396851,0.07121342420578),(-0.0338107347488403,0.0583882182836533),(-0.0585765838623047,0.0190281048417091),(-0.103685975074768,-0.00794906169176102),(-0.130663156509399,-0.0145827829837799))); +#1211=IFCINDEXEDPOLYCURVE(#1210,$,$); +#1212=IFCCARTESIANPOINTLIST2D(((0.101917445659637,-0.0744422599673271),(0.0776327848434448,-0.0989715680480003),(0.0435214042663574,-0.123003117740154),(-0.00187504291534424,-0.136098772287369),(-0.0447412729263306,-0.130966305732727),(-0.0755681991577148,-0.105624251067638),(-0.114447318017483,-0.103237792849541),(-0.148344993591309,-0.102713964879513),(-0.129387378692627,-0.0837726220488548),(-0.112089991569519,-0.0523208752274513))); +#1213=IFCINDEXEDPOLYCURVE(#1212,$,$); +#1214=IFCCARTESIANPOINTLIST2D(((-0.148344993591309,-0.102713964879513),(-0.16057014465332,-0.11072414368391),(-0.187541648745537,-0.117346309125423),(-0.205768346786499,-0.106695257127285),(-0.214284062385559,-0.0905132815241814),(-0.222012758255005,-0.0435851588845253),(-0.217635273933411,-0.0236888602375984),(-0.189349979162216,0.0118629187345505))); +#1215=IFCINDEXEDPOLYCURVE(#1214,$,$); +#1216=IFCGEOMETRICCURVESET((#1203,#1205,#1207,#1209,#1211,#1213,#1215)); +#1217=IFCSHAPEREPRESENTATION(#28,'Body','Annotation2D',(#1216)); +#1218=IFCREPRESENTATIONMAP(#1196,#1217); +#1219=IFCFURNITURETYPE('02XxQ_3oT0SPrmFPATrt7o',$,'BUN01',$,$,$,(#1192,#1218),$,$,.NOTDEFINED.,.NOTDEFINED.); +#1220=IFCDUCTSEGMENTTYPE('1_8b2EyRz2RRJ2biLlAKF2',$,'Circular 125pipe',$,$,$,$,$,$,.RIGIDSEGMENT.); +#1221=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,'IfcDuctSegmentType-150.0x5.0',$,0.075,0.005); +#1222=IFCMATERIALPROFILESET($,$,(#1224),$); +#1223=IFCRELASSOCIATESMATERIAL('0shrPSZ0jBNO$SRhJbvrnG',$,$,$,(#1220),#1222); +#1224=IFCMATERIALPROFILE($,$,#260,#1221,$,$); +#2076=IFCCARTESIANPOINTLIST3D(((0.,0.,0.100000001490116),(-0.0805456549774218,0.,0.29445438735459),(-0.27500005652471,0.,0.375000004470343))); +#2077=IFCINDEXEDPOLYCURVE(#2076,(IFCARCINDEX((1,2,3))),$); +#2078=IFCSWEPTDISKSOLID(#2077,0.075,$,$,$); +#2079=IFCCARTESIANPOINT((0.,0.,0.)); +#2080=IFCDIRECTION((0.,0.,1.)); +#2081=IFCDIRECTION((1.,0.,0.)); +#2082=IFCAXIS2PLACEMENT3D(#2079,#2080,#2081); +#2083=IFCDIRECTION((0.,0.,1.)); +#2084=IFCEXTRUDEDAREASOLID(#1221,#2082,#2083,0.100000001490116); +#2085=IFCCARTESIANPOINT((-0.27500005652471,0.,0.375000004470343)); +#2086=IFCDIRECTION((-0.999999999999981,0.,-1.94707188977234E-07)); +#2087=IFCDIRECTION((1.94707188977234E-07,0.,-0.999999999999981)); +#2088=IFCAXIS2PLACEMENT3D(#2085,#2086,#2087); +#2089=IFCDIRECTION((0.,0.,1.)); +#2090=IFCEXTRUDEDAREASOLID(#1221,#2088,#2089,0.100000001490116); +#2091=IFCSHAPEREPRESENTATION(#15,'Body','SolidModel',(#2078,#2084,#2090)); +#2092=IFCDUCTFITTINGTYPE('1odqQC$_z0YuMEnDDdYd7B',$,'Bend',$,$,(#2098),(#2097),$,$,.BEND.); +#2093=IFCCARTESIANPOINT((0.,0.,0.)); +#2094=IFCDIRECTION((1.,0.,0.)); +#2095=IFCDIRECTION((0.,0.,1.)); +#2096=IFCAXIS2PLACEMENT3D(#2093,#2095,#2094); +#2097=IFCREPRESENTATIONMAP(#2096,#2091); +#2098=IFCPROPERTYSET('1jCiXx7TP9UhRP8qPj9ZVf',$,'BBIM_Fitting',$,(#2099)); +#2099=IFCPROPERTYSINGLEVALUE('Data',$,IFCTEXT('{"start_length": 0.10000000149011612, "end_length": 0.10000000149011612, "radius": 0.20000000298023224, "angle": 90.00001115590017, "lateral_axis": 0, "lateral_sign": -1.0, "z_axis_sign": 1, "main_profile_dimension": 0.075}'),$); +#2100=IFCDISTRIBUTIONPORT('1RjAWMosL2Qg_PBdM3hueB',$,$,$,$,#2106,$,.NOTDEFINED.,.DUCT.,$); +#2101=IFCRELNESTS('3gghBH8G91ogXT3Zlb9BFK',$,$,$,#2092,(#2107,#2100)); +#2102=IFCCARTESIANPOINT((0.,0.,0.)); +#2103=IFCDIRECTION((0.,0.,1.)); +#2104=IFCDIRECTION((1.,0.,0.)); +#2105=IFCAXIS2PLACEMENT3D(#2102,#2103,#2104); +#2106=IFCLOCALPLACEMENT($,#2105); +#2107=IFCDISTRIBUTIONPORT('1l$BHwuyn8wuLfgjNVO8oL',$,$,$,$,#2112,$,.NOTDEFINED.,.DUCT.,$); +#2108=IFCCARTESIANPOINT((-0.175000071525574,-3.7352108961386E-08,0.375)); +#2109=IFCDIRECTION((0.,0.,1.)); +#2110=IFCDIRECTION((1.,0.,0.)); +#2111=IFCAXIS2PLACEMENT3D(#2108,#2109,#2110); +#2112=IFCLOCALPLACEMENT($,#2111); +#2319=IFCPIPESEGMENTTYPE('1xq36nTJz9VOg76EO46JHI',$,'Circular 125pipe',$,$,$,$,$,$,.CULVERT.); +#2320=IFCCIRCLEHOLLOWPROFILEDEF(.AREA.,'IfcPipeSegmentType-150.0x5.0',$,0.075,0.005); +#2321=IFCMATERIALPROFILESET($,$,(#2323),$); +#2322=IFCRELASSOCIATESMATERIAL('3HHoIExsX3DhCrODzV1Bu2',$,$,$,(#2319),#2321); +#2323=IFCMATERIALPROFILE($,$,#260,#2320,$,$); +#2900=IFCCARTESIANPOINTLIST3D(((0.,0.,-0.100000001490116),(0.0805456665678067,0.,-0.294454398944972),(0.275000089307265,0.,-0.375000004470335))); +#2901=IFCINDEXEDPOLYCURVE(#2900,(IFCARCINDEX((1,2,3))),$); +#2902=IFCSWEPTDISKSOLID(#2901,0.075,$,$,$); +#2903=IFCCARTESIANPOINT((0.,0.,0.)); +#2904=IFCDIRECTION((0.,0.,1.)); +#2905=IFCDIRECTION((1.,0.,0.)); +#2906=IFCAXIS2PLACEMENT3D(#2903,#2904,#2905); +#2907=IFCDIRECTION((0.,0.,-1.)); +#2908=IFCEXTRUDEDAREASOLID(#1221,#2906,#2907,0.100000001490116); +#2909=IFCCARTESIANPOINT((0.275000089307265,0.,-0.375000004470335)); +#2910=IFCDIRECTION((0.999999999999951,0.,3.13916478528011E-07)); +#2911=IFCDIRECTION((-3.13916478528011E-07,0.,0.999999999999951)); +#2912=IFCAXIS2PLACEMENT3D(#2909,#2910,#2911); +#2913=IFCDIRECTION((0.,0.,1.)); +#2914=IFCEXTRUDEDAREASOLID(#1221,#2912,#2913,0.100000001490116); +#2915=IFCSHAPEREPRESENTATION(#15,'Body','SolidModel',(#2902,#2908,#2914)); +#2916=IFCDUCTFITTINGTYPE('1q0mw6HNv6lvuefnOczvYy',$,'Bend',$,$,(#2922),(#2921),$,$,.BEND.); +#2917=IFCCARTESIANPOINT((0.,0.,0.)); +#2918=IFCDIRECTION((1.,0.,0.)); +#2919=IFCDIRECTION((0.,0.,1.)); +#2920=IFCAXIS2PLACEMENT3D(#2917,#2919,#2918); +#2921=IFCREPRESENTATIONMAP(#2920,#2915); +#2922=IFCPROPERTYSET('1_T$r0lb536OCpv_tvTo9$',$,'BBIM_Fitting',$,(#2923)); +#2923=IFCPROPERTYSINGLEVALUE('Data',$,IFCTEXT('{"start_length": 0.10000000149011612, "end_length": 0.10000000149011612, "radius": 0.20000000298023224, "angle": 90.00001798608935, "lateral_axis": 0, "lateral_sign": 1.0, "z_axis_sign": -1, "main_profile_dimension": 0.075}'),$); +#2924=IFCDISTRIBUTIONPORT('3BoBvNkevC1vloKOWS7kaY',$,$,$,$,#2930,$,.NOTDEFINED.,.DUCT.,$); +#2925=IFCRELNESTS('3$P0LGjnX4dBVq$qtQQcRv',$,$,$,#2916,(#2931,#2924)); +#2926=IFCCARTESIANPOINT((0.,0.,0.)); +#2927=IFCDIRECTION((0.,0.,1.)); +#2928=IFCDIRECTION((1.,0.,0.)); +#2929=IFCAXIS2PLACEMENT3D(#2926,#2927,#2928); +#2930=IFCLOCALPLACEMENT($,#2929); +#2931=IFCDISTRIBUTIONPORT('3s1AA0LEvBx9Uv$j2SCUXC',$,$,$,$,#2936,$,.NOTDEFINED.,.DUCT.,$); +#2932=IFCCARTESIANPOINT((0.37500011920929,-2.82129999362724E-08,-0.374999970197678)); +#2933=IFCDIRECTION((0.,0.,1.)); +#2934=IFCDIRECTION((1.,0.,0.)); +#2935=IFCAXIS2PLACEMENT3D(#2932,#2933,#2934); +#2936=IFCLOCALPLACEMENT($,#2935); +#3642=IFCCARTESIANPOINTLIST3D(((0.,0.,-0.100000001490116),(0.0805456665678067,0.,-0.294454398944972),(0.275000089307265,0.,-0.375000004470335))); +#3643=IFCINDEXEDPOLYCURVE(#3642,(IFCARCINDEX((1,2,3))),$); +#3644=IFCSWEPTDISKSOLID(#3643,0.075,$,$,$); +#3645=IFCCARTESIANPOINT((0.,0.,0.)); +#3646=IFCDIRECTION((0.,0.,1.)); +#3647=IFCDIRECTION((1.,0.,0.)); +#3648=IFCAXIS2PLACEMENT3D(#3645,#3646,#3647); +#3649=IFCDIRECTION((0.,0.,-1.)); +#3650=IFCEXTRUDEDAREASOLID(#1221,#3648,#3649,0.100000001490116); +#3651=IFCCARTESIANPOINT((0.275000089307265,0.,-0.375000004470335)); +#3652=IFCDIRECTION((0.999999999999951,0.,3.13916478528011E-07)); +#3653=IFCDIRECTION((-3.13916478528011E-07,0.,0.999999999999951)); +#3654=IFCAXIS2PLACEMENT3D(#3651,#3652,#3653); +#3655=IFCDIRECTION((0.,0.,1.)); +#3656=IFCEXTRUDEDAREASOLID(#1221,#3654,#3655,0.100000001490116); +#3657=IFCSHAPEREPRESENTATION(#15,'Body','SolidModel',(#3644,#3650,#3656)); +#3658=IFCDUCTFITTINGTYPE('0D3LejGDr1SvkC3FF8C1lZ',$,'Bend',$,$,(#3664),(#3663),$,$,.BEND.); +#3659=IFCCARTESIANPOINT((0.,0.,0.)); +#3660=IFCDIRECTION((1.,0.,0.)); +#3661=IFCDIRECTION((0.,0.,1.)); +#3662=IFCAXIS2PLACEMENT3D(#3659,#3661,#3660); +#3663=IFCREPRESENTATIONMAP(#3662,#3657); +#3664=IFCPROPERTYSET('0E$8wglFr7RviMSGa2PvQm',$,'BBIM_Fitting',$,(#3665)); +#3665=IFCPROPERTYSINGLEVALUE('Data',$,IFCTEXT('{"start_length": 0.10000000149011612, "end_length": 0.10000000149011612, "radius": 0.20000000298023224, "angle": 90.00001798608935, "lateral_axis": 0, "lateral_sign": 1.0, "z_axis_sign": -1, "main_profile_dimension": 0.075}'),$); +#3666=IFCDISTRIBUTIONPORT('2cPxE6rVPBtPq9W6XV44Oz',$,$,$,$,#3672,$,.NOTDEFINED.,.DUCT.,$); +#3667=IFCRELNESTS('3NNby8E0D53BR_TLfurpuh',$,$,$,#3658,(#3666,#3673)); +#3668=IFCCARTESIANPOINT((0.,0.,0.)); +#3669=IFCDIRECTION((0.,0.,1.)); +#3670=IFCDIRECTION((1.,0.,0.)); +#3671=IFCAXIS2PLACEMENT3D(#3668,#3669,#3670); +#3672=IFCLOCALPLACEMENT($,#3671); +#3673=IFCDISTRIBUTIONPORT('2uwNLhVyP6b9c8csvjj89S',$,$,$,$,#3678,$,.NOTDEFINED.,.DUCT.,$); +#3674=IFCCARTESIANPOINT((0.37500011920929,-2.82129999362724E-08,-0.374999970197678)); +#3675=IFCDIRECTION((0.,0.,1.)); +#3676=IFCDIRECTION((1.,0.,0.)); +#3677=IFCAXIS2PLACEMENT3D(#3674,#3675,#3676); +#3678=IFCLOCALPLACEMENT($,#3677); +#4252=IFCDUCTSEGMENT('0WHS1lL6bCNwXboy2ifPLg',$,'DuctSegment',$,$,#4489,#4265,$,$); +#4253=IFCRELCONTAINEDINSPATIALSTRUCTURE('3fN$S_y3T60gKDIibxaHdq',$,$,$,(#4276,#4298,#4582,#4252),#43); +#4254=IFCRELDEFINESBYTYPE('1j6pnnyQr8nfMJOogTjKmB',$,$,$,(#4298,#4276,#4252),#1220); +#4255=IFCMATERIALPROFILESETUSAGE(#1222,5,$); +#4256=IFCRELASSOCIATESMATERIAL('03RuMFCe55qxWFZhFftddS',$,$,$,(#4252),#4255); +#4265=IFCPRODUCTDEFINITIONSHAPE($,$,(#4532,#4539)); +#4273=IFCPROPERTYSET('2DZbBjvhH2o9gJCx_zlgrY',$,'EPset_Parametric',$,(#4275)); +#4274=IFCRELDEFINESBYPROPERTIES('18n9$zcVH5K8C0Ws3i5YX$',$,$,$,(#4252),#4273); +#4275=IFCPROPERTYSINGLEVALUE('Engine',$,IFCLABEL('Bonsai.DumbProfile'),$); +#4276=IFCDUCTSEGMENT('1rSu7klFH5weJX67QoqU3l',$,'DuctSegment',$,$,#4524,#4287,$,$); +#4277=IFCMATERIALPROFILESETUSAGE(#1222,5,$); +#4278=IFCRELASSOCIATESMATERIAL('1Kfa_Lbl92ZQfFnbcKyzqo',$,$,$,(#4276),#4277); +#4287=IFCPRODUCTDEFINITIONSHAPE($,$,(#4512,#4519)); +#4295=IFCPROPERTYSET('3PB0mvZ4T66f5q$eLt0IrR',$,'EPset_Parametric',$,(#4297)); +#4296=IFCRELDEFINESBYPROPERTIES('1SFU2Ram9CDvPiQKhvrWql',$,$,$,(#4276),#4295); +#4297=IFCPROPERTYSINGLEVALUE('Engine',$,IFCLABEL('Bonsai.DumbProfile'),$); +#4298=IFCDUCTSEGMENT('0KcVEDEEn3Thp9R7nWRX4l',$,'DuctSegment',$,$,#4408,#4309,$,$); +#4299=IFCMATERIALPROFILESETUSAGE(#1222,5,$); +#4300=IFCRELASSOCIATESMATERIAL('2shqA1C7LCxgAgtC2hKuku',$,$,$,(#4298),#4299); +#4309=IFCPRODUCTDEFINITIONSHAPE($,$,(#4389,#4403)); +#4317=IFCPROPERTYSET('3RjS3ZGAPD_wP5PX7dwVnz',$,'EPset_Parametric',$,(#4319)); +#4318=IFCRELDEFINESBYPROPERTIES('0vUktTURj5KwK0iz4OCTnp',$,$,$,(#4298),#4317); +#4319=IFCPROPERTYSINGLEVALUE('Engine',$,IFCLABEL('Bonsai.DumbProfile'),$); +#4343=IFCDISTRIBUTIONPORT('3JTAVRftzD_f_alb7aIrAT',$,$,$,$,#4349,$,.NOTDEFINED.,.DUCT.,$); +#4344=IFCRELNESTS('2lxxE2vY9CNAEe54bpQ0tM',$,$,$,#4276,(#4350,#4343)); +#4345=IFCCARTESIANPOINT((4.44089209850063E-16,0.,-1.38777878078145E-17)); +#4346=IFCDIRECTION((-2.12338470830636E-23,0.,1.)); +#4347=IFCDIRECTION((1.,0.,5.23591910799791E-24)); +#4348=IFCAXIS2PLACEMENT3D(#4345,#4346,#4347); +#4349=IFCLOCALPLACEMENT(#4524,#4348); +#4350=IFCDISTRIBUTIONPORT('3tJYO3_Ln4JOYLvMmot4LR',$,$,$,$,#4529,$,.SOURCE.,.DUCT.,$); +#4373=IFCDISTRIBUTIONPORT('0MMJQ4g_P3u8X2VngE1SSC',$,$,$,$,#4379,$,.NOTDEFINED.,.DUCT.,$); +#4374=IFCRELNESTS('0St$ko3k50lhhkY6rdv0ZO',$,$,$,#4252,(#4380,#4373)); +#4375=IFCCARTESIANPOINT((0.,0.,0.)); +#4376=IFCDIRECTION((1.23732612102862E-23,0.,1.)); +#4377=IFCDIRECTION((1.,-2.64697796016969E-23,1.237304664012E-23)); +#4378=IFCAXIS2PLACEMENT3D(#4375,#4376,#4377); +#4379=IFCLOCALPLACEMENT(#4489,#4378); +#4380=IFCDISTRIBUTIONPORT('2eCqj_oa1BuR8iOx089EBb',$,$,$,$,#4544,$,.SOURCE.,.DUCT.,$); +#4387=IFCCARTESIANPOINTLIST3D(((-1.19248397822957E-08,-1.04215986155513E-14,0.075000137090683),(3.17865804788653E-08,0.,1.07499992847443))); +#4388=IFCINDEXEDPOLYCURVE(#4387,$,.F.); +#4389=IFCSHAPEREPRESENTATION(#16,'Axis','Curve3D',(#4388)); +#4390=IFCCARTESIANPOINT((0.,0.,0.)); +#4391=IFCDIRECTION((0.,0.,1.)); +#4392=IFCDIRECTION((1.,0.,0.)); +#4393=IFCAXIS2PLACEMENT3D(#4390,#4391,#4392); +#4394=IFCDIRECTION((0.,0.,1.)); +#4395=IFCEXTRUDEDAREASOLID(#1221,#4393,#4394,1.07499982700795); +#4396=IFCCARTESIANPOINT((-0.0750000476837158,-3.68961053709427E-07,-1.65598876833428E-07)); +#4397=IFCDIRECTION((0.707107484340668,3.37145564799357E-08,-0.707106173038483)); +#4398=IFCDIRECTION((4.76795356103073E-08,-0.999999999999999,0.)); +#4399=IFCAXIS2PLACEMENT3D(#4396,#4397,#4398); +#4400=IFCPLANE(#4399); +#4401=IFCHALFSPACESOLID(#4400,.F.); +#4402=IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#4395,#4401); +#4403=IFCSHAPEREPRESENTATION(#15,'Body','Clipping',(#4402)); +#4404=IFCCARTESIANPOINT((3.07499980926514,2.,-1.46030112446738E-08)); +#4405=IFCDIRECTION((-0.999999999999962,-1.94707164287728E-07,1.94707178498585E-07)); +#4406=IFCDIRECTION((1.94707178498587E-07,-0.999999999999974,1.19209289550778E-07)); +#4407=IFCAXIS2PLACEMENT3D(#4404,#4405,#4406); +#4408=IFCLOCALPLACEMENT(#66,#4407); +#4409=IFCDISTRIBUTIONPORT('3G7OMrfmH9ZQzgjHPmrA8d',$,$,$,$,#4415,$,.SINK.,.DUCT.,$); +#4410=IFCRELNESTS('3miEzadZH0FPN4Iga39TEN',$,$,$,#4298,(#4409,#4416)); +#4411=IFCCARTESIANPOINT((-2.22044604925031E-16,1.05879118406788E-22,4.44089209850063E-16)); +#4412=IFCDIRECTION((-1.23732612102862E-23,0.,1.)); +#4413=IFCDIRECTION((1.,2.64697796016969E-23,-1.237304664012E-23)); +#4414=IFCAXIS2PLACEMENT3D(#4411,#4412,#4413); +#4415=IFCLOCALPLACEMENT(#4408,#4414); +#4416=IFCDISTRIBUTIONPORT('3IPJusuUD9ShoYrnCXpHgV',$,$,$,$,#4421,$,.NOTDEFINED.,.DUCT.,$); +#4417=IFCCARTESIANPOINT((2.91084145676024E-08,-3.08970271640875E-14,1.07499980926518)); +#4418=IFCDIRECTION((-1.23732612102862E-23,0.,1.)); +#4419=IFCDIRECTION((1.,2.64697796016969E-23,-1.237304664012E-23)); +#4420=IFCAXIS2PLACEMENT3D(#4417,#4418,#4419); +#4421=IFCLOCALPLACEMENT(#4408,#4420); +#4469=IFCRELCONNECTSPORTS('33YBWbgYXBwh8yB3PGhQYf',$,$,$,#4350,#4409,$); +#4485=IFCCARTESIANPOINT((0.,-0.0749999508261681,-5.89783951454592E-07)); +#4486=IFCDIRECTION((0.999999999999962,-1.94707169498535E-07,1.9470718370939E-07)); +#4487=IFCDIRECTION((1.94707183709392E-07,0.999999999999974,-1.19209289550778E-07)); +#4488=IFCAXIS2PLACEMENT3D(#4485,#4486,#4487); +#4489=IFCLOCALPLACEMENT(#66,#4488); +#4510=IFCCARTESIANPOINTLIST3D(((-2.62268073925043E-08,1.24344978758018E-14,-6.04142624816006E-10),(6.35730117437561E-08,0.,1.70000040531158))); +#4511=IFCINDEXEDPOLYCURVE(#4510,$,.F.); +#4512=IFCSHAPEREPRESENTATION(#16,'Axis','Curve3D',(#4511)); +#4513=IFCCARTESIANPOINT((0.,0.,0.)); +#4514=IFCDIRECTION((0.,0.,1.)); +#4515=IFCDIRECTION((1.,0.,0.)); +#4516=IFCAXIS2PLACEMENT3D(#4513,#4514,#4515); +#4517=IFCDIRECTION((0.,0.,1.)); +#4518=IFCEXTRUDEDAREASOLID(#1221,#4516,#4517,1.70000052171589); +#4519=IFCSHAPEREPRESENTATION(#15,'Body','SweptSolid',(#4518)); +#4520=IFCCARTESIANPOINT((3.07500004768372,0.299999535083771,-1.42949488690647E-07)); +#4521=IFCDIRECTION((-8.74227765734753E-08,0.999999999999993,7.54979012640428E-08)); +#4522=IFCDIRECTION((-0.999999999999992,-8.74227765734752E-08,8.74227836789026E-08)); +#4523=IFCAXIS2PLACEMENT3D(#4520,#4521,#4522); +#4524=IFCLOCALPLACEMENT(#66,#4523); +#4525=IFCCARTESIANPOINT((8.97998182480819E-08,-3.87089979225668E-15,1.70000046491625)); +#4526=IFCDIRECTION((-7.76429088443453E-24,-1.32348898008484E-23,1.)); +#4527=IFCDIRECTION((1.,-1.32348898008484E-23,5.47058787236124E-24)); +#4528=IFCAXIS2PLACEMENT3D(#4525,#4526,#4527); +#4529=IFCLOCALPLACEMENT(#4524,#4528); +#4530=IFCCARTESIANPOINTLIST3D(((7.0304873034388E-14,-2.04281036531029E-14,-2.60167863815053E-16),(4.16879020193051E-09,-2.57571741713036E-14,2.70000004768372))); +#4531=IFCINDEXEDPOLYCURVE(#4530,$,.F.); +#4532=IFCSHAPEREPRESENTATION(#16,'Axis','Curve3D',(#4531)); +#4533=IFCCARTESIANPOINT((0.,0.,0.)); +#4534=IFCDIRECTION((0.,0.,1.)); +#4535=IFCDIRECTION((1.,0.,0.)); +#4536=IFCAXIS2PLACEMENT3D(#4533,#4534,#4535); +#4537=IFCDIRECTION((0.,0.,1.)); +#4538=IFCEXTRUDEDAREASOLID(#1221,#4536,#4537,2.70000008123902); +#4539=IFCSHAPEREPRESENTATION(#15,'Body','SweptSolid',(#4538)); +#4540=IFCCARTESIANPOINT((-3.28185546794035E-09,1.87461196247957E-14,2.70000004768382)); +#4541=IFCDIRECTION((1.83015730011275E-27,-2.64697796016969E-23,1.)); +#4542=IFCDIRECTION((1.,-1.32348898008484E-23,1.60612080302998E-27)); +#4543=IFCAXIS2PLACEMENT3D(#4540,#4541,#4542); +#4544=IFCLOCALPLACEMENT(#4489,#4543); +#4545=IFCCARTESIANPOINTLIST3D(((0.,0.,-0.100000001490116),(0.0805456665678067,0.,-0.294454398944972),(0.275000089307265,0.,-0.375000004470335))); +#4546=IFCINDEXEDPOLYCURVE(#4545,(IFCARCINDEX((1,2,3))),$); +#4547=IFCSWEPTDISKSOLID(#4546,0.075,$,$,$); +#4548=IFCCARTESIANPOINT((0.,0.,0.)); +#4549=IFCDIRECTION((0.,0.,1.)); +#4550=IFCDIRECTION((1.,0.,0.)); +#4551=IFCAXIS2PLACEMENT3D(#4548,#4549,#4550); +#4552=IFCDIRECTION((0.,0.,-1.)); +#4553=IFCEXTRUDEDAREASOLID(#1221,#4551,#4552,0.100000001490116); +#4554=IFCCARTESIANPOINT((0.275000089307265,0.,-0.375000004470335)); +#4555=IFCDIRECTION((0.999999999999951,0.,3.13916478528011E-07)); +#4556=IFCDIRECTION((-3.13916478528011E-07,0.,0.999999999999951)); +#4557=IFCAXIS2PLACEMENT3D(#4554,#4555,#4556); +#4558=IFCDIRECTION((0.,0.,1.)); +#4559=IFCEXTRUDEDAREASOLID(#1221,#4557,#4558,0.100000001490116); +#4560=IFCSHAPEREPRESENTATION(#15,'Body','SolidModel',(#4547,#4553,#4559)); +#4561=IFCDUCTFITTINGTYPE('3Ltuv8dH1Ffx1nY8nhh1rz',$,'Bend',$,$,(#4567),(#4566),$,$,.BEND.); +#4562=IFCCARTESIANPOINT((0.,0.,0.)); +#4563=IFCDIRECTION((1.,0.,0.)); +#4564=IFCDIRECTION((0.,0.,1.)); +#4565=IFCAXIS2PLACEMENT3D(#4562,#4564,#4563); +#4566=IFCREPRESENTATIONMAP(#4565,#4560); +#4567=IFCPROPERTYSET('0Rbjs_Fpz7qOUuWCOOtaNO',$,'BBIM_Fitting',$,(#4568)); +#4568=IFCPROPERTYSINGLEVALUE('Data',$,IFCTEXT('{"start_length": 0.10000000149011612, "end_length": 0.10000000149011612, "radius": 0.20000000298023224, "angle": 90.00001798608935, "lateral_axis": 0, "lateral_sign": 1.0, "z_axis_sign": -1, "main_profile_dimension": 0.075}'),$); +#4569=IFCDISTRIBUTIONPORT('0U8yA2GUD3JhZ6jZaYZYDo',$,$,$,$,#4575,$,.NOTDEFINED.,.DUCT.,$); +#4570=IFCRELNESTS('0KiNZs_bH91Akd8Oj8OsQt',$,$,$,#4561,(#4569,#4576)); +#4571=IFCCARTESIANPOINT((0.,0.,0.)); +#4572=IFCDIRECTION((0.,0.,1.)); +#4573=IFCDIRECTION((1.,0.,0.)); +#4574=IFCAXIS2PLACEMENT3D(#4571,#4572,#4573); +#4575=IFCLOCALPLACEMENT($,#4574); +#4576=IFCDISTRIBUTIONPORT('2zQYdznG10dgKYd_gOqzuH',$,$,$,$,#4581,$,.NOTDEFINED.,.DUCT.,$); +#4577=IFCCARTESIANPOINT((0.37500011920929,-2.82129999362724E-08,-0.374999970197678)); +#4578=IFCDIRECTION((0.,0.,1.)); +#4579=IFCDIRECTION((1.,0.,0.)); +#4580=IFCAXIS2PLACEMENT3D(#4577,#4578,#4579); +#4581=IFCLOCALPLACEMENT($,#4580); +#4582=IFCDUCTFITTING('1syTl_6uTB69x_Rlqv6sil',$,'DuctFitting',$,$,#4613,#4591,$,$); +#4583=IFCRELDEFINESBYTYPE('0RNEAO8SL75vNQ7EtAdxFQ',$,$,$,(#4582),#4561); +#4584=IFCCARTESIANPOINT((0.,0.,0.)); +#4585=IFCDIRECTION((1.,0.,0.)); +#4586=IFCDIRECTION((0.,1.,0.)); +#4587=IFCDIRECTION((0.,0.,1.)); +#4588=IFCCARTESIANTRANSFORMATIONOPERATOR3D(#4585,#4586,#4584,1.,#4587); +#4589=IFCMAPPEDITEM(#4566,#4588); +#4590=IFCSHAPEREPRESENTATION(#15,'Body','MappedRepresentation',(#4589)); +#4591=IFCPRODUCTDEFINITIONSHAPE($,$,(#4590)); +#4592=IFCDISTRIBUTIONPORT('2S4qtJmP5Fo9Vh_faB4P4D',$,$,$,$,#4598,$,.SINK.,.DUCT.,$); +#4593=IFCRELNESTS('1xEiSZ_mX8txH8GAdYRf5z',$,$,$,#4582,(#4599,#4592)); +#4594=IFCCARTESIANPOINT((0.,0.,0.)); +#4595=IFCDIRECTION((0.,0.,1.)); +#4596=IFCDIRECTION((1.,0.,0.)); +#4597=IFCAXIS2PLACEMENT3D(#4594,#4595,#4596); +#4598=IFCLOCALPLACEMENT($,#4597); +#4599=IFCDISTRIBUTIONPORT('3NF9QL5NTBTfMlOte2M8lX',$,$,$,$,#4604,$,.NOTDEFINED.,.DUCT.,$); +#4600=IFCCARTESIANPOINT((0.37500011920929,-2.82129999362724E-08,-0.374999970197678)); +#4601=IFCDIRECTION((0.,0.,1.)); +#4602=IFCDIRECTION((1.,0.,0.)); +#4603=IFCAXIS2PLACEMENT3D(#4600,#4601,#4602); +#4604=IFCLOCALPLACEMENT($,#4603); +#4605=IFCRELCONNECTSPORTS('2pVSmSjRf6aQV_k7yqi_Ti',$,$,$,#4599,#4343,$); +#4606=IFCRELCONNECTSPORTS('3zhKky0xH4Nvt37Rdjuj7M',$,$,$,#4343,#4599,$); +#4608=IFCRELCONNECTSPORTS('14_ud8NXr6YebgVSpFQD$A',$,$,$,#4380,#4592,$); +#4609=IFCCARTESIANPOINT((3.07500004768372,0.299999535083771,-1.42949488690647E-07)); +#4610=IFCDIRECTION((-1.5099578831723E-07,0.999999999999986,7.54979012640422E-08)); +#4611=IFCDIRECTION((-0.999999999999985,-1.50995802528084E-07,8.74227907843292E-08)); +#4612=IFCAXIS2PLACEMENT3D(#4609,#4610,#4611); +#4613=IFCLOCALPLACEMENT(#66,#4612); +ENDSEC; +END-ISO-10303-21; diff --git a/src/bonsai/test/tool/test_system.py b/src/bonsai/test/tool/test_system.py index 9bd7d47fdc..2a8616abb3 100644 --- a/src/bonsai/test/tool/test_system.py +++ b/src/bonsai/test/tool/test_system.py @@ -16,11 +16,13 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import math from math import pi import bpy import ifcopenshell import ifcopenshell.api +import ifcopenshell.api.attribute import ifcopenshell.api.root import ifcopenshell.api.system import ifcopenshell.util.representation @@ -32,6 +34,7 @@ from mathutils import Euler, Matrix, Vector import bonsai.core.tool import bonsai.tool as tool from bonsai.tool.system import System as subject +from bonsai.tool.system import bend_curve_points from test.bim.bootstrap import NewFile @@ -457,3 +460,186 @@ class TestFlowElementAndControls(NewFile): controls = subject.get_flow_element_controls(flow_element) assert set(controls) == set((flow_control, flow_control1)) assert subject.get_flow_control_flow_element(flow_control) == flow_element + + +class TestBendCurvePoints: + """https://github.com/IfcOpenShell/IfcOpenShell/issues/6278 - the + flow-direction decoration used to draw a straight port-to-port line + through a bend fitting, cutting across the corner instead of following + it. ``bend_curve_points`` is the pure geometry behind the fix: a cubic + bezier tangent to each port's axis, sampled into a polyline.""" + + # A real 90 degree duct bend's two ports (radius 0.375), reproduced from + # a live bim.mep_add_bend splice - see TestBuildDecorationDataBendCurve. + PORT_A = Vector((2.7, 2.0, 0.0)) + AXIS_A = Vector((1.0, 0.0, 0.0)) + PORT_B = Vector((3.075, 1.625, 0.0)) + AXIS_B = Vector((0.0, 1.0, 0.0)) + + def test_90_degree_bend_hugs_the_true_arc(self): + points = bend_curve_points(self.PORT_A, self.AXIS_A, self.PORT_B, self.AXIS_B) + assert points is not None + assert points[0] == self.PORT_A + assert points[-1] == self.PORT_B + + # The true arc (perpendicular tangents at A and B) has its center + # where the two tangent lines cross, here (2.7, 1.625, 0), radius + # 0.375. The curve's own midpoint should land on it almost exactly, + # unlike the chord's midpoint, which cuts across the corner. + center = Vector((2.7, 1.625, 0.0)) + radius = 0.375 + true_arc_midpoint = center + ((self.PORT_A - center) + (self.PORT_B - center)).normalized() * radius + curve_midpoint = points[len(points) // 2] + chord_midpoint = (self.PORT_A + self.PORT_B) / 2 + + curve_error = (curve_midpoint - true_arc_midpoint).length + chord_error = (chord_midpoint - true_arc_midpoint).length + assert curve_error < 1e-4 + assert chord_error > 0.1 + assert curve_error < chord_error / 100 + + def test_degenerate_axes_fall_back_to_straight_line(self): + # Collinear ports (a straight fitting): both axes already match the chord. + assert bend_curve_points(Vector((0, 0, 0)), Vector((1, 0, 0)), Vector((2, 0, 0)), Vector((-1, 0, 0))) is None + # Missing axis (e.g. neighbour couldn't be resolved). + assert bend_curve_points(Vector((0, 0, 0)), None, Vector((2, 0, 0)), Vector((1, 0, 0))) is None + # Zero-length axis. + assert bend_curve_points(Vector((0, 0, 0)), Vector((0, 0, 0)), Vector((2, 0, 0)), Vector((1, 0, 0))) is None + # Non-convex/divergent tangents (no sensible corner ahead of either port). + assert bend_curve_points(Vector((0, 0, 0)), Vector((-1, 0, 0)), Vector((2, 0, 0)), Vector((1, 0, 0))) is None + # Coincident ports. + assert bend_curve_points(Vector((1, 1, 1)), Vector((1, 0, 0)), Vector((1, 1, 1)), Vector((0, 1, 0))) is None + + def test_shallow_and_sharp_angles_stay_close_to_the_true_arc(self): + center = Vector((0.0, 1.0, 0.0)) + radius = 1.0 + port_a = center + Vector((0, -1, 0)) * radius + axis_a = Vector((1, 0, 0)) + for degrees in (5, 10, 30, 45, 90): + theta = math.radians(degrees) + port_b = center + Vector((math.sin(theta), -math.cos(theta), 0)) * radius + axis_b = -Vector((math.cos(theta), math.sin(theta), 0)) + points = bend_curve_points(port_a, axis_a, port_b, axis_b) + assert points is not None, f"expected a curve at {degrees} degrees" + true_mid = center + ((port_a - center) + (port_b - center)).normalized() * radius + curve_mid = points[len(points) // 2] + assert (curve_mid - true_mid).length < 0.011, f"curve strayed too far from the arc at {degrees} degrees" + + def test_extreme_near_reversal_falls_back_to_straight_line(self): + # ~170 degrees of turn: tangent lines meet so far away that a single + # cubic bezier can't approximate it sensibly - must not crash or + # produce a wild result, just fall back. + center = Vector((0.0, 1.0, 0.0)) + radius = 1.0 + port_a = center + Vector((0, -1, 0)) * radius + axis_a = Vector((1, 0, 0)) + theta = math.radians(170) + port_b = center + Vector((math.sin(theta), -math.cos(theta), 0)) * radius + axis_b = -Vector((math.cos(theta), math.sin(theta), 0)) + assert bend_curve_points(port_a, axis_a, port_b, axis_b) is None + + +class TestBuildDecorationDataBendCurve(NewFile): + """End-to-end: splice a real bend into two straight ducts via the actual + bim.mep_add_bend operator, then check tool.System's decoration builder + draws a curved polyline through the bend (not the straight chord) while + an untouched straight segment's own decoration is completely unaffected.""" + + FIXTURE = "test/files/mep-duct-bend-flow-direction.ifc" + SEGMENT_UPSTREAM_ID = 4276 + SEGMENT_DOWNSTREAM_ID = 4298 + UPSTREAM_PORT_ID = 4350 + STRAIGHT_SEGMENT_ID = 4252 + + def _build_bend(self): + result = bpy.ops.bim.load_project(filepath=self.FIXTURE) + assert result == {"FINISHED"} + ifc = tool.Ifc.get() + + upstream_obj = tool.Ifc.get_object(ifc.by_id(self.SEGMENT_UPSTREAM_ID)) + downstream_obj = tool.Ifc.get_object(ifc.by_id(self.SEGMENT_DOWNSTREAM_ID)) + bpy.context.view_layer.objects.active = upstream_obj + upstream_obj.select_set(True) + downstream_obj.select_set(True) + + result = bpy.ops.bim.mep_add_bend( + start_segment_id=ifc.by_id(self.SEGMENT_UPSTREAM_ID).id(), + end_segment_id=ifc.by_id(self.SEGMENT_DOWNSTREAM_ID).id(), + ) + assert result == {"FINISHED"} + + fitting_port = subject.get_connected_port(ifc.by_id(self.UPSTREAM_PORT_ID)) + fitting = subject.get_port_relating_element(fitting_port) + assert fitting.is_a("IfcDuctFitting") + + # Give the fitting's own two ports a resolvable SOURCE/SINK pair so + # the decorator actually draws an arrow through it (this repo's + # mep_add_bend doesn't establish that on its own - see #6278/#8733, + # a separate, already-fixed issue about the flow direction itself). + for port in subject.get_ports(fitting): + ifcopenshell.api.attribute.edit_attributes( + ifc, product=port, attributes={"FlowDirection": "SINK" if port == fitting_port else "SOURCE"} + ) + return ifc, fitting + + def _decoration_for(self, ifc, element): + from bonsai.bim.module.system.data import ObjectSystemData, SystemDecorationData + + obj = tool.Ifc.get_object(element) + bpy.ops.object.select_all(action="DESELECT") + bpy.context.view_layer.objects.active = obj + obj.select_set(True) + bpy.context.view_layer.update() + + ObjectSystemData.is_loaded = False + ObjectSystemData.load() + SystemDecorationData.is_loaded = False + SystemDecorationData.load() + SystemDecorationData.data["decorated_elements"] = {element} + subject._decoration_data_cache_key = None + subject._decoration_data_cache = None + return subject._build_decoration_data() + + def test_bend_fitting_draws_a_curve_not_a_chord(self): + ifc, fitting = self._build_bend() + data = self._decoration_for(ifc, fitting) + + # Straight chord = 2 vertices/1 edge for the base line; a curve + # injects sampled interior points, so there must be more than that. + assert len(data["all_vertices"]) > 14 + port_a, port_b = data["all_vertices"][0], data["all_vertices"][1] + # The curve's own sampled points must bulge away from the chord. + max_deviation = 0.0 + chord_dir = (port_b - port_a).normalized() + for vertex in data["all_vertices"][2:]: + offset = vertex - port_a + lateral = offset - chord_dir * offset.dot(chord_dir) + max_deviation = max(max_deviation, lateral.length) + assert max_deviation > 0.05, "expected the curve to visibly bulge away from the straight chord" + + def test_straight_segment_decoration_is_unaffected(self): + ifc, _fitting = self._build_bend() + + segment = ifc.by_id(self.STRAIGHT_SEGMENT_ID) + ports = subject.get_ports(segment) + for i, port in enumerate(ports): + ifcopenshell.api.attribute.edit_attributes( + ifc, product=port, attributes={"FlowDirection": "SOURCE" if i == 0 else "SINK"} + ) + + data = self._decoration_for(ifc, segment) + # A plain 2-port straight run: exactly the port-to-port chord edge, + # no injected curve vertices - the fitting-only code path must never + # touch a segment's own decoration. + assert data["selected_edges"][0] == (0, 1) + port_a, port_b = data["all_vertices"][0], data["all_vertices"][1] + chord_dir = (port_b - port_a).normalized() + direction_lines_width = 0.05 + for vertex in data["all_vertices"][2:]: + # Every arrow vertex is either exactly on the port-to-port chord + # (the arrow tip) or offset from it by exactly the arrowhead's + # perpendicular wingspan (the two wing tips) - i.e. still the + # original straight-line arrow shape, never a curve sample. + offset = vertex - port_a + lateral = offset - chord_dir * offset.dot(chord_dir) + assert lateral.length < 1e-4 or abs(lateral.length - direction_lines_width) < 1e-4