def getOffsetCurveNo(self, distance, level = 8): pointList = self.method_14(level) # pointList.append(self[1].Position) polyline = QgisHelper.offsetCurve(pointList, distance) polylineAreaNew = PolylineArea() polylineAreaNew.method_5(polyline) return polylineAreaNew
def getOffsetCurve(self, distance, level = 8): ###### case in closed polylineAreaList = [] startPointIndex = 0 for i in range(len(self)): if i == len(self) - 1: if self[i].bulge != 0: temp = PolylineArea() temp.Add(PolylineAreaPoint(self[i].Position, self[i].bulge)) temp.Add(PolylineAreaPoint(self[0].Position)) polylineAreaList.append(temp) else: point3dArray = [] for j in range(startPointIndex, i + 1): point3dArray.append(self[j].Position) point3dArray.append(self[0].Position) polylineAreaList.append(PolylineArea(point3dArray)) elif self[i].bulge != 0: if startPointIndex != i: point3dArray = [] for j in range(startPointIndex, i + 1): point3dArray.append(self[j].Position) polylineAreaList.append(PolylineArea(point3dArray)) temp = PolylineArea() temp.Add(PolylineAreaPoint(self[i].Position, self[i].bulge)) temp.Add(PolylineAreaPoint(self[i + 1].Position)) polylineAreaList.append(temp) startPointIndex = i + 1 pointList = self.method_14_closed(level) # pointList.append(self[1].Position) polyline = QgisHelper.offsetCurve(pointList, distance) polylineAreaNew = PolylineArea() polylineAreaNew.method_5(polyline) return polylineAreaNew
def btnConstruct_Click(self): flag = FlightPlanBaseSimpleDlg.btnConstruct_Click(self) if not flag: return constructionLayer = AcadHelper.createVectorLayer(SurfaceTypes.DmeTolerance, QGis.Line) point3d1 = self.parametersPanel.pnlDME.Point3d circleAreaList = [] # length = self.groundDistance.Metres / 5 # # rectangle = QgsRectangle(point3d1.get_X() - length / 2, point3d1.get_Y() - length / 2, point3d1.get_X() + length / 2, point3d1.get_Y() + length / 2,) # point1 = Point3D(point3d1.get_X() - length / 2, point3d1.get_Y() + length / 2) # point2 = Point3D(point3d1.get_X() - length / 2, point3d1.get_Y() - length / 2) captionCircleLine = [] centerPoint = None radius = 0.0 arc = None; resultPoint3dArrayList = [] if (self.groundDistance.Metres > 0): metres = self.dmeTolerance.valueMetres / 1.7; if (self.parametersPanel.cmbConstructionType.currentIndex() != 0): num1 = Unit.ConvertDegToRad(float(self.parametersPanel.pnlRadial.Value)); num2 = math.asin(min([1 / self.groundDistance.NauticalMiles, 1])); num3 = num1 + num2 num4 = num1 - num2 # arc = PolylineArea() # arc.Add(PolylineAreaPoint(point3d1, self.groundDistance.Metres)) arc = MathHelper.constructArc(point3d1, self.groundDistance.Metres, num3, num4, 30); point3d = MathHelper.distanceBearingPoint(point3d1, num1, self.groundDistance.Metres); captionCircleLine = [MathHelper.distanceBearingPoint(point3d, MathHelper.getBearing(point3d, point3d1) + math.pi / 2, self.groundDistance.Metres / 20), MathHelper.distanceBearingPoint(point3d, MathHelper.getBearing(point3d, point3d1) - math.pi / 2, self.groundDistance.Metres / 20)] num = -num1; if (self.parametersPanel.chbDrawRadial.isChecked()): line = PolylineArea([point3d1, point3d]); resultPoint3dArrayList.append([point3d1, point3d]) # AcadHelper.smethod_18(transaction, blockTableRecord, line, constructionLayer); else: arc = MathHelper.constructCircle(point3d1, self.groundDistance.Metres, 50); circleAreaList.append(PolylineArea(None, point3d1, self.groundDistance.Metres)) centerPoint = point3d1 radius = self.groundDistance.Metres point3d = MathHelper.distanceBearingPoint(point3d1, 0, self.groundDistance.Metres); length = self.groundDistance.Metres / 5 # rectangle = QgsRectangle(point3d1.get_X() - length / 2, point3d1.get_Y() - length / 2, point3d1.get_X() + length / 2, point3d1.get_Y() + length / 2,) point1 = MathHelper.distanceBearingPoint(point3d, Unit.ConvertDegToRad(270), length / 4)#Point3D(point3d.get_X() - length / 4, point3d.get_Y()) point2 = MathHelper.distanceBearingPoint(point3d, Unit.ConvertDegToRad(90), length / 4)#Point3D(point3d.get_X() + length / 4, point3d.get_Y()) captionCircleLine = [point1, point2] num = 0; resultPoint3dArrayList.append(arc) # AcadHelper.smethod_18(transaction, blockTableRecord, arc, constructionLayer); if (self.parametersPanel.chbWriteText.isChecked()): nauticalMiles = self.groundDistance.NauticalMiles; # DBText dBText = AcadHelper.smethod_138(string.Format("{0} DME", nauticalMiles.ToString("0.#")), point3d, metres, 1); # dBText.set_Rotation(num); # AcadHelper.smethod_18(transaction, blockTableRecord, dBText, constructionLayer); if (self.parametersPanel.chbDrawDmeTol.isVisible() and self.parametersPanel.chbDrawDmeTol.isChecked() and self.dmeTolerance.IsValid() and arc != None): offsetCurf = QgisHelper.offsetCurve(arc, self.dmeTolerance.Metres) if self.parametersPanel.cmbConstructionType.currentIndex() == 0: circleAreaList.append(PolylineArea(None, centerPoint, radius + self.dmeTolerance.Metres)) if (self.parametersPanel.cmbConstructionType.currentIndex() == 0): endPoint = offsetCurf[0] offsetCurf.append(endPoint) resultPoint3dArrayList.append(offsetCurf) # foreach (Entity offsetCurf in arc.GetOffsetCurves(self.dmeTolerance.Metres)) # { # AcadHelper.smethod_19(transaction, blockTableRecord, offsetCurf, constructionLayer, 5); # } entity = QgisHelper.offsetCurve(arc, -(self.dmeTolerance.Metres + self.slantTolerance.Metres)) if self.parametersPanel.cmbConstructionType.currentIndex() == 0: circleAreaList.append(PolylineArea(None, centerPoint, radius -(self.dmeTolerance.Metres + self.slantTolerance.Metres))) if (self.parametersPanel.cmbConstructionType.currentIndex() == 0): endPoint = entity[0] entity.append(endPoint) resultPoint3dArrayList.append(entity) # foreach (Entity entity in arc.GetOffsetCurves(-(self.dmeTolerance.Metres + self.slantTolerance.Metres))) # { # AcadHelper.smethod_19(transaction, blockTableRecord, entity, constructionLayer, 5); # } # } if (self.parametersPanel.chbDrawSlantTol.isVisible() and self.parametersPanel.chbDrawSlantTol.isChecked() and self.slantTolerance.IsValid() and arc != None): offsetCurf1 = QgisHelper.offsetCurve(arc, -self.slantTolerance.Metres) if self.parametersPanel.cmbConstructionType.currentIndex() == 0: circleAreaList.append(PolylineArea(None, centerPoint, radius -self.slantTolerance.Metres)) if (self.parametersPanel.cmbConstructionType.currentIndex() == 0): endPoint = offsetCurf1[0] offsetCurf1.append(endPoint) resultPoint3dArrayList.append(offsetCurf1) # foreach (Entity offsetCurf1 in arc.GetOffsetCurves(-self.slantTolerance.Metres)) # { # AcadHelper.smethod_19(transaction, blockTableRecord, offsetCurf1, constructionLayer, 2); # } # } if (self.parametersPanel.chbInsertSymbol.isChecked()): length = self.groundDistance.Metres / 5 rectangle = QgsRectangle(point3d1.get_X() - length / 2, point3d1.get_Y() - length / 2, point3d1.get_X() + length / 2, point3d1.get_Y() + length / 2,) point1 = MathHelper.distanceBearingPoint(point3d1, Unit.ConvertDegToRad(315), length / 2)#Point3D(point3d1.get_X() - length / 2, point3d1.get_Y() + length / 2) point2 = MathHelper.distanceBearingPoint(point3d1, Unit.ConvertDegToRad(225), length / 2)#Point3D(point3d1.get_X() - length / 2, point3d1.get_Y() - length / 2) point3 = MathHelper.distanceBearingPoint(point3d1, Unit.ConvertDegToRad(135), length / 2)#Point3D(point3d1.get_X() + length / 2, point3d1.get_Y() - length / 2) point4 = MathHelper.distanceBearingPoint(point3d1, Unit.ConvertDegToRad(45), length / 2)#Point3D(point3d1.get_X() + length / 2, point3d1.get_Y() + length / 2) resultPoint3dArrayList.append([point1, point2, point3, point4, point1]) # Symbol symbol = new Symbol(SymbolType.Dme); # AcadHelper.smethod_57(transaction, blockTableRecord, symbol.BlockName, symbol.BlockFileName, point3d1, new Scale3d(1), 0, constructionLayer, None); # } for point3dArray in resultPoint3dArrayList: if (self.parametersPanel.cmbConstructionType.currentIndex() != 0): bulge = MathHelper.smethod_60(point3dArray[0], point3dArray[int(len(point3dArray)/2)], point3dArray[len(point3dArray)-1]) AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, point3dArray, False, {"Bulge":bulge}) if self.parametersPanel.cmbConstructionType.currentIndex() == 0: for area in circleAreaList: AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, area) if self.parametersPanel.chbInsertSymbol.isChecked(): AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, [point1, point2, point3, point4, point1]) if (self.parametersPanel.chbWriteText.isChecked()): AcadHelper.setGeometryAndAttributesInLayer(constructionLayer, captionCircleLine, False, {"Caption":"3DME"} ) palSetting = QgsPalLayerSettings() palSetting.readFromLayer(constructionLayer) palSetting.enabled = True palSetting.fieldName = "Caption" palSetting.isExpression = True palSetting.placement = QgsPalLayerSettings.Line palSetting.placementFlags = QgsPalLayerSettings.AboveLine palSetting.setDataDefinedProperty(QgsPalLayerSettings.Size, True, True, '12', "") palSetting.writeToLayer(constructionLayer) QgisHelper.appendToCanvas(define._canvas, [constructionLayer], self.surfaceType, True) QgisHelper.zoomToLayers([constructionLayer]) self.resultLayerList = [constructionLayer]
def offsetCurve(self, distance, segment = 0, joinStyle = 0, mitreLimit = 0): pointList = self.method_14_closed() pointList.append(self[1].Position) polyline = QgisHelper.offsetCurve(pointList, distance) self.clear() self.method_5(polyline)