Ejemplo n.º 1
0
    def getContactWithBearingOfTangent(self, bearingOfContact, spiralNumber = None, turnDirection = None):
        if spiralNumber == None:
            contactPt = self.method_0(bearingOfContact, AngleUnits.Radians)
            if round(self.Radius[0], 2) == round(MathHelper.calcDistance(self.Center[0], contactPt), 2):
                centerPt = self.Center[0]
                spiralNumber = 0
            elif round(self.Radius[1], 2) == round(MathHelper.calcDistance(self.Center[1], contactPt), 2):
                centerPt = self.Center[1]
                spiralNumber = 1
            else:
                centerPt = self.Center[2]
                spiralNumber = 2
            bearing = MathHelper.getBearing(centerPt, contactPt)
            if self.Direction == TurnDirection.Right:
                leftMiddlePt = MathHelper.distanceBearingPoint(centerPt, MathHelper.smethod_4(bearing - 0.01), self.Radius[spiralNumber])
                rightMiddlePt = MathHelper.distanceBearingPoint(centerPt, MathHelper.smethod_4(bearing + 0.01), self.Radius[spiralNumber])
                return leftMiddlePt, contactPt, rightMiddlePt
            else:
                rightMiddlePt = MathHelper.distanceBearingPoint(centerPt, MathHelper.smethod_4(bearing + 0.01), self.Radius[spiralNumber])
                leftMiddlePt = MathHelper.distanceBearingPoint(centerPt, MathHelper.smethod_4(bearing - 0.01), self.Radius[spiralNumber])
                return leftMiddlePt, contactPt, rightMiddlePt

        if self.Direction == TurnDirection.Right:
            bearing = MathHelper.smethod_4(bearingOfContact - math.pi /2)
            contactPt = MathHelper.distanceBearingPoint(self.Center[spiralNumber], bearing, self.Radius[spiralNumber])
            leftMiddlePt = MathHelper.distanceBearingPoint(self.Center[spiralNumber], MathHelper.smethod_4(bearing - 0.01), self.Radius[spiralNumber])
            rightMiddlePt = MathHelper.distanceBearingPoint(self.Center[spiralNumber], MathHelper.smethod_4(bearing + 0.01), self.Radius[spiralNumber])

            return leftMiddlePt, contactPt, rightMiddlePt
        else:
            bearing = MathHelper.smethod_4(bearingOfContact + math.pi /2)
            contactPt = MathHelper.distanceBearingPoint(self.Center[spiralNumber], bearing, self.Radius[spiralNumber])
            rightMiddlePt = MathHelper.distanceBearingPoint(self.Center[spiralNumber], MathHelper.smethod_4(bearing + 0.01), self.Radius[spiralNumber])
            leftMiddlePt = MathHelper.distanceBearingPoint(self.Center[spiralNumber], MathHelper.smethod_4(bearing - 0.01), self.Radius[spiralNumber])
            return leftMiddlePt, contactPt, rightMiddlePt
    def nominal2Layer(self):
        resultLayer = AcadHelper.createVectorLayer(
            "NominalTrack_" +
            self.surfaceType.replace(" ", "_").replace("-", "_"), QGis.Line)
        startPoint3d = self.parametersPanel.pnlRwyStart.Point3d
        derPoint3d = self.parametersPanel.pnlDer.Point3d
        bearing = MathHelper.getBearing(startPoint3d, derPoint3d)
        derPoint3d1 = MathHelper.distanceBearingPoint(derPoint3d, bearing, 100)
        derPoint3d2 = MathHelper.distanceBearingPoint(derPoint3d, bearing,
                                                      self.circleArea[0].bulge)
        geom = QgsGeometry.fromPolyline(self.area123).intersection(
            QgsGeometry.fromPolyline([derPoint3d1, derPoint3d2]))
        intersectionPoint1 = geom.asPoint()

        derPoint3d1 = MathHelper.distanceBearingPoint(derPoint3d, bearing, 100)
        bearing = MathHelper.smethod_4(bearing + math.pi)
        derPoint3d2 = MathHelper.distanceBearingPoint(
            derPoint3d, bearing,
            MathHelper.calcDistance(derPoint3d, startPoint3d) + 200)
        geom = QgsGeometry.fromPolyline(
            PolylineArea(self.area123).method_14_closed()).intersection(
                QgsGeometry.fromPolyline([derPoint3d1, derPoint3d2]))
        intersectionPoint2 = geom.asPoint()
        AcadHelper.setGeometryAndAttributesInLayer(
            resultLayer, [intersectionPoint1, derPoint3d])

        return resultLayer
Ejemplo n.º 3
0
 def getContact(self,
                point3d,
                radBetweenTangentAndPoint=None,
                spiralNumber=None,
                turnDirection=None):
     a = MathHelper.calcDistance(point3d, self.Center[spiralNumber])
     b = MathHelper.calcDistance(self.Center[spiralNumber],
                                 self.Finish[spiralNumber])
     A = math.pi / 2 - radBetweenTangentAndPoint
     B = math.asin(math.sin(A) * b / a)
     C = math.pi - A - B
     bearing = 0.0
     middlePt = Point3D()
     if self.Direction == TurnDirection.Right:
         bearing = MathHelper.smethod_4(
             MathHelper.getBearing(self.Center[spiralNumber], point3d) - C)
         middlePt = MathHelper.distanceBearingPoint(
             self.Center[spiralNumber],
             MathHelper.smethod_4(bearing - 0.001),
             self.Radius[spiralNumber])
     elif self.Direction == TurnDirection.Left:
         bearing = MathHelper.smethod_4(
             MathHelper.getBearing(self.Center[spiralNumber], point3d) + C)
         middlePt = MathHelper.distanceBearingPoint(
             self.Center[spiralNumber],
             MathHelper.smethod_4(bearing + 0.001),
             self.Radius[spiralNumber])
     return middlePt, MathHelper.distanceBearingPoint(
         self.Center[spiralNumber], bearing, self.Radius[0])
Ejemplo n.º 4
0
 def method_37(self, point3d_0, double_0, point3d_1, point3d_2, double_1, ficorInput_0):
     point3d = None;
     point3d = MathHelper.getIntersectionPoint(point3d_1, point3d_2, point3d_0, MathHelper.distanceBearingPoint(point3d_0, double_0 + Unit.ConvertDegToRad(90), 100))
     if (point3d != None):
         num = MathHelper.getBearing(point3d_0, point3d);
         num1 = MathHelper.calcDistance(point3d_0, point3d);
         if (num1 <= double_1):
             num2 = math.acos(num1 / double_1);
             point3d1 = MathHelper.distanceBearingPoint(point3d_0, num + num2, double_1);
             point3d2 = MathHelper.distanceBearingPoint(point3d_0, num - num2, double_1);
             if (ficorInput_0 == FicorInput.C):
                 if (MathHelper.smethod_99(MathHelper.getBearing(point3d_1, point3d2), MathHelper.getBearing(point3d_1, point3d1), 0.1)):
                     return FicorResult(FicorStatus.TWO);
                 return FicorResult(FicorStatus.ONE);
             if (ficorInput_0 == FicorInput.F):
                 if (MathHelper.smethod_99(MathHelper.getBearing(point3d_1, point3d_2), MathHelper.getBearing(point3d_1, point3d1), 0.1)):
                     return FicorResult(point3d1);
                 return FicorResult(point3d2);
             if (ficorInput_0 == FicorInput.L):
                 if (MathHelper.calcDistance(point3d_1, point3d2) < MathHelper.calcDistance(point3d_1, point3d1)):
                     return FicorResult(point3d1);
                 return FicorResult(point3d2);
             if (ficorInput_0 == FicorInput.S):
                 if (MathHelper.calcDistance(point3d_1, point3d2) > MathHelper.calcDistance(point3d_1, point3d1)):
                     return FicorResult(point3d1);
                 return FicorResult(point3d2);
     return FicorResult(None, FicorStatus.NID);
Ejemplo n.º 5
0
    def method_3(self, polylineArea_0):
        point3dCollection = self.area.method_14_closed(4)
        polylineArea0 = PolylineArea(point3dCollection)
        num = MathHelper.calcDistance(self.ptBase, polylineArea_0[0].Position)
        num1 = self.trackRad
        point3d = MathHelper.distanceBearingPoint(self.ptBase, num1, num)
        matrix = Matrix3d.Displacement(self.ptE.GetVectorTo(point3d))
        polylineArea = polylineArea0.TransformBy(matrix)
        polylineAreaList = []
        polylineAreaList.append(polylineArea)
        #         Region transformedCopy = region1.GetTransformedCopy(Matrix3d.Displacement(self.ptE.GetVectorTo(point3d))) as Region;
        for i in range(1, 72):
            point3d = MathHelper.distanceBearingPoint(
                self.ptBase, num1 + i * 0.0872664625997165, num)
            polylineArea = polylineArea0.TransformBy(
                Matrix3d.Displacement(self.ptE.GetVectorTo(point3d)))
            polylineAreaList.append(polylineArea)
#             Region transformedCopy1 = region1.GetTransformedCopy(Matrix3d.Displacement(self.ptE.GetVectorTo(point3d))) as Region;
#             try
#             {
#                 transformedCopy.BooleanOperation(0, transformedCopy1);
#             }
#             finally
#             {
#                 AcadHelper.smethod_24(transformedCopy1);
#             }
#         }
#         region = transformedCopy;
#         }
#         finally
#         {
#             AcadHelper.smethod_24(region1);
#         }
        return polylineAreaList
Ejemplo n.º 6
0
 def smethod_131(polylineArea_0):
     polylineArea = PolylineArea()
     if (not polylineArea_0.isCircle):
         for i in range(len(polylineArea_0)):
             item = polylineArea_0[i]
             x = item.Position.get_X()
             position = item.Position
             polylineArea.Add(item)
     else:
         point3d = MathHelper.distanceBearingPoint(
             polylineArea_0.CenterPoint(), 0, polylineArea_0.Radius())
         point3d1 = MathHelper.distanceBearingPoint(
             polylineArea_0.CenterPoint(), 1.5707963267949,
             polylineArea_0.Radius())
         point3d2 = MathHelper.distanceBearingPoint(
             polylineArea_0.CenterPoint(), 3.14159265358979,
             polylineArea_0.Radius())
         point3d3 = MathHelper.distanceBearingPoint(
             polylineArea_0.CenterPoint(), 4.71238898038469,
             polylineArea_0.Radius())
         polylineArea.Add(
             PolylineAreaPoint(
                 point3d, MathHelper.smethod_60(point3d, point3d1,
                                                point3d2)))
         polylineArea.Add(
             PolylineAreaPoint(
                 point3d2, MathHelper.smethod_60(point3d2, point3d3,
                                                 point3d)))
         polylineArea.Add(PolylineAreaPoint(point3d))
     return polylineArea
 def method_2(self, point3d_0, double_0):
     self.tr = double_0
     self.tr180 = MathHelper.smethod_4(double_0 + 3.14159265358979)
     self.trm90 = MathHelper.smethod_4(double_0 - 1.5707963267949)
     self.trp90 = MathHelper.smethod_4(double_0 + 1.5707963267949)
     self.ptTHR = point3d_0
     self.ptEND = MathHelper.distanceBearingPoint(self.ptTHR, self.tr, 1000)
     self.ptTHRm90 = MathHelper.distanceBearingPoint(
         self.ptTHR, self.trm90, 1000)
Ejemplo n.º 8
0
 def getPointWithShortestDist(self, point3d, closed=True):
     if self.Count == 0:
         return None
     if closed:
         point3dList = self.method_14_closed()
     else:
         point3dList = self.method_14()
     # i = 0
     # for point3d0 in point3dList:
     #     if i == 0:
     #         i += 1
     #         continue
     #     previousPoint = point3dList[i - 1]
     #     currentPoint = point3d0
     #     f = QgsGeometry.fromPolyline([previousPoint, currentPoint]).contains(point3d)
     #     if f:
     #         return point3d
     i = 0
     for point3d0 in point3dList:
         if i == 0:
             i += 1
             continue
         previousPoint = point3dList[i - 1]
         currentPoint = point3d0
         f = QgsGeometry.fromPolyline([previousPoint,
                                       currentPoint]).contains(point3d)
         dist = MathHelper.calcDistance(point3d, previousPoint)
         bearing = MathHelper.smethod_4(
             MathHelper.getBearing(previousPoint, currentPoint) -
             math.pi / 2)
         vPoint1 = MathHelper.distanceBearingPoint(point3d, bearing, dist)
         bearing = MathHelper.smethod_4(
             MathHelper.getBearing(previousPoint, currentPoint) +
             math.pi / 2)
         dist = MathHelper.calcDistance(point3d, previousPoint)
         vPoint2 = MathHelper.distanceBearingPoint(point3d, bearing, dist)
         geom = QgsGeometry.fromPolyline([
             previousPoint, currentPoint
         ]).intersection(QgsGeometry.fromPolyline([vPoint1, vPoint2]))
         intersectionPoint = geom.asPoint()
         if intersectionPoint.x() == 0 and intersectionPoint.y() == 0:
             i += 1
             continue
         pt = None
         if point3d.x() > intersectionPoint.x():
             pt = Point3D(intersectionPoint.x() + 1, intersectionPoint.y())
         else:
             pt = Point3D(intersectionPoint.x() - 1, intersectionPoint.y())
         geom = QgsGeometry.fromPolyline(point3dList).intersection(
             QgsGeometry.fromPolyline([point3d, pt]))
         intersectionPoint1 = geom.asPoint()
         if intersectionPoint1.x() != 0 and intersectionPoint1.y() != 0:
             i += 1
             continue
         return Point3D(intersectionPoint.x(), intersectionPoint.y())
     return self.getClosestPointTo(point3d, False)
 def method_1(self, obstacle_0):
     point3d1 = MathHelper.distanceBearingPoint(obstacle_0.Position,
                                                self.tr180,
                                                obstacle_0.tolerance)
     point3d = MathHelper.getIntersectionPoint(
         self.ptTHR, self.ptEND, point3d1,
         MathHelper.distanceBearingPoint(point3d1, self.trm90, 100))
     num = MathHelper.calcDistance(self.ptTHR, point3d)
     if (MathHelper.smethod_119(point3d, self.ptTHR, self.ptTHRm90)):
         num = num * -1
     return num
Ejemplo n.º 10
0
 def initModel(self, surfacesList, oasCategory_0, point3d_0, double_0, double_1, double_2, oasMaEvaluationMethod_0, hlAltitude):
     self.cat = oasCategory_0;
     self.ptTHR = point3d_0;
     self.ptTHR2 = MathHelper.distanceBearingPoint(point3d_0, double_0, 100);
     self.ptTHRm90 = MathHelper.distanceBearingPoint(point3d_0, double_0 - 1.5707963267949, 100);
     self.tr90p = double_0 + 1.5707963267949;
     self.tanmacg = double_1 / 100.0;
     self.tangpa = math.tan(Unit.ConvertDegToRad(double_2));
     self.method = oasMaEvaluationMethod_0;
     self.xe = OasObstacles.constants.ZC / OasObstacles.constants.ZA
     self.surfacesList = surfacesList
     self.hlAltitude = hlAltitude
    def makePrimaryAreaOrSecondaryArea(self, geomList, areaType):
        pointArrayInner = geomList[0]
        pointArray1Outer = geomList[1]

        innerStartPoint = pointArrayInner[0]
        innerEndPoint = pointArrayInner[1]
        innerBulge = pointArrayInner[2]
        outerStartPoint = pointArray1Outer[0]
        outerEndPoint = pointArray1Outer[1]
        outerBulge = pointArray1Outer[2]

        line0 = QgsGeometry.fromPolyline([innerStartPoint, outerStartPoint])
        line1 = QgsGeometry.fromPolyline([innerEndPoint, outerEndPoint])

        # for i in range(1, len(pointArray0)):

        if line0.intersects(line1):
            tempPoint = Point3D(outerStartPoint.get_X(), outerStartPoint.get_Y())
            outerStartPoint = Point3D(outerEndPoint.get_X(), outerEndPoint.get_Y())
            outerEndPoint = Point3D(tempPoint.get_X(), tempPoint.get_Y())
            outerBulge = -outerBulge
        if areaType == ProtectionAreaType.Primary:
            polylineArea = PolylineArea()
            polylineArea.Add(PolylineAreaPoint(innerStartPoint, innerBulge))
            polylineArea.Add(PolylineAreaPoint(innerEndPoint))
            polylineArea.Add(PolylineAreaPoint(outerEndPoint, -outerBulge))
            polylineArea.Add(PolylineAreaPoint(outerStartPoint))
            return PrimaryObstacleArea(polylineArea)
        elif areaType == ProtectionAreaType.Secondary:
            if innerBulge == 0 and outerBulge == 0:
                return SecondaryObstacleArea(innerStartPoint, innerEndPoint, outerStartPoint, outerEndPoint, MathHelper.getBearing(innerStartPoint, innerEndPoint))
            elif innerBulge != 0 and outerBulge != 0:
                if round(innerBulge, 1) != round(outerBulge, 1):
                    return None
                innerCenterPoint = MathHelper.smethod_71(innerStartPoint, innerEndPoint, innerBulge)
                outerCenterPoint = MathHelper.smethod_71(outerStartPoint, outerEndPoint, outerBulge)

                innerRadius = MathHelper.calcDistance(innerCenterPoint, innerStartPoint);
                outerRadius = MathHelper.calcDistance(outerCenterPoint, outerStartPoint);

                bearing = (MathHelper.getBearing(innerCenterPoint, innerStartPoint) + MathHelper.getBearing(innerCenterPoint, innerEndPoint)) / 2
                innerMiddlePoint = MathHelper.distanceBearingPoint(innerCenterPoint, bearing, innerRadius)
                if round(MathHelper.smethod_60(innerStartPoint, innerMiddlePoint, innerEndPoint), 4) != round(outerBulge, 4):
                    bearing += 3.14159265358979
                    innerMiddlePoint = MathHelper.distanceBearingPoint(innerCenterPoint, bearing, innerRadius)

                bearing = (MathHelper.getBearing(outerCenterPoint, outerStartPoint) + MathHelper.getBearing(outerCenterPoint, outerEndPoint)) / 2
                outerMiddlePoint = MathHelper.distanceBearingPoint(outerCenterPoint, bearing, outerRadius)
                if round(MathHelper.smethod_60(outerStartPoint, outerMiddlePoint, outerEndPoint), 4) != round(outerBulge, 4):
                    bearing += 3.14159265358979
                    outerMiddlePoint = MathHelper.distanceBearingPoint(outerCenterPoint, bearing, outerRadius)
                return SecondaryObstacleArea(innerStartPoint, innerMiddlePoint, innerEndPoint, outerStartPoint, None, outerMiddlePoint, outerEndPoint, innerBulge, innerBulge)
            return None
Ejemplo n.º 12
0
    def getGeometry(self):
        pointList = []
        polygonsList = []
        width = self[0].startWidth
        if MathHelper.smethod_96(self[0].bulge):
            pt0 = MathHelper.distanceBearingPoint(self[0].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) - Unit.ConvertDegToRad(90), width / 2.0,)
            pt1 = MathHelper.distanceBearingPoint(self[0].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) + Unit.ConvertDegToRad(90), width / 2.0,)
            pt2 = MathHelper.distanceBearingPoint(self[1].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) + Unit.ConvertDegToRad(90), width / 2.0,)
            pt3 = MathHelper.distanceBearingPoint(self[1].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) - Unit.ConvertDegToRad(90), width / 2.0,)
            geom = QgsGeometry.fromPolygon([[pt0, pt1, pt2, pt3]])
            polygonsList.append(geom)
        else:
            polylineArea = PolylineArea()
            polylineArea.Add(PolylineAreaPoint(self[0].point3d, self[0].bulge))
            polylineArea.Add(PolylineAreaPoint(self[1].point3d))

            pointArray = polylineArea.method_14(4)
            pt0 = MathHelper.distanceBearingPoint(self[0].point3d, MathHelper.getBearing(self[0].point3d, pointArray[1]) - Unit.ConvertDegToRad(90), width / 2.0,)
            pt1 = MathHelper.distanceBearingPoint(self[0].point3d, MathHelper.getBearing(self[0].point3d, pointArray[1]) + Unit.ConvertDegToRad(90), width / 2.0,)
            pt2 = MathHelper.distanceBearingPoint(self[1].point3d, MathHelper.getBearing(pointArray[len(pointArray) - 2], self[1].point3d) + Unit.ConvertDegToRad(90), width / 2.0,)
            pt3 = MathHelper.distanceBearingPoint(self[1].point3d, MathHelper.getBearing(pointArray[len(pointArray) - 2], self[1].point3d) - Unit.ConvertDegToRad(90), width / 2.0,)
            polylineArea0 = PolylineArea()
            polylineArea0.Add(PolylineAreaPoint(pt0, self[0].bulge))
            polylineArea0.Add(PolylineAreaPoint(pt3))
            polylineArea1 = PolylineArea()
            polylineArea1.Add(PolylineAreaPoint(pt2, -self[0].bulge))
            polylineArea1.Add(PolylineAreaPoint(pt1))
            pointArrayResult = []
            for pt in polylineArea0.method_14(4):
                pointArrayResult.append(pt)
            for pt in polylineArea1.method_14(4):
                pointArrayResult.append(pt)
            geom = QgsGeometry.fromPolygon([pointArrayResult])
            polygonsList.append(geom)
        return polygonsList


        # for i in range(self.NumberOfVertices):
        #     polylinePoint = self[i]
        #
        #     if polylinePoint.startWidth != width:
        #         if len(pointList) > 1:
        #             geom = QgsGeometry.fromPolyline(pointList)
        #             polygon = geom.buffer(width / 2.0, 0, 2, 0, 0)
        #             polygonsList.append(polygon)
        #         width = polylinePoint.startWidth
        #         pointList = []
        #     pointList.append(polylinePoint.point3d)
        #     if not MathHelper.smethod_96(polylinePoint.bulge):
        #         if i != self.NumberOfVertices - 1:
        #             point3d = self[i + 1].point3d
        #         else:
        #             point3d = self[0].point3d
        #         MathHelper.getArc(polylinePoint.point3d, point3d, polylinePoint.bulge, 4, pointList)
        #
        # if len(pointList) > 1:
        #     geom = QgsGeometry.fromPolyline(pointList)
        #     polygon = geom.buffer(width / 2.0, 0, 2, 0, 0)
        #     polygonsList.append(polygon)
        return polygonsList
    def checkObstacle(self, obstacle_0):
        if self.manualPolygon != None:
            if not self.manualPolygon.contains(obstacle_0.Position):
                return
        mocMultiplier = None;
        z = None;
        num = None;
        z1 = None;
        point3d = None;
        point3d1 = None;
        num1 = None;
        num2 = None;
        if (not self.area12.pointInPolygon(obstacle_0.Position, obstacle_0.Tolerance)):
            if (not self.area3a.pointInPolygon(obstacle_0.Position, obstacle_0.Tolerance) and not self.area3b.pointInPolygon(obstacle_0.Position, obstacle_0.Tolerance)):
                return;
            closestPointTo = self.area.getPointWithShortestDist(obstacle_0.Position);
            point = QgsGeometry.fromPolyline(self.area.method_14()).closestVertex(obstacle_0.Position)
            point3d1 = MathHelper.getIntersectionPoint(closestPointTo, MathHelper.distanceBearingPoint(closestPointTo, self.track, 100), self.ptDER, self.ptDER2);
            num1 = MathHelper.calcDistance(closestPointTo, point3d1) if (MathHelper.smethod_119(closestPointTo, self.ptDER, self.ptDER2)) else 1E-08;
            if num1 == 0:
                num1 = 1E-08
            num2 = max([1E-08, MathHelper.calcDistance(obstacle_0.Position, closestPointTo) - obstacle_0.Tolerance]);
            mocMultiplier = max([self.moc / 100 * (num1 + num2) * obstacle_0.MocMultiplier, self.minMoc]);
            z = self.ta + self.pdg / 100 * num2;
            position = obstacle_0.Position;
            num = position.get_Z() + obstacle_0.Trees + mocMultiplier;
            z1 = 100 * ((num - self.ta) / num2);

        else:
            point3d2 = MathHelper.distanceBearingPoint(obstacle_0.Position, self.track + 3.14159265358979, obstacle_0.Tolerance);
            point3d3 = MathHelper.distanceBearingPoint(point3d2, self.track, 100);
            point3d = MathHelper.getIntersectionPoint(self.ptDER, self.ptDER2, point3d2, point3d3);
            num1 = 1E-08 if (not MathHelper.smethod_119(point3d2, self.ptDER, self.ptDER2)) else MathHelper.calcDistance(point3d, point3d2);
            if num1 == 0:
                num1 = 1E-08
            mocMultiplier = self.moc / 100 * num1 * obstacle_0.MocMultiplier;
            z = self.ptDER.get_Z() + 5 + self.pdg / 100 * num1;
            position1 = obstacle_0.Position;
            num = position1.get_Z() + obstacle_0.Trees + mocMultiplier;
            z1 = 100 * ((num - (self.ptDER.get_Z() + 5)) / num1);
        if num1 < 0.00001:
            num1 = None
        criticalObstacleType = CriticalObstacleType.No;
        if (z1 > self.pdg):
            criticalObstacleType = CriticalObstacleType.Yes;
        closeInObstacleType = CloseInObstacleType.No;
        if (num <= self.ptDER.get_Z() + 60):
            closeInObstacleType = CloseInObstacleType.Yes;
        checkResult = [num1, num2, mocMultiplier, z, num, z1, criticalObstacleType, closeInObstacleType];
        self.addObstacleToModel(obstacle_0, checkResult)
Ejemplo n.º 14
0
    def getOffsetCurveNoClosed(self, distance, segment = 0, joinStyle = 0, mitreLimit = 0):
        pointList = []
        count = len(self)
        i = 0
        radiusDifference = 0
        for item in self:
            i += 1
            if i == 1:
                bearing = MathHelper.getBearing(self[i-1].Position, self[i].Position)
                point = MathHelper.distanceBearingPoint(self[i - 1].Position, bearing - Unit.ConvertDegToRad(90) , distance)
                pointList.append(point)

                # if self[i-1].Bulge != 0:
                #     radiusDifference = distance if distance >= 0 else distance * (-1)
            elif i == count:
                bearing = MathHelper.getBearing(self[i-1].Position, self[i - 2].Position)
                point = MathHelper.distanceBearingPoint(self[i-1].Position, bearing + Unit.ConvertDegToRad(90) , distance)

                line = QgsGeometry.fromPolyline([self[i-1].Position, self[i - 2].Position])
                newLine = QgsGeometry.fromPolyline([pointList[i-2], point])
                if line.intersects(newLine):
                    bearing = MathHelper.getBearing(self[i-1].Position, self[i - 2].Position)
                    point = MathHelper.distanceBearingPoint(self[i-1].Position, bearing + Unit.ConvertDegToRad(270) , distance)

                pointList.append(point)
            else:
                turnDirection = MathHelper.smethod_65([self[i-2].Position, self[i-1].Position, self[i].Position])
                angle = 0
                if turnDirection == TurnDirection.Right:
                    angle = Unit.ConvertDegToRad(360) - math.fabs(MathHelper.getBearing(self[i-1].Position, self[i].Position) - MathHelper.getBearing(self[i-1].Position, self[i-2].Position))
                else:
                    angle =  math.fabs(MathHelper.getBearing(self[i-1].Position, self[i].Position) - MathHelper.getBearing(self[i-1].Position, self[i-2].Position))

                angle = math.fabs(Unit.ConvertDegToRad(90) - angle / 2)
                dist = distance / math.cos(angle)
                angle = (MathHelper.getBearing(self[i-1].Position, self[i].Position) + MathHelper.getBearing(self[i-1].Position, self[i-2].Position)) / 2
                point = MathHelper.distanceBearingPoint(self[i-1].Position, angle , dist)

                line = QgsGeometry.fromPolyline([self[i-1].Position, self[i - 2].Position])
                newLine = QgsGeometry.fromPolyline([pointList[i-2], point])
                if line.intersects(newLine):
                    bearing = MathHelper.getBearing(self[i-1].Position, self[i - 2].Position)
                    point = MathHelper.distanceBearingPoint(self[i-1].Position, angle + Unit.ConvertDegToRad(180) , dist)
                if self[i-1].Bulge != 0:
                    radiusDifference = dist if dist >= 0 else dist * (-1)
                pointList.append(point)
        polylineAreaNew = PolylineArea()
        for i in range(count):
            polylineAreaNew.Add(PolylineAreaPoint(pointList[i], self[i].Bulge))
        return polylineAreaNew
Ejemplo n.º 15
0
    def Direction(self):
        point3dCollection = []
        count = len(self)
        i = 0
        while i < count:
            position = self[i].position
            bulge = self[i].Bulge
            if i != count - 1:
                point3d = self[i + 1].position
            else:
                point3d = self[0].position
            if (not position.smethod_170(point3d)):
                point3dCollection.append(position)
                if (not MathHelper.smethod_96(bulge)):
#                     if int(position.get_X()) == 688211:
#                         nn= 1
                    point3d1 = MathHelper.smethod_71(position, point3d, bulge)
#                     if point3d1 == None:
#                         nn = 0
                    num1 = MathHelper.smethod_5(bulge) / 2
                    if MathHelper.smethod_66(bulge) != TurnDirection.Left:
                        num = MathHelper.getBearing(point3d1, position) + num1 
                    else:
                        num = MathHelper.getBearing(point3d1, position) - num1
                    point3dCollection.append(MathHelper.distanceBearingPoint(point3d1, num, MathHelper.calcDistance(point3d1, position)));
            i += 1
        return MathHelper.smethod_65(point3dCollection);
 def __init__(self, point3d_0, double_0, altitude_0, double_1, double_2,
              bool_0, point3dCollection_0, point3dCollection_1,
              polylineArea_0, polylineArea_1, manualPoly):
     ObstacleTable.__init__(self, None)
     self.manualPolygon = manualPoly
     self.surfaceType = SurfaceTypes.DepartureOmnidirectional
     self.track = double_0
     self.ptDER = point3d_0
     self.ptDER2 = MathHelper.distanceBearingPoint(
         point3d_0, double_0 - 1.5707963267949, 100)
     self.moc = double_1
     self.minMoc = 80 if (bool_0) else 90
     self.pdg = double_2
     self.ta = altitude_0.Metres
     point3dCollection = []
     if (point3dCollection_0 != None and len(point3dCollection_0) > 0):
         point3dCollection.append(point3dCollection_0[0])
     for point3d in point3dCollection_1:
         point3dCollection.append(point3d)
     if (point3dCollection_0 != None and len(point3dCollection_0) > 0):
         point3dCollection.append(point3dCollection_0[3])
     self.area = PolylineArea.smethod_133(point3dCollection, True)
     self.area12 = PrimaryObstacleArea(PolylineArea(point3dCollection_1))
     self.area3a = PrimaryObstacleArea(polylineArea_0)
     self.area3b = PrimaryObstacleArea(polylineArea_1)
 def imethod_0(self, obstacle_0):
     criticalObstacleType = CriticalObstacleType.No
     if (self.poaOIS.pointInPolygon(obstacle_0.Position,
                                    obstacle_0.Tolerance)):
         z = self.elevOIS
         num = 1
         if (self.poaOCS.pointInPolygon(obstacle_0.Position,
                                        obstacle_0.Tolerance)):
             point3d1 = MathHelper.distanceBearingPoint(
                 obstacle_0.Position, self.track, 100)
             point3d = MathHelper.getIntersectionPoint(
                 obstacle_0.Position, point3d1, self.ptsOCSL[0],
                 self.ptsOCSR[0])
             num1 = max(
                 MathHelper.calcDistance(point3d, obstacle_0.Position) -
                 obstacle_0.Tolerance, 0)
             z = num1 * self.tang + self.ptHRP.get_Z()
             num = 0
         position = obstacle_0.Position
         z1 = position.get_Z() + obstacle_0.Trees - z
         if (z1 > 0):
             criticalObstacleType = CriticalObstacleType.Yes
         return [
             z, z1, criticalObstacleType,
             PinsSurfaceType.PinsSurfaceType_OCS
             if num == 0 else PinsSurfaceType.PinsSurfaceType_LevelOIS
         ]
Ejemplo n.º 18
0
 def TransformBy(self, polylineArea, angle_radian, centerPoint):
     resultPoilylineArea = PolylineArea()
     for polylineAreaPoint in polylineArea:
         point3d = polylineAreaPoint.Position
         bearing = MathHelper.smethod_4(MathHelper.getBearing(centerPoint, point3d) + angle_radian + Unit.ConvertDegToRad(180))
         resultPoilylineArea.Add(PolylineAreaPoint(MathHelper.distanceBearingPoint(centerPoint, bearing, MathHelper.calcDistance(point3d, centerPoint)), polylineAreaPoint.Bulge))
     return resultPoilylineArea
 def checkObstacle(self, obstacle_0):
     if not self.surfaceArea.pointInPolygon(obstacle_0.Position,
                                            obstacle_0.Tolerance):
         return
     point3d = MathHelper.getIntersectionPoint(
         self.ptStart, self.ptStart2, obstacle_0.Position,
         MathHelper.distanceBearingPoint(obstacle_0.Position,
                                         self.outbound + 3.14159265358979,
                                         obstacle_0.Tolerance))
     num = max([
         0.001,
         MathHelper.calcDistance(obstacle_0.Position, point3d) -
         obstacle_0.Tolerance
     ])
     z = num * self.tang + self.ptStart.get_Z()
     position = obstacle_0.Position
     z1 = position.get_Z() + obstacle_0.Trees - z
     criticalObstacleType = CriticalObstacleType.No
     if (z1 > 0):
         criticalObstacleType = CriticalObstacleType.Yes
     disregardableObstacleType = DisregardableObstacleType.No
     if (obstacle_0.Position.get_Z() + obstacle_0.Trees <=
             self.ptStart.get_Z() + 15):
         disregardableObstacleType = DisregardableObstacleType.Yes
     self.addObstacleToModel(
         obstacle_0,
         [z, z1, criticalObstacleType, disregardableObstacleType])
 def initObstaclesModel(self):
     if self.surfaceArea == None:
         return
     self.obstaclesModel = VisualSegmentSurfaceObstacles([self.surfaceArea], self.ui.chbHideDisregardableObst.isChecked())
     try:
         double_0 = float(self.parametersPanel.txtRwyDir.Value)
     except ValueError:
         raise UserWarning, "Runway Direction is invalid!"
     try:
         double_1 = math.tan(Unit.ConvertDegToRad(float(self.parametersPanel.txtDescAngle.Value.Degrees) - 1.12))
     except ValueError:
         raise UserWarning, "DescAngle is invalid!"
     point3d_0 = MathHelper.distanceBearingPoint(self.parametersPanel.pnlTHR.getPoint3D(), double_0, 60)
     self.obstaclesModel.ptStart = point3d_0;
     self.obstaclesModel.ptStart2 = MathHelper.distanceBearingPoint(point3d_0, double_0 - 1.5707963267949, 100);
     self.obstaclesModel.outbound = double_0;
     self.obstaclesModel.tang = double_1;
     return FlightPlanBaseDlg.initObstaclesModel(self)
    def vmethod_0(self, obstacle_0, returnList):
        obstacleAreaResult_0 = ObstacleAreaResult.Primary
        double_0 = None
        double_1 = self.mocma
        double_2 = double_1
        double_3 = None
        #         if (MathHelper.smethod_44(self.selectionArea, obstacle_0.Position, obstacle_0.tolerance)):
        #obstacleAreaResult_0 = self.primaryArea.imethod_1(obstacle_0.Position, obstacle_0.tolerance, double_1, out double_2, out double_0);
        if not MathHelper.pointInPolygon(self.primaryArea, obstacle_0.Position,
                                         obstacle_0.tolerance):
            double_0 = 0.0
            double_2 = 0.0
            #List<SecondaryObstacleArea>.Enumerator enumerator = self.secondaryAreas.GetEnumerator();
            for current in self.secondaryAreas:
                try:
                    num = None
                    num1 = None
                    resultList = []
                    obstacleAreaResult = current.imethod_1(
                        obstacle_0.Position, obstacle_0.tolerance, double_1,
                        resultList)
                    if obstacleAreaResult == ObstacleAreaResult.Outside or len(
                            resultList) < 2:
                        obstacleAreaResult_0 = ObstacleAreaResult.Outside
                        continue
                    num = resultList[0]
                    num1 = resultList[1]
                    if obstacleAreaResult == ObstacleAreaResult.Primary:
                        obstacleAreaResult_0 = obstacleAreaResult
                        double_2 = num
                        double_0 = num1
                        break
                    elif obstacleAreaResult == ObstacleAreaResult.Secondary and (
                            num > double_2 or double_2 == 0.0):
                        obstacleAreaResult_0 = obstacleAreaResult
                        double_2 = num
                        double_0 = num1
                        break
                except IndexError:
                    pass
        if obstacleAreaResult_0 != ObstacleAreaResult.Outside:
            obstacle_0.area = obstacleAreaResult_0
            point3d = MathHelper.distanceBearingPoint(obstacle_0.Position,
                                                      self.tr180,
                                                      obstacle_0.tolerance)
            double_3 = self.vmethod_3(point3d, False)
            if obstacleAreaResult_0 == ObstacleAreaResult.Primary:
                double_3 = double_3 + (double_1 - double_2)

            returnList.append(double_0)
            returnList.append(double_1)
            returnList.append(double_2)
            returnList.append(double_3)
            return True
        return False
Ejemplo n.º 22
0
    def GetPointAtDist(self, length_0, startAndEndPoint3ds=None):
        if length_0 == 0:
            return self[0].Position
        length = 0.0

        for i in range(len(self)):
            if i > 0:
                length = MathHelper.calcDistance(self[i - 1].Position,
                                                 self[i].Position)
                if length_0 == length:
                    startAndEndPoint3ds.append(self[i - 1].Position)
                    startAndEndPoint3ds.append(self[i].Position)
                    return self[i].Position
                elif length_0 > length:
                    length_0 -= length
                    continue
                else:
                    #                     length_0 = (length - length_0)
                    bearing = MathHelper.getBearing(self[i - 1].Position,
                                                    self[i].Position)
                    startAndEndPoint3ds.append(self[i - 1].Position)
                    startAndEndPoint3ds.append(self[i].Position)
                    return MathHelper.distanceBearingPoint(
                        self[i - 1].Position, bearing, length_0)
#                     if bearing >= 0 and bearing <= math.pi / 2:
#                         alpha = math.pi / 2 - bearing
#
#                         startAndEndPoint3ds.append(self[i - 1].Position)
#                         startAndEndPoint3ds.append(self[i].Position)
#
#                         return Point3D(self[i - 1].Position.get_X() + math.cos(alpha) * length_0, self[i - 1].Position.get_Y() + math.sin(alpha) * length_0)
#                     elif bearing > math.pi / 2 and bearing <= math.pi:
#                         alpha = bearing - math.pi / 2
#
#                         startAndEndPoint3ds.append(self[i - 1].Position)
#                         startAndEndPoint3ds.append(self[i].Position)
#
#                         return Point3D(self[i - 1].Position.get_X() + math.cos(alpha) * length_0, self[i - 1].Position.get_Y() - math.sin(alpha) * length_0)
#                     elif bearing > math.pi and bearing <= math.pi * 3 / 2:
#                         alpha = math.pi * 3 / 2 - bearing
#
#                         startAndEndPoint3ds.append(self[i - 1].Position)
#                         startAndEndPoint3ds.append(self[i].Position)
#
#                         return Point3D(self[i - 1].Position.get_X() - math.cos(alpha) * length_0, self[i - 1].Position.get_Y() - math.sin(alpha) * length_0)
#                     elif bearing > math.pi * 3 / 2 and bearing <= 2 * math.pi:
#                         alpha = bearing - math.pi * 3 / 2
#
#                         startAndEndPoint3ds.append(self[i - 1].Position)
#                         startAndEndPoint3ds.append(self[i].Position)
#
#                         return Point3D(self[i - 1].Position.get_X() - math.cos(alpha) * length_0, self[i - 1].Position.get_Y() + math.sin(alpha) * length_0)

        pass
    def putDistances(self):
        try:
            point3dThr = self.parametersPanel.pnlThrPosition.Point3d
            point3dFaf = self.parametersPanel.pnlFafPosition.Point3d

            point3dMapt = self.parametersPanel.pnlMaPtPosition.Point3d

            speedTas = self.parametersPanel.pnlTas.Value
            inboundTrackRad = Unit.ConvertDegToRad(self.parametersPanel.pnlInboundTrack.Value)
            inboundTrack180Rad = MathHelper.smethod_4(inboundTrackRad + math.pi)




            dDist = Distance(MathHelper.calcDistance(point3dFaf, point3dMapt))
            self.parametersPanel.pnlDistOfFafMapt.Value = dDist

            aDist = self.parametersPanel.pnlDistA.Value
            bDist = self.parametersPanel.pnlDistB.Value

            tasMin = Speed.smethod_0(self.parametersPanel.pnlIas.Value, -10, self.parametersPanel.pnlAerodromeAltitude.Value)
            tasMax = Speed.smethod_0(self.parametersPanel.pnlIas.Value, 15, self.parametersPanel.pnlAerodromeAltitude.Value)

            # calculate Distance from earliest MAPt to nominal MAPt:
            x1 = math.sqrt(math.pow(aDist.NauticalMiles, 2) + math.pow(tasMin.Knots * 10 / float(3600), 2) + math.pow(30 * dDist.NauticalMiles / tasMin.Knots, 2))
            x2 = math.sqrt(math.pow(aDist.NauticalMiles, 2) + math.pow(tasMax.Knots * 10 / float(3600), 2) + math.pow(30 * dDist.NauticalMiles / tasMax.Knots, 2))
            distEarliestMaptToNominalMapt = Distance(max(x1, x2), DistanceUnits.NM)
            self.parametersPanel.pnlDistOfEarliestToNominalMapt.Value = distEarliestMaptToNominalMapt

            #calculate Distance from nominal MAPt to latest MAPt
            x3 = math.sqrt(math.pow(bDist.NauticalMiles, 2) + math.pow(tasMin.Knots * 13 / float(3600), 2) + math.pow(30 * dDist.NauticalMiles / tasMin.Knots, 2))
            x4 = math.sqrt(math.pow(bDist.NauticalMiles, 2) + math.pow(tasMax.Knots * 13 / float(3600), 2) + math.pow(30 * dDist.NauticalMiles / tasMax.Knots, 2))
            distNominalMaptToLatestMapt = Distance(max(x3, x4), DistanceUnits.NM)
            self.parametersPanel.pnlDistOfNominalToLatestMapt.Value = distNominalMaptToLatestMapt

            #calculate Distance from Mapt to SOC
            x5 = x3 + 15 * (tasMin.Knots + 10) / float(3600)
            x6 = x4 + 15 * (tasMax.Knots + 10) / float(3600)
            distMaptSoc = Distance(max(x5, x6), DistanceUnits.NM)
            socMaptDistMeters = distMaptSoc.Metres
            socThrDistMeters = MathHelper.calcDistance(point3dMapt, point3dThr) - socMaptDistMeters



            sockBearing = inboundTrackRad
            self.socPoint3d = MathHelper.distanceBearingPoint(point3dMapt, sockBearing, socMaptDistMeters).smethod_167(self.calcSocAltitude())


            self.parametersPanel.pnlDistOfMaptSoc.Value = Distance(socMaptDistMeters)
            self.parametersPanel.pnlDistOfSocThr.Value = Distance(MathHelper.calcDistance(self.socPoint3d, point3dThr))
            self.parametersPanel.pnlDistOfFafMapt.Value = Distance(MathHelper.calcDistance(point3dFaf, point3dMapt))#MathHelper.calcDistance(point3dThr, self.socPoint3d))
            self.parametersPanel.pnlDistOfMaptThr.Value = Distance(MathHelper.calcDistance(point3dMapt, point3dThr))
        except:
            pass
Ejemplo n.º 24
0
 def RotatePolyLine(polylineArea, originPt, angle):
     resultPolylineArea = PolylineArea()
     if not isinstance(polylineArea, PolylineArea) or len(polylineArea) == 0:
         return None
     for polylineAreaPt in polylineArea:
         pt = polylineAreaPt.Position
         dist = MathHelper.calcDistance(pt, originPt)
         bearing = MathHelper.getBearing(originPt, pt) + angle
         newPt = MathHelper.distanceBearingPoint(originPt, bearing, dist)
         resultPolylineArea.Add(PolylineAreaPoint(newPt, polylineAreaPt.bulge))
     return resultPolylineArea
    def btnConstruct_Click(self):
        flag = FlightPlanBaseDlg.btnConstruct_Click(self)
        if not flag:
            return
        # self.parametersPanel.txtRadius.setText("")

        point3dCollection = None;
        point3dCollection1 = None;
        polylineArea = None;
        polylineArea1 = None;
        polylineArea2 = None;

        point3dArrayResult = []

        mapUnits = define._canvas.mapUnits()
        constructionLayer = None


        result, point3dCollection, point3dCollection1, polylineArea, polylineArea1, polylineArea2 = self.method_34()
        if result:
            point3dCollection2 = [];
            if (point3dCollection != None and len(point3dCollection) > 0):
                point3dCollection2.append(point3dCollection[0]);
            for point3d in point3dCollection1:
                point3dCollection2.append(point3d);
            if (point3dCollection != None and len(point3dCollection) > 0):
                point3dCollection2.append(point3dCollection[3]);
            # point3dCollection2.pop(3)
            # point3dCollection2.pop(3)
            # point3dArrayResult.append(polylineArea1.method_14_closed())
            # point3dArrayResult.append(polylineArea2.method_14_closed())
            point3dArrayResult.append(PolylineArea(point3dCollection2))

            self.area123 = point3dCollection2
            self.circleArea = polylineArea

            nominalPointTest1 = point3dCollection2[2]
            nominalPointTest2 = point3dCollection2[3]
            self.nominalPoint = MathHelper.distanceBearingPoint(nominalPointTest1, MathHelper.getBearing(nominalPointTest1, nominalPointTest2), MathHelper.calcDistance(nominalPointTest1, nominalPointTest2) / 2)
            # if polylineArea.isCircle:
            #     self.parametersPanel.txtRadius.setText(str(polylineArea.Radius()))
            point3dArrayResult.append(polylineArea)

        if not len(point3dArrayResult) > 0 :
            return
        constructionLayer = AcadHelper.createVectorLayer(self.surfaceType, QGis.Line)
        for point3dArray in point3dArrayResult:
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, point3dArray, True)
        nominalTrackLayer = self.nominal2Layer()
        QgisHelper.appendToCanvas(define._canvas, [constructionLayer, nominalTrackLayer], self.surfaceType)
        self.resultLayerList = [constructionLayer, nominalTrackLayer]
        QgisHelper.zoomToLayers(self.resultLayerList)
        self.ui.btnEvaluate.setEnabled(True)
 def vmethod_3(self, point3d_0, bool_0):
     point3d = Point3D()
     point3d = MathHelper.getIntersectionPoint(
         self.ptTHR, self.ptEND, point3d_0,
         MathHelper.distanceBearingPoint(point3d_0, self.trm90, 100))
     num = MathHelper.calcDistance(self.ptTHR, point3d)
     if not MathHelper.smethod_115(point3d, self.ptTHR, self.ptTHRm90):
         num = num + self.xstart
     else:
         num = self.xstart - min([num, self.xstart])
     num1 = num * self.tanslope
     if (bool_0):
         num1 = num1 + self.mocma
     return self.ptTHR.z() + num1
    def vmethod_0(self, obstacle_0, returnList):
        point3d = MathHelper.distanceBearingPoint(obstacle_0.Position, self.tr,
                                                  obstacle_0.tolerance)
        obstacleAreaResult_0 = ObstacleAreaResult.Primary
        double_0 = None
        double_1 = self.getMOC(point3d)
        double_3 = None
        double_2 = double_1
        if not MathHelper.pointInPolygon(self.primaryArea, obstacle_0.Position,
                                         obstacle_0.tolerance):
            double_0 = 0.0
            double_2 = 0.0
            for current in self.secondaryAreas:
                try:
                    num = None
                    num1 = None
                    resultList = []
                    obstacleAreaResult = current.imethod_1(
                        obstacle_0.Position, obstacle_0.tolerance, double_1,
                        resultList)
                    if obstacleAreaResult == ObstacleAreaResult.Outside:
                        obstacleAreaResult_0 = ObstacleAreaResult.Outside
                        continue
                    num = resultList[0]
                    num1 = resultList[1]
                    if (obstacleAreaResult == ObstacleAreaResult.Primary):
                        obstacleAreaResult_0 = obstacleAreaResult
                        double_2 = num
                        double_0 = num1
                        break
                    elif obstacleAreaResult == ObstacleAreaResult.Secondary and (
                            num > double_2 or double_2 == 0.0):
                        obstacleAreaResult_0 = obstacleAreaResult
                        double_2 = num
                        double_0 = num1
                except IndexError:
                    pass
        if obstacleAreaResult_0 != ObstacleAreaResult.Outside:
            obstacle_0.area = obstacleAreaResult_0
            double_3 = self.vmethod_3(point3d, False)
            if obstacleAreaResult_0 == ObstacleAreaResult.Secondary:
                double_3 = double_3 + (double_1 - double_2)

            returnList.append(double_0)
            returnList.append(double_1)
            returnList.append(double_2)
            returnList.append(double_3)
            return True
        return False
    def vmethod_3(self, point3d_0, bool_0):

        point3d = Point3D()
        point3d = MathHelper.getIntersectionPoint(
            self.ptTHR, self.ptEND, point3d_0,
            MathHelper.distanceBearingPoint(point3d_0, self.trm90, 100))
        num = 0
        if (MathHelper.smethod_115(point3d, self.ptTHR, self.ptTHRm90)):
            num = max([
                MathHelper.calcDistance(self.ptTHR, point3d), self.xstart
            ]) - self.xstart
        num1 = 0
        if (bool_0):
            num1 = self.mocma + num * self.tanslope
        return self.ptTHR.z() + num1
 def vmethod_3(self, point3d_0, bool_0):
     point3d = MathHelper.getIntersectionPoint(
         self.ptTHR, self.ptEND, point3d_0,
         MathHelper.distanceBearingPoint(point3d_0, self.trm90, 100))
     item = 0
     if (MathHelper.smethod_115(point3d, self.ptTHR, self.ptTHRm90)):
         num = MathHelper.calcDistance(self.ptTHR, point3d)
         num1 = 0
         count = len(self.segments)
         while (num1 < count):
             if (num < self.segments[num1].xstart):
                 if (not bool_0):
                     return self.ptTHR.z() + item
                 item = item + self.segments[num1].moc
                 return self.ptTHR.z() + item
             elif (num < self.segments[num1].xstart
                   or num >= self.segments[num1].xend):
                 if (num1 + 1 >= len(self.segments)):
                     item = (self.segments[num1].xend -
                             self.segments[num1].xfas
                             ) * self.segments[num1].tanafas
                     if (bool_0):
                         item = item + self.segments[num1].moc
                 elif (num <= self.segments[num1 + 1].xstart):
                     item = (self.segments[num1].xend -
                             self.segments[num1].xfas
                             ) * self.segments[num1].tanafas
                     if (not bool_0):
                         return self.ptTHR.z() + item
                     item1 = self.segments[num1].moc
                     item2 = self.segments[num1 + 1].moc
                     num2 = (item2 -
                             item1) / (self.segments[num1 + 1].xstart -
                                       self.segments[num1].xend)
                     item3 = item1 + (num - self.segments[num1].xend) * num2
                     item = item + item3
                     return self.ptTHR.z() + item
                 num1 += 1
             else:
                 item = (num - self.segments[num1].xfas
                         ) * self.segments[num1].tanafas
                 if (not bool_0):
                     return self.ptTHR.z() + item
                 item = item + self.segments[num1].moc
                 return self.ptTHR.z() + item
     elif (bool_0):
         item = item + self.segments[0].moc
     return self.ptTHR.z() + item
Ejemplo n.º 30
0
    def putDistances(self):
        try:
            point3dThr = self.parametersPanel.pnlThrPosition.Point3d
            point3dFaf = self.parametersPanel.pnlFafPosition.Point3d

            point3dMapt = self.parametersPanel.pnlMaPtPosition.Point3d

            self.parametersPanel.pnlDistOfFafMapt.Value = Distance(
                MathHelper.calcDistance(point3dFaf, point3dMapt))

            inboundTrackRad = Unit.ConvertDegToRad(
                self.parametersPanel.pnlInboundTrack.Value)
            inboundTrack180Rad = MathHelper.smethod_4(inboundTrackRad +
                                                      math.pi)
            speedTas = self.parametersPanel.pnlTas.Value

            xDist = self.calcDAndXDistance(speedTas, Speed(10), 15)
            self.parametersPanel.pnlDistX.Caption = "X(10kts/15s)"
            if self.parametersPanel.cmbAircraftCategory.SelectedIndex == 5:
                xDist = self.calcDAndXDistance(speedTas, Speed(10), 5)
                self.parametersPanel.pnlDistX.Caption = "X(10kts/5s)"
            dDist = self.calcDAndXDistance(speedTas, Speed(10), 3)

            fixTolerance = 0.0
            if self.dlgType == "NpaOnFix":
                fixTolerance = self.parametersPanel.pnlDistFixTolerance.Value.Metres
            socMaptDistMeters = fixTolerance + dDist + xDist
            socThrDistMeters = MathHelper.calcDistance(
                point3dMapt, point3dThr) - socMaptDistMeters

            sockBearing = inboundTrackRad
            self.socPoint3d = MathHelper.distanceBearingPoint(
                point3dMapt, sockBearing,
                socMaptDistMeters).smethod_167(self.calcSocAltitude())

            self.parametersPanel.pnlDistD.Value = Distance(dDist)
            self.parametersPanel.pnlDistX.Value = Distance(xDist)
            self.parametersPanel.pnlDistOfMaptSoc.Value = Distance(
                socMaptDistMeters)
            self.parametersPanel.pnlDistOfSocThr.Value = Distance(
                MathHelper.calcDistance(self.socPoint3d, point3dThr)
            )  #MathHelper.calcDistance(point3dThr, self.daPoint3d))
            # self.parametersPanel.pnlDistOfFafMapt.Value = Distance(MathHelper.calcDistance(point3dFaf, point3dMapt))#MathHelper.calcDistance(point3dThr, self.socPoint3d))
            self.parametersPanel.pnlDistOfMaptThr.Value = Distance(
                MathHelper.calcDistance(point3dMapt, point3dThr))
        except:
            pass