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);
示例#2
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);
示例#3
0
 def getBearingOfTangentWithOutPt(self, outPt, spiralNumber, turnDirection = None):
     if self.Direction == TurnDirection.Right:
         B = math.asin(self.Radius[spiralNumber] / MathHelper.calcDistance(self.Center[spiralNumber], outPt))
         return MathHelper.smethod_4(MathHelper.getBearing(self.Center[spiralNumber], outPt) + B)
     else:
         B = math.asin(self.Radius[spiralNumber] / MathHelper.calcDistance(self.Center[spiralNumber], outPt))
         return MathHelper.smethod_4(MathHelper.getBearing(self.Center[spiralNumber], outPt) - B)
 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])
 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 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
示例#7
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
示例#8
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 btnEvaluate_Click(self):
        point3dCollection = None
        point3dCollection1 = None
        polylineArea = None
        polylineArea1 = None
        polylineArea2 = None
        primaryObstacleArea = None
        #         if (self.parametersPanel.cmbSelectionMode.currentText() == "Manual" and not self.pnlSelectionMode.method_0()):
        #             return;
        result, point3dCollection, point3dCollection1, polylineArea, polylineArea1, polylineArea2 = self.method_34(
        )
        if (not result):
            return
        point3d = self.parametersPanel.pnlDer.Point3d
        num = MathHelper.getBearing(self.parametersPanel.pnlRwyStart.Point3d,
                                    point3d)
        percent = float(self.parametersPanel.txtMoc.text())
        percent1 = float(self.parametersPanel.txtPdg.text())

        ObstacleTable.MocMultiplier = self.parametersPanel.mocSpinBox.value()
        self.obstaclesModel = DepartureOmnidirectionalObstacles(
            point3d, num,
            Altitude(float(self.parametersPanel.txtTurningAltitude.text()),
                     AltitudeUnits.FT), percent, percent1,
            self.parametersPanel.chbCatH.isChecked(), point3dCollection,
            point3dCollection1, polylineArea1, polylineArea2,
            self.manualPolygon)

        #
        return FlightPlanBaseDlg.btnEvaluate_Click(self)
    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
    def method_33(self):
        turnDirection = []
        try:
            if (self.ui.cmbSegmentType.SelectedIndex == 1):
                point3d = self.pnlIDF.getPoint3D()
                point3d1 = self.pnlHRP.getPoint3D()
                num = Unit.smethod_1(MathHelper.getBearing(point3d, point3d1))
                num1 = self.smethod_17(
                    self.ui.txtTakeOffSurfaceTrack.txtRadialPlan.numberBox)
                MathHelper.smethod_77(num, num1, AngleUnits.Degrees,
                                      turnDirection)

                if (turnDirection[0] == TurnDirection.Left):
                    pass
#                     self.ui.chbLeftTurnProhibited.setVisible(False)
#                     self.ui.chbRightTurnProhibited.setVisible(True)
                elif (turnDirection[0] != TurnDirection.Right):
                    #                     self.ui.chbLeftTurnProhibited.setVisible(True)
                    #                     self.ui.chbRightTurnProhibited.setVisible(True)
                    if (self.ui.chbLeftTurnProhibited.isChecked()
                            and self.ui.chbRightTurnProhibited.isChecked()):
                        self.ui.chbRightTurnProhibited.setChecked(False)
                else:
                    pass
#                     self.ui.chbRightTurnProhibited.setVisible(False)
#                     self.ui.chbLeftTurnProhibited.setVisible(True)
        except:
            pass
示例#12
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 calcRwyBearing(self):
        try:
            point3End = self.thrEndPoint3d
            point3dThr = self.thrPoint3d

            self.parametersPanel.txtDirection.Value = round(Unit.ConvertRadToDeg(MathHelper.getBearing(point3dThr, point3End)), 4)
        except:
            pass
    def calcRwyBearing(self):
        try:
            point3End = self.parametersPanel.pnlRwyEnd.Point3d
            point3dThr = self.parametersPanel.pnlTHR.Point3d

            self.parametersPanel.txtRwyDir.Value = round(Unit.ConvertRadToDeg(MathHelper.getBearing(point3dThr, point3End)), 4)
        except:
            pass
 def calcBearing(self):
     try:
         thrPoint = self.parametersPanel.pnlTHR.Point3d
         endPoint = self.parametersPanel.pnlEnd.Point3d
     except:
         return
     bearing = Unit.ConvertRadToDeg(MathHelper.getBearing(thrPoint, endPoint))
     self.parametersPanel.txtDirection.Value = bearing
示例#16
0
 def method_0(self):
     str0 = ""
     try:
         position = self.method_1(PositionType.START)
         position1 = self.method_1(PositionType.END)
         str0 = "{0:00}".format(Unit.smethod_1(MathHelper.getBearing(position.Point3d, position1.Point3d)) / 10)
     except:
         str0 = ""
     return str0
 def calcRwyBearing(self):
     try:
         point3dMapt = self.parametersPanel.pnlMaPtPosition.Point3d
         point3dFaf = self.parametersPanel.pnlFafPosition.Point3d
         if point3dMapt == None:
             self.parametersPanel.pnlInboundTrack.Value = 0.0
             return
         self.parametersPanel.pnlInboundTrack.Value = round(Unit.ConvertRadToDeg(MathHelper.getBearing(point3dFaf, point3dMapt)), 4)
         self.showMarkDaSoc()
     except:
         pass
 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 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 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 method_20(self, double_0, bool_0):
     if (self.Direction() == TurnDirection.Nothing):
         return
     self[0].Bulge = double_0
     position = self[0].position
     position1 = self[1].position
     turnDirection = MathHelper.smethod_66(double_0)
     point3d = MathHelper.smethod_71(position, position1, double_0)
     if (turnDirection != TurnDirection.Left):
         if turnDirection != TurnDirection.Right :
             num = MathHelper.getBearing(position, position1) 
         else:
             num = MathHelper.getBearing(position1, point3d) - 1.5707963267949
     else:
         num = MathHelper.getBearing(position1, point3d) + 1.5707963267949
         
     count = len(self)
     i = 1
     while i < count:
         position = self[i].position
         if (i != count - 1):
             position1 = self[i + 1].position
         else:
             if (not bool_0):
                 return
             position1 = self[0].position
         point3d = MathHelper.smethod_75(num, position, position1)
         self[i].Bulge = MathHelper.smethod_59(num, position, position1)
         turnDirection = MathHelper.smethod_63(num, MathHelper.getBearing(position, position1), AngleUnits.Radians)
         if (turnDirection == TurnDirection.Left):
             num = MathHelper.getBearing(position1, point3d) + 1.5707963267949
         elif (turnDirection == TurnDirection.Right):
             num = MathHelper.getBearing(position1, point3d) - 1.5707963267949
         i += 1
示例#22
0
 def calcRwyBearing(self):
     try:
         point3dThr = self.parametersPanel.pnlThrPosition.Point3d
         point3dFap = self.parametersPanel.pnlFapPosition.Point3d
         if point3dThr == None:
             self.parametersPanel.pnlInboundTrack.Value = 0.0
             return
         if point3dFap == None:
             self.parametersPanel.pnlInboundTrack.Value = round(
                 Unit.ConvertRadToDeg(
                     MathHelper.getBearing(
                         point3dThr,
                         self.parametersPanel.pnlRwyEndPosition.Point3d)),
                 4)
             point3dFap = self.rwyEndPosition
         else:
             self.parametersPanel.pnlInboundTrack.Value = round(
                 Unit.ConvertRadToDeg(
                     MathHelper.getBearing(point3dFap, point3dThr)), 4)
         self.showMarkDaSoc()
     except:
         pass
示例#23
0
    def __init__(self, parent, thrPos, rwyPos=None, track=None):
        QDialog.__init__(self, parent)
        self.baseTrack = track
        self.resize(290, 136)
        self.setWindowTitle("Calculate FAP")
        sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
        self.setSizePolicy(sizePolicy)
        verticalLayoutDlg = QVBoxLayout(self)
        verticalLayoutDlg.setObjectName(("verticalLayoutDlg"))

        self.groupBox = GroupBox(self)
        verticalLayoutDlg.addWidget(self.groupBox)

        self.pnlThrPosition = PositionPanel(self.groupBox)
        self.pnlThrPosition.Point3d = thrPos
        self.groupBox.Add = self.pnlThrPosition
        self.pnlThrPosition.Visible = False

        self.pnlRwyEndPosition = PositionPanel(self.groupBox)
        self.pnlRwyEndPosition.Point3d = rwyPos
        self.groupBox.Add = self.pnlRwyEndPosition
        self.pnlRwyEndPosition.Visible = False

        self.pnlTrack = TrackRadialBoxPanel(self.groupBox)
        self.pnlTrack.Caption = "Track"
        if rwyPos == None:
            self.pnlTrack.Value = track
        else:
            self.pnlTrack.Value = MathHelper.getBearing(thrPos, rwyPos)
        self.pnlTrack.LabelWidth = 100
        self.groupBox.Add = self.pnlTrack

        self.pnlDist = DistanceBoxPanel(self.groupBox, DistanceUnits.M,
                                        DistanceUnits.NM)
        self.pnlDist.Caption = "Distance"
        self.pnlDist.Value = Distance(5, DistanceUnits.NM)
        self.pnlDist.LabelWidth = 100
        self.groupBox.Add = self.pnlDist

        self.btnBoxOkCancel = QDialogButtonBox(self)
        self.btnBoxOkCancel.setObjectName(("btnBoxOkCancel"))
        self.btnBoxOkCancel.setStandardButtons(QDialogButtonBox.Cancel
                                               | QDialogButtonBox.Ok)
        self.connect(self.btnBoxOkCancel, SIGNAL("accepted()"), self.acceptDlg)
        self.connect(self.btnBoxOkCancel, SIGNAL("rejected()"), self.reject)

        verticalLayoutDlg.addWidget(self.btnBoxOkCancel)
    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
示例#25
0
 def method_0(self):
     str0 = ""
     try:
         position = self.method_1(PositionType.THR)
         position1 = self.method_1(PositionType.END)
         str0 = str(
             int(
                 round(
                     Unit.smethod_1(
                         MathHelper.getBearing(position.Point3d,
                                               position1.Point3d)) / 10)))
         if len(str0) == 1:
             str0 = "0" + str0
     except:
         str0 = ""
     return str0
示例#26
0
 def method_6(self, polyline_0, point3d_0, double0, point3d1):
     double_0 = double0
     point3d_1 = point3d1
     #         Point3d point3d;
     flag = False
     origin = Point3D.get_Origin()
     i = 0
     for plylineAreaPoint in polyline_0:
         bulgeAt = plylineAreaPoint.Bulge
         if (bulgeAt != 0):
             point3dAt = plylineAreaPoint.Position
             point3d1 = polyline_0[0].Position if (
                 i == polyline_0.Count - 1) else polyline_0[i + 1].Position
             point3d = MathHelper.smethod_71(point3dAt, point3d1, bulgeAt)
             if (point3d != None):
                 point3d2 = MathHelper.distanceBearingPoint(
                     point3d, MathHelper.getBearing(point3d_0, point3d),
                     MathHelper.calcDistance(point3d, point3dAt))
                 if (flag):
                     if (self.orientation == OrientationType.Left):
                         if (not MathHelper.smethod_119(
                                 point3d2, point3d_0, origin)):
                             num = MathHelper.calcDistance(
                                 point3d_0, point3d2)
                             if (num > double_0):
                                 double_0 = num
                                 point3d_1 = point3d2
                             origin = point3d1
                             flag = True
                             continue
                         continue
                     elif (MathHelper.smethod_115(point3d2, point3d_0,
                                                  origin)):
                         continue
                 num = MathHelper.calcDistance(point3d_0, point3d2)
                 if (num > double_0):
                     double_0 = num
                     point3d_1 = point3d2
                 origin = point3d1
                 flag = True
         i += 1
     return (double_0, point3d_1)
示例#27
0
 def smethod_1(position_0, position_1):
     #         double_0 = Unit.smethod_1(MathHelper.getBearing(position_1, position_0))
     return Unit.smethod_1(MathHelper.getBearing(position_0, position_1))
示例#28
0
 def smethod_0(position_0, position_1):
     return Unit.smethod_1(MathHelper.getBearing(position_0, position_1))
示例#29
0
    def btnConstruct2_Click(self):
        qgsLayerTreeView = define._mLayerTreeView
        groupName = self.surfaceType2
        layerTreeModel = qgsLayerTreeView.layerTreeModel()
        layerTreeGroup = layerTreeModel.rootGroup()
        rowCount = layerTreeModel.rowCount()
        groupExisting = False
        if rowCount > 0:
            for i in range(rowCount):
                qgsLayerTreeNode = layerTreeModel.index2node(
                    layerTreeModel.index(i, 0))
                if qgsLayerTreeNode.nodeType() == 0:
                    qgsLayerTreeNode._class_ = QgsLayerTreeGroup
                    if isinstance(qgsLayerTreeNode, QgsLayerTreeGroup
                                  ) and qgsLayerTreeNode.name() == groupName:
                        groupExisting = True

        if groupExisting:
            if len(self.resultLayerList2) > 0:
                QgisHelper.removeFromCanvas(define._canvas,
                                            self.resultLayerList2)
                self.resultLayerList2 = []
            else:
                QMessageBox.warning(
                    self, "Warning", "Please remove \"" + self.surfaceType2 +
                    "\" layer group from LayerTreeView.")
                return
        num = None
        num1 = None
        line = None
        polyline = None
        point3d = None
        point3d1 = None
        point3d2 = None
        point3d3 = None
        point3d4 = None
        point3d5 = None
        point3d6 = None
        point3d7 = None
        point3d8 = None
        ficorResult = None
        point = []
        value = None
        resultPolylineAreaList = []
        # if (!AcadHelper.Ready)
        # {
        #     return;
        # }
        # if (!self.method_27(true))
        # {
        #     return;
        # }
        # string constructionLayer = base.ConstructionLayer;
        point3d9 = self.parametersPanel.pnlTrackingPosition.Point3d
        point3d10 = self.parametersPanel.pnlIntersectingPosition.Point3d
        value1 = float(self.parametersPanel.txtTrackingRadialTrack.Value)
        value2 = float(self.parametersPanel.txtIntersectingRadialTrack.Value)
        num2 = Unit.ConvertDegToRad(value1)
        num3 = Unit.ConvertDegToRad(value2)
        if (self.parametersPanel.cmbTrackingType.currentIndex() != 0):
            num = Unit.ConvertDegToRad(2.4) if (
                self.parametersPanel.cmbTrackingType.currentIndex() != 1
            ) else Unit.ConvertDegToRad(6.9)
        else:
            num = Unit.ConvertDegToRad(5.2)
        num1 = Unit.ConvertDegToRad(6.2) if (
            self.parametersPanel.cmbIntersectingType.currentIndex() != 0
        ) else Unit.ConvertDegToRad(4.5)
        num4 = num2 + num
        point3d11 = MathHelper.distanceBearingPoint(point3d9, num4, 100)
        num5 = num2 - num
        point3d12 = MathHelper.distanceBearingPoint(point3d9, num5, 100)
        point3d13 = MathHelper.distanceBearingPoint(point3d9, num2, 100)

        point3d = MathHelper.getIntersectionPoint(
            point3d9, point3d13, point3d10,
            MathHelper.distanceBearingPoint(point3d10, num3, 100))
        if (self.parametersPanel.cmbIntersectingType.currentIndex() >= 2):
            metres = Distance(
                float(self.parametersPanel.txtIntersectingDistance.text()),
                DistanceUnits.NM).Metres
            if (self.parametersPanel.chb0dmeAtThr.isChecked()):
                value = Distance(
                    float(self.parametersPanel.txtDmeOffset.text()))
                metres = metres + value.Metres
            num6 = 460 + metres * 0.0125
            num7 = metres + num6
            num8 = metres - num6
            if (MathHelper.smethod_102(point3d9, point3d10)):
                point3d14 = MathHelper.distanceBearingPoint(
                    point3d9, num4, num8)
                point3d15 = MathHelper.distanceBearingPoint(
                    point3d9, num2, num8)
                point3d16 = MathHelper.distanceBearingPoint(
                    point3d9, num5, num8)
                point3d17 = MathHelper.distanceBearingPoint(
                    point3d9, num5, num7)
                point3d18 = MathHelper.distanceBearingPoint(
                    point3d9, num2, num7)
                point3d19 = MathHelper.distanceBearingPoint(
                    point3d9, num4, num7)
                point = [point3d14, point3d16, point3d17, point3d19]
                polyline = AcadHelper.smethod_126(point)
                polyline.SetBulgeAt(
                    0, MathHelper.smethod_60(point3d14, point3d15, point3d16))
                polyline.SetBulgeAt(
                    2, MathHelper.smethod_60(point3d17, point3d18, point3d19))
                polyline.set_Closed(True)
                resultPolylineAreaList.append(polyline)
                # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer);
                point3d14 = MathHelper.distanceBearingPoint(
                    point3d9, num2, num8)
                point3d15 = MathHelper.distanceBearingPoint(
                    point3d9, num2, num7)
                resultPolylineAreaList.append(
                    PolylineArea([point3d14, point3d15]))
                # line = new Line(point3d14, point3d15);
                #         AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer);
                point3d14 = MathHelper.distanceBearingPoint(
                    point3d9, num4, metres)
                point3d15 = MathHelper.distanceBearingPoint(
                    point3d9, num2, metres)
                point3d16 = MathHelper.distanceBearingPoint(
                    point3d9, num5, metres)
                point = [point3d14, point3d16]
                polyline = AcadHelper.smethod_126(point)
                polyline.SetBulgeAt(
                    0, MathHelper.smethod_60(point3d14, point3d15, point3d16))
                resultPolylineAreaList.append(polyline)
                # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer);
            else:
                ficorResult1 = self.method_37(point3d10, num2, point3d9,
                                              point3d13, num8, FicorInput.C)
                ficorResult2 = self.method_37(point3d10, num2, point3d9,
                                              point3d13, metres, FicorInput.C)
                ficorResult3 = self.method_37(point3d10, num2, point3d9,
                                              point3d13, num7, FicorInput.C)
                if (ficorResult1.Status != FicorStatus.TWO
                        and ficorResult2.Status != FicorStatus.TWO):
                    if (ficorResult3.Status == FicorStatus.TWO):
                        ficorResult = FicorResult(None, FicorStatus.TWO)
                    else:
                        ficorResult = FicorResult(None, ficorResult2.Status)
                else:
                    ficorResult = FicorResult(None, FicorStatus.TWO)
                if (ficorResult.Status != FicorStatus.NID):
                    ficorInput = FicorInput.F
                    num9 = 1
                    if (ficorResult.Status == FicorStatus.TWO):
                        QMessageBox.warning(
                            self, "Infomation",
                            Messages.TWO_POSSIBLE_FIX_POSITIONS)
                        ficorInput = FicorInput.L
                        num9 = 2
                    num10 = 0
                    while (num10 < num9):
                        ficorResult4 = self.method_37(point3d10, num4,
                                                      point3d9, point3d11,
                                                      num8, ficorInput)
                        ficorResult5 = self.method_37(point3d10, num2,
                                                      point3d9, point3d13,
                                                      num8, ficorInput)
                        ficorResult6 = self.method_37(point3d10, num5,
                                                      point3d9, point3d12,
                                                      num8, ficorInput)
                        ficorResult7 = self.method_37(point3d10, num4,
                                                      point3d9, point3d11,
                                                      metres, ficorInput)
                        ficorResult8 = self.method_37(point3d10, num2,
                                                      point3d9, point3d13,
                                                      metres, ficorInput)
                        ficorResult9 = self.method_37(point3d10, num5,
                                                      point3d9, point3d12,
                                                      metres, ficorInput)
                        ficorResult10 = self.method_37(point3d10, num4,
                                                       point3d9, point3d11,
                                                       num7, ficorInput)
                        ficorResult11 = self.method_37(point3d10, num2,
                                                       point3d9, point3d13,
                                                       num7, ficorInput)
                        ficorResult12 = self.method_37(point3d10, num5,
                                                       point3d9, point3d12,
                                                       num7, ficorInput)
                        if (ficorResult4.Status == FicorStatus.NID
                                or ficorResult5.Status == FicorStatus.NID
                                or ficorResult6.Status == FicorStatus.NID
                                or ficorResult7.Status == FicorStatus.NID
                                or ficorResult9.Status == FicorStatus.NID
                                or ficorResult10.Status == FicorStatus.NID
                                or ficorResult11.Status == FicorStatus.NID
                                or ficorResult12.Status == FicorStatus.NID
                                or ficorResult8.Status == FicorStatus.NID):
                            eRRFAILEDTOCONSTRUCTTHEFIXAUTOMATICALLY = Messages.ERR_FAILED_TO_CONSTRUCT_THE_FIX_AUTOMATICALLY
                            value = Distance(
                                float(self.parametersPanel.
                                      txtIntersectingDistance.text()),
                                DistanceUnits.NM)
                            str000 = str(round(value.Metres, 4)) + "m"
                            value = str(round(Distance(num6).Metres, 4)) + "m"
                            QMessageBox.warning(
                                self, "Error",
                                eRRFAILEDTOCONSTRUCTTHEFIXAUTOMATICALLY %
                                (str000, value))
                            #                     ErrorMessageBox.smethod_0(self, string.Format(eRRFAILEDTOCONSTRUCTTHEFIXAUTOMATICALLY, str, value.method_0(":m")));
                            return
                        elif (MathHelper.calcDistance(point3d9,
                                                      ficorResult8.Point)
                              < MathHelper.calcDistance(
                                  ficorResult5.Point, ficorResult8.Point)):
                            QMessageBox.warning(
                                self, "Error", Messages.
                                ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE)
                            #                     ErrorMessageBox.smethod_0(self, Messages.ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE);
                            return
                        else:
                            point = [
                                ficorResult4.Point, ficorResult6.Point,
                                ficorResult12.Point, ficorResult10.Point
                            ]
                            polyline = AcadHelper.smethod_126(point)
                            polyline.SetBulgeAt(
                                0,
                                MathHelper.smethod_60(ficorResult4.Point,
                                                      ficorResult5.Point,
                                                      ficorResult6.Point))
                            polyline.SetBulgeAt(
                                2,
                                MathHelper.smethod_60(ficorResult12.Point,
                                                      ficorResult11.Point,
                                                      ficorResult10.Point))
                            polyline.set_Closed(True)
                            resultPolylineAreaList.append(polyline)
                            # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer);
                            resultPolylineAreaList.append(
                                PolylineArea(
                                    [ficorResult5.Point, ficorResult11.Point]))
                            # line = new Line(ficorResult5.Point, ficorResult11.Point);
                            # AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer);
                            point = [ficorResult7.Point, ficorResult9.Point]
                            polyline = AcadHelper.smethod_126(point)
                            polyline.SetBulgeAt(
                                0,
                                MathHelper.smethod_60(ficorResult7.Point,
                                                      ficorResult8.Point,
                                                      ficorResult9.Point))
                            resultPolylineAreaList.append(polyline)
                            # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer);
                            if (ficorResult.Status == FicorStatus.TWO):
                                ficorInput = FicorInput.S
                            num10 += 1
                else:
                    QMessageBox.warning(
                        self, "Error", Messages.
                        ERR_RADIAL_TRACK_DME_DISTANCE_DO_NOT_INTERSECT)
                    #             ErrorMessageBox.smethod_0(self, Messages.ERR_RADIAL_TRACK_DME_DISTANCE_DO_NOT_INTERSECT);
                    return
        elif (point3d == None):
            QMessageBox.warning(self, "Error",
                                Messages.ERR_RADIALS_TRACKS_ARE_PARALLEL)
            #     ErrorMessageBox.smethod_0(self, Messages.ERR_RADIALS_TRACKS_ARE_PARALLEL);
            return
        elif (MathHelper.smethod_99(MathHelper.getBearing(point3d9, point3d),
                                    num2, 0.001)):
            point3d20 = MathHelper.distanceBearingPoint(
                point3d10, num3 + num1, 100)
            point3d21 = MathHelper.distanceBearingPoint(
                point3d10, num3 - num1, 100)
            point3d1 = MathHelper.getIntersectionPoint(point3d9, point3d12,
                                                       point3d10, point3d20)
            point3d2 = MathHelper.getIntersectionPoint(point3d9, point3d12,
                                                       point3d10, point3d21)
            point3d3 = MathHelper.getIntersectionPoint(point3d9, point3d11,
                                                       point3d10, point3d21)
            point3d4 = MathHelper.getIntersectionPoint(point3d9, point3d11,
                                                       point3d10, point3d20)
            point3d5 = MathHelper.getIntersectionPoint(point3d9, point3d,
                                                       point3d10, point3d20)
            point3d6 = MathHelper.getIntersectionPoint(point3d9, point3d,
                                                       point3d10, point3d21)
            point3d7 = MathHelper.getIntersectionPoint(point3d9, point3d11,
                                                       point3d10, point3d)
            point3d8 = MathHelper.getIntersectionPoint(point3d9, point3d12,
                                                       point3d10, point3d)
            if (MathHelper.calcDistance(point3d9, point3d) <
                    MathHelper.calcDistance(point3d5, point3d)
                    or MathHelper.calcDistance(point3d10, point3d) <
                    MathHelper.calcDistance(point3d5, point3d)
                    or MathHelper.calcDistance(point3d9, point3d) <
                    MathHelper.calcDistance(point3d8, point3d)
                    or MathHelper.calcDistance(point3d10, point3d) <
                    MathHelper.calcDistance(point3d8, point3d)):
                QMessageBox.warning(
                    self, "Error",
                    Messages.ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE)
                #         ErrorMessageBox.smethod_0(self, Messages.ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE);
                return
            else:
                resultPolylineAreaList.append(
                    PolylineArea([point3d5, point3d6]))
                #         line = new Line(point3d5, point3d6);
                #         AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer);
                resultPolylineAreaList.append(
                    PolylineArea([point3d7, point3d8]))
                #         line = new Line(point3d7, point3d8);
                #         AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer);
                point = [point3d1, point3d2, point3d3, point3d4]
                polyline = AcadHelper.smethod_126(point)
                polyline.set_Closed(True)
                resultPolylineAreaList.append(polyline)
        #         AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer);
        else:
            QMessageBox.warning(self, "Error",
                                Messages.ERR_RADIALS_TRACKS_DO_NOT_INTERSECT)
            #     ErrorMessageBox.smethod_0(self, Messages.ERR_RADIALS_TRACKS_DO_NOT_INTERSECT);
            return

        mapUnits = define._canvas.mapUnits()
        constructionLayer = AcadHelper.createVectorLayer(
            SurfaceTypes.FixConstruction, QGis.Line)

        for polylinrArea0 in resultPolylineAreaList:
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer,
                                                       polylinrArea0)
        QgisHelper.appendToCanvas(define._canvas, [constructionLayer],
                                  SurfaceTypes.FixConstruction, True)
        self.resultLayerList2 = [constructionLayer]
        QgisHelper.zoomToLayers(self.resultLayerList2)
    def canvasPressEvent( self, e ):
        define._messageLabel.setText("")
        self.menuString = ""
        pointBackground = e.pos()
#         self.Point = QgisHelper.snapPoint(e.pos(), self.mSnapper, define._canvas)
        self.Point, self.pointID, self.layer= self.snapPoint(e.pos())
        self.selectedLayerFromSnapPoint = None


        if ( self.mRubberBand == None ):
            self.resultPolylineArea = PolylineArea()
            self.mRubberBand0.reset( QGis.Polygon )
#             define._canvas.clearCache ()
            self.mRubberBand = QgsRubberBand( self.mCanvas, QGis.Polygon )
            self.mRubberBand0 = QgsRubberBand( self.mCanvas, QGis.Polygon )
            self.mRubberBand.setFillColor( self.mFillColor )
            self.mRubberBand.setBorderColor( self.mBorderColour )
            self.mRubberBand0.setFillColor( QColor(255, 255, 255, 100) )
            self.mRubberBand0.setBorderColor( QColor(0, 0, 0) )
        if ( e.button() == Qt.LeftButton ):
            if self.Point == None:
                self.mRubberBand.addPoint( self.toMapCoordinates( e.pos() ) )
                self.resultPolylineArea.Add(PolylineAreaPoint(self.toMapCoordinates( e.pos() )))
                if self.isPrimaryPolylineStarted:
                    self.primaryPolyline.Add(PolylineAreaPoint(self.toMapCoordinates( e.pos() )))
            else:
                self.mRubberBand.addPoint( self.Point )
                self.resultPolylineArea.Add(PolylineAreaPoint(self.Point))
                if self.isPrimaryPolylineStarted:
                    self.primaryPolyline.Add(PolylineAreaPoint(self.toMapCoordinates( e.pos() )))
        else:
            menu = None
            if self.areaType == ProtectionAreaType.Secondary and len(self.resultPolylineArea) == 0:
                menu = self.createContextMenu(self.areaType, True)
                menu.exec_( define._canvas.mapToGlobal(e.pos() ))
                return

            if ( self.mRubberBand.numberOfVertices() > 2 ):
                self.polygonGeom = self.mRubberBand.asGeometry()
            else:
                return
#                 QgsMapToolSelectUtils.setSelectFeatures( self.mCanvas, polygonGeom, e )
            menu = self.createContextMenu(self.areaType)
            menu.exec_( define._canvas.mapToGlobal(e.pos() ))

            if self.menuString == "Cancel" or self.menuString == "Arc":
                return
            elif self.menuString == "Undo":
                if ( self.mRubberBand.numberOfVertices() > 0 ):

                    self.mRubberBand = None
                    QgisHelper.ClearRubberBandInCanvas(define._canvas)
                    self.mRubberBand = QgsRubberBand( self.mCanvas, QGis.Polygon )
                    self.mRubberBand.setFillColor( self.mFillColor )
                    self.mRubberBand.setBorderColor( self.mBorderColour )
                    self.resultPolylineArea[self.resultPolylineArea.Count - 2].bulge = 0.0
                    self.resultPolylineArea.pop(self.resultPolylineArea.Count - 1)
                    if self.isPrimaryPolylineStarted and len(self.primaryPolyline) > 0:
                        self.primaryPolyline.pop(self.primaryPolyline.Count - 1)
                    for pt in self.resultPolylineArea.method_14():
                        self.mRubberBand.addPoint(pt)
                return
            elif self.menuString == "Enter":
                # if self.areaType == ProtectionAreaType.Secondary:
                #     if self.resultPolylineArea.Count != 4:
                #         define._messageLabel.setText("The count of point of Secondary Area must be 4.")
                #         return
                self.mRubberBand.reset( QGis.Polygon )
                self.mRubberBand0.reset( QGis.Polygon )
#             define._canvas.clearCache ()

                self.mRubberBand0 = QgsRubberBand( self.mCanvas, QGis.Polygon )

                self.mRubberBand0.setFillColor( QColor(255, 255, 255, 100) )
                self.mRubberBand0.setBorderColor( QColor(0, 0, 0) )
                for pt in self.resultPolylineArea.method_14():
                    self.mRubberBand0.addPoint(pt)
                # self.mRubberBand0.addGeometry(self.polygonGeom, None)
                n = self.mRubberBand0.numberOfVertices()
                self.mRubberBand0.show()
                self.mRubberBand = None
                area = None
                if self.areaType == ProtectionAreaType.Primary:
                    area = PrimaryObstacleArea(self.resultPolylineArea)
                elif self.areaType == ProtectionAreaType.Secondary:
                    if len(self.resultPolylineArea) == 4:
                        area = SecondaryObstacleArea(self.resultPolylineArea[0].Position, self.resultPolylineArea[1].Position, self.resultPolylineArea[3].Position, self.resultPolylineArea[2].Position, MathHelper.getBearing(self.resultPolylineArea[0].Position, self.resultPolylineArea[1].Position))

                    else:
                        if self.primaryPolyline.Count < 2:
                            define._messageLabel.setText("The PrimaryLine in Secondary Area must exist.")
                            return
                        if self.isPrimaryPolylineStarted:
                            define._messageLabel.setText("You must finish  the input of  PrimaryLine.")
                            return
                        area = SecondaryObstacleAreaWithManyPoints(self.resultPolylineArea, self.primaryPolyline)
                self.emit(SIGNAL("outputResult"), area, self.mRubberBand0)
            n = 0