1 from panda3d
.core
import Vec2
, Vec3
, Mat4
, LVector2f
, LVector3f
9 def __init__(self
, *args
):
10 self
._vec
= self
.p3d_cls(*args
)
13 def x(self
): return self
._vec
.x
16 def y(self
): return self
._vec
.y
19 def xy(self
): return P3dVec2(self
._vec
.x
, self
._vec
.y
)
21 def signed_angle_deg(self
, vec
):
22 return self
._vec
.signed_angle_deg(LVector2f(vec
.x
, vec
.y
))
25 if isinstance(other
, tuple): other
= self
.__class
__(*other
)
26 return self
._vec
.dot(other
._vec
)
27 #TODO: don't access a protected member
31 return self
.__class
__(*[getattr(nvec
, attr
) for attr
in self
.attr_lst
])
33 def __add__(self
, vec
):
34 if isinstance(vec
, tuple): vec
= self
.__class
__(*vec
)
35 svec
= self
._vec
+ vec
._vec
#TODO: don't access a protected member
36 return self
.__class
__(*[getattr(svec
, attr
) for attr
in self
.attr_lst
])
38 def __sub__(self
, vec
):
39 if isinstance(vec
, tuple): vec
= self
.__class
__(*vec
)
40 svec
= self
._vec
- vec
._vec
#TODO: don't access a protected member
41 return self
.__class
__(*[getattr(svec
, attr
) for attr
in self
.attr_lst
])
43 def __mul__(self
, val
):
44 svec
= self
._vec
* val
45 return self
.__class
__(*[getattr(svec
, attr
) for attr
in self
.attr_lst
])
49 return self
.__class
__(*self
.attrs
)
52 def attrs(self
): return [getattr(self
._vec
, fld
) for fld
in self
.attr_lst
]
56 vec
= self
.p3d_cls(*self
.attrs
)
58 return self
.__class
__(*[getattr(vec
, fld
) for fld
in self
.attr_lst
])
60 def rotate(self
, deg
):
62 rot_mat
.set_rotate_mat(deg
, (0, 0, 1))
63 self
._vec
= rot_mat
.xform_vec(self
._vec
)
65 def length(self
): return self
._vec
.length()
69 ', '.join(['%s' for _
in range(len(self
.attr_lst
))]) + ')'
70 rnd
= lambda x
: round(x
, 3)
71 vals
= [rnd(getattr(self
._vec
, attr
)) for attr
in self
.attr_lst
]
72 pars
= tuple([self
.__class
__.__name
__] + vals
)
76 class P3dVec3(P3dVec2
):
78 attr_lst
= ['x', 'y', 'z']
82 def z(self
): return self
._vec
.z
84 def signed_angle_deg(self
, vec
):
85 v_up
= LVector3f(0, 0, 1)
86 return self
._vec
.signed_angle_deg(LVector3f(vec
.x
, vec
.y
, vec
.z
), v_up
)