feat(file imports): adds an experimental IFC parser (#3525)

* first pass of CLI ifc converter

* some updates

* closer

* yarn works

* can execute ifc?

* change exe

* remove extra venv needs

* invocation works

* fixed dockerfile and url

* refactor(fileimport): temp results path should not be hardcoded in parsers

* update importer to output stuff

* fix up argments

* remove dead code

* adjust dockerfile to have tini and workdir better

* fix node to a specific version

* Add shell statement and pin yarn version

* add ifc converter c# to ignore

* merge fix

* move ifc c#

* fix the api usage

* update the importer to new SDK

* Adds a feature flag `FF_FILEIMPORT_IFC_DOTNET_ENABLED` for enabling .Net IFC parser

* move directories

* put back ifc js

* use FF and reversions

* needs token too

* fix docker?

* one last copy fix

* adjust prettier ignore

* change to enable

* fix helm chart nesting

* Amend healthcheck node binary path

* Add FF_FILEIMPORT_IFC_DOTNET_ENABLED to feature flag parser

* Allow app to write to /.config directory

* fix: volume name has to be lower case

* update ifc importing

---------

Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com>
Co-authored-by: root <root@Clynelish>
This commit is contained in:
Adam Hathcock
2024-11-29 05:34:08 +00:00
committed by GitHub
parent 9ad3fb8d0e
commit 1ac972f02a
29 changed files with 171770 additions and 171614 deletions
+3
View File
@@ -72,6 +72,9 @@ postgres-data/
redis-data/
.tshy-build
obj/
bin/
# Server
multiregion.json
+5 -1
View File
@@ -38,4 +38,8 @@ venv
storybook-static
.tshy
.tshy-build
.tshy-build
packages/fileimport-service/ifc-dotnet/
packages/fileimport-service/stl/
packages/fileimport-service/obj/
+41 -63
View File
@@ -1,97 +1,75 @@
ARG NODE_ENV=production
FROM node:18-bookworm-slim@sha256:408f8cbbb7b33a5bb94bdb8862795a94d2b64c2d516856824fd86c4a5594a443 as build-stage
FROM mcr.microsoft.com/dotnet/sdk:8.0-noble AS dotnet-build-stage
WORKDIR /app
COPY packages/fileimport-service/ifc-dotnet .
RUN dotnet publish ifc-converter.csproj -c Release -o output/
ARG NODE_ENV
ENV NODE_ENV=${NODE_ENV}
FROM mcr.microsoft.com/dotnet/runtime:8.0-noble AS runtime
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
WORKDIR /speckle-server
# install tini
ARG TINI_VERSION=v0.19.0
ENV TINI_VERSION=${TINI_VERSION}
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini ./tini
RUN chmod +x ./tini
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
# install wait
ARG WAIT_VERSION=2.8.0
ENV WAIT_VERSION=${WAIT_VERSION}
ADD https://github.com/ufoscout/docker-compose-wait/releases/download/${WAIT_VERSION}/wait ./wait
RUN chmod +x ./wait
RUN apt-get update -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends \
curl=8.5.0-2ubuntu10.5 \
&& curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends \
nodejs=18.20.5-1nodesource1 \
&& npm install -g corepack@0.30.0 \
&& corepack enable \
&& DEBIAN_FRONTEND=noninteractive apt-get remove curl -y \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# download yarn dependencies for building shared libraries
COPY .yarnrc.yml .
COPY .yarn ./.yarn
COPY package.json yarn.lock ./
COPY packages/frontend-2/type-augmentations/stubs ./packages/frontend-2/type-augmentations/stubs/
COPY packages/shared/package.json ./packages/shared/
COPY packages/fileimport-service/package.json ./packages/fileimport-service/
COPY packages/frontend-2/type-augmentations/stubs packages/frontend-2/type-augmentations/stubs/
COPY packages/shared/package.json packages/shared/
COPY packages/fileimport-service/package.json packages/fileimport-service/
RUN yarn workspaces focus --all
# build shared libraries
COPY packages/shared ./packages/shared/
COPY packages/fileimport-service ./packages/fileimport-service/
COPY packages/shared packages/shared/
COPY packages/fileimport-service packages/fileimport-service/
RUN yarn workspaces foreach -W run build
# Install python virtual env and python dependencies
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends \
python3-venv=3.11.2-1+b1 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& python3 -m venv /venv
RUN apt-get update -y \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
--no-install-recommends \
python3.12=3.12.3-1ubuntu0.3 \
python3-pip=24.0+dfsg-1ubuntu1.1 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
COPY packages/fileimport-service/requirements.txt /speckle-server/
RUN /venv/bin/pip install --disable-pip-version-check --no-cache-dir --requirement /speckle-server/requirements.txt
FROM node:18-bookworm-slim@sha256:408f8cbbb7b33a5bb94bdb8862795a94d2b64c2d516856824fd86c4a5594a443 as dependency-stage
# installing just the production dependencies
# separate stage to avoid including development dependencies
ARG NODE_ENV
ENV NODE_ENV=${NODE_ENV}
WORKDIR /speckle-server
COPY .yarnrc.yml .
COPY .yarn ./.yarn
COPY package.json yarn.lock ./
COPY packages/frontend-2/type-augmentations/stubs ./packages/frontend-2/type-augmentations/stubs/
COPY packages/shared/package.json ./packages/shared/
COPY packages/fileimport-service/package.json ./packages/fileimport-service/
WORKDIR /speckle-server/packages/fileimport-service
RUN yarn workspaces focus --production
FROM gcr.io/distroless/python3-debian12:nonroot@sha256:14c62b8925d3bb30319de2f346bde203fe18103a68898284a62db9d4aa54c794 as python-image
FROM gcr.io/distroless/nodejs18-debian12:nonroot@sha256:afdea027580f7afcaf1f316b2b3806690c297cb3ce6ddc5cf6a15804dc1c790f as distributable-stage
RUN pip install --break-system-packages --disable-pip-version-check --no-cache-dir --requirement /speckle-server/requirements.txt
ARG NODE_ENV
ENV NODE_ENV=${NODE_ENV}
ARG NODE_BINARY_PATH=/nodejs/bin/node
ARG NODE_BINARY_PATH=/usr/bin/node
ENV NODE_BINARY_PATH=${NODE_BINARY_PATH}
ARG PYTHON_BINARY_PATH=/venv/bin/python3
ARG PYTHON_BINARY_PATH=/usr/bin/python3
ENV PYTHON_BINARY_PATH=${PYTHON_BINARY_PATH}
ARG DOTNET_BINARY_PATH=/usr/bin/dotnet
ENV DOTNET_BINARY_PATH=${DOTNET_BINARY_PATH}
WORKDIR /speckle-server
COPY --from=python-image / /
COPY --from=build-stage /speckle-server/tini /usr/bin/tini
COPY --from=build-stage /speckle-server/wait /usr/bin/wait
COPY --from=build-stage /speckle-server/packages/shared ./packages/shared
COPY --from=build-stage /speckle-server/packages/fileimport-service ./packages/fileimport-service
COPY --from=build-stage /venv /venv
COPY --from=dependency-stage /speckle-server/node_modules ./node_modules
COPY --from=dotnet-build-stage /app/output packages/fileimport-service/ifc-dotnet
WORKDIR /speckle-server/packages/fileimport-service
# Prefixing PATH with our virtual environment should seek required binaries
# from virtual environment first.
# Unsetting python home
ENV PATH=/venv/bin:${PATH} \
PYTHONHOME=
ENTRYPOINT [ "tini", "--", "/nodejs/bin/node", "--no-experimental-fetch", "src/daemon.js"]
ENTRYPOINT [ "tini", "--", "node", "--no-experimental-fetch", "src/daemon.js"]
@@ -5,6 +5,9 @@ import { baseConfigs, globals } from '../../eslint.config.mjs'
*/
const configs = [
...baseConfigs,
{
ignores: ['**/ifc/**', '**/obj/**', '**/stl/**']
},
{
languageOptions: {
globals: {
@@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"csharpier": {
"version": "0.30.1",
"commands": [
"dotnet-csharpier"
]
}
}
}
@@ -0,0 +1,33 @@
using Speckle.Sdk.Transports;
namespace Speckle.Converter;
public class ConsoleProgress : IProgress<ProgressArgs>
{
private readonly TimeSpan DEBOUNCE = TimeSpan.FromSeconds(1);
private DateTime _lastTime = DateTime.UtcNow;
private long _totalBytes;
public void Report(ProgressArgs value)
{
if (value.ProgressEvent == ProgressEvent.DownloadBytes)
{
Interlocked.Add(ref _totalBytes, value.Count);
}
var now = DateTime.UtcNow;
if (now - _lastTime >= DEBOUNCE)
{
if (value.ProgressEvent == ProgressEvent.DownloadBytes)
{
Console.WriteLine(value.ProgressEvent + " t " + _totalBytes);
}
else
{
Console.WriteLine(value.ProgressEvent + " c " + value.Count + " t " + value.Total);
}
_lastTime = now;
}
}
}
@@ -0,0 +1,47 @@
using System.CommandLine;
using System.Text.Json;
using Speckle.Sdk.Common;
using Speckle.WebIfc.Importer;
var filePathArgument = new Argument<string>(name: "filePath");
var outputPathArgument = new Argument<string>("outputPath");
var streamIdArgument = new Argument<string>("streamId");
var commitMessageArgument = new Argument<string>("commitMessage");
var modelIdArgument = new Argument<string>("modelId");
var regionNameArgument = new Argument<string>("regionName");
var rootCommand = new RootCommand
{
filePathArgument,
outputPathArgument,
streamIdArgument,
commitMessageArgument,
modelIdArgument,
regionNameArgument,
};
rootCommand.SetHandler(
async (filePath, outputPath, streamId, commitMessage, modelId, _) =>
{
try
{
var token = Environment.GetEnvironmentVariable("USER_TOKEN").NotNull("USER_TOKEN is missing");
var url = Environment.GetEnvironmentVariable("SPECKLE_SERVER_URL") ?? "http://127.0.0.1:3000";
var commitId = await Import.Ifc(url, filePath, streamId, modelId, commitMessage, token);
File.WriteAllText(outputPath, JsonSerializer.Serialize(new { success = true, commitId }));
}
catch (Exception e)
{
File.WriteAllText(
outputPath,
JsonSerializer.Serialize(new { success = false, error = e.ToString() })
);
}
},
filePathArgument,
outputPathArgument,
streamIdArgument,
commitMessageArgument,
modelIdArgument,
regionNameArgument
);
await rootCommand.InvokeAsync(args);
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>Speckle.Converter</RootNamespace>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageReference Include="Speckle.WebIfc.Importer" Version="0.0.5" />
<PackageReference Include="System.CommandLine" Version="2.0.0-beta4.22272.1" />
</ItemGroup>
</Project>
@@ -0,0 +1,16 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ifc-converter", "ifc-converter.csproj", "{4D63FBD3-8ABF-4F51-A08F-740B17BDCA28}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4D63FBD3-8ABF-4F51-A08F-740B17BDCA28}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D63FBD3-8ABF-4F51-A08F-740B17BDCA28}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D63FBD3-8ABF-4F51-A08F-740B17BDCA28}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D63FBD3-8ABF-4F51-A08F-740B17BDCA28}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
@@ -1,421 +1,421 @@
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('IFC2X3.exp'),'2;1');
FILE_NAME('C:\\TeklaStructuresModels\\Acis_Sat\\plate_steel_example-tek_1fix.ifc','2006-05-12T10:07:38',('Steel2 macro version:12.0 Build:179423,2.5.2006'),('Structural Designer'),'EXPRESS Data Manager version:20040806','Tekla Structures 12.0','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
#1= IFCPERSON('TEKLAAD/lli','Undefined',$,$,$,$,$,$);
#3= IFCORGANIZATION($,'Tekla Corporation',$,$,$);
#7= IFCPERSONANDORGANIZATION(#1,#3,$);
#8= IFCAPPLICATION(#3,'12.0','Tekla Structures','Multi material modeling');
#9= IFCOWNERHISTORY(#7,#8,$,.ADDED.,$,$,$,1147417657);
#10= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#11= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#12= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#13= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#14= IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.);
#15= IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.);
#16= IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
#17= IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.);
#18= IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.LUMEN.);
#19= IFCUNITASSIGNMENT((#10,#11,#12,#13,#14,#15,#16,#17,#18));
#21= IFCCARTESIANPOINT((0.,0.,0.));
#25= IFCDIRECTION((1.,0.,0.));
#29= IFCDIRECTION((0.,1.,0.));
#33= IFCDIRECTION((0.,0.,1.));
#37= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#40= IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Design',3,1.0000000E-5,#37,$);
#43= IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Sketch',3,1.0000000E-5,#37,$);
#46= IFCPROJECT('2gPUQOiNz2FR1H6lWQ8j0k',#9,'PROJ: NAME','Description','Object type','LongName','Phase',(#40,#43),#19);
#53= IFCMATERIAL('A36');
#56= IFCMATERIAL('A992');
#59= IFCMATERIAL('A500-GR.B');
#62= IFCPERSON('TEKLAAD/chke','Undefined',$,$,$,$,$,$);
#64= IFCPERSONANDORGANIZATION(#62,#3,$);
#65= IFCOWNERHISTORY(#64,#8,$,.ADDED.,$,$,$,1147417657);
#66= IFCSITE('1_WapmNXfFdOqQ3garaDJn',#65,'Undefined',$,$,$,$,$,.ELEMENT.,$,$,$,$,$);
#76= IFCRELAGGREGATES('36yaCMhuT2DxfpF3ieGira',#65,$,$,#46,(#66));
#78= IFCBUILDING('2iHnVT4$n9JQE18R_2cJEI',#65,'Undefined',$,$,$,$,$,.ELEMENT.,$,$,$);
#88= IFCRELAGGREGATES('0A543zcq1Fdv_lsrHHX8Kv',#65,$,$,#66,(#78));
#90= IFCBUILDINGSTOREY('0UguZM0$L8L9OUA114_ZEd',#65,'Undefined',$,$,$,$,$,.ELEMENT.,$);
#100= IFCRELAGGREGATES('09$Ux3Y999qBeEKV8wCsfA',#65,$,$,#78,(#90));
#102= IFCPOLYLINE((#106,#111,#115,#119,#123,#127,#131));
#106= IFCCARTESIANPOINT((0.,318.8494));
#111= IFCCARTESIANPOINT((95.250002,318.8494));
#115= IFCCARTESIANPOINT((120.65,293.4494));
#119= IFCCARTESIANPOINT((120.65,25.4));
#123= IFCCARTESIANPOINT((95.250002,0.));
#127= IFCCARTESIANPOINT((0.,0.));
#131= IFCCARTESIANPOINT((0.,318.8494));
#135= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL19.1',#102);
#136= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#139= IFCEXTRUDEDAREASOLID(#135,#136,#33,19.1);
#142= IFCCARTESIANPOINT((0.,0.,0.));
#146= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#139));
#152= IFCPRODUCTDEFINITIONSHAPE($,$,(#146));
#156= IFCCARTESIANPOINT((5240.3064,7493.,-337.7327));
#160= IFCDIRECTION((1.,0.,0.));
#164= IFCDIRECTION((0.,1.,0.));
#168= IFCAXIS2PLACEMENT3D(#156,#160,#164);
#171= IFCLOCALPLACEMENT($,#168);
#174= IFCPLATE('13c6Dt0003iJ4nCpGmDZ4q',#65,'PLATE','PL19.1',$,#171,#152,$);
#193= IFCRELCONTAINEDINSPATIALSTRUCTURE('0119IaMyb8cxCzo7l7Qnbw',#65,$,$,(#174,#268,#350,#434,#521,#633,#720,#808,#895,#982,#1078,#1193,#1385,#1473),#90);
#195= IFCSTRUCTURALPROFILEPROPERTIES('PL19.1',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#196= IFCPOLYLINE((#200,#204,#208,#212,#216,#220,#224));
#200= IFCCARTESIANPOINT((0.,293.4494));
#204= IFCCARTESIANPOINT((25.4,318.8494));
#208= IFCCARTESIANPOINT((120.65,318.8494));
#212= IFCCARTESIANPOINT((120.65,0.));
#216= IFCCARTESIANPOINT((25.4,0.));
#220= IFCCARTESIANPOINT((0.,25.4));
#224= IFCCARTESIANPOINT((0.,293.4494));
#228= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL19.1',#196);
#229= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#232= IFCEXTRUDEDAREASOLID(#228,#229,#33,19.1);
#235= IFCCARTESIANPOINT((0.,0.,0.));
#240= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#232));
#246= IFCPRODUCTDEFINITIONSHAPE($,$,(#240));
#250= IFCCARTESIANPOINT((5240.3064,7626.35,-337.7327));
#254= IFCDIRECTION((1.,0.,0.));
#258= IFCDIRECTION((0.,1.,0.));
#262= IFCAXIS2PLACEMENT3D(#250,#254,#258);
#265= IFCLOCALPLACEMENT($,#262);
#268= IFCPLATE('13c6Dt0003gZ4nCpGmDZ4q',#65,'PLATE','PL19.1',$,#265,#246,$);
#287= IFCPOLYLINE((#291,#295,#299,#303,#307));
#291= IFCCARTESIANPOINT((0.,0.));
#295= IFCCARTESIANPOINT((0.,318.45248));
#299= IFCCARTESIANPOINT((99.695007,318.45248));
#303= IFCCARTESIANPOINT((99.695007,0.));
#307= IFCCARTESIANPOINT((0.,0.));
#311= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL9.5',#287);
#312= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#315= IFCEXTRUDEDAREASOLID(#311,#312,#33,9.5);
#318= IFCCARTESIANPOINT((0.,0.,0.));
#322= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#315));
#328= IFCPRODUCTDEFINITIONSHAPE($,$,(#322));
#332= IFCCARTESIANPOINT((4411.98,7492.5555,-342.9125));
#336= IFCDIRECTION((0.,0.,-1.));
#340= IFCDIRECTION((0.,1.,0.));
#344= IFCAXIS2PLACEMENT3D(#332,#336,#340);
#347= IFCLOCALPLACEMENT($,#344);
#350= IFCPLATE('13c6Dt0002ip4nCpGmDZ4o',#65,'PLATE','PL9.5',$,#347,#328,$);
#370= IFCSTRUCTURALPROFILEPROPERTIES('PL9.5',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#371= IFCPOLYLINE((#375,#379,#383,#387,#391));
#375= IFCCARTESIANPOINT((0.,0.));
#379= IFCCARTESIANPOINT((0.,318.45248));
#383= IFCCARTESIANPOINT((99.695007,318.45248));
#387= IFCCARTESIANPOINT((99.695007,0.));
#391= IFCCARTESIANPOINT((0.,0.));
#395= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL9.5',#371);
#396= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#399= IFCEXTRUDEDAREASOLID(#395,#396,#33,9.5);
#402= IFCCARTESIANPOINT((0.,0.,0.));
#406= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#399));
#412= IFCPRODUCTDEFINITIONSHAPE($,$,(#406));
#416= IFCCARTESIANPOINT((4411.98,7492.5555,-28.5875));
#420= IFCDIRECTION((0.,0.,-1.));
#424= IFCDIRECTION((0.,1.,0.));
#428= IFCAXIS2PLACEMENT3D(#416,#420,#424);
#431= IFCLOCALPLACEMENT($,#428);
#434= IFCPLATE('13c6Dt0002hp4nCpGmDZ4o',#65,'PLATE','PL9.5',$,#431,#412,$);
#453= IFCCARTESIANPOINT((0.,0.));
#457= IFCDIRECTION((1.,0.));
#461= IFCAXIS2PLACEMENT2D(#453,#457);
#464= IFCRECTANGLEPROFILEDEF(.AREA.,$,#461,9.5,234.9);
#465= IFCDIRECTION((0.,0.,-1.));
#469= IFCDIRECTION((-1.,0.,0.));
#473= IFCAXIS2PLACEMENT3D(#21,#469,#33);
#476= IFCEXTRUDEDAREASOLID(#464,#473,#465,304.8);
#479= IFCCARTESIANPOINT((0.,-117.45,-4.75));
#483= IFCBOUNDINGBOX(#479,304.8,234.9,9.5);
#486= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#476));
#492= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#483));
#499= IFCPRODUCTDEFINITIONSHAPE($,$,(#486,#492));
#503= IFCCARTESIANPOINT((4581.8225,7496.2,-342.9));
#507= IFCDIRECTION((-1.,0.,0.));
#511= IFCDIRECTION((0.,0.,1.));
#515= IFCAXIS2PLACEMENT3D(#503,#507,#511);
#518= IFCLOCALPLACEMENT($,#515);
#521= IFCCOLUMN('13c6Dt0002c34nCpGmDZ4o',#65,'PLATE','PL9.5X234.9',$,#518,#499,$);
#540= IFCSTRUCTURALPROFILEPROPERTIES('PL9.5X234.9',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#541= IFCCARTESIANPOINT((0.,0.));
#545= IFCDIRECTION((1.,0.));
#549= IFCAXIS2PLACEMENT2D(#541,#545);
#552= IFCISHAPEPROFILEDEF(.AREA.,$,#549,177.41901,402.84399,9.5249996,10.922,17.653);
#553= IFCDIRECTION((0.,0.,-1.));
#557= IFCDIRECTION((-1.,0.,0.));
#561= IFCAXIS2PLACEMENT3D(#21,#557,#33);
#564= IFCEXTRUDEDAREASOLID(#552,#561,#553,2278.7992);
#567= IFCCARTESIANPOINT((0.,-201.422,-88.709503));
#571= IFCBOUNDINGBOX(#567,778.79918,402.84399,177.41901);
#574= IFCCARTESIANPOINT((778.79918,301.422,0.));
#578= IFCDIRECTION((1.,0.,0.));
#582= IFCDIRECTION((0.,0.,-1.));
#586= IFCAXIS2PLACEMENT3D(#574,#578,#582);
#589= IFCPLANE(#586);
#592= IFCHALFSPACESOLID(#589,.F.);
#595= IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#564,#592);
#598= IFCSHAPEREPRESENTATION(#40,'Body','Clipping',(#595));
#604= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#571));
#610= IFCPRODUCTDEFINITIONSHAPE($,$,(#598,#604));
#614= IFCCARTESIANPOINT((4572.,6688.3563,-201.422));
#618= IFCDIRECTION((1.,0.,0.));
#623= IFCDIRECTION((0.,1.,0.));
#627= IFCAXIS2PLACEMENT3D(#614,#618,#623);
#630= IFCLOCALPLACEMENT($,#627);
#633= IFCBEAM('13c6Dt0001iZ4nCpGmDZ0v',#65,'BEAM','W16X36',$,#630,#610,$);
#652= IFCSTRUCTURALPROFILEPROPERTIES('W16X36',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#653= IFCCARTESIANPOINT((0.,0.));
#657= IFCDIRECTION((1.,0.));
#661= IFCAXIS2PLACEMENT2D(#653,#657);
#664= IFCLSHAPEPROFILEDEF(.AREA.,$,#661,101.6,88.900002,9.5249996,9.525,$,$,$,$);
#665= IFCDIRECTION((0.,0.,-1.));
#669= IFCDIRECTION((-1.,0.,0.));
#673= IFCAXIS2PLACEMENT3D(#21,#669,#33);
#676= IFCEXTRUDEDAREASOLID(#664,#673,#665,254.);
#679= IFCCARTESIANPOINT((0.,-50.799999,-44.450001));
#683= IFCBOUNDINGBOX(#679,254.,101.6,88.900002);
#686= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#676));
#692= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#683));
#698= IFCPRODUCTDEFINITIONSHAPE($,$,(#686,#692));
#702= IFCCARTESIANPOINT((4794.758,7562.85,-298.45));
#706= IFCDIRECTION((1.,0.,0.));
#710= IFCDIRECTION((0.,0.,1.));
#714= IFCAXIS2PLACEMENT3D(#702,#706,#710);
#717= IFCLOCALPLACEMENT($,#714);
#720= IFCCOLUMN('13c6Dt0001GZ4nCpGmDZ0u',#65,'ANGLE','L4X3-1/2X3/8',$,#717,#698,$);
#739= IFCSTRUCTURALPROFILEPROPERTIES('L4X3-1/2X3/8',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#740= IFCCARTESIANPOINT((0.,0.));
#744= IFCDIRECTION((1.,0.));
#748= IFCAXIS2PLACEMENT2D(#740,#744);
#752= IFCLSHAPEPROFILEDEF(.AREA.,$,#748,101.6,88.900002,9.5249996,9.525,$,$,$,$);
#753= IFCDIRECTION((0.,0.,-1.));
#757= IFCDIRECTION((-1.,0.,0.));
#761= IFCAXIS2PLACEMENT3D(#21,#757,#33);
#764= IFCEXTRUDEDAREASOLID(#752,#761,#753,254.);
#767= IFCCARTESIANPOINT((0.,-50.799999,-44.450001));
#771= IFCBOUNDINGBOX(#767,254.,101.6,88.900002);
#774= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#764));
#780= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#771));
#786= IFCPRODUCTDEFINITIONSHAPE($,$,(#774,#780));
#790= IFCCARTESIANPOINT((4794.758,7677.15,-44.45));
#794= IFCDIRECTION((1.,0.,0.));
#798= IFCDIRECTION((0.,0.,-1.));
#802= IFCAXIS2PLACEMENT3D(#790,#794,#798);
#805= IFCLOCALPLACEMENT($,#802);
#808= IFCBEAM('13c6Dt0001FZ4nCpGmDZ0u',#65,'ANGLE','L4X3-1/2X3/8',$,#805,#786,$);
#827= IFCCARTESIANPOINT((0.,0.));
#831= IFCDIRECTION((1.,0.));
#835= IFCAXIS2PLACEMENT2D(#827,#831);
#838= IFCLSHAPEPROFILEDEF(.AREA.,$,#835,101.6,101.60025,9.5249996,9.525,$,$,$,$);
#839= IFCDIRECTION((0.,0.,-1.));
#843= IFCDIRECTION((-1.,0.,0.));
#847= IFCAXIS2PLACEMENT3D(#21,#843,#33);
#850= IFCEXTRUDEDAREASOLID(#838,#847,#839,292.1);
#853= IFCCARTESIANPOINT((0.,-50.799999,-50.800125));
#857= IFCBOUNDINGBOX(#853,292.1,101.6,101.60025);
#860= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#850));
#866= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#857));
#872= IFCPRODUCTDEFINITIONSHAPE($,$,(#860,#866));
#876= IFCCARTESIANPOINT((4915.409,7564.4494,50.799999));
#881= IFCDIRECTION((0.,-1.,0.));
#885= IFCDIRECTION((1.,0.,0.));
#889= IFCAXIS2PLACEMENT3D(#876,#881,#885);
#892= IFCLOCALPLACEMENT($,#889);
#895= IFCBEAM('13c6Dt0000F34nCpGmDZ0s',#65,'BEAM','L4X4X3/8',$,#892,#872,$);
#914= IFCSTRUCTURALPROFILEPROPERTIES('L4X4X3/8',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#915= IFCCARTESIANPOINT((0.,0.));
#919= IFCDIRECTION((1.,0.));
#923= IFCAXIS2PLACEMENT2D(#915,#919);
#926= IFCLSHAPEPROFILEDEF(.AREA.,$,#923,101.6,101.60025,9.5249996,9.525,$,$,$,$);
#927= IFCDIRECTION((0.,0.,-1.));
#931= IFCDIRECTION((-1.,0.,0.));
#935= IFCAXIS2PLACEMENT3D(#21,#931,#33);
#938= IFCEXTRUDEDAREASOLID(#926,#935,#927,330.2);
#941= IFCCARTESIANPOINT((0.,-50.799999,-50.800125));
#945= IFCBOUNDINGBOX(#941,330.2,101.6,101.60025);
#948= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#938));
#954= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#945));
#960= IFCPRODUCTDEFINITIONSHAPE($,$,(#948,#954));
#964= IFCCARTESIANPOINT((4801.108,7564.4494,495.301));
#968= IFCDIRECTION((0.,-1.,0.));
#972= IFCDIRECTION((0.,0.,-1.));
#976= IFCAXIS2PLACEMENT3D(#964,#968,#972);
#979= IFCLOCALPLACEMENT($,#976);
#982= IFCBEAM('13c6Dt00006J4nCpGmDZ0s',#65,'BEAM','L4X4X3/8',$,#979,#960,$);
#1001= IFCPOLYLINE((#1006,#1010,#1014,#1018,#1022,#1026));
#1006= IFCCARTESIANPOINT((0.,0.));
#1010= IFCCARTESIANPOINT((-0.001,486.84845));
#1014= IFCCARTESIANPOINT((369.07135,486.84845));
#1018= IFCCARTESIANPOINT((512.75543,343.16437));
#1022= IFCCARTESIANPOINT((512.75543,0.));
#1026= IFCCARTESIANPOINT((0.,0.));
#1030= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL9.5',#1001);
#1031= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#1034= IFCEXTRUDEDAREASOLID(#1030,#1031,#33,9.5);
#1037= IFCCARTESIANPOINT((-0.0010532137,0.,-4.75));
#1041= IFCBOUNDINGBOX(#1037,486.8495,512.75614,9.5);
#1044= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1034));
#1050= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1041));
#1056= IFCPRODUCTDEFINITIONSHAPE($,$,(#1044,#1050));
#1060= IFCCARTESIANPOINT((4763.008,7615.262,12.701));
#1064= IFCDIRECTION((0.,1.,0.));
#1068= IFCDIRECTION((0.,0.,1.));
#1072= IFCAXIS2PLACEMENT3D(#1060,#1064,#1068);
#1075= IFCLOCALPLACEMENT($,#1072);
#1078= IFCPLATE('13c6Dt00005J4nCpGmDZ0s',#65,'PLATE','PL9.5',$,#1075,#1056,$);
#1097= IFCCARTESIANPOINT((0.,0.));
#1101= IFCDIRECTION((1.,0.));
#1105= IFCAXIS2PLACEMENT2D(#1097,#1101);
#1108= IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,$,#1105,152.39999,152.39999,9.5249996,9.5250004,19.05);
#1109= IFCDIRECTION((0.,0.,-1.));
#1113= IFCDIRECTION((-1.,0.,0.));
#1117= IFCAXIS2PLACEMENT3D(#1130,#1113,#33);
#1120= IFCEXTRUDEDAREASOLID(#1108,#1117,#1109,2177.4228);
#1123= IFCCARTESIANPOINT((-1.2141754E-10,-76.199997,-76.199997));
#1127= IFCBOUNDINGBOX(#1123,677.4228,152.39999,152.39999);
#1130= IFCCARTESIANPOINT((-1500.,0.,0.));
#1135= IFCCARTESIANPOINT((-1.0913936E-10,-9.0949470E-12,4.7379999));
#1139= IFCDIRECTION((-1.,-1.6052583E-13,0.));
#1143= IFCDIRECTION((-1.6052583E-13,1.,0.));
#1147= IFCAXIS2PLACEMENT3D(#1135,#1139,#1143);
#1150= IFCPLANE(#1147);
#1153= IFCHALFSPACESOLID(#1150,.F.);
#1156= IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#1120,#1153);
#1159= IFCSHAPEREPRESENTATION(#40,'Body','Clipping',(#1156));
#1165= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1127));
#1171= IFCPRODUCTDEFINITIONSHAPE($,$,(#1159,#1165));
#1175= IFCCARTESIANPOINT((5007.3895,7620.,282.98953));
#1179= IFCDIRECTION((0.,-1.,0.));
#1183= IFCDIRECTION((0.70710678,0.,0.70710678));
#1187= IFCAXIS2PLACEMENT3D(#1175,#1179,#1183);
#1190= IFCLOCALPLACEMENT($,#1187);
#1193= IFCBEAM('13c6Dt00003p4nCpGmDZ0r',#65,'BRACE','TS6X6X3/8',$,#1190,#1171,$);
#1212= IFCCARTESIANPOINT((5153.6546,7620.012,307.34937));
#1216= IFCDIRECTION((0.,-1.,0.));
#1220= IFCDIRECTION((-0.70710678,0.,0.70710678));
#1224= IFCAXIS2PLACEMENT3D(#1212,#1216,#1220);
#1227= IFCLOCALPLACEMENT($,#1224);
#1230= IFCCARTESIANPOINT((0.,0.));
#1234= IFCDIRECTION((1.,0.));
#1238= IFCAXIS2PLACEMENT2D(#1230,#1234);
#1241= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1238,9.5,266.7);
#1242= IFCDIRECTION((0.,0.,-1.));
#1246= IFCDIRECTION((-1.,0.,0.));
#1250= IFCAXIS2PLACEMENT3D(#21,#1246,#33);
#1253= IFCEXTRUDEDAREASOLID(#1241,#1250,#1242,172.39997);
#1256= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1253));
#1263= IFCPRODUCTDEFINITIONSHAPE($,$,(#1256));
#1267= IFCOPENINGELEMENT('13c6Dt0000Ip4nCpGmDZ0s',#65,$,$,$,#1227,#1263,$);
#1288= IFCRELVOIDSELEMENT('3gz_1FcMHExhEMJzH8zl$M',#65,$,$,#1193,#1267);
#1289= IFCSTRUCTURALPROFILEPROPERTIES('TS6X6X3/8',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#1290= IFCCARTESIANPOINT((0.,0.));
#1294= IFCDIRECTION((1.,0.));
#1298= IFCAXIS2PLACEMENT2D(#1290,#1294);
#1301= IFCISHAPEPROFILEDEF(.AREA.,$,#1298,254.88901,356.616,12.7,18.288,21.3995);
#1302= IFCDIRECTION((0.,0.,-1.));
#1306= IFCDIRECTION((-1.,0.,0.));
#1310= IFCAXIS2PLACEMENT3D(#1323,#1306,#33);
#1313= IFCEXTRUDEDAREASOLID(#1301,#1310,#1302,2768.2595);
#1316= IFCCARTESIANPOINT((0.,-178.308,-127.4445));
#1320= IFCBOUNDINGBOX(#1316,1268.2595,356.616,254.88901);
#1323= IFCCARTESIANPOINT((-1500.,0.,0.));
#1327= IFCCARTESIANPOINT((0.,278.308,0.));
#1331= IFCDIRECTION((-1.,0.,0.));
#1335= IFCDIRECTION((0.,0.,1.));
#1339= IFCAXIS2PLACEMENT3D(#1327,#1331,#1335);
#1342= IFCPLANE(#1339);
#1345= IFCHALFSPACESOLID(#1342,.F.);
#1348= IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#1313,#1345);
#1351= IFCSHAPEREPRESENTATION(#40,'Body','Clipping',(#1348));
#1357= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1320));
#1363= IFCPRODUCTDEFINITIONSHAPE($,$,(#1351,#1357));
#1367= IFCCARTESIANPOINT((4763.008,7620.,-178.308));
#1371= IFCDIRECTION((0.,-1.,0.));
#1375= IFCDIRECTION((1.,0.,-7.2832534E-15));
#1379= IFCAXIS2PLACEMENT3D(#1367,#1371,#1375);
#1382= IFCLOCALPLACEMENT($,#1379);
#1385= IFCBEAM('13c6Dt00002p4nCpGmDZ0r',#65,'BEAM','W14X68',$,#1382,#1363,$);
#1405= IFCSTRUCTURALPROFILEPROPERTIES('W14X68',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#1406= IFCCARTESIANPOINT((0.,0.));
#1410= IFCDIRECTION((1.,0.));
#1414= IFCAXIS2PLACEMENT2D(#1406,#1410);
#1417= IFCISHAPEPROFILEDEF(.AREA.,$,#1414,254.88901,356.616,12.7,18.288,21.3995);
#1418= IFCDIRECTION((0.,0.,-1.));
#1422= IFCDIRECTION((-1.,0.,0.));
#1426= IFCAXIS2PLACEMENT3D(#21,#1422,#33);
#1429= IFCEXTRUDEDAREASOLID(#1417,#1426,#1418,1524.);
#1432= IFCCARTESIANPOINT((0.,-178.308,-127.4445));
#1436= IFCBOUNDINGBOX(#1432,1524.,356.616,254.88901);
#1439= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1429));
#1445= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1436));
#1451= IFCPRODUCTDEFINITIONSHAPE($,$,(#1439,#1445));
#1455= IFCCARTESIANPOINT((4572.,7620.,-609.6));
#1459= IFCDIRECTION((0.,-1.,0.));
#1463= IFCDIRECTION((7.1613756E-15,0.,1.));
#1467= IFCAXIS2PLACEMENT3D(#1455,#1459,#1463);
#1470= IFCLOCALPLACEMENT($,#1467);
#1473= IFCCOLUMN('13c6Dt00001p4nCpGmDZ0q',#65,'COLUMN','W14X68',$,#1470,#1451,$);
#1492= IFCCARTESIANPOINT((4661.154,7490.05,308.83104));
#1496= IFCDIRECTION((0.,1.,0.));
#1500= IFCDIRECTION((-1.,0.,7.0134555E-15));
#1504= IFCAXIS2PLACEMENT3D(#1492,#1496,#1500);
#1507= IFCLOCALPLACEMENT($,#1504);
#1510= IFCPOLYLINE((#1514,#1519,#1523,#1527,#1531,#1535,#1539,#1543,#1547,#1551,#1555,#1559,#1563,#1567,#1571,#1575,#1579,#1583,#1587,#1591,#1595,#1599,#1603,#1607,#1611,#1615,#1619,#1623,#1627,#1631,#1635,#1639,#1643,#1648,#1652,#1656,#1660));
#1514= IFCCARTESIANPOINT((0.38429439,16.098194));
#1519= IFCCARTESIANPOINT((0.,20.));
#1523= IFCCARTESIANPOINT((0.,336.616));
#1527= IFCCARTESIANPOINT((0.38429439,340.5178));
#1531= IFCCARTESIANPOINT((1.5224093,344.26967));
#1535= IFCCARTESIANPOINT((3.3706078,347.7274));
#1539= IFCCARTESIANPOINT((5.8578644,350.75813));
#1543= IFCCARTESIANPOINT((8.8885953,353.24539));
#1547= IFCCARTESIANPOINT((12.346331,355.09359));
#1551= IFCCARTESIANPOINT((16.098194,356.2317));
#1555= IFCCARTESIANPOINT((20.,356.616));
#1559= IFCCARTESIANPOINT((158.308,356.616));
#1563= IFCCARTESIANPOINT((162.20981,356.2317));
#1567= IFCCARTESIANPOINT((165.96167,355.09359));
#1571= IFCCARTESIANPOINT((169.4194,353.24539));
#1575= IFCCARTESIANPOINT((172.45013,350.75813));
#1579= IFCCARTESIANPOINT((174.93739,347.7274));
#1583= IFCCARTESIANPOINT((176.78559,344.26967));
#1587= IFCCARTESIANPOINT((177.9237,340.5178));
#1591= IFCCARTESIANPOINT((178.308,336.616));
#1595= IFCCARTESIANPOINT((178.308,20.));
#1599= IFCCARTESIANPOINT((177.9237,16.098194));
#1603= IFCCARTESIANPOINT((176.78559,12.346331));
#1607= IFCCARTESIANPOINT((174.93739,8.8885953));
#1611= IFCCARTESIANPOINT((172.45013,5.8578644));
#1615= IFCCARTESIANPOINT((169.4194,3.3706078));
#1619= IFCCARTESIANPOINT((165.96167,1.5224093));
#1623= IFCCARTESIANPOINT((162.20981,0.38429439));
#1627= IFCCARTESIANPOINT((158.308,0.));
#1631= IFCCARTESIANPOINT((20.,0.));
#1635= IFCCARTESIANPOINT((16.098194,0.38429439));
#1639= IFCCARTESIANPOINT((12.346331,1.5224093));
#1643= IFCCARTESIANPOINT((8.8885953,3.3706078));
#1648= IFCCARTESIANPOINT((5.8578644,5.8578644));
#1652= IFCCARTESIANPOINT((3.3706078,8.8885953));
#1656= IFCCARTESIANPOINT((1.5224093,12.346331));
#1660= IFCCARTESIANPOINT((0.38429439,16.098194));
#1664= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL259.9',#1510);
#1665= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#1668= IFCEXTRUDEDAREASOLID(#1664,#1665,#33,259.9);
#1671= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1668));
#1677= IFCPRODUCTDEFINITIONSHAPE($,$,(#1671));
#1681= IFCOPENINGELEMENT('13c6Dt0002m34nCpGmDZ4o',#65,$,$,$,#1507,#1677,$);
#1702= IFCRELVOIDSELEMENT('2WI1gpRhj1dwB5Pft5vGvO',#65,$,$,#1473,#1681);
#1703= IFCRELASSOCIATESMATERIAL('1GOaWfy957kRCtp2R28$a9',#9,$,$,(#1193),#59);
#1705= IFCRELASSOCIATESMATERIAL('3Vqwp2DmT3TeKWHZyFzO7N',#9,$,$,(#1473,#1385,#633),#56);
#1707= IFCRELASSOCIATESMATERIAL('0SMrmHf_5BRAYDVih2VNTN',#9,$,$,(#1078,#982,#895,#808,#720,#521,#434,#350,#268,#174),#53);
#1709= IFCRELASSOCIATESPROFILEPROPERTIES('2mzP0x3pj2GwUm7Wy7Xfs0',#9,$,$,(#633),#652,$,$);
#1711= IFCRELASSOCIATESPROFILEPROPERTIES('1iUJLoCsfD6ug6keUDRGVW',#9,$,$,(#808),#739,$,$);
#1713= IFCRELASSOCIATESPROFILEPROPERTIES('1LidMEK_vEQuG8Js1MD1ND',#9,$,$,(#895,#982),#914,$,$);
#1715= IFCRELASSOCIATESPROFILEPROPERTIES('22dp9maVb0sAxZG8F2xTIR',#9,$,$,(#1193),#1289,$,$);
#1717= IFCRELASSOCIATESPROFILEPROPERTIES('36LPEeuXn6VgX3frK_urjy',#9,$,$,(#1385),#1405,$,$);
ENDSEC;
END-ISO-10303-21;
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('IFC2X3.exp'),'2;1');
FILE_NAME('C:\\TeklaStructuresModels\\Acis_Sat\\plate_steel_example-tek_1fix.ifc','2006-05-12T10:07:38',('Steel2 macro version:12.0 Build:179423,2.5.2006'),('Structural Designer'),'EXPRESS Data Manager version:20040806','Tekla Structures 12.0','');
FILE_SCHEMA(('IFC2X3'));
ENDSEC;
DATA;
#1= IFCPERSON('TEKLAAD/lli','Undefined',$,$,$,$,$,$);
#3= IFCORGANIZATION($,'Tekla Corporation',$,$,$);
#7= IFCPERSONANDORGANIZATION(#1,#3,$);
#8= IFCAPPLICATION(#3,'12.0','Tekla Structures','Multi material modeling');
#9= IFCOWNERHISTORY(#7,#8,$,.ADDED.,$,$,$,1147417657);
#10= IFCSIUNIT(*,.LENGTHUNIT.,.MILLI.,.METRE.);
#11= IFCSIUNIT(*,.AREAUNIT.,$,.SQUARE_METRE.);
#12= IFCSIUNIT(*,.VOLUMEUNIT.,$,.CUBIC_METRE.);
#13= IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.);
#14= IFCSIUNIT(*,.SOLIDANGLEUNIT.,$,.STERADIAN.);
#15= IFCSIUNIT(*,.MASSUNIT.,.KILO.,.GRAM.);
#16= IFCSIUNIT(*,.TIMEUNIT.,$,.SECOND.);
#17= IFCSIUNIT(*,.THERMODYNAMICTEMPERATUREUNIT.,$,.DEGREE_CELSIUS.);
#18= IFCSIUNIT(*,.LUMINOUSINTENSITYUNIT.,$,.LUMEN.);
#19= IFCUNITASSIGNMENT((#10,#11,#12,#13,#14,#15,#16,#17,#18));
#21= IFCCARTESIANPOINT((0.,0.,0.));
#25= IFCDIRECTION((1.,0.,0.));
#29= IFCDIRECTION((0.,1.,0.));
#33= IFCDIRECTION((0.,0.,1.));
#37= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#40= IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Design',3,1.0000000E-5,#37,$);
#43= IFCGEOMETRICREPRESENTATIONCONTEXT('Plan','Sketch',3,1.0000000E-5,#37,$);
#46= IFCPROJECT('2gPUQOiNz2FR1H6lWQ8j0k',#9,'PROJ: NAME','Description','Object type','LongName','Phase',(#40,#43),#19);
#53= IFCMATERIAL('A36');
#56= IFCMATERIAL('A992');
#59= IFCMATERIAL('A500-GR.B');
#62= IFCPERSON('TEKLAAD/chke','Undefined',$,$,$,$,$,$);
#64= IFCPERSONANDORGANIZATION(#62,#3,$);
#65= IFCOWNERHISTORY(#64,#8,$,.ADDED.,$,$,$,1147417657);
#66= IFCSITE('1_WapmNXfFdOqQ3garaDJn',#65,'Undefined',$,$,$,$,$,.ELEMENT.,$,$,$,$,$);
#76= IFCRELAGGREGATES('36yaCMhuT2DxfpF3ieGira',#65,$,$,#46,(#66));
#78= IFCBUILDING('2iHnVT4$n9JQE18R_2cJEI',#65,'Undefined',$,$,$,$,$,.ELEMENT.,$,$,$);
#88= IFCRELAGGREGATES('0A543zcq1Fdv_lsrHHX8Kv',#65,$,$,#66,(#78));
#90= IFCBUILDINGSTOREY('0UguZM0$L8L9OUA114_ZEd',#65,'Undefined',$,$,$,$,$,.ELEMENT.,$);
#100= IFCRELAGGREGATES('09$Ux3Y999qBeEKV8wCsfA',#65,$,$,#78,(#90));
#102= IFCPOLYLINE((#106,#111,#115,#119,#123,#127,#131));
#106= IFCCARTESIANPOINT((0.,318.8494));
#111= IFCCARTESIANPOINT((95.250002,318.8494));
#115= IFCCARTESIANPOINT((120.65,293.4494));
#119= IFCCARTESIANPOINT((120.65,25.4));
#123= IFCCARTESIANPOINT((95.250002,0.));
#127= IFCCARTESIANPOINT((0.,0.));
#131= IFCCARTESIANPOINT((0.,318.8494));
#135= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL19.1',#102);
#136= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#139= IFCEXTRUDEDAREASOLID(#135,#136,#33,19.1);
#142= IFCCARTESIANPOINT((0.,0.,0.));
#146= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#139));
#152= IFCPRODUCTDEFINITIONSHAPE($,$,(#146));
#156= IFCCARTESIANPOINT((5240.3064,7493.,-337.7327));
#160= IFCDIRECTION((1.,0.,0.));
#164= IFCDIRECTION((0.,1.,0.));
#168= IFCAXIS2PLACEMENT3D(#156,#160,#164);
#171= IFCLOCALPLACEMENT($,#168);
#174= IFCPLATE('13c6Dt0003iJ4nCpGmDZ4q',#65,'PLATE','PL19.1',$,#171,#152,$);
#193= IFCRELCONTAINEDINSPATIALSTRUCTURE('0119IaMyb8cxCzo7l7Qnbw',#65,$,$,(#174,#268,#350,#434,#521,#633,#720,#808,#895,#982,#1078,#1193,#1385,#1473),#90);
#195= IFCSTRUCTURALPROFILEPROPERTIES('PL19.1',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#196= IFCPOLYLINE((#200,#204,#208,#212,#216,#220,#224));
#200= IFCCARTESIANPOINT((0.,293.4494));
#204= IFCCARTESIANPOINT((25.4,318.8494));
#208= IFCCARTESIANPOINT((120.65,318.8494));
#212= IFCCARTESIANPOINT((120.65,0.));
#216= IFCCARTESIANPOINT((25.4,0.));
#220= IFCCARTESIANPOINT((0.,25.4));
#224= IFCCARTESIANPOINT((0.,293.4494));
#228= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL19.1',#196);
#229= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#232= IFCEXTRUDEDAREASOLID(#228,#229,#33,19.1);
#235= IFCCARTESIANPOINT((0.,0.,0.));
#240= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#232));
#246= IFCPRODUCTDEFINITIONSHAPE($,$,(#240));
#250= IFCCARTESIANPOINT((5240.3064,7626.35,-337.7327));
#254= IFCDIRECTION((1.,0.,0.));
#258= IFCDIRECTION((0.,1.,0.));
#262= IFCAXIS2PLACEMENT3D(#250,#254,#258);
#265= IFCLOCALPLACEMENT($,#262);
#268= IFCPLATE('13c6Dt0003gZ4nCpGmDZ4q',#65,'PLATE','PL19.1',$,#265,#246,$);
#287= IFCPOLYLINE((#291,#295,#299,#303,#307));
#291= IFCCARTESIANPOINT((0.,0.));
#295= IFCCARTESIANPOINT((0.,318.45248));
#299= IFCCARTESIANPOINT((99.695007,318.45248));
#303= IFCCARTESIANPOINT((99.695007,0.));
#307= IFCCARTESIANPOINT((0.,0.));
#311= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL9.5',#287);
#312= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#315= IFCEXTRUDEDAREASOLID(#311,#312,#33,9.5);
#318= IFCCARTESIANPOINT((0.,0.,0.));
#322= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#315));
#328= IFCPRODUCTDEFINITIONSHAPE($,$,(#322));
#332= IFCCARTESIANPOINT((4411.98,7492.5555,-342.9125));
#336= IFCDIRECTION((0.,0.,-1.));
#340= IFCDIRECTION((0.,1.,0.));
#344= IFCAXIS2PLACEMENT3D(#332,#336,#340);
#347= IFCLOCALPLACEMENT($,#344);
#350= IFCPLATE('13c6Dt0002ip4nCpGmDZ4o',#65,'PLATE','PL9.5',$,#347,#328,$);
#370= IFCSTRUCTURALPROFILEPROPERTIES('PL9.5',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#371= IFCPOLYLINE((#375,#379,#383,#387,#391));
#375= IFCCARTESIANPOINT((0.,0.));
#379= IFCCARTESIANPOINT((0.,318.45248));
#383= IFCCARTESIANPOINT((99.695007,318.45248));
#387= IFCCARTESIANPOINT((99.695007,0.));
#391= IFCCARTESIANPOINT((0.,0.));
#395= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL9.5',#371);
#396= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#399= IFCEXTRUDEDAREASOLID(#395,#396,#33,9.5);
#402= IFCCARTESIANPOINT((0.,0.,0.));
#406= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#399));
#412= IFCPRODUCTDEFINITIONSHAPE($,$,(#406));
#416= IFCCARTESIANPOINT((4411.98,7492.5555,-28.5875));
#420= IFCDIRECTION((0.,0.,-1.));
#424= IFCDIRECTION((0.,1.,0.));
#428= IFCAXIS2PLACEMENT3D(#416,#420,#424);
#431= IFCLOCALPLACEMENT($,#428);
#434= IFCPLATE('13c6Dt0002hp4nCpGmDZ4o',#65,'PLATE','PL9.5',$,#431,#412,$);
#453= IFCCARTESIANPOINT((0.,0.));
#457= IFCDIRECTION((1.,0.));
#461= IFCAXIS2PLACEMENT2D(#453,#457);
#464= IFCRECTANGLEPROFILEDEF(.AREA.,$,#461,9.5,234.9);
#465= IFCDIRECTION((0.,0.,-1.));
#469= IFCDIRECTION((-1.,0.,0.));
#473= IFCAXIS2PLACEMENT3D(#21,#469,#33);
#476= IFCEXTRUDEDAREASOLID(#464,#473,#465,304.8);
#479= IFCCARTESIANPOINT((0.,-117.45,-4.75));
#483= IFCBOUNDINGBOX(#479,304.8,234.9,9.5);
#486= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#476));
#492= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#483));
#499= IFCPRODUCTDEFINITIONSHAPE($,$,(#486,#492));
#503= IFCCARTESIANPOINT((4581.8225,7496.2,-342.9));
#507= IFCDIRECTION((-1.,0.,0.));
#511= IFCDIRECTION((0.,0.,1.));
#515= IFCAXIS2PLACEMENT3D(#503,#507,#511);
#518= IFCLOCALPLACEMENT($,#515);
#521= IFCCOLUMN('13c6Dt0002c34nCpGmDZ4o',#65,'PLATE','PL9.5X234.9',$,#518,#499,$);
#540= IFCSTRUCTURALPROFILEPROPERTIES('PL9.5X234.9',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#541= IFCCARTESIANPOINT((0.,0.));
#545= IFCDIRECTION((1.,0.));
#549= IFCAXIS2PLACEMENT2D(#541,#545);
#552= IFCISHAPEPROFILEDEF(.AREA.,$,#549,177.41901,402.84399,9.5249996,10.922,17.653);
#553= IFCDIRECTION((0.,0.,-1.));
#557= IFCDIRECTION((-1.,0.,0.));
#561= IFCAXIS2PLACEMENT3D(#21,#557,#33);
#564= IFCEXTRUDEDAREASOLID(#552,#561,#553,2278.7992);
#567= IFCCARTESIANPOINT((0.,-201.422,-88.709503));
#571= IFCBOUNDINGBOX(#567,778.79918,402.84399,177.41901);
#574= IFCCARTESIANPOINT((778.79918,301.422,0.));
#578= IFCDIRECTION((1.,0.,0.));
#582= IFCDIRECTION((0.,0.,-1.));
#586= IFCAXIS2PLACEMENT3D(#574,#578,#582);
#589= IFCPLANE(#586);
#592= IFCHALFSPACESOLID(#589,.F.);
#595= IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#564,#592);
#598= IFCSHAPEREPRESENTATION(#40,'Body','Clipping',(#595));
#604= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#571));
#610= IFCPRODUCTDEFINITIONSHAPE($,$,(#598,#604));
#614= IFCCARTESIANPOINT((4572.,6688.3563,-201.422));
#618= IFCDIRECTION((1.,0.,0.));
#623= IFCDIRECTION((0.,1.,0.));
#627= IFCAXIS2PLACEMENT3D(#614,#618,#623);
#630= IFCLOCALPLACEMENT($,#627);
#633= IFCBEAM('13c6Dt0001iZ4nCpGmDZ0v',#65,'BEAM','W16X36',$,#630,#610,$);
#652= IFCSTRUCTURALPROFILEPROPERTIES('W16X36',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#653= IFCCARTESIANPOINT((0.,0.));
#657= IFCDIRECTION((1.,0.));
#661= IFCAXIS2PLACEMENT2D(#653,#657);
#664= IFCLSHAPEPROFILEDEF(.AREA.,$,#661,101.6,88.900002,9.5249996,9.525,$,$,$,$);
#665= IFCDIRECTION((0.,0.,-1.));
#669= IFCDIRECTION((-1.,0.,0.));
#673= IFCAXIS2PLACEMENT3D(#21,#669,#33);
#676= IFCEXTRUDEDAREASOLID(#664,#673,#665,254.);
#679= IFCCARTESIANPOINT((0.,-50.799999,-44.450001));
#683= IFCBOUNDINGBOX(#679,254.,101.6,88.900002);
#686= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#676));
#692= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#683));
#698= IFCPRODUCTDEFINITIONSHAPE($,$,(#686,#692));
#702= IFCCARTESIANPOINT((4794.758,7562.85,-298.45));
#706= IFCDIRECTION((1.,0.,0.));
#710= IFCDIRECTION((0.,0.,1.));
#714= IFCAXIS2PLACEMENT3D(#702,#706,#710);
#717= IFCLOCALPLACEMENT($,#714);
#720= IFCCOLUMN('13c6Dt0001GZ4nCpGmDZ0u',#65,'ANGLE','L4X3-1/2X3/8',$,#717,#698,$);
#739= IFCSTRUCTURALPROFILEPROPERTIES('L4X3-1/2X3/8',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#740= IFCCARTESIANPOINT((0.,0.));
#744= IFCDIRECTION((1.,0.));
#748= IFCAXIS2PLACEMENT2D(#740,#744);
#752= IFCLSHAPEPROFILEDEF(.AREA.,$,#748,101.6,88.900002,9.5249996,9.525,$,$,$,$);
#753= IFCDIRECTION((0.,0.,-1.));
#757= IFCDIRECTION((-1.,0.,0.));
#761= IFCAXIS2PLACEMENT3D(#21,#757,#33);
#764= IFCEXTRUDEDAREASOLID(#752,#761,#753,254.);
#767= IFCCARTESIANPOINT((0.,-50.799999,-44.450001));
#771= IFCBOUNDINGBOX(#767,254.,101.6,88.900002);
#774= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#764));
#780= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#771));
#786= IFCPRODUCTDEFINITIONSHAPE($,$,(#774,#780));
#790= IFCCARTESIANPOINT((4794.758,7677.15,-44.45));
#794= IFCDIRECTION((1.,0.,0.));
#798= IFCDIRECTION((0.,0.,-1.));
#802= IFCAXIS2PLACEMENT3D(#790,#794,#798);
#805= IFCLOCALPLACEMENT($,#802);
#808= IFCBEAM('13c6Dt0001FZ4nCpGmDZ0u',#65,'ANGLE','L4X3-1/2X3/8',$,#805,#786,$);
#827= IFCCARTESIANPOINT((0.,0.));
#831= IFCDIRECTION((1.,0.));
#835= IFCAXIS2PLACEMENT2D(#827,#831);
#838= IFCLSHAPEPROFILEDEF(.AREA.,$,#835,101.6,101.60025,9.5249996,9.525,$,$,$,$);
#839= IFCDIRECTION((0.,0.,-1.));
#843= IFCDIRECTION((-1.,0.,0.));
#847= IFCAXIS2PLACEMENT3D(#21,#843,#33);
#850= IFCEXTRUDEDAREASOLID(#838,#847,#839,292.1);
#853= IFCCARTESIANPOINT((0.,-50.799999,-50.800125));
#857= IFCBOUNDINGBOX(#853,292.1,101.6,101.60025);
#860= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#850));
#866= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#857));
#872= IFCPRODUCTDEFINITIONSHAPE($,$,(#860,#866));
#876= IFCCARTESIANPOINT((4915.409,7564.4494,50.799999));
#881= IFCDIRECTION((0.,-1.,0.));
#885= IFCDIRECTION((1.,0.,0.));
#889= IFCAXIS2PLACEMENT3D(#876,#881,#885);
#892= IFCLOCALPLACEMENT($,#889);
#895= IFCBEAM('13c6Dt0000F34nCpGmDZ0s',#65,'BEAM','L4X4X3/8',$,#892,#872,$);
#914= IFCSTRUCTURALPROFILEPROPERTIES('L4X4X3/8',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#915= IFCCARTESIANPOINT((0.,0.));
#919= IFCDIRECTION((1.,0.));
#923= IFCAXIS2PLACEMENT2D(#915,#919);
#926= IFCLSHAPEPROFILEDEF(.AREA.,$,#923,101.6,101.60025,9.5249996,9.525,$,$,$,$);
#927= IFCDIRECTION((0.,0.,-1.));
#931= IFCDIRECTION((-1.,0.,0.));
#935= IFCAXIS2PLACEMENT3D(#21,#931,#33);
#938= IFCEXTRUDEDAREASOLID(#926,#935,#927,330.2);
#941= IFCCARTESIANPOINT((0.,-50.799999,-50.800125));
#945= IFCBOUNDINGBOX(#941,330.2,101.6,101.60025);
#948= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#938));
#954= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#945));
#960= IFCPRODUCTDEFINITIONSHAPE($,$,(#948,#954));
#964= IFCCARTESIANPOINT((4801.108,7564.4494,495.301));
#968= IFCDIRECTION((0.,-1.,0.));
#972= IFCDIRECTION((0.,0.,-1.));
#976= IFCAXIS2PLACEMENT3D(#964,#968,#972);
#979= IFCLOCALPLACEMENT($,#976);
#982= IFCBEAM('13c6Dt00006J4nCpGmDZ0s',#65,'BEAM','L4X4X3/8',$,#979,#960,$);
#1001= IFCPOLYLINE((#1006,#1010,#1014,#1018,#1022,#1026));
#1006= IFCCARTESIANPOINT((0.,0.));
#1010= IFCCARTESIANPOINT((-0.001,486.84845));
#1014= IFCCARTESIANPOINT((369.07135,486.84845));
#1018= IFCCARTESIANPOINT((512.75543,343.16437));
#1022= IFCCARTESIANPOINT((512.75543,0.));
#1026= IFCCARTESIANPOINT((0.,0.));
#1030= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL9.5',#1001);
#1031= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#1034= IFCEXTRUDEDAREASOLID(#1030,#1031,#33,9.5);
#1037= IFCCARTESIANPOINT((-0.0010532137,0.,-4.75));
#1041= IFCBOUNDINGBOX(#1037,486.8495,512.75614,9.5);
#1044= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1034));
#1050= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1041));
#1056= IFCPRODUCTDEFINITIONSHAPE($,$,(#1044,#1050));
#1060= IFCCARTESIANPOINT((4763.008,7615.262,12.701));
#1064= IFCDIRECTION((0.,1.,0.));
#1068= IFCDIRECTION((0.,0.,1.));
#1072= IFCAXIS2PLACEMENT3D(#1060,#1064,#1068);
#1075= IFCLOCALPLACEMENT($,#1072);
#1078= IFCPLATE('13c6Dt00005J4nCpGmDZ0s',#65,'PLATE','PL9.5',$,#1075,#1056,$);
#1097= IFCCARTESIANPOINT((0.,0.));
#1101= IFCDIRECTION((1.,0.));
#1105= IFCAXIS2PLACEMENT2D(#1097,#1101);
#1108= IFCRECTANGLEHOLLOWPROFILEDEF(.AREA.,$,#1105,152.39999,152.39999,9.5249996,9.5250004,19.05);
#1109= IFCDIRECTION((0.,0.,-1.));
#1113= IFCDIRECTION((-1.,0.,0.));
#1117= IFCAXIS2PLACEMENT3D(#1130,#1113,#33);
#1120= IFCEXTRUDEDAREASOLID(#1108,#1117,#1109,2177.4228);
#1123= IFCCARTESIANPOINT((-1.2141754E-10,-76.199997,-76.199997));
#1127= IFCBOUNDINGBOX(#1123,677.4228,152.39999,152.39999);
#1130= IFCCARTESIANPOINT((-1500.,0.,0.));
#1135= IFCCARTESIANPOINT((-1.0913936E-10,-9.0949470E-12,4.7379999));
#1139= IFCDIRECTION((-1.,-1.6052583E-13,0.));
#1143= IFCDIRECTION((-1.6052583E-13,1.,0.));
#1147= IFCAXIS2PLACEMENT3D(#1135,#1139,#1143);
#1150= IFCPLANE(#1147);
#1153= IFCHALFSPACESOLID(#1150,.F.);
#1156= IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#1120,#1153);
#1159= IFCSHAPEREPRESENTATION(#40,'Body','Clipping',(#1156));
#1165= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1127));
#1171= IFCPRODUCTDEFINITIONSHAPE($,$,(#1159,#1165));
#1175= IFCCARTESIANPOINT((5007.3895,7620.,282.98953));
#1179= IFCDIRECTION((0.,-1.,0.));
#1183= IFCDIRECTION((0.70710678,0.,0.70710678));
#1187= IFCAXIS2PLACEMENT3D(#1175,#1179,#1183);
#1190= IFCLOCALPLACEMENT($,#1187);
#1193= IFCBEAM('13c6Dt00003p4nCpGmDZ0r',#65,'BRACE','TS6X6X3/8',$,#1190,#1171,$);
#1212= IFCCARTESIANPOINT((5153.6546,7620.012,307.34937));
#1216= IFCDIRECTION((0.,-1.,0.));
#1220= IFCDIRECTION((-0.70710678,0.,0.70710678));
#1224= IFCAXIS2PLACEMENT3D(#1212,#1216,#1220);
#1227= IFCLOCALPLACEMENT($,#1224);
#1230= IFCCARTESIANPOINT((0.,0.));
#1234= IFCDIRECTION((1.,0.));
#1238= IFCAXIS2PLACEMENT2D(#1230,#1234);
#1241= IFCRECTANGLEPROFILEDEF(.AREA.,$,#1238,9.5,266.7);
#1242= IFCDIRECTION((0.,0.,-1.));
#1246= IFCDIRECTION((-1.,0.,0.));
#1250= IFCAXIS2PLACEMENT3D(#21,#1246,#33);
#1253= IFCEXTRUDEDAREASOLID(#1241,#1250,#1242,172.39997);
#1256= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1253));
#1263= IFCPRODUCTDEFINITIONSHAPE($,$,(#1256));
#1267= IFCOPENINGELEMENT('13c6Dt0000Ip4nCpGmDZ0s',#65,$,$,$,#1227,#1263,$);
#1288= IFCRELVOIDSELEMENT('3gz_1FcMHExhEMJzH8zl$M',#65,$,$,#1193,#1267);
#1289= IFCSTRUCTURALPROFILEPROPERTIES('TS6X6X3/8',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#1290= IFCCARTESIANPOINT((0.,0.));
#1294= IFCDIRECTION((1.,0.));
#1298= IFCAXIS2PLACEMENT2D(#1290,#1294);
#1301= IFCISHAPEPROFILEDEF(.AREA.,$,#1298,254.88901,356.616,12.7,18.288,21.3995);
#1302= IFCDIRECTION((0.,0.,-1.));
#1306= IFCDIRECTION((-1.,0.,0.));
#1310= IFCAXIS2PLACEMENT3D(#1323,#1306,#33);
#1313= IFCEXTRUDEDAREASOLID(#1301,#1310,#1302,2768.2595);
#1316= IFCCARTESIANPOINT((0.,-178.308,-127.4445));
#1320= IFCBOUNDINGBOX(#1316,1268.2595,356.616,254.88901);
#1323= IFCCARTESIANPOINT((-1500.,0.,0.));
#1327= IFCCARTESIANPOINT((0.,278.308,0.));
#1331= IFCDIRECTION((-1.,0.,0.));
#1335= IFCDIRECTION((0.,0.,1.));
#1339= IFCAXIS2PLACEMENT3D(#1327,#1331,#1335);
#1342= IFCPLANE(#1339);
#1345= IFCHALFSPACESOLID(#1342,.F.);
#1348= IFCBOOLEANCLIPPINGRESULT(.DIFFERENCE.,#1313,#1345);
#1351= IFCSHAPEREPRESENTATION(#40,'Body','Clipping',(#1348));
#1357= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1320));
#1363= IFCPRODUCTDEFINITIONSHAPE($,$,(#1351,#1357));
#1367= IFCCARTESIANPOINT((4763.008,7620.,-178.308));
#1371= IFCDIRECTION((0.,-1.,0.));
#1375= IFCDIRECTION((1.,0.,-7.2832534E-15));
#1379= IFCAXIS2PLACEMENT3D(#1367,#1371,#1375);
#1382= IFCLOCALPLACEMENT($,#1379);
#1385= IFCBEAM('13c6Dt00002p4nCpGmDZ0r',#65,'BEAM','W14X68',$,#1382,#1363,$);
#1405= IFCSTRUCTURALPROFILEPROPERTIES('W14X68',$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$,$);
#1406= IFCCARTESIANPOINT((0.,0.));
#1410= IFCDIRECTION((1.,0.));
#1414= IFCAXIS2PLACEMENT2D(#1406,#1410);
#1417= IFCISHAPEPROFILEDEF(.AREA.,$,#1414,254.88901,356.616,12.7,18.288,21.3995);
#1418= IFCDIRECTION((0.,0.,-1.));
#1422= IFCDIRECTION((-1.,0.,0.));
#1426= IFCAXIS2PLACEMENT3D(#21,#1422,#33);
#1429= IFCEXTRUDEDAREASOLID(#1417,#1426,#1418,1524.);
#1432= IFCCARTESIANPOINT((0.,-178.308,-127.4445));
#1436= IFCBOUNDINGBOX(#1432,1524.,356.616,254.88901);
#1439= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1429));
#1445= IFCSHAPEREPRESENTATION(#43,$,'BoundingBox',(#1436));
#1451= IFCPRODUCTDEFINITIONSHAPE($,$,(#1439,#1445));
#1455= IFCCARTESIANPOINT((4572.,7620.,-609.6));
#1459= IFCDIRECTION((0.,-1.,0.));
#1463= IFCDIRECTION((7.1613756E-15,0.,1.));
#1467= IFCAXIS2PLACEMENT3D(#1455,#1459,#1463);
#1470= IFCLOCALPLACEMENT($,#1467);
#1473= IFCCOLUMN('13c6Dt00001p4nCpGmDZ0q',#65,'COLUMN','W14X68',$,#1470,#1451,$);
#1492= IFCCARTESIANPOINT((4661.154,7490.05,308.83104));
#1496= IFCDIRECTION((0.,1.,0.));
#1500= IFCDIRECTION((-1.,0.,7.0134555E-15));
#1504= IFCAXIS2PLACEMENT3D(#1492,#1496,#1500);
#1507= IFCLOCALPLACEMENT($,#1504);
#1510= IFCPOLYLINE((#1514,#1519,#1523,#1527,#1531,#1535,#1539,#1543,#1547,#1551,#1555,#1559,#1563,#1567,#1571,#1575,#1579,#1583,#1587,#1591,#1595,#1599,#1603,#1607,#1611,#1615,#1619,#1623,#1627,#1631,#1635,#1639,#1643,#1648,#1652,#1656,#1660));
#1514= IFCCARTESIANPOINT((0.38429439,16.098194));
#1519= IFCCARTESIANPOINT((0.,20.));
#1523= IFCCARTESIANPOINT((0.,336.616));
#1527= IFCCARTESIANPOINT((0.38429439,340.5178));
#1531= IFCCARTESIANPOINT((1.5224093,344.26967));
#1535= IFCCARTESIANPOINT((3.3706078,347.7274));
#1539= IFCCARTESIANPOINT((5.8578644,350.75813));
#1543= IFCCARTESIANPOINT((8.8885953,353.24539));
#1547= IFCCARTESIANPOINT((12.346331,355.09359));
#1551= IFCCARTESIANPOINT((16.098194,356.2317));
#1555= IFCCARTESIANPOINT((20.,356.616));
#1559= IFCCARTESIANPOINT((158.308,356.616));
#1563= IFCCARTESIANPOINT((162.20981,356.2317));
#1567= IFCCARTESIANPOINT((165.96167,355.09359));
#1571= IFCCARTESIANPOINT((169.4194,353.24539));
#1575= IFCCARTESIANPOINT((172.45013,350.75813));
#1579= IFCCARTESIANPOINT((174.93739,347.7274));
#1583= IFCCARTESIANPOINT((176.78559,344.26967));
#1587= IFCCARTESIANPOINT((177.9237,340.5178));
#1591= IFCCARTESIANPOINT((178.308,336.616));
#1595= IFCCARTESIANPOINT((178.308,20.));
#1599= IFCCARTESIANPOINT((177.9237,16.098194));
#1603= IFCCARTESIANPOINT((176.78559,12.346331));
#1607= IFCCARTESIANPOINT((174.93739,8.8885953));
#1611= IFCCARTESIANPOINT((172.45013,5.8578644));
#1615= IFCCARTESIANPOINT((169.4194,3.3706078));
#1619= IFCCARTESIANPOINT((165.96167,1.5224093));
#1623= IFCCARTESIANPOINT((162.20981,0.38429439));
#1627= IFCCARTESIANPOINT((158.308,0.));
#1631= IFCCARTESIANPOINT((20.,0.));
#1635= IFCCARTESIANPOINT((16.098194,0.38429439));
#1639= IFCCARTESIANPOINT((12.346331,1.5224093));
#1643= IFCCARTESIANPOINT((8.8885953,3.3706078));
#1648= IFCCARTESIANPOINT((5.8578644,5.8578644));
#1652= IFCCARTESIANPOINT((3.3706078,8.8885953));
#1656= IFCCARTESIANPOINT((1.5224093,12.346331));
#1660= IFCCARTESIANPOINT((0.38429439,16.098194));
#1664= IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'PL259.9',#1510);
#1665= IFCAXIS2PLACEMENT3D(#21,#33,#25);
#1668= IFCEXTRUDEDAREASOLID(#1664,#1665,#33,259.9);
#1671= IFCSHAPEREPRESENTATION(#40,'Body','SweptSolid',(#1668));
#1677= IFCPRODUCTDEFINITIONSHAPE($,$,(#1671));
#1681= IFCOPENINGELEMENT('13c6Dt0002m34nCpGmDZ4o',#65,$,$,$,#1507,#1677,$);
#1702= IFCRELVOIDSELEMENT('2WI1gpRhj1dwB5Pft5vGvO',#65,$,$,#1473,#1681);
#1703= IFCRELASSOCIATESMATERIAL('1GOaWfy957kRCtp2R28$a9',#9,$,$,(#1193),#59);
#1705= IFCRELASSOCIATESMATERIAL('3Vqwp2DmT3TeKWHZyFzO7N',#9,$,$,(#1473,#1385,#633),#56);
#1707= IFCRELASSOCIATESMATERIAL('0SMrmHf_5BRAYDVih2VNTN',#9,$,$,(#1078,#982,#895,#808,#720,#521,#434,#350,#268,#174),#53);
#1709= IFCRELASSOCIATESPROFILEPROPERTIES('2mzP0x3pj2GwUm7Wy7Xfs0',#9,$,$,(#633),#652,$,$);
#1711= IFCRELASSOCIATESPROFILEPROPERTIES('1iUJLoCsfD6ug6keUDRGVW',#9,$,$,(#808),#739,$,$);
#1713= IFCRELASSOCIATESPROFILEPROPERTIES('1LidMEK_vEQuG8Js1MD1ND',#9,$,$,(#895,#982),#914,$,$);
#1715= IFCRELASSOCIATESPROFILEPROPERTIES('22dp9maVb0sAxZG8F2xTIR',#9,$,$,(#1193),#1289,$,$);
#1717= IFCRELASSOCIATESPROFILEPROPERTIES('36LPEeuXn6VgX3frK_urjy',#9,$,$,(#1385),#1405,$,$);
ENDSEC;
END-ISO-10303-21;
+1 -1
View File
@@ -1,7 +1,7 @@
const { performance } = require('perf_hooks')
const { fetch } = require('undici')
const Parser = require('./parser')
const ServerAPI = require('./api.js')
const ServerAPI = require('../src/api.js')
const Observability = require('@speckle/shared/dist/commonjs/observability/index.js')
const { logger: parentLogger } = require('../observability/logging')
View File
+44 -22
View File
@@ -1,5 +1,6 @@
'use strict'
const Environment = require('@speckle/shared/dist/commonjs/environment/index.js')
const {
initPrometheusMetrics,
metricDuration,
@@ -12,10 +13,11 @@ const { downloadFile } = require('./filesApi')
const fs = require('fs')
const { spawn } = require('child_process')
const ServerAPI = require('../ifc/api')
const ServerAPI = require('./api')
const objDependencies = require('./objDependencies')
const { logger } = require('../observability/logging')
const { Scopes, wait } = require('@speckle/shared')
const { FF_FILEIMPORT_IFC_DOTNET_ENABLED } = Environment.getFeatureFlags()
const HEALTHCHECK_FILE_PATH = '/tmp/last_successful_query'
@@ -127,27 +129,47 @@ async function doTask(mainDb, regionName, taskDb, task) {
})
if (info.fileType.toLowerCase() === 'ifc') {
await runProcessWithTimeout(
taskLogger,
process.env['NODE_BINARY_PATH'] || 'node',
[
'--no-experimental-fetch',
'./ifc/import_file.js',
TMP_FILE_PATH,
TMP_RESULTS_PATH,
info.userId,
info.streamId,
info.branchName,
`File upload: ${info.fileName}`,
info.id,
existingBranch?.id || '',
regionName
],
{
USER_TOKEN: tempUserToken
},
TIME_LIMIT
)
if (FF_FILEIMPORT_IFC_DOTNET_ENABLED) {
await runProcessWithTimeout(
taskLogger,
process.env['DOTNET_BINARY_PATH'] || 'dotnet',
[
'/speckle-server/packages/fileimport-service/ifc-dotnet/ifc-converter.dll',
TMP_FILE_PATH,
TMP_RESULTS_PATH,
info.streamId,
`File upload: ${info.fileName}`,
existingBranch?.id || '',
regionName
],
{
USER_TOKEN: tempUserToken
},
TIME_LIMIT
)
} else {
await runProcessWithTimeout(
taskLogger,
process.env['NODE_BINARY_PATH'] || 'node',
[
'--no-experimental-fetch',
'./ifc/import_file.js',
TMP_FILE_PATH,
TMP_RESULTS_PATH,
info.userId,
info.streamId,
info.branchName,
`File upload: ${info.fileName}`,
info.id,
existingBranch?.id || '',
regionName
],
{
USER_TOKEN: tempUserToken
},
TIME_LIMIT
)
}
} else if (info.fileType.toLowerCase() === 'stl') {
await runProcessWithTimeout(
taskLogger,
+6
View File
@@ -50,6 +50,11 @@ const parseFeatureFlags = () => {
FF_WORKSPACES_MULTI_REGION_ENABLED: {
schema: z.boolean(),
defaults: { production: false, _: false }
},
// Toggles IFC parsing with experimental .Net parser
FF_FILEIMPORT_IFC_DOTNET_ENABLED: {
schema: z.boolean(),
defaults: { production: false, _: false }
}
})
@@ -74,6 +79,7 @@ export function getFeatureFlags(): {
FF_GATEKEEPER_MODULE_ENABLED: boolean
FF_BILLING_INTEGRATION_ENABLED: boolean
FF_WORKSPACES_MULTI_REGION_ENABLED: boolean
FF_FILEIMPORT_IFC_DOTNET_ENABLED: boolean
} {
if (!parsedFlags) parsedFlags = parseFeatureFlags()
return parsedFlags
@@ -34,7 +34,7 @@ spec:
periodSeconds: 60
exec:
command:
- /nodejs/bin/node
- /usr/bin/node
- -e
- process.exit(Date.now() - require('fs').readFileSync('/tmp/last_successful_query', 'utf8') > 25 * 60 * 1000)
@@ -59,6 +59,8 @@ spec:
volumeMounts:
- mountPath: /tmp
name: tmp
- mountPath: /.config
name: dotconfig
{{- if .Values.db.useCertificate }}
- name: postgres-certificate
mountPath: /postgres-certificate
@@ -100,6 +102,10 @@ spec:
- name: MULTI_REGION_CONFIG_PATH
value: "/multi-region-config/multi-region-config.json"
{{- end }}
{{- if .Values.featureFlags.fileImportIFCDotNetEnabled }}
- name: FF_FILEIMPORT_IFC_DOTNET_ENABLED
value: {{ .Values.featureFlags.fileImportIFCDotNetEnabled | quote }}
{{- end }}
{{- if .Values.fileimport_service.affinity }}
affinity: {{- include "speckle.renderTpl" (dict "value" .Values.fileimport_service.affinity "context" $) | nindent 8 }}
{{- end }}
@@ -130,6 +136,8 @@ spec:
volumes:
- name: tmp
emptyDir: {}
- name: dotconfig
emptyDir: {}
{{- if .Values.db.useCertificate }}
- name: postgres-certificate
configMap:
@@ -79,6 +79,11 @@
"type": "boolean",
"description": "Toggles whether multi-region is available within workspaces. workspacesModuleEnabled must also be enabled.",
"default": false
},
"fileImportIFCDotNetEnabled": {
"type": "boolean",
"description": "Toggles whether the experimental .Net IFC importer is used for importing IFC files.",
"default": false
}
}
},
+2
View File
@@ -53,6 +53,8 @@ featureFlags:
billingIntegrationEnabled: false
## @param featureFlags.workspacesMultiRegionEnabled Toggles whether multi-region is available within workspaces. workspacesModuleEnabled must also be enabled.
workspacesMultiRegionEnabled: false
## @param featureFlags.fileImportIFCDotNetEnabled Toggles whether the experimental .Net IFC importer is used for importing IFC files.
fileImportIFCDotNetEnabled: false
analytics:
## @param analytics.enabled Enable or disable analytics