添加两种不同种类的3D线条显示效果+解决界面bug

This commit is contained in:
2026-01-08 15:36:40 +08:00
parent bbfcd63503
commit 2de3857d1c
3 changed files with 137 additions and 127 deletions

View File

@ -35,16 +35,21 @@ class Target3DWidgetA(QWidget):
self.ax.set_ylabel('Y')
self.ax.set_zlabel('Z')
# 1. 轴范围X轴设为0-60cmY/Z设为0-5cm
self.ax.set_xlim(0, 60)
# 1. 清空刻度数值(隐藏刻度数字
self.ax.set_xticklabels([])
self.ax.set_yticklabels([])
self.ax.set_zticklabels([])
# 2. 隐藏刻度线针对3D轴的特殊设置
self.ax.tick_params(axis='x', which='both', length=0) # X轴刻度线长度设为0
self.ax.tick_params(axis='y', which='both', length=0) # Y轴刻度线长度设为0
self.ax.tick_params(axis='z', which='both', length=0) # Z轴刻度线长度设为0
# 轴范围保留保证3D图形显示范围正确
self.ax.set_xlim(0, 120)
self.ax.set_ylim(0, 5)
self.ax.set_zlim(0, 5)
# 2. 刻度间隔统一为1cm
self.ax.set_xticks(range(0, 61, 5)) # X轴每5cm标一次刻度避免太密集
self.ax.set_yticks(range(0, 6, 1)) # Y轴每1cm标一次刻度
self.ax.set_zticks(range(0, 6, 1)) # Z轴每1cm标一次刻度
# 调整视角适配X轴1cm刻度
self.ax.view_init(elev=20, azim=60)
@ -52,27 +57,27 @@ class Target3DWidgetA(QWidget):
"""绘制3D结构"""
vertices = [
# 底部截面Z=0平面
(0, 3, 0), (50, 3, 0),
(50, 3, 0), (50, 0, 0),
(0, 3, 0), (100, 3, 0),
(100, 3, 0), (100, 0, 0),
# 中间截面Z=0.5平面)
(0, 0.5, 0.5), (0, 3, 0.5),
(0, 3, 0.5), (50, 3, 0.5),
(50, 3, 0.5), (50, 0.5, 0.5),
(50, 0.5, 0.5), (0, 0.5, 0.5),
(0, 3, 0.5), (100, 3, 0.5),
(100, 3, 0.5), (100, 0.5, 0.5),
(100, 0.5, 0.5), (0, 0.5, 0.5),
# 顶部界面Z=2平面
(0, 0, 2), (0, 0.5, 2),
(0, 0.5, 2), (50, 0.5, 2),
(50, 0.5, 2), (50, 0, 2),
(50, 0, 2), (0, 0, 2),
(0, 0.5, 2), (100, 0.5, 2),
(100, 0.5, 2), (100, 0, 2),
(100, 0, 2), (0, 0, 2),
# z方向的连线
(0, 3, 0.5), (0, 3, 0),
(50, 3, 0.5), (50, 3, 0),
(100, 3, 0.5), (100, 3, 0),
(0, 0.5, 2), (0, 0.5, 0.5),
(50, 0.5, 2), (50, 0.5, 0.5),
(50, 0, 2), (50, 0, 0),
(100, 0.5, 2), (100, 0.5, 0.5),
(100, 0, 2), (100, 0, 0),
]
# 绘制所有棱边
@ -85,10 +90,10 @@ class Target3DWidgetA(QWidget):
def add_annotations(self):
"""标注位置适配X轴1cm单位"""
annotations = [
("a", 50, 0, 1, 'red'),
("b", 50, 1, 0, 'green'),
("c", 50, 3, 0.25, 'blue'),
("d", 25, 2, 0, 'magenta')
("a", 100, 0, 1, 'red'),
("b", 100, 1, 0, 'green'),
("c", 100, 3, 0.25, 'blue'),
("d", 50, 2, 0, 'magenta')
]
for text, x, y, z, color in annotations:
self.ax.text(x, y, z, text, fontsize=14, color=color, weight='bold')
@ -117,16 +122,21 @@ class Target3DWidgetB(QWidget):
self.ax.set_ylabel('Y')
self.ax.set_zlabel('Z')
# 1. 轴范围X轴设为0-60cmY/Z设为0-5cm
self.ax.set_xlim(0, 60)
# 1. 清空刻度数值(隐藏刻度数字
self.ax.set_xticklabels([])
self.ax.set_yticklabels([])
self.ax.set_zticklabels([])
# 2. 隐藏刻度线针对3D轴的特殊设置
self.ax.tick_params(axis='x', which='both', length=0) # X轴刻度线长度设为0
self.ax.tick_params(axis='y', which='both', length=0) # Y轴刻度线长度设为0
self.ax.tick_params(axis='z', which='both', length=0) # Z轴刻度线长度设为0
# 轴范围保留保证3D图形显示范围正确
self.ax.set_xlim(0, 120)
self.ax.set_ylim(0, 5)
self.ax.set_zlim(0, 5)
# 2. 刻度间隔统一为1cm
self.ax.set_xticks(range(0, 61, 5)) # X轴每5cm标一次刻度避免太密集
self.ax.set_yticks(range(0, 6, 1)) # Y轴每1cm标一次刻度
self.ax.set_zticks(range(0, 6, 1)) # Z轴每1cm标一次刻度
# 调整视角适配X轴1cm刻度
self.ax.view_init(elev=20, azim=60)
@ -134,34 +144,34 @@ class Target3DWidgetB(QWidget):
"""绘制3D结构"""
vertices = [
# 底部截面Z=0平面
(0, 3, 0), (50, 3, 0),
(50, 3, 0), (50, 0, 0),
(0, 3, 0), (100, 3, 0),
(100, 3, 0), (100, 0, 0),
# 中间截面Z=0.5平面)
(0, 0.5, 0.5), (0, 2.5, 0.5),
(50, 2.5, 0.5), (50, 0.5, 0.5),
(50, 0.5, 0.5), (0, 0.5, 0.5),
(100, 2.5, 0.5), (100, 0.5, 0.5),
(100, 0.5, 0.5), (0, 0.5, 0.5),
# 中间截面Z=1平面
(0, 2.5, 1),(0, 3, 1),
(0, 3, 1), (50, 3, 1),
(50, 3, 1), (50, 2.5, 1),
(50, 2.5, 1), (0, 2.5, 1),
(0, 3, 1), (100, 3, 1),
(100, 3, 1), (100, 2.5, 1),
(100, 2.5, 1), (0, 2.5, 1),
# 顶部界面Z=2平面
(0, 0, 2), (0, 0.5, 2),
(0, 0.5, 2), (50, 0.5, 2),
(50, 0.5, 2), (50, 0, 2),
(50, 0, 2), (0, 0, 2),
(0, 0.5, 2), (100, 0.5, 2),
(100, 0.5, 2), (100, 0, 2),
(100, 0, 2), (0, 0, 2),
# z方向的连线
(0, 3, 1), (0, 3, 0),
(50, 3, 1), (50, 3, 0),
(100, 3, 1), (100, 3, 0),
(0, 0.5, 2), (0, 0.5, 0.5),
(50, 0.5, 2), (50, 0.5, 0.5),
(50, 0, 2), (50, 0, 0),
(100, 0.5, 2), (100, 0.5, 0.5),
(100, 0, 2), (100, 0, 0),
(0, 2.5, 1),(0, 2.5, 0.5),
(50, 2.5, 1),(50, 2.5, 0.5)
(100, 2.5, 1),(100, 2.5, 0.5)
]
# 绘制所有棱边
@ -174,10 +184,10 @@ class Target3DWidgetB(QWidget):
def add_annotations(self):
"""标注位置适配X轴1cm单位"""
annotations = [
("a", 50, 0, 1, 'red'),
("b", 50, 1, 0, 'green'),
("c", 50, 3, 0.5, 'blue'),
("d", 25, 2, 0, 'magenta')
("a", 100, 0, 1, 'red'),
("b", 100, 1, 0, 'green'),
("c", 100, 3, 0.5, 'blue'),
("d", 50, 2, 0, 'magenta')
]
for text, x, y, z, color in annotations:
self.ax.text(x, y, z, text, fontsize=14, color=color, weight='bold')
@ -211,6 +221,6 @@ def ui_3d_b():
# ----------测试接口----------
if __name__ == '__main__':
ui_3d_a()
# ui_3d_b()
# ui_3d_a()
ui_3d_b()