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)
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
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
def initModel(self, surfacesList, oasCategory_0, point3d_0, double_0, double_1, double_2, oasMaEvaluationMethod_0, hlAltitude): self.cat = oasCategory_0; self.ptTHR = point3d_0; self.ptTHR2 = MathHelper.distanceBearingPoint(point3d_0, double_0, 100); self.ptTHRm90 = MathHelper.distanceBearingPoint(point3d_0, double_0 - 1.5707963267949, 100); self.tr90p = double_0 + 1.5707963267949; self.tanmacg = double_1 / 100.0; self.tangpa = math.tan(Unit.ConvertDegToRad(double_2)); self.method = oasMaEvaluationMethod_0; self.xe = OasObstacles.constants.ZC / OasObstacles.constants.ZA self.surfacesList = surfacesList self.hlAltitude = hlAltitude
def TransformBy(self, polylineArea, angle_radian, centerPoint): resultPoilylineArea = PolylineArea() for polylineAreaPoint in polylineArea: point3d = polylineAreaPoint.Position bearing = MathHelper.smethod_4( MathHelper.getBearing(centerPoint, point3d) + angle_radian + Unit.ConvertDegToRad(180)) resultPoilylineArea.Add( PolylineAreaPoint( MathHelper.distanceBearingPoint( centerPoint, bearing, MathHelper.calcDistance(point3d, centerPoint)), polylineAreaPoint.Bulge)) return resultPoilylineArea
def 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()
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)
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
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
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)
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
def smethod_3(position_0, double_0, distance_0): return MathHelper.distanceBearingPoint(position_0, Unit.ConvertDegToRad(double_0), distance_0.Metres)
def getGeometry(self): pointList = [] polygonsList = [] width = self[0].startWidth if MathHelper.smethod_96(self[0].bulge): pt0 = MathHelper.distanceBearingPoint( self[0].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) - Unit.ConvertDegToRad(90), width / 2.0, ) pt1 = MathHelper.distanceBearingPoint( self[0].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) + Unit.ConvertDegToRad(90), width / 2.0, ) pt2 = MathHelper.distanceBearingPoint( self[1].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) + Unit.ConvertDegToRad(90), width / 2.0, ) pt3 = MathHelper.distanceBearingPoint( self[1].point3d, MathHelper.getBearing(self[0].point3d, self[1].point3d) - Unit.ConvertDegToRad(90), width / 2.0, ) geom = QgsGeometry.fromPolygon([[pt0, pt1, pt2, pt3]]) polygonsList.append(geom) else: polylineArea = PolylineArea() polylineArea.Add(PolylineAreaPoint(self[0].point3d, self[0].bulge)) polylineArea.Add(PolylineAreaPoint(self[1].point3d)) pointArray = polylineArea.method_14(4) pt0 = MathHelper.distanceBearingPoint( self[0].point3d, MathHelper.getBearing(self[0].point3d, pointArray[1]) - Unit.ConvertDegToRad(90), width / 2.0, ) pt1 = MathHelper.distanceBearingPoint( self[0].point3d, MathHelper.getBearing(self[0].point3d, pointArray[1]) + Unit.ConvertDegToRad(90), width / 2.0, ) pt2 = MathHelper.distanceBearingPoint( self[1].point3d, MathHelper.getBearing(pointArray[len(pointArray) - 2], self[1].point3d) + Unit.ConvertDegToRad(90), width / 2.0, ) pt3 = MathHelper.distanceBearingPoint( self[1].point3d, MathHelper.getBearing(pointArray[len(pointArray) - 2], self[1].point3d) - Unit.ConvertDegToRad(90), width / 2.0, ) polylineArea0 = PolylineArea() polylineArea0.Add(PolylineAreaPoint(pt0, self[0].bulge)) polylineArea0.Add(PolylineAreaPoint(pt3)) polylineArea1 = PolylineArea() polylineArea1.Add(PolylineAreaPoint(pt2, -self[0].bulge)) polylineArea1.Add(PolylineAreaPoint(pt1)) pointArrayResult = [] for pt in polylineArea0.method_14(4): pointArrayResult.append(pt) for pt in polylineArea1.method_14(4): pointArrayResult.append(pt) geom = QgsGeometry.fromPolygon([pointArrayResult]) polygonsList.append(geom) return polygonsList # for i in range(self.NumberOfVertices): # polylinePoint = self[i] # # if polylinePoint.startWidth != width: # if len(pointList) > 1: # geom = QgsGeometry.fromPolyline(pointList) # polygon = geom.buffer(width / 2.0, 0, 2, 0, 0) # polygonsList.append(polygon) # width = polylinePoint.startWidth # pointList = [] # pointList.append(polylinePoint.point3d) # if not MathHelper.smethod_96(polylinePoint.bulge): # if i != self.NumberOfVertices - 1: # point3d = self[i + 1].point3d # else: # point3d = self[0].point3d # MathHelper.getArc(polylinePoint.point3d, point3d, polylinePoint.bulge, 4, pointList) # # if len(pointList) > 1: # geom = QgsGeometry.fromPolyline(pointList) # polygon = geom.buffer(width / 2.0, 0, 2, 0, 0) # polygonsList.append(polygon) return polygonsList
def btnConstruct2_Click(self): qgsLayerTreeView = define._mLayerTreeView groupName = self.surfaceType2 layerTreeModel = qgsLayerTreeView.layerTreeModel() layerTreeGroup = layerTreeModel.rootGroup() rowCount = layerTreeModel.rowCount() groupExisting = False if rowCount > 0: for i in range(rowCount): qgsLayerTreeNode = layerTreeModel.index2node( layerTreeModel.index(i, 0)) if qgsLayerTreeNode.nodeType() == 0: qgsLayerTreeNode._class_ = QgsLayerTreeGroup if isinstance(qgsLayerTreeNode, QgsLayerTreeGroup ) and qgsLayerTreeNode.name() == groupName: groupExisting = True if groupExisting: if len(self.resultLayerList2) > 0: QgisHelper.removeFromCanvas(define._canvas, self.resultLayerList2) self.resultLayerList2 = [] else: QMessageBox.warning( self, "Warning", "Please remove \"" + self.surfaceType2 + "\" layer group from LayerTreeView.") return num = None num1 = None line = None polyline = None point3d = None point3d1 = None point3d2 = None point3d3 = None point3d4 = None point3d5 = None point3d6 = None point3d7 = None point3d8 = None ficorResult = None point = [] value = None resultPolylineAreaList = [] # if (!AcadHelper.Ready) # { # return; # } # if (!self.method_27(true)) # { # return; # } # string constructionLayer = base.ConstructionLayer; point3d9 = self.parametersPanel.pnlTrackingPosition.Point3d point3d10 = self.parametersPanel.pnlIntersectingPosition.Point3d value1 = float(self.parametersPanel.txtTrackingRadialTrack.Value) value2 = float(self.parametersPanel.txtIntersectingRadialTrack.Value) num2 = Unit.ConvertDegToRad(value1) num3 = Unit.ConvertDegToRad(value2) if (self.parametersPanel.cmbTrackingType.currentIndex() != 0): num = Unit.ConvertDegToRad(2.4) if ( self.parametersPanel.cmbTrackingType.currentIndex() != 1 ) else Unit.ConvertDegToRad(6.9) else: num = Unit.ConvertDegToRad(5.2) num1 = Unit.ConvertDegToRad(6.2) if ( self.parametersPanel.cmbIntersectingType.currentIndex() != 0 ) else Unit.ConvertDegToRad(4.5) num4 = num2 + num point3d11 = MathHelper.distanceBearingPoint(point3d9, num4, 100) num5 = num2 - num point3d12 = MathHelper.distanceBearingPoint(point3d9, num5, 100) point3d13 = MathHelper.distanceBearingPoint(point3d9, num2, 100) point3d = MathHelper.getIntersectionPoint( point3d9, point3d13, point3d10, MathHelper.distanceBearingPoint(point3d10, num3, 100)) if (self.parametersPanel.cmbIntersectingType.currentIndex() >= 2): metres = Distance( float(self.parametersPanel.txtIntersectingDistance.text()), DistanceUnits.NM).Metres if (self.parametersPanel.chb0dmeAtThr.isChecked()): value = Distance( float(self.parametersPanel.txtDmeOffset.text())) metres = metres + value.Metres num6 = 460 + metres * 0.0125 num7 = metres + num6 num8 = metres - num6 if (MathHelper.smethod_102(point3d9, point3d10)): point3d14 = MathHelper.distanceBearingPoint( point3d9, num4, num8) point3d15 = MathHelper.distanceBearingPoint( point3d9, num2, num8) point3d16 = MathHelper.distanceBearingPoint( point3d9, num5, num8) point3d17 = MathHelper.distanceBearingPoint( point3d9, num5, num7) point3d18 = MathHelper.distanceBearingPoint( point3d9, num2, num7) point3d19 = MathHelper.distanceBearingPoint( point3d9, num4, num7) point = [point3d14, point3d16, point3d17, point3d19] polyline = AcadHelper.smethod_126(point) polyline.SetBulgeAt( 0, MathHelper.smethod_60(point3d14, point3d15, point3d16)) polyline.SetBulgeAt( 2, MathHelper.smethod_60(point3d17, point3d18, point3d19)) polyline.set_Closed(True) resultPolylineAreaList.append(polyline) # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer); point3d14 = MathHelper.distanceBearingPoint( point3d9, num2, num8) point3d15 = MathHelper.distanceBearingPoint( point3d9, num2, num7) resultPolylineAreaList.append( PolylineArea([point3d14, point3d15])) # line = new Line(point3d14, point3d15); # AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer); point3d14 = MathHelper.distanceBearingPoint( point3d9, num4, metres) point3d15 = MathHelper.distanceBearingPoint( point3d9, num2, metres) point3d16 = MathHelper.distanceBearingPoint( point3d9, num5, metres) point = [point3d14, point3d16] polyline = AcadHelper.smethod_126(point) polyline.SetBulgeAt( 0, MathHelper.smethod_60(point3d14, point3d15, point3d16)) resultPolylineAreaList.append(polyline) # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer); else: ficorResult1 = self.method_37(point3d10, num2, point3d9, point3d13, num8, FicorInput.C) ficorResult2 = self.method_37(point3d10, num2, point3d9, point3d13, metres, FicorInput.C) ficorResult3 = self.method_37(point3d10, num2, point3d9, point3d13, num7, FicorInput.C) if (ficorResult1.Status != FicorStatus.TWO and ficorResult2.Status != FicorStatus.TWO): if (ficorResult3.Status == FicorStatus.TWO): ficorResult = FicorResult(None, FicorStatus.TWO) else: ficorResult = FicorResult(None, ficorResult2.Status) else: ficorResult = FicorResult(None, FicorStatus.TWO) if (ficorResult.Status != FicorStatus.NID): ficorInput = FicorInput.F num9 = 1 if (ficorResult.Status == FicorStatus.TWO): QMessageBox.warning( self, "Infomation", Messages.TWO_POSSIBLE_FIX_POSITIONS) ficorInput = FicorInput.L num9 = 2 num10 = 0 while (num10 < num9): ficorResult4 = self.method_37(point3d10, num4, point3d9, point3d11, num8, ficorInput) ficorResult5 = self.method_37(point3d10, num2, point3d9, point3d13, num8, ficorInput) ficorResult6 = self.method_37(point3d10, num5, point3d9, point3d12, num8, ficorInput) ficorResult7 = self.method_37(point3d10, num4, point3d9, point3d11, metres, ficorInput) ficorResult8 = self.method_37(point3d10, num2, point3d9, point3d13, metres, ficorInput) ficorResult9 = self.method_37(point3d10, num5, point3d9, point3d12, metres, ficorInput) ficorResult10 = self.method_37(point3d10, num4, point3d9, point3d11, num7, ficorInput) ficorResult11 = self.method_37(point3d10, num2, point3d9, point3d13, num7, ficorInput) ficorResult12 = self.method_37(point3d10, num5, point3d9, point3d12, num7, ficorInput) if (ficorResult4.Status == FicorStatus.NID or ficorResult5.Status == FicorStatus.NID or ficorResult6.Status == FicorStatus.NID or ficorResult7.Status == FicorStatus.NID or ficorResult9.Status == FicorStatus.NID or ficorResult10.Status == FicorStatus.NID or ficorResult11.Status == FicorStatus.NID or ficorResult12.Status == FicorStatus.NID or ficorResult8.Status == FicorStatus.NID): eRRFAILEDTOCONSTRUCTTHEFIXAUTOMATICALLY = Messages.ERR_FAILED_TO_CONSTRUCT_THE_FIX_AUTOMATICALLY value = Distance( float(self.parametersPanel. txtIntersectingDistance.text()), DistanceUnits.NM) str000 = str(round(value.Metres, 4)) + "m" value = str(round(Distance(num6).Metres, 4)) + "m" QMessageBox.warning( self, "Error", eRRFAILEDTOCONSTRUCTTHEFIXAUTOMATICALLY % (str000, value)) # ErrorMessageBox.smethod_0(self, string.Format(eRRFAILEDTOCONSTRUCTTHEFIXAUTOMATICALLY, str, value.method_0(":m"))); return elif (MathHelper.calcDistance(point3d9, ficorResult8.Point) < MathHelper.calcDistance( ficorResult5.Point, ficorResult8.Point)): QMessageBox.warning( self, "Error", Messages. ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE) # ErrorMessageBox.smethod_0(self, Messages.ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE); return else: point = [ ficorResult4.Point, ficorResult6.Point, ficorResult12.Point, ficorResult10.Point ] polyline = AcadHelper.smethod_126(point) polyline.SetBulgeAt( 0, MathHelper.smethod_60(ficorResult4.Point, ficorResult5.Point, ficorResult6.Point)) polyline.SetBulgeAt( 2, MathHelper.smethod_60(ficorResult12.Point, ficorResult11.Point, ficorResult10.Point)) polyline.set_Closed(True) resultPolylineAreaList.append(polyline) # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer); resultPolylineAreaList.append( PolylineArea( [ficorResult5.Point, ficorResult11.Point])) # line = new Line(ficorResult5.Point, ficorResult11.Point); # AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer); point = [ficorResult7.Point, ficorResult9.Point] polyline = AcadHelper.smethod_126(point) polyline.SetBulgeAt( 0, MathHelper.smethod_60(ficorResult7.Point, ficorResult8.Point, ficorResult9.Point)) resultPolylineAreaList.append(polyline) # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer); if (ficorResult.Status == FicorStatus.TWO): ficorInput = FicorInput.S num10 += 1 else: QMessageBox.warning( self, "Error", Messages. ERR_RADIAL_TRACK_DME_DISTANCE_DO_NOT_INTERSECT) # ErrorMessageBox.smethod_0(self, Messages.ERR_RADIAL_TRACK_DME_DISTANCE_DO_NOT_INTERSECT); return elif (point3d == None): QMessageBox.warning(self, "Error", Messages.ERR_RADIALS_TRACKS_ARE_PARALLEL) # ErrorMessageBox.smethod_0(self, Messages.ERR_RADIALS_TRACKS_ARE_PARALLEL); return elif (MathHelper.smethod_99(MathHelper.getBearing(point3d9, point3d), num2, 0.001)): point3d20 = MathHelper.distanceBearingPoint( point3d10, num3 + num1, 100) point3d21 = MathHelper.distanceBearingPoint( point3d10, num3 - num1, 100) point3d1 = MathHelper.getIntersectionPoint(point3d9, point3d12, point3d10, point3d20) point3d2 = MathHelper.getIntersectionPoint(point3d9, point3d12, point3d10, point3d21) point3d3 = MathHelper.getIntersectionPoint(point3d9, point3d11, point3d10, point3d21) point3d4 = MathHelper.getIntersectionPoint(point3d9, point3d11, point3d10, point3d20) point3d5 = MathHelper.getIntersectionPoint(point3d9, point3d, point3d10, point3d20) point3d6 = MathHelper.getIntersectionPoint(point3d9, point3d, point3d10, point3d21) point3d7 = MathHelper.getIntersectionPoint(point3d9, point3d11, point3d10, point3d) point3d8 = MathHelper.getIntersectionPoint(point3d9, point3d12, point3d10, point3d) if (MathHelper.calcDistance(point3d9, point3d) < MathHelper.calcDistance(point3d5, point3d) or MathHelper.calcDistance(point3d10, point3d) < MathHelper.calcDistance(point3d5, point3d) or MathHelper.calcDistance(point3d9, point3d) < MathHelper.calcDistance(point3d8, point3d) or MathHelper.calcDistance(point3d10, point3d) < MathHelper.calcDistance(point3d8, point3d)): QMessageBox.warning( self, "Error", Messages.ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE) # ErrorMessageBox.smethod_0(self, Messages.ERR_FIX_TOO_CLOSE_USE_OVERHEAD_TOLERANCE); return else: resultPolylineAreaList.append( PolylineArea([point3d5, point3d6])) # line = new Line(point3d5, point3d6); # AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer); resultPolylineAreaList.append( PolylineArea([point3d7, point3d8])) # line = new Line(point3d7, point3d8); # AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer); point = [point3d1, point3d2, point3d3, point3d4] polyline = AcadHelper.smethod_126(point) polyline.set_Closed(True) resultPolylineAreaList.append(polyline) # AcadHelper.smethod_18(transaction, blockTableRecord, polyline, constructionLayer); else: QMessageBox.warning(self, "Error", Messages.ERR_RADIALS_TRACKS_DO_NOT_INTERSECT) # ErrorMessageBox.smethod_0(self, Messages.ERR_RADIALS_TRACKS_DO_NOT_INTERSECT); return mapUnits = define._canvas.mapUnits() constructionLayer = AcadHelper.createVectorLayer( SurfaceTypes.FixConstruction, QGis.Line) for polylinrArea0 in resultPolylineAreaList: AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, polylinrArea0) QgisHelper.appendToCanvas(define._canvas, [constructionLayer], SurfaceTypes.FixConstruction, True) self.resultLayerList2 = [constructionLayer] QgisHelper.zoomToLayers(self.resultLayerList2)
def 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])
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)