def btnConstruct_Click(self):
        if len(self.resultLayerList) > 0:
            QgisHelper.removeFromCanvas(define._canvas, self.resultLayerList)
            self.resultLayerList = []
        try:
            point3d = self.parametersPanel.pnlTHR.getPoint3D()
            try:
                num = MathHelper.smethod_4(
                    Unit.ConvertDegToRad(
                        float(self.parametersPanel.txtRwyDir.Value) + 180))
            except ValueError:
                raise UserWarning, "Runway Direction is invalide!"
            altitude = self.parametersPanel.pnlOCAH.method_3(
                Altitude(point3d.get_Z()))
            metres = altitude.Metres
            if (metres < 10):
                raise UserWarning, Messages.ERR_INSUFFICIENT_MINIMUM_ALTITUDE
            try:
                res, point3dCollection = self.method_37(
                    point3d, num, metres, metres / math.tan(
                        Unit.ConvertDegToRad(
                            float(self.parametersPanel.txtDescAngle.Value.
                                  Degrees) - 1.12)))
            except ValueError:
                raise UserWarning, "DescAngle is invalide!"
            if (not res):
                return
            self.surfaceArea = PrimaryObstacleArea(
                PolylineArea(point3dCollection))
            layer = AcadHelper.createVectorLayer("Visual Segment Surface")
            if (self.parametersPanel.cmbConstructionType.SelectedIndex !=
                    ConstructionType.Construct2D):
                face = [
                    point3dCollection.get_Item(0),
                    point3dCollection.get_Item(1),
                    point3dCollection.get_Item(2),
                    point3dCollection.get_Item(3),
                    point3dCollection.get_Item(0)
                ]
                AcadHelper.setGeometryAndAttributesInLayer(layer, face)
                # layer = QgisHelper.createPolylineLayer("Visual Segment Surface 3D", [(face, [])], [])
            else:
                face = point3dCollection
                face.append(point3dCollection[0])
                AcadHelper.setGeometryAndAttributesInLayer(layer, face)
                # layer = QgisHelper.createPolylineLayer("Visual Segment Surface 2D", [(face, [])], [])

            QgisHelper.appendToCanvas(define._canvas, [layer],
                                      SurfaceTypes.VisualSegmentSurface)
            QgisHelper.zoomToLayers([layer])
            self.resultLayerList = [layer]
            self.ui.btnEvaluate.setEnabled(True)

        except UserWarning as e:
            QMessageBox.warning(self, "Error", e.message)
    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
    def btnConstruct_Click(self):
        flag = FlightPlanBaseDlg.btnConstruct_Click(self)
        if not flag:
            return
        value = Speed(float(self.parametersPanel.txtIas.text()),SpeedUnits.KTS);
        if (self.parametersPanel.chbDeparture.isChecked()):
            value = value + (value / 10);
        altitude = Altitude(float(self.parametersPanel.txtAltitudeFt.text()), AltitudeUnits.FT);
        value1 = float(self.parametersPanel.txtIsa.text());
        num1 = float (self.parametersPanel.txtBankAngle.text());
        self.speedP = self.parametersPanel.pnlWind.Value;
        self.num2P = Unit.ConvertDegToRad(float(self.parametersPanel.txtTrackRadial.Value));
        self.orientationTypeP = self.parametersPanel.cmbOrientation.currentText();
        speed1 = Speed.smethod_0(value, value1, altitude);
        numList = []
        distance = Distance.smethod_1(speed1, num1, numList);
        self.numP = numList[0]
        self.metresP = distance.Metres;

        self.originP = Point3D.get_Origin();
        self.point3dP = Point3D.get_Origin();
        self.origin1P = Point3D.get_Origin();
        self.polylineP = PolylineArea();
        self.flagP = True;


        define._canvas.setMapTool(self.CaptureCoordTool)
Example #4
0
 def getDistanceFromWaypointToLatestTurningPoint(
         rnavWaypointType_0, speedTas, speedWind, valuePilotTime,
         valueBankEstTime, att, turnRadiusDist, turnAngle, angleUnits_0):
     ### This methos is the method which calculate "Latest turning point".
     ### Parameters
     ### angleUnits_0 : type of turnAngle(Degree or Radian).
     ### att, turnRadiusDist : Distance class
     ### valuePilotTime, valueBankEstTime : float type
     ### speedTas, speedWind : Speed class
     if (rnavWaypointType_0 != RnavWaypointType.FlyBy):
         if (rnavWaypointType_0 != RnavWaypointType.FlyOver):
             raise UserWarning, "RNAV WayPoint type not SUPPORTED"
         double0 = valuePilotTime + valueBankEstTime
         num = double0 * (speedTas.MetresPerSecond +
                          speedWind.MetresPerSecond)
         return Distance(-(att.Metres + num))
     double_2 = 0.0
     if (angleUnits_0 == AngleUnits.Degrees):
         double_2 = Unit.ConvertDegToRad(turnAngle)
     num1 = min([
         turnRadiusDist.Metres * math.tan(double_2 / 2),
         turnRadiusDist.Metres
     ])
     double01 = valuePilotTime * (speedTas.MetresPerSecond +
                                  speedWind.MetresPerSecond)
     return Distance(num1 - att.Metres - double01)
    def putDistances(self):
        try:
            point3dThr = self.parametersPanel.pnlThrPosition.Point3d
            point3dFaf = self.parametersPanel.pnlFapPosition.Point3d

            point3dThr = self.parametersPanel.pnlThrPosition.Point3d
            # point3dFaf = self.parametersPanel.pnlFapPosition.Point3d
            inboundTrackRad = MathHelper.smethod_4(
                self.parametersPanel.pnlInboundTrack.Value
            )  #MathHelper.getBearing(point3dFaf, point3dThr)
            inboundTrack180Rad = MathHelper.smethod_4(inboundTrackRad +
                                                      math.pi)
            estimatedAltitdeMeters = self.parametersPanel.pnlEstimatedAltitude.Value.Metres
            thrAltitudeMeters = self.parametersPanel.pnlThrPosition.Altitude(
            ).Metres
            heightLossAltitudeMeters = self.parametersPanel.pnlHeightLoss.Value.Metres
            rdhAltitudeMeters = self.parametersPanel.pnlRDH.Value.Metres
            vpa = Unit.ConvertDegToRad(self.getVPA())
            xz = self.parametersPanel.pnlDistXz.Value.Metres
            socThrDistMeters = (
                (estimatedAltitdeMeters - thrAltitudeMeters -
                 heightLossAltitudeMeters) / math.tan(vpa)) + xz
            daThrDistMeters = (estimatedAltitdeMeters - thrAltitudeMeters -
                               rdhAltitudeMeters) / math.tan(vpa)

            self.parametersPanel.pnlDistOfDaThr.Value = Distance(
                daThrDistMeters
            )  #MathHelper.calcDistance(point3dThr, self.daPoint3d))
            self.parametersPanel.pnlDistOfSocThr.Value = Distance(
                socThrDistMeters
            )  #MathHelper.calcDistance(point3dThr, self.socPoint3d))
            self.parametersPanel.pnlDistOfFafDA.Value = Distance(
                MathHelper.calcDistance(point3dFaf, self.daPoint3d))
        except:
            pass
Example #6
0
    def calcALT(self):
        thrAlt = Unit.ConvertFeetToMeter(self.data["ThrAltitude"])
        rdhAlt = Unit.ConvertFeetToMeter(self.data["RDHAltitude"])
        gradient = self.data["DescentGradient"]
        dx = self.data["dX"]

        for i in range(7):
            item = self.stdModel.item(1,
                                      self.data["CatOfAcftCount"][0] + 5 + i)
            val = 0.0
            try:
                val = float(item.text())
            except:
                continue
            dist = val * 1852
            valueHgt = Unit.ConvertFeetToMeter(
                (dist - dx) * math.tan(Unit.ConvertDegToRad(gradient)))
            valueAlt = valueHgt + thrAlt + rdhAlt
            if valueAlt > int(valueAlt):
                valueAlt = int(valueAlt) + 1
            if valueHgt > int(valueHgt):
                valueHgt = int(valueHgt) + 1

            itemTemp = QStandardItem(
                str(valueAlt) + "\n(" + str(valueHgt) + ")")
            itemTemp.setTextAlignment(Qt.AlignCenter)
            self.stdModel.setItem(2, self.data["CatOfAcftCount"][0] + 5 + i,
                                  itemTemp)
 def method_4(self):
     aSFA = None
     if (self.leg.Type == RnpArLegType.RF):
         if (self.ui.txtAltitude.text() != "" and self.ui.txtWind.text() != ""):
             if (self.leg.Segment == RnpArSegmentType.Final):
                 aSFA = self.group.IAS_FA;
             elif (self.leg.Segment != RnpArSegmentType.Initial):
                 if self.leg.Segment != RnpArSegmentType.Intermediate:
                     aSFA = self.group.IAS_MA
                 else:
                     aSFA = self.group.IAS_I
             else:
                 aSFA = self.group.IAS_IA
                 
             try:
                 altitude = Altitude(float(self.ui.txtAltitude.text()), AltitudeUnits.FT)
             except ValueError:
                 raise UserWarning, "Altitude Value is invalid!"
             speed = Speed.plus(Speed.smethod_0(aSFA, self.group.ISA, altitude) , Speed(float(self.ui.txtWind.text())))
             num = math.pow(speed.Knots, 2)
             value = Distance(float(self.ui.txtRadius.text()), DistanceUnits.M) 
             num1 = Unit.smethod_1(math.atan(num / (68625 * value.NauticalMiles)))
             num2 = 3431 * math.tan(Unit.ConvertDegToRad(num1)) / (3.14159265358979 * speed.Knots)
             self.ui.txtBank.setText(str(round(num1, 2)))
             self.ui.txtR.setText(str(round(num2, 2)))
             return
         self.ui.txtBank.setText("")
         self.ui.txtR.setText("")
    def __init__(self, rnavSpecification_0, rnavDmeDmeFlightPhase_0,
                 rnavDmeDmeCriteria_0, altitude_0):
        #         double num;
        #         double num1;
        self.xtt = Distance(0, DistanceUnits.NM)
        self.att = Distance(0, DistanceUnits.NM)
        self.asw = Distance(0, DistanceUnits.NM)

        if rnavSpecification_0 == RnavSpecification.Rnav5:
            if (rnavDmeDmeFlightPhase_0 !=
                    RnavDmeDmeFlightPhase.EnrouteStarSid):
                return
#                 throw new ArgumentException(string.Format(Validations.RNAV_FLIGHT_PHASE_NOT_SUPPORTED, EnumHelper.smethod_0(rnavDmeDmeFlightPhase_0)));
            num = 2.5
        elif rnavSpecification_0 == RnavSpecification.Rnav2:
            num = 1
        elif rnavSpecification_0 == RnavSpecification.Rnav1:
            num = 0.5
        else:
            return
        if rnavDmeDmeFlightPhase_0 == RnavDmeDmeFlightPhase.EnrouteStarSid:
            num1 = 2
        elif rnavDmeDmeFlightPhase_0 == RnavDmeDmeFlightPhase.Star30Sid30IfIaf:
            num1 = 1
        elif rnavDmeDmeFlightPhase_0 == RnavDmeDmeFlightPhase.Sid15:
            num1 = 0.5
        else:
            return
        num2 = 0.25
        num3 = Unit.ConvertDegToRad(90)
        if (rnavDmeDmeCriteria_0 == RnavDmeDmeCriteria.Two):
            num3 = Unit.ConvertDegToRad(30)
        num4 = 1.23 * math.sqrt(altitude_0.Feet)
        if (rnavSpecification_0 == RnavSpecification.Rnav5):
            num4 = 300
        elif (rnavDmeDmeFlightPhase_0 == RnavDmeDmeFlightPhase.EnrouteStarSid):
            num4 = 1.23 * math.sqrt(15000)
        num5 = max([0.085, 0.00125 * num4])
        num6 = 0.05
        num7 = 2 * math.sqrt(2 * (num5 * num5 + num6 * num6)) / math.sin(num3)
        self.xtt = Distance(math.sqrt(num7 * num7 + num * num + num2 * num2),
                            DistanceUnits.NM)
        self.att = Distance(math.sqrt(num7 * num7 + num2 * num2),
                            DistanceUnits.NM)
        self.asw = Distance(1.5 * self.xtt.NauticalMiles + num1,
                            DistanceUnits.NM)
    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
Example #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
Example #11
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
Example #12
0
    def acceptDlg(self):
        nauticalMiles = self.pnlDist.Value.NauticalMiles
        value = Unit.ConvertDegToRad(self.pnlTrack.Value)
        num1 = math.fabs(self.baseTrack - value)
        if (num1 > 180):
            num1 = 360 - num1
        num2 = math.sin(Unit.smethod_0(num1)) * 0.7559395
        num3 = Unit.smethod_1(math.asin(num2 / nauticalMiles))
        num4 = math.cos(Unit.smethod_0(num1)) * 0.755939525
        num5 = math.cos(Unit.smethod_0(num3)) * nauticalMiles
        calcPt = RnavWaypoints.smethod_3(
            self.pos1400m, self.pnlTrack.Value,
            Distance(math.fabs(num5 - num4), DistanceUnits.NM))

        self.accept()
Example #13
0
 def getDistanceFromWaypointToEarliestTurningPoint(rnavWaypointType_0, att,
                                                   turnRadiusDist,
                                                   turnAngle, angleUnits_0):
     ### This methos is the method which calculate "Earliest turning point".
     ### Parameters
     ### angleUnits_0 : type of turnAngle(Degree or Radian).
     ### att, turnRadiusDist : Distance class
     if (rnavWaypointType_0 != RnavWaypointType.FlyBy):
         if (rnavWaypointType_0 != RnavWaypointType.FlyOver):
             raise UserWarning, "RNAV WayPoint type not SUPPORTED"
         return att
     turnAngleRad = 0.0
     if (angleUnits_0 == AngleUnits.Degrees):
         turnAngleRad = Unit.ConvertDegToRad(turnAngle)
     return Distance(turnRadiusDist.Metres * math.tan(turnAngleRad / 2) +
                     att.Metres)
    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
    def btnConstruct_Click(self):
        flag = FlightPlanBaseSimpleDlg.btnConstruct_Click(self)
        if not flag:
            return
        num = 0.0
        point3d = Point3D()
        point3d1 = Point3D()
        if not self.method_27(True):
            return


        
        point3d2 = self.parametersPanel.pnlTHR.getPoint3D()
        point3d3 = self.parametersPanel.pnlNavAid.getPoint3D()
        num1 = Unit.ConvertDegToRad(float(self.parametersPanel.txtDirection.Value))
        point3d4 = MathHelper.distanceBearingPoint(point3d2, num1 + 3.14159265358979, 1400)
        num2 = -1
        if MathHelper.smethod_115(point3d3, point3d2, point3d4):
            num2 = 1
        point3d5 = MathHelper.distanceBearingPoint(point3d4, num2 * 1.5707963267949 + num1, 150)
        point3d6 = MathHelper.distanceBearingPoint(point3d5, num1 + 3.14159265358979, 17120)
        if self.parametersPanel.cmbCategory.currentIndex() != 1:
            num = 0.267949192 
        elif self.parametersPanel.cmbCategory.currentIndex() == 1: 
            num = 0.577350269
        point3d7 = MathHelper.distanceBearingPoint(point3d6, num1 - num2 * 1.5707963267949, 150 + num * 17120)
        MathHelper.distanceBearingPoint(point3d5, num1, 150 / num)
        point3d = MathHelper.getIntersectionPoint(point3d3, MathHelper.distanceBearingPoint(point3d3, num1 + 1.5707963267949, 100), point3d2, point3d4)
        if point3d == None:
            raise UserWarning, Messages.ERR_FAILED_TO_CALCULATE_INTERSECTION_POINT
        num3 = MathHelper.calcDistance(point3d3, point3d) / 0.087488664
        if MathHelper.calcDistance(point3d, point3d4) >= num3:
            point3d1 = point3d4
            MathHelper.distanceBearingPoint(point3d6, num1 - num2 * 1.5707963267949, 1525.321791)
        else:
            point3d1 = MathHelper.distanceBearingPoint(point3d, num1 + 3.14159265358979, num3)
            MathHelper.distanceBearingPoint(point3d6, num1 - num2 * 1.5707963267949, 150 + 0.087488664 * (17120 - MathHelper.calcDistance(point3d4, point3d1)))
        MathHelper.distanceBearingPoint(point3d4, num1 + 3.14159265358979, 17120);

        constructionLayer = AcadHelper.createVectorLayer("AAConstruction", QGis.Line)
        AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, PolylineArea([point3d7, point3d4]))
        AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, PolylineArea([point3d1, point3d4, point3d5]))

        QgisHelper.appendToCanvas(define._canvas, [constructionLayer], SurfaceTypes.ApproachAlignment)
        QgisHelper.zoomToLayers([constructionLayer])
        self.resultLayerList = [constructionLayer]
 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)
Example #17
0
 def method_38(self):
     point3d = self.parametersPanel.pnlWaypoint.Point3d
     num = 1
     if (self.parametersPanel.cmbOrientation.currentText() == OrientationType.Left):
         num = -1
     num1 = MathHelper.smethod_4(Unit.ConvertDegToRad(float(self.parametersPanel.txtTrack.Value)))
     aTT = Distance(float(self.parametersPanel.pnlTolerances.txtAtt.text()), DistanceUnits.NM)
     point3d1 = MathHelper.distanceBearingPoint(point3d, num1, aTT.Metres)
     xTT = Distance(float(self.parametersPanel.pnlTolerances.txtXtt.text()), DistanceUnits.NM)
     point3d2 = MathHelper.distanceBearingPoint(point3d1, num1 + num * 1.5707963267949, xTT.Metres)
     distance = Distance(float(self.parametersPanel.pnlTolerances.txtAtt.text()), DistanceUnits.NM)
     point3d3 = MathHelper.distanceBearingPoint(point3d2, num1 + 3.14159265358979, distance.Metres * 2)
     aTT1 = Distance(float(self.parametersPanel.pnlTolerances.txtAtt.text()), DistanceUnits.NM)
     point3d4 = MathHelper.distanceBearingPoint(point3d, num1, aTT1.Metres)
     xTT1 = Distance(float(self.parametersPanel.pnlTolerances.txtXtt.text()), DistanceUnits.NM)
     point3d5 = MathHelper.distanceBearingPoint(point3d4, num1 - num * 1.5707963267949, xTT1.Metres)
     distance1 = Distance(float(self.parametersPanel.pnlTolerances.txtAtt.text()), DistanceUnits.NM)
     point3d6 = MathHelper.distanceBearingPoint(point3d5, num1 + 3.14159265358979, distance1.Metres * 2)
     point3dArray = [point3d2, point3d3, point3d6, point3d5]
     return PolylineArea(point3dArray)
    def __init__(self,
                 rnavSpecification_0=None,
                 rnavVorDmeFlightPhase_0=None,
                 distance_0=None,
                 distance_1=None,
                 distance_2=None):
        self.xtt = Distance(0.0)
        self.att = Distance(0.0)
        self.asw = Distance(0.0)

        #         if (rnavSpecification_0 != RnavSpecification.Rnav5)
        #         {
        #             throw new ArgumentException(string.Format(Validations.RNAV_SPECIFICATION_NOT_SUPPORTED, EnumHelper.smethod_0(rnavSpecification_0)))
        #         }
        #         if (rnavVorDmeFlightPhase_0 != RnavVorDmeFlightPhase.Enroute)
        #         {
        #             throw new ArgumentException(string.Format(Validations.RNAV_FLIGHT_PHASE_NOT_SUPPORTED, EnumHelper.smethod_0(rnavVorDmeFlightPhase_0)))
        #         }
        num = round(distance_0.NauticalMiles, 5)
        num1 = round(distance_1.NauticalMiles, 5)
        num2 = round(distance_2.NauticalMiles, 5)
        num3 = max([0.085, 0.00125 * num])
        num4 = 0.05
        num5 = 2 * math.sqrt(num3 * num3 + num4 * num4)
        num6 = Unit.ConvertDegToRad(4.5)
        num7 = 5707963267949 if (num1 == 0) else math.atan(num2 / num1)
        num8 = num1 - num * math.cos(num7 + num6)
        num9 = num5 * math.cos(num7)
        num10 = num2 - num * math.sin(num7 - num6)
        num11 = num5 * math.sin(num7)
        num12 = 2.5
        num13 = 0.25
        num14 = 2
        self.xtt = Distance(
            math.sqrt(num8 * num8 + num9 * num9 + num12 * num12 +
                      num13 * num13), DistanceUnits.NM)
        self.att = Distance(
            math.sqrt(num10 * num10 + num11 * num11 + num13 * num13),
            DistanceUnits.NM)
        self.asw = Distance(1.5 * self.xtt.NauticalMiles + num14,
                            DistanceUnits.NM)
    def method_0(self, double_0, angleUnits_0):
        if (angleUnits_0 == AngleUnits.Degrees):
            double_0 = Unit.ConvertDegToRad(double_0)
        if self.Direction != TurnDirection.Left:
            num = double_0 - math.pi / 2
        else:
            num = double_0 + math.pi / 2

        point3d = MathHelper.distanceBearingPoint(self.Center[0], num,
                                                  self.Radius[0])
        point3d1 = MathHelper.distanceBearingPoint(self.Center[1], num,
                                                   self.Radius[1])
        point3d2 = MathHelper.distanceBearingPoint(self.Center[2], num,
                                                   self.Radius[2])
        if (self.Direction == TurnDirection.Left):
            if (MathHelper.smethod_115(
                    point3d1, point3d,
                    MathHelper.distanceBearingPoint(point3d, double_0, 1000))
                    or MathHelper.smethod_119(point3d1, self.Center[0],
                                              self.Finish[0])):
                return point3d
            if (not MathHelper.smethod_115(
                    point3d2, point3d1,
                    MathHelper.distanceBearingPoint(point3d1, double_0, 1000))
                ) and (not MathHelper.smethod_119(point3d2, self.Center[1],
                                                  self.Finish[1])):
                return point3d2
            return point3d1
        if (MathHelper.smethod_119(
                point3d1, point3d,
                MathHelper.distanceBearingPoint(point3d, double_0, 1000))
                or MathHelper.smethod_115(point3d1, self.Center[0],
                                          self.Finish[0])):
            return point3d
        if (not MathHelper.smethod_119(
                point3d2, point3d1,
                MathHelper.distanceBearingPoint(point3d1, double_0, 1000))
            ) and (not MathHelper.smethod_115(point3d2, self.Center[1],
                                              self.Finish[1])):
            return point3d2
        return point3d1
Example #20
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)
    def method_35(self):
        point3d = self.parametersPanel.pnlNavAid.Point3d
        value = self.parametersPanel.txtAltitude.Value
        metres = value.Metres - point3d.get_Z()

        if (self.parametersPanel.cmbNavAidType.SelectedIndex != 0):
            num = 25
            num1 = 15
            num2 = metres * 0.839099631
        else:
            num = 15
            num1 = 5
            num2 = metres * 1.191753593

        num3 = 1 if (self.parametersPanel.cmbOrientation.SelectedItem
                     == OrientationType.Right) else -1
        num4 = MathHelper.smethod_3(float(self.parametersPanel.txtTrack.Value))
        point3d1 = MathHelper.distanceBearingPoint(
            point3d, Unit.ConvertDegToRad(num4 + num3 * num),
            num2).smethod_167(0)
        point3d2 = MathHelper.distanceBearingPoint(
            point3d, Unit.ConvertDegToRad(num4 + 180 - num3 * num1),
            num2).smethod_167(0)
        point3d3 = MathHelper.distanceBearingPoint(
            point3d, Unit.ConvertDegToRad(num4 - num3 * num),
            num2).smethod_167(0)
        point3d4 = MathHelper.distanceBearingPoint(
            point3d, Unit.ConvertDegToRad(num4 + 180 + num3 * num1),
            num2).smethod_167(0)
        point3dArray = [point3d1, point3d2, point3d4, point3d3]
        polylineArea = PolylineArea(point3dArray)
        polylineArea[3].set_Bulge(
            MathHelper.smethod_60(
                point3d3,
                MathHelper.distanceBearingPoint(point3d,
                                                Unit.ConvertDegToRad(num4),
                                                num2).smethod_167(0),
                point3d1))
        polylineArea[1].set_Bulge(
            MathHelper.smethod_60(
                point3d2,
                MathHelper.distanceBearingPoint(
                    point3d, Unit.ConvertDegToRad(num4 + 180),
                    num2).smethod_167(0), point3d4))
        return polylineArea
Example #22
0
 def smethod_13(rnavFlightPhase_0, rnavWaypointType_0, speed_0, speed_1,
                distance_0, distance_1, double_0, angleUnits_0):
     if (rnavWaypointType_0 != RnavWaypointType.FlyBy):
         if (rnavWaypointType_0 != RnavWaypointType.FlyOver):
             raise UserWarning, "RNAV WayPoint type not SUPPORTED"
         if rnavFlightPhase_0 == RnavFlightPhase.Enroute:
             num1 = 15
         elif rnavFlightPhase_0 == RnavFlightPhase.SID:
             num1 = 6
         elif rnavFlightPhase_0 == RnavFlightPhase.STAR:
             raise UserWarning, "RNAV_FLIGHT_PHASE_NOT_SUPPORTED"
         elif rnavFlightPhase_0 == RnavFlightPhase.IafIf or rnavFlightPhase_0 == RnavFlightPhase.Faf:
             num1 = 11
         elif rnavFlightPhase_0 == RnavFlightPhase.MissedApproach:
             num1 = 6
         else:
             raise UserWarning, "RNAV_FLIGHT_PHASE_NOT_SUPPORTED"
         num2 = num1 * (speed_0.MetresPerSecond + speed_1.MetresPerSecond)
         return Distance(-(distance_0.Metres + num2))
     if (angleUnits_0 == AngleUnits.Degrees):
         double_0 = Unit.ConvertDegToRad(double_0)
     num3 = min(
         [distance_1.Metres * math.tan(double_0 / 2), distance_1.Metres])
     if rnavFlightPhase_0 == RnavFlightPhase.Enroute:
         num = 10
     elif rnavFlightPhase_0 == RnavFlightPhase.SID:
         num = 3
     elif rnavFlightPhase_0 == RnavFlightPhase.STAR:
         raise UserWarning, "RNAV_FLIGHT_PHASE_NOT_SUPPORTED"
     elif rnavFlightPhase_0 == RnavFlightPhase.IafIf or rnavFlightPhase_0 == RnavFlightPhase.Faf:
         num = 6
     elif rnavFlightPhase_0 == RnavFlightPhase.MissedApproach:
         num = 3
     else:
         raise UserWarning, "RNAV_FLIGHT_PHASE_NOT_SUPPORTED"
     num4 = num * (speed_0.MetresPerSecond + speed_1.MetresPerSecond)
     return Distance(num3 - distance_0.Metres - num4)
Example #23
0
    def btnCalculate_Click(self):
        try:
            bearing = Unit.ConvertDegToRad(float(self.txtBearing.text()))
            distance0 = Distance(float(self.txtDistance.text()),
                                 DistanceUnits.NM).Metres
            self.calcedPoint = MathHelper.distanceBearingPoint(
                self.point, bearing, distance0)
            if self.flagStr == "R":
                self.parent0.parametersPanel.pnlIAWP1.Point3d = self.calcedPoint
                self.parent0.parametersPanel.txtRadiusIAWP1.setText(
                    self.txtDistance.text())
            elif self.flagStr == "L":
                self.parent0.parametersPanel.txtRadiusIAWP3.setText(
                    self.txtDistance.text())
                self.parent0.parametersPanel.pnlIAWP3.Point3d = self.calcedPoint
            elif self.flagStr == "C":
                self.parent0.parametersPanel.txtRadiusIAWP2.setText(
                    self.txtDistance.text())
                self.parent0.parametersPanel.pnlIAWP2.Point3d = self.calcedPoint

            self.accept()

        except UserWarning as e:
            QMessageBox.warning(self, "warning", e.message)
    def method_8(self, oasCategory_0, double_0, double_1, aircraftSize_0):
        fEF = [0.0, 0.0, 0.0]
        if (aircraftSize_0 != AircraftSize.Large):
            self.comSurco.AG = self.method_3(double_0, self.comTable.YT,
                                             self.comTable.F*G)
            self.comSurco.AF = self.comTable.FAF
            self.comSurco.AB = self.method_3(double_0, self.comTable.YT,
                                             self.comTable.FAB)
            self.comSurco.BC = self.method_3(double_0, self.comTable.YT,
                                             self.comTable.FBC)
            self.comSurco.GD = self.comTable.FGD
            self.comSurco.TANMU = (self.comSurco.GD - self.comSurco.BC) / (
                self.comSurco.AG + self.comSurco.AB)
            self.comSurco.TANX = self.method_5(double_1, double_0,
                                               self.comTable.XT,
                                               self.comTable.YT,
                                               self.comTable.FTANX)
            self.comSurco.TANW = self.method_3(double_0, self.comTable.YT,
                                               self.comTable.FTANW)
            if (oasCategory_0 == OasCategory.ILS2AP):
                self.comSurco.TANWS = self.method_3(double_0, self.comTable.YT,
                                                    self.comTable.FTANWS)
            for i in range(4 + 1):
                for j in range(2 + 1):
                    fEF[j] = self.comTable.FEF[j][i]
                self.comSurco.EF[i] = self.method_3(double_0, self.comTable.YT,
                                                    fEF)
                self.comSurco.TANNU[i] = (
                    self.comSurco.EF[i] -
                    self.comSurco.GD) / (self.comSurco.AF - self.comSurco.AG)
                self.comSurco.TANZ[i] = self.comTable.CG[i]

        self.comSurco.AW = self.comSurco.TANW
        self.comSurco.BW = 0
        self.comSurco.CW = -self.comSurco.AB * self.comSurco.TANW
        if (oasCategory_0 == OasCategory.ILS2AP):
            self.comSurco.AWS = self.comSurco.TANWS
            self.comSurco.BWS = 0
            self.comSurco.CWS = 1000 * (
                self.comSurco.TANW -
                self.comSurco.TANWS) - self.comSurco.AB * self.comSurco.TANW

        self.comSurco.AX = self.comSurco.TANMU * self.comSurco.TANX
        self.comSurco.BX = self.comSurco.TANX
        self.comSurco.CX = (-self.comSurco.GD + self.comSurco.AG *
                            self.comSurco.TANMU) * self.comSurco.TANX
        for k in range(4 + 1):
            self.comSurco.AZ[k] = -self.comSurco.TANZ[k]
            self.comSurco.CZ[k] = -self.comSurco.AF * self.comSurco.TANZ[k]

        self.comSurco.BZ = 0
        self.comTemp1.XC = self.comSurco.AB
        self.comTemp1.YC = self.comSurco.BC
        self.comTemp1.XD = -self.comSurco.AG
        self.comTemp1.YD = self.comSurco.GD
        self.comTemp1.XE = -self.comSurco.AF
        for l in range(4 + 1):
            self.comTemp1.YE[l] = self.comSurco.EF[l]

        aW = 300
        if (oasCategory_0 == OasCategory.ILS2
                or oasCategory_0 == OasCategory.ILS2AP):
            aW = 150

        self.comTemp1.XC1 = (aW - self.comSurco.CW) / self.comSurco.AW
        if (oasCategory_0 == OasCategory.ILS2AP):
            self.comTemp1.XC1 = (aW - self.comSurco.CWS) / self.comSurco.AWS

        self.comTemp1.YC1 = (aW - self.comSurco.AX * self.comTemp1.XC1 -
                             self.comSurco.CX) / self.comSurco.BX
        num = math.tan(Unit.ConvertDegToRad(double_0))
        aG = aW / num - self.comSurco.AG
        aX = (aW - self.comSurco.AX * aG - self.comSurco.CX) / self.comSurco.BX
        if oasCategory_0 == OasCategory.ILS1 \
            or oasCategory_0 == OasCategory.SBAS_APV1 \
            or oasCategory_0 == OasCategory.SBAS_APV2 \
            or oasCategory_0 == OasCategory.SBAS_CAT1:
            for m in range(4 + 1):
                self.comSurco.TANY[m] = aW * (
                    -self.comSurco.AF + self.comSurco.AG) / (
                        (self.comSurco.AG - self.comSurco.AF) *
                        (aX - self.comSurco.GD) + (self.comSurco.AG + aG) *
                        (self.comSurco.GD - self.comSurco.EF[m]))
        elif oasCategory_0 == OasCategory.ILS2:
            for n in range(4 + 1):
                self.comSurco.TANY[n] = aW * (
                    -self.comSurco.AF + self.comSurco.AG) / (
                        (self.comSurco.AG - self.comSurco.AF) *
                        (aX - self.comSurco.GD) + (self.comSurco.AG + aG) *
                        (self.comSurco.GD - self.comSurco.EF[n]))
        elif oasCategory_0 == OasCategory.ILS2AP:
            for o in range(4 + 1):
                self.comSurco.TANY[o] = aW * (
                    -self.comSurco.AF + self.comSurco.AG) / (
                        (self.comSurco.AG - self.comSurco.AF) *
                        (aX - self.comSurco.GD) + (self.comSurco.AG + aG) *
                        (self.comSurco.GD - self.comSurco.EF[o]))

        for p in range(4 + 1):
            self.comSurco.AY[
                p] = self.comSurco.TANNU[p] * self.comSurco.TANY[p]
            self.comSurco.BY[p] = self.comSurco.TANY[p]
            self.comSurco.CY[p] = (-self.comSurco.GD +
                                   self.comSurco.AG * self.comSurco.TANNU[p]
                                   ) * self.comSurco.TANY[p]

        for q in range(4 + 1):
            self.comTemp1.XD1[q] = aG
            self.comTemp1.YD1[q] = aX
            if (oasCategory_0 != OasCategory.ILS2AP):
                lstParam = [self.comTemp1.XE1[q], self.comTemp1.YE1[q]]
                self.method_6(self.comSurco.AY[q], self.comSurco.BY[q],
                              self.comSurco.CY[q], self.comSurco.AZ[q],
                              self.comSurco.BZ, self.comSurco.CZ[q], aW,
                              lstParam)
                self.comTemp1.XE1[q] = lstParam[0]
                self.comTemp1.YE1[q] = lstParam[1]
            else:
                lstParam = [self.comTemp1.XD1[q], self.comTemp1.YD1[q]]
                self.method_6(self.comSurco.AX, self.comSurco.BX,
                              self.comSurco.CX, self.comSurco.AY[q],
                              self.comSurco.BY[q], self.comSurco.CY[q], aW,
                              lstParam)
                self.comTemp1.XD1[q] = lstParam[0]
                self.comTemp1.YD1[q] = lstParam[1]

        if (oasCategory_0 == OasCategory.ILS2AP):
            aW = self.comSurco.AW * 1000 + self.comSurco.CW
            self.comTemp1.XC2 = (aW - self.comSurco.CW) / self.comSurco.AW
            self.comTemp1.YC2 = (aW - self.comSurco.AX * self.comTemp1.XC2 -
                                 self.comSurco.CX) / self.comSurco.BX
 def method_1(self, oasCategory_0, missedApproachClimbGradient_0, double_0,
              double_1, double_2, double_3, double_4):
     self.Assigned = False
     self.comTable.method_0()
     self.comSurco.method_0()
     self.comTemp1.method_0()
     self.method_7(oasCategory_0)
     if (double_0 <= 3.5):
         self.method_8(oasCategory_0, double_0, double_1,
                       AircraftSize.Standard)
     else:
         self.method_8(oasCategory_0, 3.5, double_1, AircraftSize.Standard)
     self.method_9(AircraftSize.Standard)
     self.WA = self.comSurco.AW
     self.WC = self.comSurco.CW
     self.WSA = self.comSurco.AWS
     self.WSC = self.comSurco.CWS
     if (double_0 > 3.5):
         self.WA = 0.0239 + 0.0092 * (double_0 - 2.5)
         self.WC = -6.45
     self.XA = self.comSurco.AX
     self.XB = self.comSurco.BX
     self.XC = self.comSurco.CX
     self.YA = self.comSurco.AY[missedApproachClimbGradient_0]
     self.YB = self.comSurco.BY[missedApproachClimbGradient_0]
     self.YC = self.comSurco.CY[missedApproachClimbGradient_0]
     self.ZA = self.comSurco.AZ[missedApproachClimbGradient_0]
     self.ZC = self.comSurco.CZ[missedApproachClimbGradient_0]
     if (double_0 > 3.5):
         self.ZC = -self.ZA * (-900 - 50 * ((double_0 - 3.5) / 0.1))
     if (oasCategory_0 == OasCategory.ILS2AP):
         self.comTable.method_0()
         self.comSurco.method_0()
         self.comTemp1.method_0()
         self.method_7(OasCategory.ILS2)
         if (double_0 <= 3.5):
             self.method_8(OasCategory.ILS2, double_0, double_1,
                           AircraftSize.Standard)
         else:
             self.method_8(OasCategory.ILS2, 3.5, double_1,
                           AircraftSize.Standard)
         self.method_9(AircraftSize.Standard)
         self.YA = self.comSurco.AY[missedApproachClimbGradient_0]
         self.YB = self.comSurco.BY[missedApproachClimbGradient_0]
         self.YC = self.comSurco.CY[missedApproachClimbGradient_0]
     num = max([double_4 / self.XB, double_3 + (double_4 - 3) / self.XB
                ]) - max([6 / self.XB, 30 + 3 / self.XB])
     self.WC = self.WC - (double_4 - 6) + (double_2 - 15)
     if (oasCategory_0 == OasCategory.ILS2AP):
         self.WSC = self.WSC - (double_4 - 6) + (double_2 - 15)
     self.XC = self.XC - self.XB * num + (double_2 - 15)
     self.YC = self.YC - self.YB * num + (double_2 - 15)
     if (oasCategory_0 == OasCategory.SBAS_APV1):
         num1 = math.tan(Unit.ConvertDegToRad(double_0))
         num2 = math.tan(Unit.ConvertDegToRad(0.75 * double_0))
         self.WSA = num2
         self.WSC = -50 + double_2 * num2 / num1
         self.XC = self.XC - 38
         self.YC = self.YC - 38
         if (double_0 <= 3.5):
             self.ZC = -self.ZA * -(900 + 38 / num1)
         else:
             self.WC = -6.45
             self.ZC = -self.ZA * -(900 + 38 / num1 + 50 *
                                    (double_0 - 3.5) / 0.1)
     elif (oasCategory_0 == OasCategory.SBAS_APV2):
         num3 = math.tan(Unit.ConvertDegToRad(double_0))
         num4 = math.tan(Unit.ConvertDegToRad(0.75 * double_0))
         self.WSA = num4
         self.WSC = -20 + double_2 * num4 / num3
         self.XC = self.XC - 8
         self.YC = self.YC - 8
         if (double_0 <= 3.5):
             self.ZC = -self.ZA * -(900 + 8 / num3)
         else:
             self.WC = -6.45
             self.ZC = -self.ZA * -(900 + 8 / num3 + 50 *
                                    (double_0 - 3.5) / 0.1)
     if (oasCategory_0 == OasCategory.SBAS_APV1
             or oasCategory_0 == OasCategory.SBAS_APV2):
         num5 = (self.WC - self.WSC) / (self.WSA - self.WA)
         if (self.WA * num5 + self.WC <= 0):
             self.WSA = 0
             self.WSC = 0
     self.WA = round(self.WA, 6)
     self.WC = round(self.WC, 2)
     if (not MathHelper.smethod_96(self.WSA)):
         self.WSA = round(self.WSA, 6)
     else:
         self.WSA = None
     if (not MathHelper.smethod_96(self.WSC)):
         self.WSC = round(self.WSC, 2)
     else:
         self.WSC = None
     self.XA = round(self.XA, 6)
     self.XB = round(self.XB, 6)
     self.XC = round(self.XC, 2)
     self.YA = round(self.YA, 6)
     self.YB = round(self.YB, 6)
     self.YC = round(self.YC, 2)
     self.ZA = round(self.ZA, 6)
     self.ZC = round(self.ZC, 2)
     self.Assigned = True
Example #26
0
 def smethod_3(position_0, double_0, distance_0):
     return MathHelper.distanceBearingPoint(position_0,
                                            Unit.ConvertDegToRad(double_0),
                                            distance_0.Metres)
Example #27
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
Example #28
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)
Example #29
0
    def btnConstruct_Click(self):
        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.text())
        value2 = float(self.parametersPanel.txtIntersectingRadialTrack.text())
        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 = None
        if define._mapCrs == None:
            if mapUnits == QGis.Meters:
                constructionLayer = QgsVectorLayer("linestring?crs=EPSG:32633",
                                                   self.surfaceType, "memory")
            else:
                constructionLayer = QgsVectorLayer("linestring?crs=EPSG:4326",
                                                   self.surfaceType, "memory")
        else:
            constructionLayer = QgsVectorLayer(
                "linestring?crs=%s" % define._mapCrs.authid(),
                self.surfaceType, "memory")
        shpPath = ""
        if define.obstaclePath != None:
            shpPath = define.obstaclePath
        elif define.xmlPath != None:
            shpPath = define.xmlPath
        else:
            shpPath = define.appPath
        er = QgsVectorFileWriter.writeAsVectorFormat(
            constructionLayer, shpPath + "/" +
            QString(self.surfaceType).replace(" ", "") + ".shp", "utf-8",
            constructionLayer.crs())
        constructionLayer = QgsVectorLayer(
            shpPath + "/" + QString(self.surfaceType).replace(" ", "") +
            ".shp", self.surfaceType, "ogr")

        constructionLayer.startEditing()

        for polylinrArea0 in resultPolylineAreaList:
            feature = QgsFeature()
            feature.setGeometry(
                QgsGeometry.fromPolyline(polylinrArea0.method_14()))
            pr = constructionLayer.dataProvider()
            pr.addFeatures([feature])
            # constructionLayer.addFeature(feature)
        constructionLayer.commitChanges()
        QgisHelper.appendToCanvas(define._canvas, [constructionLayer],
                                  self.surfaceType, True)
        QgisHelper.zoomToLayers([constructionLayer])
Example #30
0
    def btnConstruct_Click(self):
        qgsLayerTreeView = define._mLayerTreeView
        groupName = self.surfaceType1
        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.resultLayerList1) > 0:
                QgisHelper.removeFromCanvas(define._canvas,
                                            self.resultLayerList1)
                self.resultLayerList1 = []
            else:
                QMessageBox.warning(
                    self, "Warning", "Please remove \"" + self.surfaceType1 +
                    "\" layer group from LayerTreeView.")
                return

        num = None
        num1 = None
        num2 = None
        num3 = None
        point3d = None
        resultPolylineAreaList = []
        # if (!AcadHelper.Ready)
        # {
        #     return;
        # }
        # if (!self.method_27(true))
        # {
        #     return;
        # }
        # string constructionLayer = base.ConstructionLayer;
        point3d1 = self.parametersPanel.pnlNavAid.Point3d
        value = float(self.parametersPanel.txtTrackRadial.Value)
        metres = Altitude(float(self.parametersPanel.txtAltitude.text()),
                          AltitudeUnits.FT).Metres
        z = metres - point3d1.get_Z()
        if (self.parametersPanel.cmbNavAidType.currentIndex() != 0):
            num = 450 - value + 90
            num1 = 15
            num2 = 25
            num3 = z * 0.839099631
        else:
            num = 450 - value + 90
            num1 = 5
            num2 = 15
            num3 = z * 1.191753593
        num4 = Unit.ConvertDegToRad(num1)
        num5 = Unit.ConvertDegToRad(360 - num1)
        num6 = Unit.ConvertDegToRad(180 - num2)
        num7 = Unit.ConvertDegToRad(180 + num2)
        num8 = 0
        num9 = Unit.ConvertDegToRad(180)
        point3d2 = MathHelper.distanceBearingPoint(point3d1, num4, num3)
        point3d3 = MathHelper.distanceBearingPoint(point3d1, num5, num3)
        point3d = MathHelper.smethod_68(
            point3d2, MathHelper.distanceBearingPoint(point3d1, num8, num3),
            point3d3)
        if (point3d == None):
            QMessageBox.warning(self, "Error",
                                Messages.ERR_FAILED_TO_CALCULATE_CENTER_POINT)
            return
        #     throw new Exception(Messages.ERR_FAILED_TO_CALCULATE_CENTER_POINT);
        num10 = MathHelper.smethod_55(
            point3d2, point3d3, MathHelper.calcDistance(point3d2, point3d))
        point3d2 = MathHelper.distanceBearingPoint(point3d1, num6, num3)
        point3d3 = MathHelper.distanceBearingPoint(point3d1, num7, num3)
        point3d = MathHelper.smethod_68(
            point3d2, MathHelper.distanceBearingPoint(point3d1, num9, num3),
            point3d3)
        if (point3d == None):
            QMessageBox.warning(self, "Error",
                                Messages.ERR_FAILED_TO_CALCULATE_CENTER_POINT)
        #     throw new Exception(Messages.ERR_FAILED_TO_CALCULATE_CENTER_POINT);
        num11 = MathHelper.smethod_55(
            point3d2, point3d3, MathHelper.calcDistance(point3d2, point3d))
        matrix3d = Matrix3d.Rotation(Unit.ConvertDegToRad(num),
                                     Vector3d(0, 0, 1), point3d1)
        point3d2 = MathHelper.distanceBearingPoint(point3d1, num8, num3)
        point3d3 = MathHelper.distanceBearingPoint(point3d1, num9, num3)
        line = PolylineArea([point3d2, point3d3])
        resultPolylineAreaList.append(
            self.TransformBy(line, Unit.ConvertDegToRad(value),
                             self.parametersPanel.pnlNavAid.Point3d)
        )  #.TransformBy(matrix3d))
        point3d2 = MathHelper.distanceBearingPoint(point3d1, num6, num3)
        point3d3 = MathHelper.distanceBearingPoint(point3d1, num4, num3)
        point3d4 = MathHelper.distanceBearingPoint(point3d1, num5, num3)
        point3d5 = MathHelper.distanceBearingPoint(point3d1, num7, num3)
        point3dArray = [point3d2, point3d3, point3d4, point3d5, point3d2]
        polyline = AcadHelper.smethod_126(point3dArray)
        if self.parametersPanel.cmbNavAidType.currentIndex() == 0:
            num10 = 0.0436609429083
            num11 = 0.131652497586
        else:
            num10 = 0.131652497586
            num11 = 0.221694662642
        polyline.SetBulgeAt(1, num10)
        polyline.SetBulgeAt(3, num11)
        # polyline.set_Elevation(point3d1.get_Z());
        resultPolylineAreaList.append(
            self.TransformBy(polyline, Unit.ConvertDegToRad(value),
                             self.parametersPanel.pnlNavAid.Point3d)
        )  #polyline.TransformBy(matrix3d))
        # polyline.TransformBy(matrix3d);
        # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer);
        # transaction.Commit();
        # AcadHelper.smethod_5();
        mapUnits = define._canvas.mapUnits()
        constructionLayer = AcadHelper.createVectorLayer(
            SurfaceTypes.OverheadTolerance, QGis.Line)
        for polylinrArea0 in resultPolylineAreaList:
            AcadHelper.setGeometryAndAttributesInLayer(constructionLayer,
                                                       polylinrArea0)
        QgisHelper.appendToCanvas(define._canvas, [constructionLayer],
                                  SurfaceTypes.OverheadTolerance, True)
        self.resultLayerList1 = [constructionLayer]
        QgisHelper.zoomToLayers(self.resultLayerList1)