From bb3e978bba25fa83dbbb468e47701caaa85ace9f Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Fri, 21 Jul 2023 11:00:12 +0500 Subject: [PATCH] moving code to shape builder --- .../bim/data/libraries/IFC4 AU Steel.ifc | 38 ++-- .../scripts/generate_furniture_library.py | 209 +----------------- .../generate_steel_profiles_library.py | 116 +--------- .../ifcopenshell/util/shape_builder.py | 180 +++++++++++++++ 4 files changed, 213 insertions(+), 330 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/data/libraries/IFC4 AU Steel.ifc b/src/blenderbim/blenderbim/bim/data/libraries/IFC4 AU Steel.ifc index 1be19a130e..aadb576caa 100644 --- a/src/blenderbim/blenderbim/bim/data/libraries/IFC4 AU Steel.ifc +++ b/src/blenderbim/blenderbim/bim/data/libraries/IFC4 AU Steel.ifc @@ -13,14 +13,14 @@ DATA; #6=IFCSIUNIT(*,.PLANEANGLEUNIT.,$,.RADIAN.); #7=IFCMEASUREWITHUNIT(IFCREAL(0.0174532925199433),#6); #8=IFCCONVERSIONBASEDUNIT(#4,.PLANEANGLEUNIT.,'degree',#7); -#9=IFCUNITASSIGNMENT((#5,#8)); +#9=IFCUNITASSIGNMENT((#8,#5)); #10=IFCMATERIAL('Unknown',$,$); #11=IFCISHAPEPROFILEDEF(.AREA.,'610UB125',$,229.,612.,11.9,19.6,14.,$,$); #12=IFCBEAMTYPE('2pAeYRAvX10OFDGbZcUMQ1',$,'610UB125',$,$,$,$,$,$,.NOTDEFINED.); #13=IFCMATERIALPROFILESET($,$,(#15),$); #14=IFCRELASSOCIATESMATERIAL('1yKnQnNlTBhxl8oAdnxNa$',$,$,$,(#12),#13); #15=IFCMATERIALPROFILE($,$,#10,#11,$,$); -#16=IFCRELDECLARES('1F1Umtior9ehiM2XhFxkLP',$,$,$,#2,(#4848,#4982,#3457,#3591,#2200,#5710,#3795,#4666,#3275,#2751,#1360,#5216,#3825,#4870,#3613,#182,#4696,#5429,#4038,#4172,#2647,#2781,#1390,#4900,#5034,#3643,#2252,#2811,#5247,#3856,#2465,#550,#2590,#3024,#3149,#1758,#2803,#5277,#3886,#3362,#1971,#580,#5481,#4090,#4224,#793,#2833,#5307,#1442,#1576,#1789,#398,#5511,#5645,#4254,#2863,#2339,#4467,#3076,#1819,#3201,#5463,#3414,#2023,#117,#4497,#632,#845,#979,#5359,#4835,#3444,#2053,#2187,#5697,#2400,#1009,#351,#4865,#3474,#4653,#5078,#3687,#2430,#1164,#169,#4549,#4683,#3292,#4025,#2634,#1901,#1377,#2460,#4887,#1194,#199,#5446,#4055,#2664,#2798,#1407,#3843,#2452,#4402,#4917,#3011,#3526,#1620,#1224,#229,#5130,#5264,#3739,#3873,#442,#2482,#567,#1650,#780,#5160,#5294,#1429,#3903,#4636,#2512,#3245,#1854,#1988,#4116,#5498,#810,#2850,#1459,#4454,#3063,#1672,#1806,#281,#5528,#840,#494,#5741,#4350,#4484,#619,#1053,#3093,#3227,#1702,#1836,#832,#5346,#2040,#4514,#5559,#4727,#862,#996,#4852,#3461,#2070,#1209,#5589,#5065,#3674,#2283,#2417,#892,#368,#4536,#3279,#4961,#5095,#3704,#3838,#2313,#2447,#3492,#52,#186,#4566,#2651,#4779,#3522,#2131,#1607,#82,#216,#4072,#2681,#5117,#3726,#429,#2469,#3552,#4285,#2894,#3028,#1503,#1637,#5147,#3756,#3890,#459,#2499,#4103,#2712,#1321,#663,#797,#5177,#1446,#3262,#2005,#5390,#5524,#1659,#4133,#268,#2742,#2218,#1089,#693,#827,#481,#5728,#4337,#2946,#1040,#3080,#1689,#4163,#511,#645,#5758,#4367,#4501,#3110,#1719,#4714,#849,#3323,#1932,#5788,#17,#2057,#5576,#2270,#1141,#4744,#879,#3353,#5606,#4215,#4948,#3691,#2300,#39,#4553,#3162,#4978,#5112,#3721,#2330,#4766,#3375,#3509,#2118,#5325,#3934,#69,#2543,#4796,#4930,#3405,#3539,#2148,#2881,#1490,#99,#3743,#312,#2352,#446,#4826,#2911,#1520,#1654,#2699,#5164,#3773,#1867,#2382,#476,#5377,#3986,#4120,#2595,#2729,#1338,#680,#160,#5407,#5541,#4016,#4150,#2759,#1368,#2101,#710,#364,#498,#4354,#923,#1057,#1706,#5225,#3310,#1919,#528,#5775,#4384,#741,#5255,#4597,#4731,#3206,#3340,#1949,#34,#5459,#5593,#4202,#247,#4761,#3370,#4415,#3583,#3708,#2317,#4445,#3921,#2530,#4995,#4649,#4783,#3392,#2001,#2135,#5208,#3817,#3951,#2560,#2694,#2348,#957,#299,#4813,#3422,#1507,#5026,#3635,#2378,#3760,#329,#463,#2928,#1537,#3973,#2582,#676,#5056,#1325,#3141,#1750,#1884,#359,#147,#5394,#4003,#2612,#706,#2746,#1355,#2959,#1568,#1306,#910,#177,#5424,#4033,#5637,#4246,#515,#2989,#1598,#940,#728,#5108,#5242,#3851,#4584,#3193,#5667,#1802,#1936,#3019,#758,#1145,#4614,#3223,#3357,#1966,#5476,#3570,#4085,#2179,#788,#130,#1175,#4644,#5689,#4298,#4432,#1001,#3041,#1784,#4857,#4991,#1126,#3600,#2209,#1205,#5719,#4462,#5195,#3071,#3804,#2413,#2547,#1156,#4675,#3409,#2018,#112,#3834,#2577,#5013,#1186,#3622,#2231,#2365,#316,#2790,#1399,#1524,#4909,#5043,#3652,#3786,#2261,#2395,#1737,#346,#559,#2599,#5073,#3682,#1767,#5286,#1555,#30,#164,#4020,#589,#2629,#723,#377,#5624,#4233,#2842,#2976,#1451,#1585,#927,#407,#5520,#5654,#4263,#4397,#2872,#3006,#1615,#611,#745,#5125,#3210,#5684,#5338,#4081,#2166,#641,#775,#4631,#3240,#5676,#1849,#1250,#988,#4111,#4844,#3453,#3587,#2062,#2196,#5706,#4315,#4449,#1018,#3058,#1667,#4874,#3617,#2226,#4662,#3271,#1880,#5736,#2439,#5212,#3821,#2564,#4692,#3301,#2777,#1386,#4896,#3505,#3639,#208,#2248,#4722,#2673,#1416,#1070,#546,#4926,#5060,#3669,#2278,#5273,#3882,#2491,#576,#2616,#2829,#5303,#1438,#3912,#47,#606,#260,#394,#4774,#5507,#4250,#819,#2859,#5333,#1468,#1602,#598,#1815,#424,#5537,#5671,#4280,#2889,#4493,#628,#3102,#1845,#5355,#5489,#3964,#4098,#2707,#3440,#2049,#4523,#658,#1875,#4302,#871,#1005,#5385,#4861,#3470,#2079,#2213,#3258,#5723,#4332,#2426,#2941,#1035,#3500,#4545,#4679,#3154,#3288,#1897,#1239,#3713,#2456,#719,#1190,#195,#4575,#4709,#4051,#3318,#1927,#2660,#1269,#1403,#12,#4913,#1220,#225,#2265,#2690,#1433,#3869,#2478,#4943,#1646,#255,#5156,#5290,#3765,#3899,#468,#2508,#593,#806,#5186,#5320,#1455,#3929,#2538,#4142,#277,#411,#4267,#2876,#1485,#5004,#4480,#3089,#1698,#1832,#307,#5554,#5342,#520,#5767,#4376,#4510,#3119,#3253,#1728,#1862,#1254,#858,#5372,#3981,#2066,#4540,#5585,#4194,#2937,#1546,#4319,#1284,#888,#1022,#4878,#3487,#2096,#4532,#1235,#5615,#5091,#3700,#2309,#2443,#1314,#918,#4562,#3171,#1265,#3305,#1914,#3518,#2127,#736,#78,#212,#4592,#4068,#2677,#1420,#4805,#1074,#3548,#2157,#1633,#108,#242,#5143,#3752,#2361,#455,#2495,#1104,#3578,#1529,#5173,#3782,#3916,#485,#2525,#1134,#4129,#264,#2738,#1347,#1085,#689,#823,#5203,#1472,#5416,#5550,#1685,#4159,#294,#2768,#1115,#507,#5021,#5754,#3630,#4363,#2972,#3106,#1715,#4189,#5234,#3968,#537,#671,#5784,#4393,#4527,#3136,#5572,#1745,#4181,#2924,#4740,#875,#3349,#1958,#2083,#5468,#5602,#4211,#4345,#2820,#2954,#2296,#1563,#905,#3379,#3158,#5632,#4241,#4974,#3717,#2326,#2114,#65,#4579,#3188,#1797,#4792,#3401,#3535,#2010,#2144,#95,#966,#4822,#4956,#3431,#3565,#2174,#2907,#1516,#125,#3769,#338,#472,#2725,#1334,#5190,#3799,#2408,#156,#4670,#5403,#4012,#4146,#2621,#2755,#1364,#5008,#5433,#5567,#4042,#4176,#2785,#5221,#1394,#390,#524,#2998,#5771,#4380,#3123,#1732,#5251,#3860,#3336,#1945,#554,#5801,#4410,#5455,#4064,#4198,#767,#2807,#5281,#1550,#4623,#4757,#3232,#3366,#1975,#2109,#1763,#5485,#5619,#4228,#2837,#4441,#3050,#3175,#3734,#2343,#3388,#1997,#91,#4471,#3947,#2556,#1299,#953,#4809,#3418,#2027,#2161,#2374,#983,#325,#4839,#3448,#1533,#5052,#3661,#2404,#355,#489,#143,#4657,#3999,#2608,#702,#5082,#1351,#2434,#173,#5420,#4029,#2638,#2772,#1381,#1119,#4891,#2985,#1594,#203,#936,#5450,#4059,#5104,#5238,#3847,#416,#1149,#5663,#4272,#4406,#541,#3015,#1624,#754,#5134,#5268,#3877,#4610,#2486,#3219,#1828,#1962,#5472,#784,#2824,#1171,#4640,#3249,#3383,#1992,#4428,#3037,#1780,#5502,#3596,#2205,#814,#1201,#5715,#4324,#4458,#1027,#3067,#1676,#1810,#1231,#5745,#2014,#4488,#3097,#3830,#2573,#4701,#836,#970,#3435,#2044,#138,#5039,#3648,#2257,#2391,#866,#342,#4935,#5069,#3678,#3812,#2287,#2421,#372,#26,#585,#2625,#5099,#4753,#3496,#5312,#1581,#56,#190,#5437,#4046,#2655,#403,#5650,#4259,#2868,#3002,#1477,#1611,#5121,#3730,#3864,#433,#2473,#5680,#1216,#4289,#4423,#2898,#3032,#1641,#4077,#2686,#637,#771,#5151,#4627,#3236,#1246,#1979,#5364,#4107,#2716,#2192,#667,#801,#3266,#5702,#4311,#1276,#2920,#1014,#3054,#1663,#4137,#3479,#2088,#2222,#5732,#4341,#4475,#1044,#3084,#1693,#4688,#3297,#1906,#5762,#2031,#2244,#4718,#853,#3327,#1412,#21,#1066,#5580,#4922,#3531,#3665,#234,#2274,#4748,#5793,#1096,#572,#4952,#5086,#3695,#2304,#5299,#3908,#43,#2517,#602,#2642,#4770,#4904,#3513,#2855,#5329,#1464,#3938,#73,#286,#420,#4800,#5533,#4276,#2885,#1494,#1628,#624,#5138,#3747,#1841,#2356,#450,#5563,#4306,#2915,#5351,#3960,#4094,#2569,#2703,#4519,#654,#3128,#1871,#5381,#5515,#3990,#4124,#3466,#2733,#1342,#2075,#684,#4328,#897,#1031,#5411,#1680,#2105,#2239,#3284,#1893,#502,#5749,#4358,#2967,#1061,#715,#4571,#4705,#3180,#3314,#1923,#221,#4601,#4735,#3344,#1953,#1295,#949,#3557,#4939,#251,#2291,#4419,#3895,#2504,#4969,#5182,#5316,#3791,#3925,#60,#2534,#2668,#273,#4787,#3396,#1481,#3955,#5000,#3609,#4168,#303,#437,#4293,#2902,#1511,#650,#5030,#4506,#3115,#1724,#1858,#333,#5368,#3977,#2586,#2720,#1329,#3145,#1754,#1888,#2933,#1542,#1280,#151,#884,#5398,#4007,#3483,#2092,#5611,#4220,#2963,#1572,#1310,#914,#1048,#2122,#4558,#3167,#1261,#5641,#1776,#1910,#385,#2993,#2335,#944,#732,#4588,#3197,#1291,#3331,#1940,#3544,#2153,#762,#104,#238,#4618,#5797,#975,#4831,#4965,#1100,#3574,#2183,#134,#1179,#5693,#4436,#5169,#3045,#3778,#2387,#2521,#1130,#3604,#1081,#86,#5199,#3808,#3942,#2551,#4987,#1160,#5546,#4155,#290,#2764,#1373,#1111,#5229,#1498,#4883,#5017,#3626,#2235,#2369,#5442,#1711,#4185,#320,#2794,#533,#5047,#5780,#4389,#3656,#3132,#1741,#5260,#3994,#563,#2603,#697,#5598,#1771,#4207,#2816,#2950,#1425,#1559,#901,#1984,#381,#5494,#5628,#4237,#4371,#2846,#2980,#1589,#2322,#931,#3184,#5658,#1793,#2140,#615,#749,#4605,#3214,#1823,#962,#4818,#3427,#3561,#2036,#2170,#121,#992)); +#16=IFCRELDECLARES('3q_vEBwOD2beCTfVmSeP05',$,$,$,#2,(#52,#186,#4566,#2651,#4779,#3522,#2131,#1607,#82,#216,#4072,#2681,#5117,#3726,#429,#2469,#3552,#4285,#2894,#3028,#1503,#1637,#5147,#3756,#3890,#459,#2499,#4103,#2712,#1321,#663,#797,#5177,#1446,#2005,#5390,#5524,#1659,#4133,#268,#2742,#2218,#1089,#693,#827,#481,#5728,#4337,#2946,#1040,#3080,#5554,#1689,#4163,#511,#645,#5758,#4367,#4501,#3110,#1719,#4714,#849,#3323,#1932,#5788,#17,#2057,#5576,#4319,#2270,#1141,#4744,#879,#3353,#5606,#4215,#4948,#3691,#2300,#39,#4553,#3162,#4978,#5112,#3721,#2330,#4766,#3375,#3509,#2118,#5325,#3934,#69,#2543,#4796,#4930,#3405,#3539,#2881,#2148,#1490,#99,#3743,#312,#446,#4826,#2911,#1520,#1654,#2699,#5164,#3773,#1867,#2382,#476,#5377,#3986,#4120,#2595,#2729,#1338,#160,#5407,#5541,#4016,#4150,#2759,#1368,#2101,#710,#364,#498,#2972,#4354,#923,#1057,#1706,#5225,#3310,#1919,#528,#5775,#4384,#741,#5255,#4597,#4731,#3206,#3340,#1949,#2083,#34,#5459,#5593,#4202,#247,#4761,#3370,#4415,#3583,#3708,#2317,#65,#4445,#3921,#2530,#4783,#3392,#2001,#2135,#5208,#3817,#3951,#2560,#2694,#2348,#957,#299,#4813,#3422,#1507,#5026,#3635,#2378,#329,#463,#2928,#1537,#3973,#2582,#676,#5056,#1325,#2408,#3141,#1750,#1884,#359,#147,#5394,#4003,#2612,#706,#2746,#1355,#2959,#1568,#1306,#910,#177,#5424,#4033,#5637,#4246,#4380,#515,#2989,#1598,#940,#728,#5108,#5242,#3851,#4584,#3193,#5667,#1802,#1936,#3019,#758,#1145,#4614,#3223,#3357,#1966,#5476,#3570,#2179,#788,#130,#1175,#4644,#5689,#4298,#4432,#1001,#3041,#1784,#4857,#4991,#1126,#3600,#2209,#1205,#5719,#4462,#5195,#3071,#3804,#2547,#1156,#4675,#3409,#2018,#112,#3834,#2577,#5013,#1186,#3622,#2231,#2365,#316,#2790,#1399,#4909,#5043,#3652,#3786,#2261,#2395,#1737,#346,#559,#2599,#5073,#3682,#1767,#5286,#1555,#30,#164,#4020,#589,#2629,#723,#377,#5624,#4233,#2842,#2976,#1451,#1585,#927,#407,#5520,#5654,#4263,#4397,#2872,#3006,#1615,#611,#745,#5125,#3210,#5684,#5338,#4081,#2166,#641,#775,#4631,#3240,#5676,#1250,#988,#4111,#4844,#3453,#3587,#2062,#2196,#5706,#4315,#4449,#1018,#3058,#1667,#4874,#3617,#2226,#4662,#3271,#1880,#5736,#2439,#5212,#2564,#4692,#3301,#2777,#1386,#4896,#3505,#3639,#208,#2248,#4722,#2673,#1416,#1070,#546,#4926,#5060,#3669,#2278,#5273,#3882,#2491,#576,#2616,#2829,#5303,#1438,#3912,#47,#606,#260,#394,#4774,#5507,#4250,#819,#2859,#5333,#1468,#1602,#598,#1815,#424,#5537,#5671,#4280,#2889,#4493,#628,#3102,#1845,#5355,#5489,#3964,#4098,#2707,#3440,#2049,#4523,#658,#1875,#4302,#871,#1005,#5385,#4861,#3470,#2079,#2213,#3258,#5723,#4332,#2426,#2941,#1035,#3500,#4545,#4679,#3154,#3288,#1897,#3713,#2456,#719,#1190,#195,#4575,#4709,#3318,#4051,#2660,#1927,#1269,#1403,#12,#3531,#4913,#1220,#225,#2265,#2690,#1433,#3869,#2478,#4943,#1646,#255,#5156,#5290,#3765,#3899,#468,#2508,#2642,#593,#806,#5186,#5320,#1455,#3929,#2538,#4142,#277,#411,#4267,#2876,#1485,#624,#5004,#4480,#3089,#1698,#1832,#307,#5342,#520,#5767,#4376,#4510,#3119,#3253,#1728,#1862,#1254,#858,#5372,#3981,#2066,#4540,#5585,#4194,#2937,#1546,#1284,#888,#1022,#4878,#3487,#2096,#4532,#1235,#5615,#5091,#2967,#3700,#2309,#2443,#1314,#918,#4562,#3171,#1265,#3305,#1914,#3518,#2127,#736,#78,#212,#4592,#1295,#4068,#2677,#1420,#4805,#4939,#1074,#3548,#2157,#1633,#108,#242,#5143,#3752,#2361,#455,#2495,#1104,#3578,#1529,#60,#5173,#3782,#3916,#485,#2525,#1134,#4129,#264,#2738,#1347,#1085,#689,#823,#5203,#1472,#5416,#5550,#1685,#4159,#294,#2768,#1115,#507,#5021,#5754,#3630,#4363,#3106,#1715,#4189,#5234,#3968,#537,#671,#5784,#4393,#4527,#3136,#5572,#1745,#4181,#2924,#4740,#875,#3349,#1958,#5468,#5602,#4211,#4345,#2820,#2954,#1563,#2296,#905,#3379,#385,#3158,#5632,#4241,#4974,#3717,#2326,#2114,#4579,#3188,#1797,#4792,#3401,#3535,#2010,#2144,#95,#966,#4822,#4956,#3431,#3565,#2174,#2907,#1516,#125,#3769,#338,#472,#2725,#1334,#5190,#3799,#156,#4670,#5403,#4012,#4146,#2621,#2755,#1364,#5008,#5433,#5567,#4042,#4176,#2785,#5221,#1394,#390,#524,#2998,#5771,#3123,#1732,#5251,#3860,#3336,#1945,#554,#5801,#4410,#5455,#4064,#4198,#767,#2807,#5281,#1550,#4623,#4757,#3232,#3366,#1975,#2109,#1763,#5485,#5619,#4228,#2837,#4441,#3050,#1793,#3175,#3734,#2343,#3388,#1997,#91,#4471,#3947,#2556,#1299,#953,#4809,#3418,#2027,#121,#2161,#2374,#983,#325,#4839,#3448,#1533,#5052,#3661,#2404,#355,#489,#143,#4657,#3999,#2608,#702,#5082,#1351,#2434,#173,#5420,#4029,#2638,#2772,#1381,#1119,#4891,#2985,#1594,#203,#936,#5450,#4059,#5104,#5238,#3847,#416,#1149,#5663,#4272,#4406,#541,#3015,#1624,#754,#5134,#5268,#3877,#4610,#2486,#3219,#1828,#1962,#4090,#5472,#784,#2824,#1171,#4640,#3249,#3383,#1992,#4428,#3037,#1780,#5502,#3596,#2205,#814,#1201,#5715,#4324,#4458,#1027,#3067,#3201,#1676,#1810,#1231,#5745,#2014,#4488,#3097,#3830,#2573,#4701,#836,#970,#3435,#2044,#138,#5039,#3648,#2257,#2391,#866,#342,#4935,#5069,#3678,#3812,#2287,#2421,#372,#26,#585,#2625,#5099,#4753,#3496,#5312,#1581,#56,#190,#5437,#4046,#2655,#403,#5650,#3526,#4259,#2868,#3002,#1477,#1611,#5121,#3730,#3864,#433,#2473,#5680,#1216,#4289,#4423,#2898,#3032,#1641,#4077,#2686,#637,#771,#5151,#1854,#4627,#3236,#1246,#1979,#5364,#5498,#4107,#2716,#2192,#667,#801,#3266,#5702,#4311,#1276,#2920,#1014,#3054,#1663,#4137,#3479,#2088,#2222,#619,#5732,#4341,#4475,#1044,#3084,#1693,#4688,#3297,#1906,#5762,#2031,#2244,#4718,#853,#3327,#1412,#21,#1066,#5580,#4922,#3665,#234,#2274,#4748,#5793,#1096,#572,#4952,#5086,#3695,#2304,#5299,#3908,#43,#2517,#602,#4770,#4904,#3513,#2855,#5329,#1464,#3938,#73,#286,#420,#4800,#5533,#4276,#2885,#1494,#1628,#5138,#3747,#1841,#2356,#450,#5563,#4306,#2915,#5351,#3960,#4094,#2569,#2703,#4519,#654,#3128,#3262,#1871,#5381,#5515,#3990,#4124,#2733,#3466,#1342,#2075,#684,#4328,#897,#1031,#5411,#1680,#2105,#2239,#3284,#1893,#502,#5749,#4358,#1061,#715,#4571,#4705,#3180,#3314,#1923,#221,#4601,#4735,#3344,#1953,#949,#3557,#251,#2291,#4419,#3895,#2504,#4969,#5182,#5316,#3791,#3925,#2534,#2668,#273,#4787,#3396,#1481,#3955,#5000,#3609,#2352,#4168,#303,#437,#4293,#2902,#1511,#650,#5030,#4506,#3115,#1724,#1858,#333,#5368,#3977,#2586,#680,#2720,#1329,#3145,#1754,#1888,#2933,#1542,#1280,#151,#884,#5398,#4007,#3483,#2092,#5611,#4220,#2963,#1572,#1310,#914,#1048,#2122,#4558,#3167,#1261,#5641,#1776,#1910,#2993,#2335,#944,#732,#4588,#3197,#1291,#3331,#1940,#3544,#2153,#762,#104,#238,#4618,#5797,#975,#4831,#4965,#1100,#3574,#2183,#134,#1179,#5693,#4436,#5169,#3045,#3778,#2387,#2521,#4995,#1130,#3604,#4649,#1081,#86,#5199,#3808,#3942,#2551,#4987,#1160,#5546,#4155,#290,#2764,#1373,#1111,#5229,#1498,#4883,#5017,#3626,#3760,#2235,#2369,#5442,#1711,#4185,#320,#2794,#533,#5047,#5780,#3656,#4389,#3132,#1741,#5260,#3994,#563,#2603,#697,#5598,#1771,#4207,#2816,#2950,#1425,#1559,#901,#1984,#381,#5494,#5628,#4237,#4371,#2846,#2980,#2322,#1589,#931,#3184,#5658,#2140,#615,#749,#4605,#3214,#1823,#962,#4085,#4818,#3427,#3561,#2036,#2170,#992,#4848,#4982,#3457,#3591,#2200,#5710,#2413,#3795,#4666,#3275,#2751,#1360,#5216,#3825,#4870,#3613,#182,#4696,#5429,#4038,#4172,#2647,#2781,#1390,#1524,#4900,#5034,#3643,#2252,#2811,#5247,#3856,#2465,#550,#2590,#3024,#3149,#1758,#2803,#5277,#3886,#3362,#1971,#580,#5481,#4224,#793,#2833,#5307,#1442,#1576,#1789,#398,#5511,#5645,#4254,#2863,#2339,#4467,#3076,#1819,#5463,#3414,#2023,#117,#4497,#632,#1849,#845,#979,#5359,#4835,#3444,#2053,#2187,#5697,#2400,#1009,#351,#4865,#3474,#4653,#5078,#3687,#3821,#2430,#1164,#169,#4549,#4683,#3292,#4025,#1901,#2634,#1377,#2460,#4887,#1194,#199,#5446,#4055,#2664,#2798,#1407,#3843,#2452,#4402,#4917,#3011,#1620,#1224,#229,#5130,#5264,#3739,#3873,#442,#2482,#567,#1650,#780,#5160,#5294,#1429,#3903,#4636,#2512,#3245,#1988,#4116,#810,#2850,#1459,#4454,#3063,#1672,#1806,#281,#5528,#840,#494,#5741,#4350,#4484,#1053,#3093,#3227,#1702,#1836,#832,#5346,#2040,#4514,#5559,#4727,#862,#996,#4852,#3461,#2070,#1209,#5589,#5065,#3674,#2283,#2417,#892,#368,#4536,#1239,#3279,#4961,#5095,#3704,#3838,#2313,#2447,#3492)); #17=IFCMEMBERTYPE('00EmRdVsb9p97T95PHNxUc',$,'610UB125',$,$,$,$,$,$,.NOTDEFINED.); #18=IFCMATERIALPROFILESET($,$,(#20),$); #19=IFCRELASSOCIATESMATERIAL('2x4L808l9Aqwt6zzyLtQof',$,$,$,(#17),#18); @@ -1083,7 +1083,7 @@ DATA; #1076=IFCRELASSOCIATESMATERIAL('2fo9M3CdTBjOUuCZeR8agJ',$,$,$,(#1074),#1075); #1077=IFCMATERIALPROFILE($,$,#10,#1065,$,$); #1078=IFCCARTESIANPOINTLIST2D(((-0.5,45.),(1.25735931288071,49.2426406871193),(5.5,51.),(47.,51.),(51.2426406871193,49.2426406871193),(53.,45.),(53.,38.5),(52.,38.5),(52.,45.),(50.5355339059327,48.5355339059327),(47.,50.),(5.5,50.),(1.96446609406726,48.5355339059327),(0.5,45.),(0.5,-45.),(-1.25735931288071,-49.2426406871193),(-5.5,-51.),(-43.,-51.),(-47.2426406871193,-49.2426406871193),(-49.,-45.),(-49.,-38.5),(-48.,-38.5),(-48.,-45.),(-46.5355339059327,-48.5355339059327),(-43.,-50.),(-5.5,-50.),(-1.96446609406726,-48.5355339059327),(-0.5,-45.))); -#1079=IFCINDEXEDPOLYCURVE(#1078,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1079=IFCINDEXEDPOLYCURVE(#1078,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1080=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z10010',#1079); #1081=IFCBEAMTYPE('3uJxAzCib9Rf5u2C0Xtr51',$,'Z10010',$,$,$,$,$,$,.NOTDEFINED.); #1082=IFCMATERIALPROFILESET($,$,(#1084),$); @@ -1098,7 +1098,7 @@ DATA; #1091=IFCRELASSOCIATESMATERIAL('3471It6OL4aPqPS_DIdQV0',$,$,$,(#1089),#1090); #1092=IFCMATERIALPROFILE($,$,#10,#1080,$,$); #1093=IFCCARTESIANPOINTLIST2D(((-0.6,44.8),(1.21593795664341,49.1840620433566),(5.6,51.),(46.8,51.),(51.1840620433566,49.1840620433566),(53.,44.8),(53.,38.),(51.8,38.),(51.8,44.8),(50.3355339059327,48.3355339059327),(46.8,49.8),(5.6,49.8),(2.06446609406726,48.3355339059327),(0.6,44.8),(0.6,-44.8),(-1.21593795664341,-49.1840620433566),(-5.6,-51.),(-42.8,-51.),(-47.1840620433566,-49.1840620433566),(-49.,-44.8),(-49.,-38.),(-47.8,-38.),(-47.8,-44.8),(-46.3355339059327,-48.3355339059327),(-42.8,-49.8),(-5.6,-49.8),(-2.06446609406726,-48.3355339059327),(-0.6,-44.8))); -#1094=IFCINDEXEDPOLYCURVE(#1093,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1094=IFCINDEXEDPOLYCURVE(#1093,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1095=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z10012',#1094); #1096=IFCBEAMTYPE('0eBHrQrdfFiur3zgOFx_3r',$,'Z10012',$,$,$,$,$,$,.NOTDEFINED.); #1097=IFCMATERIALPROFILESET($,$,(#1099),$); @@ -1113,7 +1113,7 @@ DATA; #1106=IFCRELASSOCIATESMATERIAL('16HZuG7tXATPbCiFMNqgRW',$,$,$,(#1104),#1105); #1107=IFCMATERIALPROFILE($,$,#10,#1095,$,$); #1108=IFCCARTESIANPOINTLIST2D(((-0.75,44.5),(1.15380592228744,49.0961940777126),(5.75,51.),(46.5,51.),(51.0961940777126,49.0961940777126),(53.,44.5),(53.,37.),(51.5,37.),(51.5,44.5),(50.0355339059327,48.0355339059327),(46.5,49.5),(5.75,49.5),(2.21446609406726,48.0355339059327),(0.75,44.5),(0.75,-44.5),(-1.15380592228744,-49.0961940777126),(-5.75,-51.),(-42.5,-51.),(-47.0961940777126,-49.0961940777126),(-49.,-44.5),(-49.,-37.),(-47.5,-37.),(-47.5,-44.5),(-46.0355339059327,-48.0355339059327),(-42.5,-49.5),(-5.75,-49.5),(-2.21446609406726,-48.0355339059327),(-0.75,-44.5))); -#1109=IFCINDEXEDPOLYCURVE(#1108,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1109=IFCINDEXEDPOLYCURVE(#1108,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1110=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z10015',#1109); #1111=IFCBEAMTYPE('0afCq0$G53lRtaevk90Xpj',$,'Z10015',$,$,$,$,$,$,.NOTDEFINED.); #1112=IFCMATERIALPROFILESET($,$,(#1114),$); @@ -1128,7 +1128,7 @@ DATA; #1121=IFCRELASSOCIATESMATERIAL('3aDcUiUAz18RnjlQ7sj_BG',$,$,$,(#1119),#1120); #1122=IFCMATERIALPROFILE($,$,#10,#1110,$,$); #1123=IFCCARTESIANPOINTLIST2D(((-0.95,44.1),(1.07096320981282,48.9790367901872),(5.95,51.),(46.1,51.),(50.9790367901872,48.9790367901872),(53.,44.1),(53.,36.),(51.1,36.),(51.1,44.1),(49.6355339059327,47.6355339059327),(46.1,49.1),(5.95,49.1),(2.41446609406726,47.6355339059327),(0.95,44.1),(0.95,-44.1),(-1.07096320981282,-48.9790367901872),(-5.95,-51.),(-42.1,-51.),(-46.9790367901872,-48.9790367901872),(-49.,-44.1),(-49.,-36.),(-47.1,-36.),(-47.1,-44.1),(-45.6355339059327,-47.6355339059327),(-42.1,-49.1),(-5.95,-49.1),(-2.41446609406726,-47.6355339059327),(-0.95,-44.1))); -#1124=IFCINDEXEDPOLYCURVE(#1123,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1124=IFCINDEXEDPOLYCURVE(#1123,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1125=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z10019',#1124); #1126=IFCBEAMTYPE('1yQX4g43f3buDZwr8j$I5O',$,'Z10019',$,$,$,$,$,$,.NOTDEFINED.); #1127=IFCMATERIALPROFILESET($,$,(#1129),$); @@ -1143,7 +1143,7 @@ DATA; #1136=IFCRELASSOCIATESMATERIAL('357WOiSyHBI8uOj1iJEm$B',$,$,$,(#1134),#1135); #1137=IFCMATERIALPROFILE($,$,#10,#1125,$,$); #1138=IFCCARTESIANPOINTLIST2D(((-0.5,70.),(1.25735931288071,74.2426406871193),(5.5,76.),(59.,76.),(63.2426406871193,74.2426406871193),(65.,70.),(65.,61.5),(64.,61.5),(64.,70.),(62.5355339059327,73.5355339059327),(59.,75.),(5.5,75.),(1.96446609406726,73.5355339059327),(0.5,70.),(0.5,-70.),(-1.25735931288071,-74.2426406871193),(-5.5,-76.),(-55.,-76.),(-59.2426406871193,-74.2426406871193),(-61.,-70.),(-61.,-61.5),(-60.,-61.5),(-60.,-70.),(-58.5355339059327,-73.5355339059327),(-55.,-75.),(-5.5,-75.),(-1.96446609406726,-73.5355339059327),(-0.5,-70.))); -#1139=IFCINDEXEDPOLYCURVE(#1138,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1139=IFCINDEXEDPOLYCURVE(#1138,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1140=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z15010',#1139); #1141=IFCBEAMTYPE('2cOG$xuZTC_A9fjo$kZ6Or',$,'Z15010',$,$,$,$,$,$,.NOTDEFINED.); #1142=IFCMATERIALPROFILESET($,$,(#1144),$); @@ -1158,7 +1158,7 @@ DATA; #1151=IFCRELASSOCIATESMATERIAL('1lHxWSIvb2xQtG1VmRR$RH',$,$,$,(#1149),#1150); #1152=IFCMATERIALPROFILE($,$,#10,#1140,$,$); #1153=IFCCARTESIANPOINTLIST2D(((-0.6,69.8),(1.21593795664341,74.1840620433566),(5.6,76.),(58.8,76.),(63.1840620433566,74.1840620433566),(65.,69.8),(65.,61.),(63.8,61.),(63.8,69.8),(62.3355339059327,73.3355339059327),(58.8,74.8),(5.6,74.8),(2.06446609406726,73.3355339059327),(0.6,69.8),(0.6,-69.8),(-1.21593795664341,-74.1840620433566),(-5.6,-76.),(-54.8,-76.),(-59.1840620433566,-74.1840620433566),(-61.,-69.8),(-61.,-61.),(-59.8,-61.),(-59.8,-69.8),(-58.3355339059327,-73.3355339059327),(-54.8,-74.8),(-5.6,-74.8),(-2.06446609406726,-73.3355339059327),(-0.6,-69.8))); -#1154=IFCINDEXEDPOLYCURVE(#1153,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1154=IFCINDEXEDPOLYCURVE(#1153,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1155=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z15012',#1154); #1156=IFCBEAMTYPE('0VoPAL8DT3O89mgDNySTDN',$,'Z15012',$,$,$,$,$,$,.NOTDEFINED.); #1157=IFCMATERIALPROFILESET($,$,(#1159),$); @@ -1173,7 +1173,7 @@ DATA; #1166=IFCRELASSOCIATESMATERIAL('2ETorYBkP8gAlAkMPkEmiv',$,$,$,(#1164),#1165); #1167=IFCMATERIALPROFILE($,$,#10,#1155,$,$); #1168=IFCCARTESIANPOINTLIST2D(((-0.75,69.5),(1.15380592228744,74.0961940777126),(5.75,76.),(58.5,76.),(63.0961940777126,74.0961940777126),(65.,69.5),(65.,60.),(63.5,60.),(63.5,69.5),(62.0355339059327,73.0355339059327),(58.5,74.5),(5.75,74.5),(2.21446609406726,73.0355339059327),(0.75,69.5),(0.75,-69.5),(-1.15380592228744,-74.0961940777126),(-5.75,-76.),(-54.5,-76.),(-59.0961940777126,-74.0961940777126),(-61.,-69.5),(-61.,-60.),(-59.5,-60.),(-59.5,-69.5),(-58.0355339059327,-73.0355339059327),(-54.5,-74.5),(-5.75,-74.5),(-2.21446609406726,-73.0355339059327),(-0.75,-69.5))); -#1169=IFCINDEXEDPOLYCURVE(#1168,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1169=IFCINDEXEDPOLYCURVE(#1168,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1170=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z15015',#1169); #1171=IFCBEAMTYPE('1wjb3gk$H5dQzvXLB4SCCl',$,'Z15015',$,$,$,$,$,$,.NOTDEFINED.); #1172=IFCMATERIALPROFILESET($,$,(#1174),$); @@ -1188,7 +1188,7 @@ DATA; #1181=IFCRELASSOCIATESMATERIAL('0JgWE979n3RhgUcjV76vpa',$,$,$,(#1179),#1180); #1182=IFCMATERIALPROFILE($,$,#10,#1170,$,$); #1183=IFCCARTESIANPOINTLIST2D(((-0.95,69.1),(1.07096320981282,73.9790367901872),(5.95,76.),(58.1,76.),(62.9790367901872,73.9790367901872),(65.,69.1),(65.,59.),(63.1,59.),(63.1,69.1),(61.6355339059327,72.6355339059327),(58.1,74.1),(5.95,74.1),(2.41446609406726,72.6355339059327),(0.95,69.1),(0.95,-69.1),(-1.07096320981282,-73.9790367901872),(-5.95,-76.),(-54.1,-76.),(-58.9790367901872,-73.9790367901872),(-61.,-69.1),(-61.,-59.),(-59.1,-59.),(-59.1,-69.1),(-57.6355339059327,-72.6355339059327),(-54.1,-74.1),(-5.95,-74.1),(-2.41446609406726,-72.6355339059327),(-0.95,-69.1))); -#1184=IFCINDEXEDPOLYCURVE(#1183,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1184=IFCINDEXEDPOLYCURVE(#1183,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1185=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z15019',#1184); #1186=IFCBEAMTYPE('1ZRLbGr15Fq9woZ6LSU6qV',$,'Z15019',$,$,$,$,$,$,.NOTDEFINED.); #1187=IFCMATERIALPROFILESET($,$,(#1189),$); @@ -1203,7 +1203,7 @@ DATA; #1196=IFCRELASSOCIATESMATERIAL('127u8xzy9CNgg8GR8Q8d7w',$,$,$,(#1194),#1195); #1197=IFCMATERIALPROFILE($,$,#10,#1185,$,$); #1198=IFCCARTESIANPOINTLIST2D(((-1.2,68.6),(0.967409819219548,73.8325901807805),(6.2,76.),(58.6,76.),(63.8325901807804,73.8325901807805),(66.,68.6),(66.,57.5),(63.6,57.5),(63.6,68.6),(62.1355339059327,72.1355339059327),(58.6,73.6),(6.2,73.6),(2.66446609406726,72.1355339059327),(1.2,68.6),(1.2,-68.6),(-0.967409819219548,-73.8325901807805),(-6.2,-76.),(-53.6,-76.),(-58.8325901807804,-73.8325901807805),(-61.,-68.6),(-61.,-57.5),(-58.6,-57.5),(-58.6,-68.6),(-57.1355339059327,-72.1355339059327),(-53.6,-73.6),(-6.2,-73.6),(-2.66446609406726,-72.1355339059327),(-1.2,-68.6))); -#1199=IFCINDEXEDPOLYCURVE(#1198,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1199=IFCINDEXEDPOLYCURVE(#1198,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1200=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z15024',#1199); #1201=IFCBEAMTYPE('2ilmoX81HFOh5j3gMoYF_H',$,'Z15024',$,$,$,$,$,$,.NOTDEFINED.); #1202=IFCMATERIALPROFILESET($,$,(#1204),$); @@ -1218,7 +1218,7 @@ DATA; #1211=IFCRELASSOCIATESMATERIAL('0xmv58s7z6FQmxFnzAYuHt',$,$,$,(#1209),#1210); #1212=IFCMATERIALPROFILE($,$,#10,#1200,$,$); #1213=IFCCARTESIANPOINTLIST2D(((-0.75,95.),(1.15380592228744,99.5961940777126),(5.75,101.5),(72.5,101.5),(77.0961940777126,99.5961940777126),(79.,95.),(79.,85.5),(77.5,85.5),(77.5,95.),(76.0355339059327,98.5355339059327),(72.5,100.),(5.75,100.),(2.21446609406726,98.5355339059327),(0.75,95.),(0.75,-95.),(-1.15380592228744,-99.5961940777126),(-5.75,-101.5),(-67.5,-101.5),(-72.0961940777126,-99.5961940777126),(-74.,-95.),(-74.,-85.5),(-72.5,-85.5),(-72.5,-95.),(-71.0355339059327,-98.5355339059327),(-67.5,-100.),(-5.75,-100.),(-2.21446609406726,-98.5355339059327),(-0.75,-95.))); -#1214=IFCINDEXEDPOLYCURVE(#1213,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1214=IFCINDEXEDPOLYCURVE(#1213,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1215=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z20015',#1214); #1216=IFCBEAMTYPE('0$G4713B952QsvSSTxLf3i',$,'Z20015',$,$,$,$,$,$,.NOTDEFINED.); #1217=IFCMATERIALPROFILESET($,$,(#1219),$); @@ -1233,7 +1233,7 @@ DATA; #1226=IFCRELASSOCIATESMATERIAL('31aZ$zzx12hx9x5g3unL4D',$,$,$,(#1224),#1225); #1227=IFCMATERIALPROFILE($,$,#10,#1215,$,$); #1228=IFCCARTESIANPOINTLIST2D(((-0.95,94.6),(1.07096320981282,99.4790367901872),(5.95,101.5),(72.1,101.5),(76.9790367901872,99.4790367901872),(79.,94.6),(79.,82.),(77.1,82.),(77.1,94.6),(75.6355339059327,98.1355339059327),(72.1,99.6),(5.95,99.6),(2.41446609406726,98.1355339059327),(0.95,94.6),(0.95,-94.6),(-1.07096320981282,-99.4790367901872),(-5.95,-101.5),(-67.1,-101.5),(-71.9790367901872,-99.4790367901872),(-74.,-94.6),(-74.,-82.),(-72.1,-82.),(-72.1,-94.6),(-70.6355339059327,-98.1355339059327),(-67.1,-99.6),(-5.95,-99.6),(-2.41446609406726,-98.1355339059327),(-0.95,-94.6))); -#1229=IFCINDEXEDPOLYCURVE(#1228,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1229=IFCINDEXEDPOLYCURVE(#1228,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1230=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z20019',#1229); #1231=IFCBEAMTYPE('3r4A8EVaLAqvBFx9l_JHid',$,'Z20019',$,$,$,$,$,$,.NOTDEFINED.); #1232=IFCMATERIALPROFILESET($,$,(#1234),$); @@ -1248,7 +1248,7 @@ DATA; #1241=IFCRELASSOCIATESMATERIAL('0uHkn_eVrDluLvy66WocJx',$,$,$,(#1239),#1240); #1242=IFCMATERIALPROFILE($,$,#10,#1230,$,$); #1243=IFCCARTESIANPOINTLIST2D(((-1.2,94.1),(0.967409819219548,99.3325901807805),(6.2,101.5),(71.6,101.5),(76.8325901807805,99.3325901807805),(79.,94.1),(79.,80.5),(76.6,80.5),(76.6,94.1),(75.1355339059327,97.6355339059327),(71.6,99.1),(6.2,99.1),(2.66446609406726,97.6355339059327),(1.2,94.1),(1.2,-94.1),(-0.967409819219548,-99.3325901807805),(-6.2,-101.5),(-66.6,-101.5),(-71.8325901807805,-99.3325901807805),(-74.,-94.1),(-74.,-80.5),(-71.6,-80.5),(-71.6,-94.1),(-70.1355339059327,-97.6355339059327),(-66.6,-99.1),(-6.2,-99.1),(-2.66446609406726,-97.6355339059327),(-1.2,-94.1))); -#1244=IFCINDEXEDPOLYCURVE(#1243,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1244=IFCINDEXEDPOLYCURVE(#1243,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1245=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z20024',#1244); #1246=IFCBEAMTYPE('1_INRg1Jn3kBtThvPM29uW',$,'Z20024',$,$,$,$,$,$,.NOTDEFINED.); #1247=IFCMATERIALPROFILESET($,$,(#1249),$); @@ -1263,7 +1263,7 @@ DATA; #1256=IFCRELASSOCIATESMATERIAL('1PvUP89HnAMxMdwz5ZMbt8',$,$,$,(#1254),#1255); #1257=IFCMATERIALPROFILE($,$,#10,#1245,$,$); #1258=IFCCARTESIANPOINTLIST2D(((-0.95,120.1),(1.07096320981282,124.979036790187),(5.95,127.),(72.1,127.),(76.9790367901872,124.979036790187),(79.,120.1),(79.,108.),(77.1,108.),(77.1,120.1),(75.6355339059327,123.635533905933),(72.1,125.1),(5.95,125.1),(2.41446609406726,123.635533905933),(0.95,120.1),(0.95,-120.1),(-1.07096320981282,-124.979036790187),(-5.95,-127.),(-67.1,-127.),(-71.9790367901872,-124.979036790187),(-74.,-120.1),(-74.,-108.),(-72.1,-108.),(-72.1,-120.1),(-70.6355339059327,-123.635533905933),(-67.1,-125.1),(-5.95,-125.1),(-2.41446609406726,-123.635533905933),(-0.95,-120.1))); -#1259=IFCINDEXEDPOLYCURVE(#1258,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1259=IFCINDEXEDPOLYCURVE(#1258,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1260=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z25019',#1259); #1261=IFCBEAMTYPE('3l_SXwNcDD5uqArnevt96T',$,'Z25019',$,$,$,$,$,$,.NOTDEFINED.); #1262=IFCMATERIALPROFILESET($,$,(#1264),$); @@ -1278,7 +1278,7 @@ DATA; #1271=IFCRELASSOCIATESMATERIAL('1stPie3Db4Wvhe7D$EjDaX',$,$,$,(#1269),#1270); #1272=IFCMATERIALPROFILE($,$,#10,#1260,$,$); #1273=IFCCARTESIANPOINTLIST2D(((-1.2,119.6),(0.967409819219548,124.83259018078),(6.2,127.),(71.6,127.),(76.8325901807805,124.83259018078),(79.,119.6),(79.,106.5),(76.6,106.5),(76.6,119.6),(75.1355339059327,123.135533905933),(71.6,124.6),(6.2,124.6),(2.66446609406726,123.135533905933),(1.2,119.6),(1.2,-119.6),(-0.967409819219548,-124.83259018078),(-6.2,-127.),(-66.6,-127.),(-71.8325901807805,-124.83259018078),(-74.,-119.6),(-74.,-106.5),(-71.6,-106.5),(-71.6,-119.6),(-70.1355339059327,-123.135533905933),(-66.6,-124.6),(-6.2,-124.6),(-2.66446609406726,-123.135533905933),(-1.2,-119.6))); -#1274=IFCINDEXEDPOLYCURVE(#1273,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1274=IFCINDEXEDPOLYCURVE(#1273,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1275=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z25024',#1274); #1276=IFCBEAMTYPE('1ATUTlPVjEGf4b3$enyTPE',$,'Z25024',$,$,$,$,$,$,.NOTDEFINED.); #1277=IFCMATERIALPROFILESET($,$,(#1279),$); @@ -1293,7 +1293,7 @@ DATA; #1286=IFCRELASSOCIATESMATERIAL('0w5PbIos5D3Q_qxzmPSqXy',$,$,$,(#1284),#1285); #1287=IFCMATERIALPROFILE($,$,#10,#1275,$,$); #1288=IFCCARTESIANPOINTLIST2D(((-1.2,142.6),(0.967409819219548,147.83259018078),(6.2,150.),(92.6,150.),(97.8325901807805,147.83259018078),(100.,142.6),(100.,122.),(97.6,122.),(97.6,142.6),(96.1355339059327,146.135533905933),(92.6,147.6),(6.2,147.6),(2.66446609406726,146.135533905933),(1.2,142.6),(1.2,-142.6),(-0.967409819219548,-147.83259018078),(-6.2,-150.),(-85.6,-150.),(-90.8325901807805,-147.83259018078),(-93.,-142.6),(-93.,-122.),(-90.6,-122.),(-90.6,-142.6),(-89.1355339059327,-146.135533905933),(-85.6,-147.6),(-6.2,-147.6),(-2.66446609406726,-146.135533905933),(-1.2,-142.6))); -#1289=IFCINDEXEDPOLYCURVE(#1288,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1289=IFCINDEXEDPOLYCURVE(#1288,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1290=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z30024',#1289); #1291=IFCBEAMTYPE('2k2XkLN9r3fuOMBaXMPYhV',$,'Z30024',$,$,$,$,$,$,.NOTDEFINED.); #1292=IFCMATERIALPROFILESET($,$,(#1294),$); @@ -1308,7 +1308,7 @@ DATA; #1301=IFCRELASSOCIATESMATERIAL('2nXulobT1C2OGtY97Gjx6F',$,$,$,(#1299),#1300); #1302=IFCMATERIALPROFILE($,$,#10,#1290,$,$); #1303=IFCCARTESIANPOINTLIST2D(((-1.5,142.),(0.843145750507619,147.656854249492),(6.5,150.),(92.,150.),(97.6568542494924,147.656854249492),(100.,142.),(100.,118.5),(97.,118.5),(97.,142.),(95.5355339059327,145.535533905933),(92.,147.),(6.5,147.),(2.96446609406726,145.535533905933),(1.5,142.),(1.5,-142.),(-0.843145750507619,-147.656854249492),(-6.5,-150.),(-85.,-150.),(-90.6568542494924,-147.656854249492),(-93.,-142.),(-93.,-118.5),(-90.,-118.5),(-90.,-142.),(-88.5355339059327,-145.535533905933),(-85.,-147.),(-6.5,-147.),(-2.96446609406726,-145.535533905933),(-1.5,-142.))); -#1304=IFCINDEXEDPOLYCURVE(#1303,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1304=IFCINDEXEDPOLYCURVE(#1303,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1305=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z30030',#1304); #1306=IFCBEAMTYPE('3hgB$QmEz8OxFJnZXlc$aH',$,'Z30030',$,$,$,$,$,$,.NOTDEFINED.); #1307=IFCMATERIALPROFILESET($,$,(#1309),$); @@ -1323,7 +1323,7 @@ DATA; #1316=IFCRELASSOCIATESMATERIAL('3d8ekSQGDC6PsQAQAVO0Dg',$,$,$,(#1314),#1315); #1317=IFCMATERIALPROFILE($,$,#10,#1305,$,$); #1318=IFCCARTESIANPOINTLIST2D(((-1.5,167.),(0.843145750507619,172.656854249492),(6.5,175.),(121.,175.),(126.656854249492,172.656854249492),(129.,167.),(129.,145.),(126.,145.),(126.,167.),(124.535533905933,170.535533905933),(121.,172.),(6.5,172.),(2.96446609406726,170.535533905933),(1.5,167.),(1.5,-167.),(-0.843145750507619,-172.656854249492),(-6.5,-175.),(-113.,-175.),(-118.656854249492,-172.656854249492),(-121.,-167.),(-121.,-145.),(-118.,-145.),(-118.,-167.),(-116.535533905933,-170.535533905933),(-113.,-172.),(-6.5,-172.),(-2.96446609406726,-170.535533905933),(-1.5,-167.))); -#1319=IFCINDEXEDPOLYCURVE(#1318,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((1,28))),$); +#1319=IFCINDEXEDPOLYCURVE(#1318,(IFCLINEINDEX((28,1)),IFCARCINDEX((1,2,3)),IFCLINEINDEX((3,4)),IFCARCINDEX((4,5,6)),IFCLINEINDEX((6,7)),IFCLINEINDEX((7,8)),IFCLINEINDEX((8,9)),IFCARCINDEX((9,10,11)),IFCLINEINDEX((11,12)),IFCARCINDEX((12,13,14)),IFCLINEINDEX((14,15)),IFCARCINDEX((15,16,17)),IFCLINEINDEX((17,18)),IFCARCINDEX((18,19,20)),IFCLINEINDEX((20,21)),IFCLINEINDEX((21,22)),IFCLINEINDEX((22,23)),IFCARCINDEX((23,24,25)),IFCLINEINDEX((25,26)),IFCARCINDEX((26,27,28)),IFCLINEINDEX((28,1))),$); #1320=IFCARBITRARYCLOSEDPROFILEDEF(.AREA.,'Z35030',#1319); #1321=IFCBEAMTYPE('09n0CdIgr1tBqr2VPAvQMk',$,'Z35030',$,$,$,$,$,$,.NOTDEFINED.); #1322=IFCMATERIALPROFILESET($,$,(#1324),$); diff --git a/src/blenderbim/scripts/generate_furniture_library.py b/src/blenderbim/scripts/generate_furniture_library.py index 844519f811..b0bf34c3a1 100644 --- a/src/blenderbim/scripts/generate_furniture_library.py +++ b/src/blenderbim/scripts/generate_furniture_library.py @@ -20,195 +20,8 @@ import ifcopenshell import ifcopenshell.api from math import cos, tan, pi from pathlib import Path -from mathutils import Vector from itertools import chain - -from ifcopenshell.util.shape_builder import ShapeBuilder - -V = lambda *x: Vector([float(i) for i in x]) - - -def get_simple_2dcurve_data(coords, fillets=[], fillet_radius=[], closed=True, ifc_file=None): - """ - Creates simple 2D curve from set of 2d coords and list of points with fillets. - Simple curve means that all fillets are based on 90 degree angle. - - > coords: list of 2d coords. Example: ((x0,y0), (x1,y1), (x2, y2)) - > fillets: list of points from `coords` to base fillet on. Example: (1,) - > fillet_radius: list of fillet radius for each of corresponding point form `fillets`. Example: (5.,) - Note: filler_radius could be just 1 float value if it's the same for all fillets. - - Optional arguments: - > closed: boolean whether curve should be closed (whether last point connected to first one). Default: True - > ifc_file: ifc file to create IfcIndexedPolyCurve for the function output - - < returns (points, segments, ifc_curve) for the created simple curve - if both points in e are equally far from pt, then v1 is returned.""" - - # option to use same fillet radius for all fillets - if isinstance(fillet_radius, float): - fillet_radius = [fillet_radius] * len(fillets) - - fillets = dict(zip(fillets, fillet_radius)) - segments = [] - points = [] - for co_i, co in enumerate(coords, 0): - current_point = len(points) - if co_i in fillets: - r = fillets[co_i] - rsb = r * cos(pi / 4) # radius shift big - rss = r - rsb # radius shift small - - next_co = coords[(co_i + 1) % len(coords)] - previous_co = coords[co_i - 1] - - # identify fillet type (1 of 4 possible types) - x_direction = 1 if coords[co_i][0] < previous_co[0] or coords[co_i][0] < next_co[0] else -1 - y_direction = 1 if coords[co_i][1] < previous_co[1] or coords[co_i][1] < next_co[1] else -1 - - xshift_point = (co[0] + r * x_direction, co[1]) - middle_point = (co[0] + rss * x_direction, co[1] + rss * y_direction) - yshift_point = (co[0], co[1] + r * y_direction) - - # identify fillet direction - if co[1] == previous_co[1]: - points.extend((xshift_point, middle_point, yshift_point)) - else: - points.extend((yshift_point, middle_point, xshift_point)) - - segments.append([current_point - 1, current_point]) - segments.append([current_point, current_point + 1, current_point + 2]) - else: - points.append(co) - if co_i != 0: - segments.append([current_point - 1, current_point]) - - if closed: - segments.append([len(points) - 1, 0]) - - # replace negative index - if segments[0][0] == -1: - segments[0][0] = len(points) - 1 - - # sometime fillet points could match previous or next points in line - # I remove them at the end to avoid making fillet algorithm even less readable - points, segments = remove_redundant_points(points, segments) - ifc_curve = None - if ifc_file: - ifc_points = ifc_file.createIfcCartesianPointList2D(points) - ifc_segments = [] - for segment in segments: - segment = [i + 1 for i in segment] - if len(segment) == 2: - ifc_segments.append(ifc_file.createIfcLineIndex(segment)) - elif len(segment) == 3: - ifc_segments.append(ifc_file.createIfcArcIndex(segment)) - - ifc_curve = ifc_file.createIfcIndexedPolyCurve(Points=ifc_points, Segments=ifc_segments) - return (points, segments, ifc_curve) - - -def remove_redundant_points(points, segments): - # prevent mutating - points = [tuple(p) for p in points] - segments = segments.copy() - - # find duplicate points, reindex them in segments - # and mark them to delete later - points_to_remove = [] - prev_point = 0 - for i, p in enumerate(points[1:], 1): - if p != points[prev_point]: - prev_point = i - continue - - valid_segments = [] - for s in segments: - s = [ps if ps != i else prev_point for ps in s] - valid_segments.append(s) - segments = valid_segments - points_to_remove.append(i) - - # remove duplicate segments - valid_segments = [segment for segment in segments if len(set(segment)) != 1] - points = [point for i, point in enumerate(points) if i not in points_to_remove] - # correct the order in segments - unique_points = sorted(set(chain(*valid_segments))) - unique_points_translation = {prev: i for i, prev in enumerate(unique_points)} - valid_segments = [[unique_points_translation[p] for p in s] for s in valid_segments] - - return points, valid_segments - - -def create_z_profile_lips_curve( - ifc_file, FirstFlangeWidth, SecondFlangeWidth, Depth, Girth, WallThickness, FilletRadius -): - x1 = FirstFlangeWidth - x2 = SecondFlangeWidth - y = Depth / 2 - g = Girth - t = WallThickness - r = FilletRadius - - coords = ( - (-t / 2, y), - (x2, y), - (x2, y - g), - (x2 - t, y - g), - (x2 - t, y - t), - (t / 2, y - t), - (t / 2, -y), - (-x1, -y), - (-x1, -y + g), - (-x1 + t, -y + g), - (-x1 + t, -y + t), - (-t / 2, -y + t), - ) - - # no additional thickness in outer radius option - # points, segments, ifc_curve = create_curve_from_coords(coords, fillets = (0, 1, 4, 5, 6, 7, 10, 11), fillet_radius=r, closed=True, ifc_file=ifc_file) - points, segments, ifc_curve = get_simple_2dcurve_data( - coords, - fillets=(0, 1, 4, 5, 6, 7, 10, 11), - fillet_radius=(r + t, r + t, r, r, r + t, r + t, r, r), - closed=True, - ifc_file=ifc_file, - ) - - return ifc_curve - - -def create_transition_arc_ifc(width, height, ifc_file=None): - # create an arc in the rectangle with specified width and height - # if it's not possible to make a complete arc - # it will create arc with longest radius possible - # and straight segment in the middle - fillet_size = (width / 2) / height - if fillet_size <= 1: - fillet_radius = height * fillet_size - curve_coords = [ - (0.0, 0.0), - (0.0, height), - (width * 0.5, height), - (width, height), - (width, 0.0), - ] - fillets = (1, 3) - else: - fillet_radius = height - curve_coords = [ - (0.0, 0.0), - (0.0, height), - (fillet_radius, height), - (width - fillet_radius, height), - (width, height), - (width, 0.0), - ] - fillets = (1, 4) - points, segments, transition_arc = get_simple_2dcurve_data( - curve_coords, fillets, fillet_radius, closed=False, ifc_file=ifc_file - ) - return points, segments, transition_arc +from ifcopenshell.util.shape_builder import ShapeBuilder, V class LibraryGenerator: @@ -289,12 +102,12 @@ class LibraryGenerator: if position: kwargs["position"] = position - _, _, rectangle = get_simple_2dcurve_data( + _, _, rectangle = builder.get_simple_2dcurve_data( coords=builder.get_rectangle_coords(**kwargs), fillets=(0, 1, 2, 3), fillet_radius=fillet_radius, closed=True, - ifc_file=self.file, + create_ifc_curve=True, ) return rectangle @@ -431,9 +244,9 @@ class LibraryGenerator: second_arc_depth = depth * (1 - 0.10) second_arc_width = width - (depth - second_arc_depth) * 2 polyline = builder.polyline((V(0, 0), V(width, 0))) - _, _, first_semicircle = create_transition_arc_ifc(width, depth, ifc_file=self.file) + _, _, first_semicircle = builder.create_transition_arc_ifc(width, depth, create_ifc_curve=True) - _, _, second_semicircle = create_transition_arc_ifc(second_arc_width, second_arc_depth, ifc_file=self.file) + _, _, second_semicircle = builder.create_transition_arc_ifc(second_arc_width, second_arc_depth, create_ifc_curve=True) builder.translate(second_semicircle, V((width - second_arc_width) / 2, 0)) builder.translate([polyline, first_semicircle, second_semicircle], shift_to_center) @@ -1105,8 +918,8 @@ class LibraryGenerator: fillets_radius = [fillets_radius * 5] * 2 + [fillets_radius] * 2 else: fillets_radius = [fillets_radius] * 4 - _, _, fillet_rectangle = get_simple_2dcurve_data( - coords=coords, fillets=(0, 1, 2, 3), fillet_radius=fillets_radius, closed=True, ifc_file=self.file + _, _, fillet_rectangle = builder.get_simple_2dcurve_data( + coords=coords, fillets=(0, 1, 2, 3), fillet_radius=fillets_radius, closed=True, create_ifc_curve=True ) circle_position = V( @@ -1182,8 +995,8 @@ class LibraryGenerator: ] fillets = (0, 1, 6, 7) fillet_radius = (width / 2, width / 5, width / 5, width / 2) - _, _, seat = get_simple_2dcurve_data( - coords, fillets, fillet_radius=fillet_radius, closed=True, ifc_file=self.file + _, _, seat = builder.get_simple_2dcurve_data( + coords, fillets, fillet_radius=fillet_radius, closed=True, create_ifc_curve=True ) seat_first_part = ifcopenshell.util.element.copy_deep(self.file, seat) @@ -1251,8 +1064,8 @@ class LibraryGenerator: size=V(width, depth - cistern_depth), position=V(0, cistern_depth) + shift_to_center ) fillet_radius = min(width / 2, (depth - cistern_depth) / 2) - _, _, seat_main_curve = get_simple_2dcurve_data( - seat_main_curve_points, fillets=(2, 3), fillet_radius=fillet_radius, closed=True, ifc_file=self.file + _, _, seat_main_curve = builder.get_simple_2dcurve_data( + seat_main_curve_points, fillets=(2, 3), fillet_radius=fillet_radius, closed=True, create_ifc_curve=True ) seat_main_curve_mask = builder.circle(center=V(0, depth - fillet_radius), radius=fillet_radius * 0.75) seat_main_curve_profile = builder.profile(seat_main_curve, inner_curves=seat_main_curve_mask) diff --git a/src/blenderbim/scripts/generate_steel_profiles_library.py b/src/blenderbim/scripts/generate_steel_profiles_library.py index 06ffbfd2ca..8f7765eb5d 100644 --- a/src/blenderbim/scripts/generate_steel_profiles_library.py +++ b/src/blenderbim/scripts/generate_steel_profiles_library.py @@ -24,119 +24,8 @@ import ifcopenshell.api import boltspy as bolts from math import cos, pi from pathlib import Path -from mathutils import Vector +from ifcopenshell.util.shape_builder import ShapeBuilder, V -V = lambda *x: Vector([float(i) for i in x]) - -def create_simple_2dcurve(coords, fillets, fillet_radius, closed=True, ifc_file=None): - """ - Creates simple 2D curve from set of 2d coords and list of points with fillets. - Simple curve means that all fillets are based on 90 degree angle. - - > coords: list of 2d coords. Example: ((x0,y0), (x1,y1), (x2, y2)) - > fillets: list of points from `coords` to base fillet on. Example: (1,) - > fillet_radius: list of fillet radius for each of corresponding point form `fillets`. Example: (5.,) - Note: filler_radius could be just 1 float value if it's the same for all fillets. - - Optional arguments: - > closed: boolean whether curve should be closed (whether last point connected to first one). Default: True - > ifc_file: ifc file to create IfcIndexedPolyCurve for the function output - - < returns (points, segments, ifc_curve) for the created simple curve - if both points in e are equally far from pt, then v1 is returned.""" - - # option to use same fillet radius for all fillets - if isinstance(fillet_radius, float): - fillet_radius = [fillet_radius] * len(fillets) - - fillets = dict(zip(fillets, fillet_radius)) - segments = [] - points = [] - for co_i, co in enumerate(coords, 0): - current_point = len(points) - if co_i in fillets: - r = fillets[co_i] - rsb = r * cos(pi/4) # radius shift big - rss = r - rsb # radius shift small - - next_co = coords[(co_i+1) % len(coords)] - previous_co = coords[co_i-1] - - # identify fillet type (1 of 4 possible types) - x_direction = 1 if coords[co_i][0] < previous_co[0] or coords[co_i][0] < next_co[0] else -1 - y_direction = 1 if coords[co_i][1] < previous_co[1] or coords[co_i][1] < next_co[1] else -1 - - xshift_point = (co[0] + r * x_direction, co[1]) - middle_point = (co[0] + rss * x_direction, co[1] + rss * y_direction) - yshift_point = (co[0], co[1] + r * y_direction) - - # identify fillet direction - if co[1] == previous_co[1]: - points.extend( (xshift_point, middle_point, yshift_point)) - else: - points.extend( (yshift_point, middle_point, xshift_point)) - - segments.append( [current_point-1, current_point] ) - segments.append( [current_point, current_point+1, current_point+2] ) - else: - points.append( co ) - if co_i != 0: - segments.append( [current_point-1, current_point] ) - - if closed: - segments.append( [0, len(points)-1] ) - - # replace negative index - if segments[0][0] == -1: - segments[0][0] = len(points) - 1 - - ifc_curve = None - if ifc_file: - ifc_points = ifc_file.createIfcCartesianPointList2D(points) - ifc_segments = [] - for segment in segments: - segment = [i+1 for i in segment] - if len(segment) == 2: - ifc_segments.append( ifc_file.createIfcLineIndex( segment )) - elif len(segment) == 3: - ifc_segments.append( ifc_file.createIfcArcIndex( segment )) - - ifc_curve = ifc_file.createIfcIndexedPolyCurve(Points=ifc_points, Segments=ifc_segments) - - return (points, segments, ifc_curve) - -def create_z_profile_lips_curve(ifc_file, FirstFlangeWidth, SecondFlangeWidth, Depth, Girth, WallThickness, FilletRadius): - x1 = FirstFlangeWidth - x2 = SecondFlangeWidth - y = Depth / 2 - g = Girth - t = WallThickness - r = FilletRadius - - coords = ( - (-t/2, y), - (x2, y), - (x2, y-g), - (x2-t, y-g), - (x2-t, y-t), - (t/2, y-t), - (t/2, -y), - (-x1, -y), - (-x1, -y+g), - (-x1+t, -y+g), - (-x1+t, -y+t), - (-t/2, -y+t) - ) - - # no additional thickness in outer radius option - # points, segments, ifc_curve = create_curve_from_coords(coords, fillets = (0, 1, 4, 5, 6, 7, 10, 11), fillet_radius=r, closed=True, ifc_file=ifc_file) - - points, segments, ifc_curve = create_simple_2dcurve(coords, - fillets = (0, 1, 4, 5, 6, 7, 10, 11), - fillet_radius=(r+t, r+t, r, r, r+t, r+t, r, r), - closed=True, ifc_file=ifc_file) - - return ifc_curve class LibraryGenerator: def generate(self, parse_profiles_type="EU", output_filename="IFC4 EU Steel.ifc"): @@ -158,6 +47,7 @@ class LibraryGenerator: ) dim_exponents = self.file.createIfcDimensionalExponents(0, 0, 0, 0, 0, 0, 0) length_unit = ifcopenshell.api.run("unit.add_si_unit", self.file, unit_type="LENGTHUNIT", prefix="MILLI") + builder = ShapeBuilder(self.file) # define angle unit to use degrees for IfcPlaneAngleMeasure: # https://ifc43-docs.standards.buildingsmart.org/IFC/RELEASE/IFC4x3/HTML/lexical/IfcPlaneAngleMeasure.htm @@ -258,7 +148,7 @@ class LibraryGenerator: # by default bolts provides diameter, so we need to convert it to radius ifc_params["Radius"] /= 2 elif prof_type == "profile_z_lips": - ifc_curve = create_z_profile_lips_curve(self.file, **ifc_params) + ifc_curve = builder.create_z_profile_lips_curve(**ifc_params) ifc_params = {"OuterCurve": ifc_curve} elif prof_type == "profile_l*lbeam_2l": profiles_gap = ifc_params["ProfilesGap"] diff --git a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py index 130b44727f..fdcd02815c 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py +++ b/src/ifcopenshell-python/ifcopenshell/util/shape_builder.py @@ -21,6 +21,7 @@ import ifcopenshell import ifcopenshell.api from math import cos, sin, pi from mathutils import Vector, Matrix +from itertools import chain V = lambda *x: Vector([float(i) for i in x]) sign = lambda x: x and (1, -1)[x < 0] @@ -635,3 +636,182 @@ class ShapeBuilder: elif polyline.is_a("IfcPolyline"): for i, co in enumerate(coords): polyline.Points[i].Coordinates = co + + def get_simple_2dcurve_data(self, coords, fillets=[], fillet_radius=[], closed=True, create_ifc_curve=None): + """ + Creates simple 2D curve from set of 2d coords and list of points with fillets. + Simple curve means that all fillets are based on 90 degree angle. + + > coords: list of 2d coords. Example: ((x0,y0), (x1,y1), (x2, y2)) + > fillets: list of points from `coords` to base fillet on. Example: (1,) + > fillet_radius: list of fillet radius for each of corresponding point form `fillets`. Example: (5.,) + Note: filler_radius could be just 1 float value if it's the same for all fillets. + + Optional arguments: + > closed: boolean whether curve should be closed (whether last point connected to first one). Default: True + > create_ifc_curve: create IfcIndexedPolyCurve or just return the data. Default: False + + < returns (points, segments, ifc_curve) for the created simple curve + if both points in e are equally far from pt, then v1 is returned.""" + + def remove_redundant_points(points, segments): + # prevent mutating + points = [tuple(p) for p in points] + segments = segments.copy() + + # find duplicate points, reindex them in segments + # and mark them to delete later + points_to_remove = [] + prev_point = 0 + for i, p in enumerate(points[1:], 1): + if p != points[prev_point]: + prev_point = i + continue + + valid_segments = [] + for s in segments: + s = [ps if ps != i else prev_point for ps in s] + valid_segments.append(s) + segments = valid_segments + points_to_remove.append(i) + + # remove duplicate segments + valid_segments = [segment for segment in segments if len(set(segment)) != 1] + points = [point for i, point in enumerate(points) if i not in points_to_remove] + # correct the order in segments + unique_points = sorted(set(chain(*valid_segments))) + unique_points_translation = {prev: i for i, prev in enumerate(unique_points)} + valid_segments = [[unique_points_translation[p] for p in s] for s in valid_segments] + + return points, valid_segments + + # option to use same fillet radius for all fillets + if isinstance(fillet_radius, float): + fillet_radius = [fillet_radius] * len(fillets) + + fillets = dict(zip(fillets, fillet_radius)) + segments = [] + points = [] + for co_i, co in enumerate(coords, 0): + current_point = len(points) + if co_i in fillets: + r = fillets[co_i] + rsb = r * cos(pi / 4) # radius shift big + rss = r - rsb # radius shift small + + next_co = coords[(co_i + 1) % len(coords)] + previous_co = coords[co_i - 1] + + # identify fillet type (1 of 4 possible types) + x_direction = 1 if coords[co_i][0] < previous_co[0] or coords[co_i][0] < next_co[0] else -1 + y_direction = 1 if coords[co_i][1] < previous_co[1] or coords[co_i][1] < next_co[1] else -1 + + xshift_point = (co[0] + r * x_direction, co[1]) + middle_point = (co[0] + rss * x_direction, co[1] + rss * y_direction) + yshift_point = (co[0], co[1] + r * y_direction) + + # identify fillet direction + if co[1] == previous_co[1]: + points.extend((xshift_point, middle_point, yshift_point)) + else: + points.extend((yshift_point, middle_point, xshift_point)) + + segments.append([current_point - 1, current_point]) + segments.append([current_point, current_point + 1, current_point + 2]) + else: + points.append(co) + if co_i != 0: + segments.append([current_point - 1, current_point]) + + if closed: + segments.append([len(points) - 1, 0]) + + # replace negative index + if segments[0][0] == -1: + segments[0][0] = len(points) - 1 + + # sometime fillet points could match previous or next points in line + # I remove them at the end to avoid making fillet algorithm even less readable + points, segments = remove_redundant_points(points, segments) + ifc_curve = None + if create_ifc_curve: + ifc_points = self.file.createIfcCartesianPointList2D(points) + ifc_segments = [] + for segment in segments: + segment = [i + 1 for i in segment] + if len(segment) == 2: + ifc_segments.append(self.file.createIfcLineIndex(segment)) + elif len(segment) == 3: + ifc_segments.append(self.file.createIfcArcIndex(segment)) + + ifc_curve = self.file.createIfcIndexedPolyCurve(Points=ifc_points, Segments=ifc_segments) + return (points, segments, ifc_curve) + + def create_z_profile_lips_curve(self, FirstFlangeWidth, SecondFlangeWidth, Depth, Girth, WallThickness, FilletRadius): + x1 = FirstFlangeWidth + x2 = SecondFlangeWidth + y = Depth / 2 + g = Girth + t = WallThickness + r = FilletRadius + + # fmt: off + coords = ( + (-t/2, y), + (x2, y), + (x2, y-g), + (x2-t, y-g), + (x2-t, y-t), + (t/2, y-t), + (t/2, -y), + (-x1, -y), + (-x1, -y+g), + (-x1+t, -y+g), + (-x1+t, -y+t), + (-t/2, -y+t) + ) + # fmt: on + + # option for no additional thickness in outer radius: + # points, segments, ifc_curve = create_curve_from_coords( + # coords, fillets = (0, 1, 4, 5, 6, 7, 10, 11), fillet_radius=r, closed=True, ifc_file=ifc_file + # ) + + points, segments, ifc_curve = self.get_simple_2dcurve_data(coords, + fillets = (0, 1, 4, 5, 6, 7, 10, 11), + fillet_radius=(r+t, r+t, r, r, r+t, r+t, r, r), + closed=True, create_ifc_curve=True) + + return ifc_curve + + def create_transition_arc_ifc(self, width, height, create_ifc_curve=False): + # create an arc in the rectangle with specified width and height + # if it's not possible to make a complete arc + # it will create arc with longest radius possible + # and straight segment in the middle + fillet_size = (width / 2) / height + if fillet_size <= 1: + fillet_radius = height * fillet_size + curve_coords = [ + (0.0, 0.0), + (0.0, height), + (width * 0.5, height), + (width, height), + (width, 0.0), + ] + fillets = (1, 3) + else: + fillet_radius = height + curve_coords = [ + (0.0, 0.0), + (0.0, height), + (fillet_radius, height), + (width - fillet_radius, height), + (width, height), + (width, 0.0), + ] + fillets = (1, 4) + points, segments, transition_arc = self.get_simple_2dcurve_data( + curve_coords, fillets, fillet_radius, closed=False, create_ifc_curve=create_ifc_curve + ) + return points, segments, transition_arc \ No newline at end of file