| 59 | |
| 60 | |
| 61 | class ScatterDataModifier(QObject): |
| 62 | numberOfItems = 3600 |
| 63 | curveDivider = 3.0 |
| 64 | lowerNumberOfItems = 900 |
| 65 | lowerCurveDivider = 0.75 |
| 66 | |
| 67 | backgroundEnabledChanged = pyqtSignal(bool) |
| 68 | gridEnabledChanged = pyqtSignal(bool) |
| 69 | shadowQualityChanged = pyqtSignal(int) |
| 70 | fontChanged = pyqtSignal(QFont) |
| 71 | |
| 72 | def __init__(self, scatter): |
| 73 | super(ScatterDataModifier, self).__init__() |
| 74 | |
| 75 | self.m_graph = scatter # Q3DScatter实例 |
| 76 | self.m_fontSize = 40.0 |
| 77 | self.m_style = QAbstract3DSeries.MeshSphere |
| 78 | self.m_smooth = True |
| 79 | self.m_itemCount = self.lowerNumberOfItems |
| 80 | self.m_curveDivider = self.lowerCurveDivider |
| 81 | |
| 82 | # 设置当前主题类型 |
| 83 | self.m_graph.activeTheme().setType(Q3DTheme.ThemeEbony) |
| 84 | # 设置当前主题的字体 |
| 85 | font = self.m_graph.activeTheme().font() |
| 86 | font.setPointSize(self.m_fontSize) |
| 87 | self.m_graph.activeTheme().setFont(font) |
| 88 | # 设置阴影质量 |
| 89 | self.m_graph.setShadowQuality(QAbstract3DGraph.ShadowQualitySoftLow) |
| 90 | self.m_graph.scene().activeCamera().setCameraPreset( |
| 91 | Q3DCamera.CameraPresetFront) |
| 92 | |
| 93 | proxy = QScatterDataProxy() |
| 94 | series = QScatter3DSeries(proxy) |
| 95 | series.setItemLabelFormat( |
| 96 | "@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel") |
| 97 | series.setMeshSmooth(self.m_smooth) |
| 98 | self.m_graph.addSeries(series) |
| 99 | |
| 100 | self.addData() |
| 101 | |
| 102 | def addData(self): |
| 103 | # 添加数据 |
| 104 | self.m_graph.axisX().setTitle("X") |
| 105 | self.m_graph.axisY().setTitle("Y") |
| 106 | self.m_graph.axisZ().setTitle("Z") |
| 107 | |
| 108 | dataArray = [] |
| 109 | |
| 110 | limit = math.sqrt(self.m_itemCount) / 2.0 |
| 111 | i = -limit |
| 112 | while i < limit: |
| 113 | j = -limit |
| 114 | while j < limit: |
| 115 | itm = QScatterDataItem( |
| 116 | QVector3D(i + 0.5, |
| 117 | math.cos( |
| 118 | math.radians((i * j) / self.m_curveDivider)), |
no outgoing calls
no test coverage detected