diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 509da211..8a2d53c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: - name: Install dependencies run: | pip install behave pytest tabulate pyparsing sqlalchemy numpy pydantic pydot sqlalchemy_utils django python-dotenv deprecated pandas pyspellchecker rtree lark-parser networkx mpmath - wget -O /tmp/ifcopenshell_python.zip https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-`python3 -c 'import sys;print("".join(map(str, sys.version_info[0:2])))'`-v0.8.1-1d27161-linux64.zip + wget -O /tmp/ifcopenshell_python.zip https://s3.amazonaws.com/ifcopenshell-builds/ifcopenshell-python-`python3 -c 'import sys;print("".join(map(str, sys.version_info[0:2])))'`-v0.8.1-c49ca69-linux64.zip mkdir -p `python3 -c 'import site; print(site.getusersitepackages())'` unzip -d `python3 -c 'import site; print(site.getusersitepackages())'` /tmp/ifcopenshell_python.zip - name: Lint with flake8 diff --git a/features/steps/utils/geometry.py b/features/steps/utils/geometry.py index fe48de60..e57cdd07 100644 --- a/features/steps/utils/geometry.py +++ b/features/steps/utils/geometry.py @@ -158,10 +158,10 @@ def evaluate_segment(segment: ifcopenshell.entity_instance, dist_along: float) - :param dist_along: The distance along this segment at the point of interest (point to be calculated) """ s = ifcos_geom.settings() - pwf = wrapper.map_shape(s, segment.wrapped_data) - pwf_evaluator = wrapper.piecewise_function_evaluator(pwf, s) + seg_function = wrapper.map_shape(s, segment.wrapped_data) + seg_evaluator = wrapper.function_item_evaluator(s, seg_function) - segment_trans_mtx = pwf_evaluator.evaluate(dist_along) + segment_trans_mtx = seg_evaluator.evaluate(dist_along) return np.array(segment_trans_mtx, dtype=np.float64).T @@ -189,23 +189,20 @@ class AlignmentSegmentContinuityCalculation: current_start_direction: float = None current_start_gradient: float = None - def _calculate_positions(self) -> None: + def _get_u_at_end(self): + """ + Get the value of u corresponding to the end of the previous segment + """ + s = ifcos_geom.settings() + seg_function = wrapper.map_shape(s, self.previous_segment.wrapped_data) - u = abs(self.previous_segment.SegmentLength.wrappedValue) * self.length_unit_scale_factor - # for linear segments on vertical alignments (IfcGradientCurve) and cant alignments (IfcSegmentedReferenceCurve) - # we need to project the total segment length to the x-axis, i.e. the "distance along" axis - if self.previous_segment.ParentCurve.is_a().upper() == "IFCLINE": - if (self.previous_segment.UsingCurves[0].is_a().upper() == "IFCGRADIENTCURVE" ) or ( - self.previous_segment.UsingCurves[0].is_a().upper() == "IFCSEGMENTEDREFERENCECURVE"): - # ensure direction ratios have been normalized - x_comp, y_comp = self.previous_segment.Placement.RefDirection.DirectionRatios - divisor = math.sqrt(x_comp ** 2 + y_comp ** 2) - x_comp /= divisor - y_comp /= divisor - # adjust u so that it is based on the total "distance along" of the segment, - # not the total length of the segment (which includes an additional amount for the change in elevation) - u *= x_comp - prev_end_transform = evaluate_segment(segment=self.previous_segment, dist_along=u) + u = seg_function.length() / self.length_unit_scale_factor + + # adjust from model units to SI units for ifcopenshell calc + return u * self.length_unit_scale_factor + + def _calculate_positions(self) -> None: + prev_end_transform = evaluate_segment(segment=self.previous_segment, dist_along=self._get_u_at_end()) current_start_transform = evaluate_segment(segment=self.segment_to_analyze, dist_along=0.0) e0 = prev_end_transform[3][0] / self.length_unit_scale_factor @@ -217,8 +214,7 @@ def _calculate_positions(self) -> None: self.current_start_point = (s0, s1) def _calculate_directions(self) -> None: - u = abs(float(self.previous_segment.SegmentLength.wrappedValue)) * self.length_unit_scale_factor - prev_end_transform = evaluate_segment(segment=self.previous_segment, dist_along=u) + prev_end_transform = evaluate_segment(segment=self.previous_segment, dist_along=self._get_u_at_end()) current_start_transform = evaluate_segment(segment=self.segment_to_analyze, dist_along=0.0) prev_i = prev_end_transform[0][0] diff --git a/test/files/als017/fail-als017-scenario02-imperial_break_in_direction_angle.ifc b/test/files/als017/fail-als017-scenario02-imperial_break_in_direction_angle.ifc index ec79c60b..cf7706d9 100644 --- a/test/files/als017/fail-als017-scenario02-imperial_break_in_direction_angle.ifc +++ b/test/files/als017/fail-als017-scenario02-imperial_break_in_direction_angle.ifc @@ -19,7 +19,7 @@ DATA; #12=IFCDIRECTION((0.,0.,1.)); #13=IFCDIRECTION((1.,0.,0.)); #14=IFCAXIS2PLACEMENT3D(#11,#12,#13); -#15=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-02,#14,$); +#15=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-04,#14,$); #16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#15,$,.MODEL_VIEW.,$); #17=IFCCARTESIANPOINT((0.,0.,0.)); #18=IFCAXIS2PLACEMENT3D(#17,$,$); @@ -124,7 +124,7 @@ DATA; #117=IFCLINE(#114,#116); #118=IFCDIRECTION((0.999846863274572,0.0175)); #119=IFCAXIS2PLACEMENT2D(#104,#118); -#120=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#119,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.),#117); +#120=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#119,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.1837359),#117); #121=IFCALIGNMENTVERTICALSEGMENT($,$,0.,1200.,100.,0.0175,0.0175,$,.CONSTANTGRADIENT.); #122=IFCALIGNMENTSEGMENT('0XlKtmjWP31vWH3pMFVFZ0',$,$,$,$,#19,#225,#121); #123=IFCCARTESIANPOINT((0.,0.)); @@ -142,7 +142,7 @@ DATA; #135=IFCLINE(#132,#134); #136=IFCDIRECTION((0.999949998749938,-0.01)); #137=IFCAXIS2PLACEMENT2D(#106,#136); -#138=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#137,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.),#135); +#138=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#137,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.0799980),#135); #139=IFCALIGNMENTVERTICALSEGMENT($,$,2800.,1600.,127.,-0.01,-0.01,$,.CONSTANTGRADIENT.); #140=IFCALIGNMENTSEGMENT('3L5Oy3T4b7WhE4BOy1vRNB',$,$,$,$,#19,#229,#139); #141=IFCCARTESIANPOINT((0.,0.)); @@ -160,7 +160,7 @@ DATA; #153=IFCLINE(#150,#152); #154=IFCDIRECTION((0.999799979995999,0.02)); #155=IFCAXIS2PLACEMENT2D(#108,#154); -#156=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#155,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.),#153); +#156=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#155,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.1599870),#153); #157=IFCALIGNMENTVERTICALSEGMENT($,$,5600.,800.,117.,0.02,0.02,$,.CONSTANTGRADIENT.); #158=IFCALIGNMENTSEGMENT('1CTHPAShTEheZJuik5XMM7',$,$,$,$,#19,#233,#157); #159=IFCCARTESIANPOINT((0.,0.)); @@ -178,7 +178,7 @@ DATA; #171=IFCLINE(#168,#170); #172=IFCDIRECTION((0.999799979995999,-0.02)); #173=IFCAXIS2PLACEMENT2D(#110,#172); -#174=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#173,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1000.),#171); +#174=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#173,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1000.1999800),#171); #175=IFCALIGNMENTVERTICALSEGMENT($,$,8400.,1000.,133.,-0.02,-0.02,$,.CONSTANTGRADIENT.); #176=IFCALIGNMENTSEGMENT('0QLhiodhHADRBlFR0cDN18',$,$,$,$,#19,#237,#175); #177=IFCCARTESIANPOINT((0.,0.)); @@ -196,14 +196,14 @@ DATA; #189=IFCLINE(#186,#188); #190=IFCDIRECTION((0.999987499921874,-0.005)); #191=IFCAXIS2PLACEMENT2D(#112,#190); -#192=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#191,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2600.),#189); +#192=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#191,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2600.0324998),#189); #193=IFCALIGNMENTVERTICALSEGMENT($,$,10200.,2600.,103.,-0.005,-0.005,$,.CONSTANTGRADIENT.); #194=IFCALIGNMENTSEGMENT('1i9TFEUQb2Wfq8uoDmHMoN',$,$,$,$,#19,#241,#193); #195=IFCCARTESIANPOINT((0.,0.)); #196=IFCDIRECTION((1.,0.)); #197=IFCVECTOR(#196,1.); #198=IFCLINE(#195,#197); -#199=IFCDIRECTION((0.999987499921874,-0.005)); +#199=IFCDIRECTION((1.,0.)); #200=IFCAXIS2PLACEMENT2D(#113,#199); #201=IFCCURVESEGMENT(.DISCONTINUOUS.,#200,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(0.),#198); #202=IFCALIGNMENTVERTICALSEGMENT($,$,12800.,0.,90.,-0.005,-0.005,$,.CONSTANTGRADIENT.); diff --git a/test/files/als017/pass-als017-scenario01-imperial_continuous.ifc b/test/files/als017/pass-als017-scenario01-imperial_continuous.ifc index 688190a2..a4c7d588 100644 --- a/test/files/als017/pass-als017-scenario01-imperial_continuous.ifc +++ b/test/files/als017/pass-als017-scenario01-imperial_continuous.ifc @@ -19,7 +19,7 @@ DATA; #12=IFCDIRECTION((0.,0.,1.)); #13=IFCDIRECTION((1.,0.,0.)); #14=IFCAXIS2PLACEMENT3D(#11,#12,#13); -#15=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-01,#14,$); +#15=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#14,$); #16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#15,$,.MODEL_VIEW.,$); #17=IFCCARTESIANPOINT((0.,0.,0.)); #18=IFCAXIS2PLACEMENT3D(#17,$,$); @@ -122,7 +122,7 @@ DATA; #115=IFCDIRECTION((1.,0.)); #116=IFCVECTOR(#115,1.); #117=IFCLINE(#114,#116); -#118=IFCDIRECTION((2000.,35.)); +#118=IFCDIRECTION((0.999846910161925,0.01749732092783369)); #119=IFCAXIS2PLACEMENT2D(#104,#118); #120=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#119,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.18373593),#117); #121=IFCALIGNMENTVERTICALSEGMENT($,$,0.,1200.,100.,0.0175,0.0175,$,.CONSTANTGRADIENT.); @@ -131,16 +131,16 @@ DATA; #124=IFCDIRECTION((1.,0.)); #125=IFCAXIS2PLACEMENT2D(#123,#124); #126=IFCPOLYNOMIALCURVE(#125,(0.,1.),(121.,0.0175,-8.59375E-06),$); -#127=IFCDIRECTION((2000.,35.)); +#127=IFCDIRECTION((0.999846910161925, 0.01749732092783369)); #128=IFCAXIS2PLACEMENT2D(#105,#127); -#129=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#128,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.),#126); +#129=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#128,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.0616641341207),#126); #130=IFCALIGNMENTVERTICALSEGMENT($,$,1200.,1600.,121.,0.0175,-0.01,-58181.8181818182,.PARABOLICARC.); #131=IFCALIGNMENTSEGMENT('2hO3vvQE5AdeS5Eme$f7QL',$,$,$,$,#19,#227,#130); #132=IFCCARTESIANPOINT((0.,0.)); #133=IFCDIRECTION((1.,0.)); #134=IFCVECTOR(#133,1.); #135=IFCLINE(#132,#134); -#136=IFCDIRECTION((3000.,-30.0)); +#136=IFCDIRECTION((0.9999500037496875,-0.009999500037496875)); #137=IFCAXIS2PLACEMENT2D(#106,#136); #138=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#137,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.079998),#135); #139=IFCALIGNMENTVERTICALSEGMENT($,$,2800.,1600.,127.,-0.01,-0.01,$,.CONSTANTGRADIENT.); @@ -149,16 +149,16 @@ DATA; #142=IFCDIRECTION((1.,0.)); #143=IFCAXIS2PLACEMENT2D(#141,#142); #144=IFCPOLYNOMIALCURVE(#143,(0.,1.),(111.,-0.01,1.25E-05),$); -#145=IFCDIRECTION((3000.,-30.0)); +#145=IFCDIRECTION((0.9999500037496875,-0.009999500037496875)); #146=IFCAXIS2PLACEMENT2D(#107,#145); -#147=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#146,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.),#144); +#147=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#146,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.0599967004605),#144); #148=IFCALIGNMENTVERTICALSEGMENT($,$,4400.,1200.,111.,-0.01,0.02,40000.,.PARABOLICARC.); #149=IFCALIGNMENTSEGMENT('1PoEOI_HrBQupTSE4S8eo9',$,$,$,$,#19,#231,#148); #150=IFCCARTESIANPOINT((0.,0.)); #151=IFCDIRECTION((1.,0.)); #152=IFCVECTOR(#151,1.); #153=IFCLINE(#150,#152); -#154=IFCDIRECTION((2400.,48.)); +#154=IFCDIRECTION((0.999800059980007,0.01999600119960014)); #155=IFCAXIS2PLACEMENT2D(#108,#154); #156=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#155,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.159984003),#153); #157=IFCALIGNMENTVERTICALSEGMENT($,$,5600.,800.,117.,0.02,0.02,$,.CONSTANTGRADIENT.); @@ -167,16 +167,16 @@ DATA; #160=IFCDIRECTION((1.,0.)); #161=IFCAXIS2PLACEMENT2D(#159,#160); #162=IFCPOLYNOMIALCURVE(#161,(0.,1.),(133.,0.02,-1.E-05),$); -#163=IFCDIRECTION((2400.,48.)); +#163=IFCDIRECTION((0.999800059980007,0.01999600119960014)); #164=IFCAXIS2PLACEMENT2D(#109,#163); -#165=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#164,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2000.),#162); +#165=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#164,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2000.1333253344758),#162); #166=IFCALIGNMENTVERTICALSEGMENT($,$,6400.,2000.,133.,0.02,-0.02,-50000.,.PARABOLICARC.); #167=IFCALIGNMENTSEGMENT('2oM9hedcr8FQ1BmLfJrmq0',$,$,$,$,#19,#235,#166); #168=IFCCARTESIANPOINT((0.,0.)); #169=IFCDIRECTION((1.,0.)); #170=IFCVECTOR(#169,1.); #171=IFCLINE(#168,#170); -#172=IFCDIRECTION((2400.,-48.)); +#172=IFCDIRECTION((0.999800059980007,-0.01999600119960014)); #173=IFCAXIS2PLACEMENT2D(#110,#172); #174=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#173,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1000.19998),#171); #175=IFCALIGNMENTVERTICALSEGMENT($,$,8400.,1000.,133.,-0.02,-0.02,$,.CONSTANTGRADIENT.); @@ -185,16 +185,16 @@ DATA; #178=IFCDIRECTION((1.,0.)); #179=IFCAXIS2PLACEMENT2D(#177,#178); #180=IFCPOLYNOMIALCURVE(#179,(0.,1.),(113.,-0.02,9.375E-06),$); -#181=IFCDIRECTION((2400.,-48.)); +#181=IFCDIRECTION((0.999800059980007, -0.01999600119960014)); #182=IFCAXIS2PLACEMENT2D(#111,#181); -#183=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#182,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.),#180); +#183=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#182,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.0699957381095),#180); #184=IFCALIGNMENTVERTICALSEGMENT($,$,9400.,800.,113.,-0.02,-0.005,53333.3333333333,.PARABOLICARC.); #185=IFCALIGNMENTSEGMENT('3SsqC72Jf8quv1zyfESK3_',$,$,$,$,#19,#239,#184); #186=IFCCARTESIANPOINT((0.,0.)); #187=IFCDIRECTION((1.,0.)); #188=IFCVECTOR(#187,1.); #189=IFCLINE(#186,#188); -#190=IFCDIRECTION((3000.,-15.)); +#190=IFCDIRECTION((0.99998750023437,-0.00499993750117185)); #191=IFCAXIS2PLACEMENT2D(#112,#190); #192=IFCCURVESEGMENT(.CONTSAMEGRADIENT.,#191,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2600.0324998),#189); #193=IFCALIGNMENTVERTICALSEGMENT($,$,10200.,2600.,103.,-0.005,-0.005,$,.CONSTANTGRADIENT.); @@ -203,7 +203,7 @@ DATA; #196=IFCDIRECTION((1.,0.)); #197=IFCVECTOR(#196,1.); #198=IFCLINE(#195,#197); -#199=IFCDIRECTION((3000.,-15.)); +#199=IFCDIRECTION((0.99998750023437,-0.00499993750117185)); #200=IFCAXIS2PLACEMENT2D(#113,#199); #201=IFCCURVESEGMENT(.DISCONTINUOUS.,#200,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(0.),#198); #202=IFCALIGNMENTVERTICALSEGMENT($,$,12800.,0.,90.,-0.005,-0.005,$,.CONSTANTGRADIENT.); diff --git a/test/files/als017/pass-als017-scenario02-imperial_not_applicable.ifc b/test/files/als017/pass-als017-scenario02-imperial_not_applicable.ifc index 4c05a498..587ec3bb 100644 --- a/test/files/als017/pass-als017-scenario02-imperial_not_applicable.ifc +++ b/test/files/als017/pass-als017-scenario02-imperial_not_applicable.ifc @@ -19,7 +19,7 @@ DATA; #12=IFCDIRECTION((0.,0.,1.)); #13=IFCDIRECTION((1.,0.,0.)); #14=IFCAXIS2PLACEMENT3D(#11,#12,#13); -#15=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-02,#14,$); +#15=IFCGEOMETRICREPRESENTATIONCONTEXT($,'Model',3,1.E-05,#14,$); #16=IFCGEOMETRICREPRESENTATIONSUBCONTEXT('Axis','Model',*,*,*,*,#15,$,.MODEL_VIEW.,$); #17=IFCCARTESIANPOINT((0.,0.,0.)); #18=IFCAXIS2PLACEMENT3D(#17,$,$); @@ -122,7 +122,7 @@ DATA; #115=IFCDIRECTION((1.,0.)); #116=IFCVECTOR(#115,1.); #117=IFCLINE(#114,#116); -#118=IFCDIRECTION((0.999846863274572,0.01749732012)); +#118=IFCDIRECTION((0.999846910161925, 0.01749732092783369)); #119=IFCAXIS2PLACEMENT2D(#104,#118); #120=IFCCURVESEGMENT(.CONTINUOUS.,#119,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.18373593),#117); #121=IFCALIGNMENTVERTICALSEGMENT($,$,0.,1200.,100.,0.0175,0.0175,$,.CONSTANTGRADIENT.); @@ -131,16 +131,16 @@ DATA; #124=IFCDIRECTION((1.,0.)); #125=IFCAXIS2PLACEMENT2D(#123,#124); #126=IFCPOLYNOMIALCURVE(#125,(0.,1.),(121.,0.0175,-8.59375E-06),$); -#127=IFCDIRECTION((0.999846863274572,0.01749732012)); +#127=IFCDIRECTION((0.999846910161925, 0.01749732092783369)); #128=IFCAXIS2PLACEMENT2D(#105,#127); -#129=IFCCURVESEGMENT(.CONTINUOUS.,#128,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.),#126); +#129=IFCCURVESEGMENT(.CONTINUOUS.,#128,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.0616641341207),#126); #130=IFCALIGNMENTVERTICALSEGMENT($,$,1200.,1600.,121.,0.0175,-0.01,-58181.8181818182,.PARABOLICARC.); #131=IFCALIGNMENTSEGMENT('2hO3vvQE5AdeS5Eme$f7QL',$,$,$,$,#19,#227,#130); #132=IFCCARTESIANPOINT((0.,0.)); #133=IFCDIRECTION((1.,0.)); #134=IFCVECTOR(#133,1.); #135=IFCLINE(#132,#134); -#136=IFCDIRECTION((0.999949998749938,-0.009999499987)); +#136=IFCDIRECTION((0.9999500037496875,-0.009999500037496875)); #137=IFCAXIS2PLACEMENT2D(#106,#136); #138=IFCCURVESEGMENT(.CONTINUOUS.,#137,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1600.079998),#135); #139=IFCALIGNMENTVERTICALSEGMENT($,$,2800.,1600.,127.,-0.01,-0.01,$,.CONSTANTGRADIENT.); @@ -149,16 +149,16 @@ DATA; #142=IFCDIRECTION((1.,0.)); #143=IFCAXIS2PLACEMENT2D(#141,#142); #144=IFCPOLYNOMIALCURVE(#143,(0.,1.),(111.,-0.01,1.25E-05),$); -#145=IFCDIRECTION((0.999949998749938,-0.009999499987)); +#145=IFCDIRECTION((0.9999500037496875,-0.009999500037496875)); #146=IFCAXIS2PLACEMENT2D(#107,#145); -#147=IFCCURVESEGMENT(.CONTINUOUS.,#146,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.),#144); +#147=IFCCURVESEGMENT(.CONTINUOUS.,#146,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1200.0599967004605),#144); #148=IFCALIGNMENTVERTICALSEGMENT($,$,4400.,1200.,111.,-0.01,0.02,40000.,.PARABOLICARC.); #149=IFCALIGNMENTSEGMENT('1PoEOI_HrBQupTSE4S8eo9',$,$,$,$,#19,#231,#148); #150=IFCCARTESIANPOINT((0.,0.)); #151=IFCDIRECTION((0.999799979995999,0.01999599960)); #152=IFCVECTOR(#151,1.); #153=IFCLINE(#150,#152); -#154=IFCDIRECTION((0.999799979995999,0.01999599960)); +#154=IFCDIRECTION((0.999800059980007,0.01999600119960014)); #155=IFCAXIS2PLACEMENT2D(#108,#154); #156=IFCCURVESEGMENT(.CONTINUOUS.,#155,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.159984003),#153); #157=IFCALIGNMENTVERTICALSEGMENT($,$,5600.,800.,117.,0.02,0.02,$,.CONSTANTGRADIENT.); @@ -167,16 +167,16 @@ DATA; #160=IFCDIRECTION((1.,0.)); #161=IFCAXIS2PLACEMENT2D(#159,#160); #162=IFCPOLYNOMIALCURVE(#161,(0.,1.),(133.,0.02,-1.E-05),$); -#163=IFCDIRECTION((0.999799979995999,0.01999599960)); +#163=IFCDIRECTION((0.999800059980007,0.01999600119960014)); #164=IFCAXIS2PLACEMENT2D(#109,#163); -#165=IFCCURVESEGMENT(.CONTINUOUS.,#164,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2000.),#162); +#165=IFCCURVESEGMENT(.CONTINUOUS.,#164,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2000.1333253344758),#162); #166=IFCALIGNMENTVERTICALSEGMENT($,$,6400.,2000.,133.,0.02,-0.02,-50000.,.PARABOLICARC.); #167=IFCALIGNMENTSEGMENT('2oM9hedcr8FQ1BmLfJrmq0',$,$,$,$,#19,#235,#166); #168=IFCCARTESIANPOINT((0.,0.)); #169=IFCDIRECTION((1.,0.)); #170=IFCVECTOR(#169,1.); #171=IFCLINE(#168,#170); -#172=IFCDIRECTION((0.999799979995999,-0.01999599960)); +#172=IFCDIRECTION((0.999800059980007,-0.01999600119960014)); #173=IFCAXIS2PLACEMENT2D(#110,#172); #174=IFCCURVESEGMENT(.CONTINUOUS.,#173,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(1000.19998),#171); #175=IFCALIGNMENTVERTICALSEGMENT($,$,8400.,1000.,133.,-0.02,-0.02,$,.CONSTANTGRADIENT.); @@ -185,16 +185,16 @@ DATA; #178=IFCDIRECTION((1.,0.)); #179=IFCAXIS2PLACEMENT2D(#177,#178); #180=IFCPOLYNOMIALCURVE(#179,(0.,1.),(113.,-0.02,9.375E-06),$); -#181=IFCDIRECTION((0.999799979995999,-0.01999599960)); +#181=IFCDIRECTION((0.999800059980007, -0.01999600119960014)); #182=IFCAXIS2PLACEMENT2D(#111,#181); -#183=IFCCURVESEGMENT(.CONTINUOUS.,#182,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.),#180); +#183=IFCCURVESEGMENT(.CONTINUOUS.,#182,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(800.0699957381095),#180); #184=IFCALIGNMENTVERTICALSEGMENT($,$,9400.,800.,113.,-0.02,-0.005,53333.3333333333,.PARABOLICARC.); #185=IFCALIGNMENTSEGMENT('3SsqC72Jf8quv1zyfESK3_',$,$,$,$,#19,#239,#184); #186=IFCCARTESIANPOINT((0.,0.)); #187=IFCDIRECTION((1.,0.)); #188=IFCVECTOR(#187,1.); #189=IFCLINE(#186,#188); -#190=IFCDIRECTION((0.999987499921874,-0.00499993750)); +#190=IFCDIRECTION((1.,0.)); #191=IFCAXIS2PLACEMENT2D(#112,#190); #192=IFCCURVESEGMENT(.CONTINUOUS.,#191,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(2600.0324998),#189); #193=IFCALIGNMENTVERTICALSEGMENT($,$,10200.,2600.,103.,-0.005,-0.005,$,.CONSTANTGRADIENT.); @@ -203,7 +203,7 @@ DATA; #196=IFCDIRECTION((1.,0.)); #197=IFCVECTOR(#196,1.); #198=IFCLINE(#195,#197); -#199=IFCDIRECTION((0.999987499921874,-0.00499993750)); +#199=IFCDIRECTION((1.,0.)); #200=IFCAXIS2PLACEMENT2D(#113,#199); #201=IFCCURVESEGMENT(.DISCONTINUOUS.,#200,IFCLENGTHMEASURE(0.),IFCLENGTHMEASURE(0.),#198); #202=IFCALIGNMENTVERTICALSEGMENT($,$,12800.,0.,90.,-0.005,-0.005,$,.CONSTANTGRADIENT.);