Refactor curve, sag, and swing methods in Line

class
This commit is contained in:
n3040 2023-12-05 01:32:19 +08:00
parent 50b88b4e26
commit 6e98f76ce9
1 changed files with 15 additions and 12 deletions

View File

@ -42,7 +42,7 @@ class Line:
self._points = None
self._rotation = None
def curve(self):
def curve(self,draw=False)->List:
if self._points:
return self._points
start_p = self._start_p
@ -53,7 +53,7 @@ class Line:
line = Vector3D(end_p.x, end_p.y, end_p.z) - Vector3D(
start_p.x, start_p.y, start_p.z
)
# 计算与X轴的角度
# 计算与X轴的角度画弧垂。先沿Z轴旋转到xz平面的x正半轴上。
xy_project = copy.deepcopy(line) # 投影到xy平面上
xy_project.z = 0
x_abs_angel = xy_project.angle_to(Vector3D(1, 0, 0))
@ -72,7 +72,7 @@ class Line:
] = list() # 未旋转之前的伪坐标
for foo in range(len(span_l)):
p_points.append((span_l[foo] + start_p.x, start_p.y, z_points[foo]))
# 绕Z轴旋转
# 绕起点,在Z轴方向旋转
rotation = transformation.Rotation(
x_angel,
[start_p.x, start_p.y, start_p.z],
@ -83,11 +83,12 @@ class Line:
p_points,
)
self._points = points
msp = self._msp
msp.add_polyline3d(points)
if draw:
msp = self._msp
msp.add_polyline3d(points)
return points
def sag(self):
def sag(self,draw=False):
start_p = self._start_p
end_p = self._end_p
span = self._span
@ -114,12 +115,13 @@ class Line:
] # 旋转前的值
sag_points = rotation.rotate(p_sag_points)
sag_value = start_p.z + middle_span * height / span - middle_z
msp = self._msp
msp.add_polyline3d(sag_points)
draw_text(msp, f'sag {sag_value}', sag_points[1])
if draw:
msp = self._msp
msp.add_polyline3d(sag_points)
draw_text(msp, f'sag {sag_value}', sag_points[1])
return sag_points
def swing(self, angel):
def swing(self, angel,draw=False)->List:
if not self._points:
self.curve()
points = self._points
@ -131,8 +133,9 @@ class Line:
[end_p.x, end_p.y, end_p.z],
)
swing_point = swing_rotation.rotate(points)
msp = self._msp
msp.add_polyline3d(swing_point)
if draw:
msp = self._msp
msp.add_polyline3d(swing_point)
return swing_point