添加两种不同种类的3D线条显示效果+解决界面bug
This commit is contained in:
108
UI/ui_3d.py
108
UI/ui_3d.py
@ -35,16 +35,21 @@ class Target3DWidgetA(QWidget):
|
||||
self.ax.set_ylabel('Y')
|
||||
self.ax.set_zlabel('Z')
|
||||
|
||||
# 1. 轴范围(X轴设为0-60cm,Y/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-60cm,Y/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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user