Fix OriginHands not liking the new structure (null-able)

This commit is contained in:
rodolpheh 2023-11-14 00:15:42 +00:00
parent bb714cb9c0
commit 1dc4d054a6
4 changed files with 39 additions and 29 deletions

View File

@ -11,9 +11,8 @@ func _ready():
var scene : PackedScene = preload("res://models/Origin.tscn")
dry_run = true
var new_frame : UltraleapFrame = UltraleapFrame.new()
var n : int = set_hand(new_frame.left_hand, 0)
n = set_hand(new_frame.right_hand, n)
var n : int = set_hand(UltraleapHand.new(), 0)
n = set_hand(UltraleapHand.new(), n)
dry_run = false
print(str(n) + " bones")
@ -25,6 +24,7 @@ func _ready():
instance.name = "Joint" + str(i)
gizmos.append(instance)
func _process(_delta):
var n : int = 0
@ -45,10 +45,13 @@ func _process(_delta):
n = set_hand(interpolated_frame.right_hand, n)
return
n = set_hand(tracking.get_last_frame().left_hand, n)
n = set_hand(tracking.get_last_frame().right_hand, n)
n = set_hand(frame.left_hand, n)
n = set_hand(frame.right_hand, n)
func set_hand(hand : UltraleapHand, index : int) -> int:
if hand == null:
hand = UltraleapHand.new()
index = set_finger("thumb", hand, index)
index = set_finger("index", hand, index)
index = set_finger("middle", hand, index)
@ -60,6 +63,9 @@ func set_hand(hand : UltraleapHand, index : int) -> int:
func set_finger(finger_name : String, hand : UltraleapHand, index : int) -> int:
var finger : UltraleapDigit = hand.get(finger_name)
if finger == null:
finger = UltraleapDigit.new()
if finger_name != "thumb":
index = set_bone("metacarpal", finger, index)
@ -74,9 +80,14 @@ func set_bone(bone_name : String, finger : UltraleapDigit, index : int):
if dry_run:
return index + 1
var bone : UltraleapBone = finger.get(bone_name)
if bone == null:
bone = UltraleapBone.new()
var bone_transform : Transform3D = tracking.global_transform * Transform3D(
Basis(finger.get(bone_name).rotation),
finger.get(bone_name).prev_joint
Basis(bone.rotation),
bone.prev_joint
)
gizmos[index].global_transform = bone_transform
@ -85,10 +96,15 @@ func set_bone(bone_name : String, finger : UltraleapDigit, index : int):
func set_tip(finger : UltraleapDigit, index : int) -> int:
if dry_run:
return index + 1
var tip : UltraleapBone = finger.get("distal")
if tip == null:
tip = UltraleapBone.new()
var tip_transform : Transform3D = tracking.global_transform * Transform3D(
Basis(finger.get("distal").rotation),
finger.get("distal").next_joint
Basis(tip.rotation),
tip.next_joint
)
gizmos[index].global_transform = tip_transform
@ -99,6 +115,9 @@ func set_arm(hand : UltraleapHand, index : int) -> int:
return index + 2
var arm : UltraleapBone = hand.arm
if arm == null:
arm = UltraleapBone.new()
var wrist_transform : Transform3D = tracking.global_transform * Transform3D(
Basis(arm.rotation),

View File

@ -81,13 +81,6 @@ void UltraleapFrame::_bind_methods() {
}
void UltraleapFrame::fill_frame_data(Ref<UltraleapFrame> ul_frame, const LEAP_TRACKING_EVENT* frame) {
if (ul_frame->get_left_hand() == NULL) {
ul_frame->set_left_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
}
if (ul_frame->get_right_hand() == NULL) {
ul_frame->set_right_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
}
ul_frame->id = frame->tracking_frame_id;
ul_frame->framerate = frame->framerate;
ul_frame->is_left_hand_visible = false;
@ -96,10 +89,16 @@ void UltraleapFrame::fill_frame_data(Ref<UltraleapFrame> ul_frame, const LEAP_TR
for (size_t i = 0; i < frame->nHands; i++)
{
if (frame->pHands[i].type == eLeapHandType_Left) {
if (ul_frame->get_left_hand() == NULL) {
ul_frame->set_left_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
}
UltraleapHand::fill_hand_data(ul_frame->get_left_hand(), &frame->pHands[i]);
ul_frame->is_left_hand_visible = true;
}
else {
if (ul_frame->get_right_hand() == NULL) {
ul_frame->set_right_hand(Ref<UltraleapHand>(memnew(UltraleapHand)));
}
UltraleapHand::fill_hand_data(ul_frame->get_right_hand(), &frame->pHands[i]);
ul_frame->is_right_hand_visible = true;
}

View File

@ -233,11 +233,11 @@ void UltraleapHand::fill_hand_data(Ref<UltraleapHand> ul_hand, LEAP_HAND* hand)
if (ul_hand->arm_ref == NULL) {
ul_hand->arm_ref = Ref<UltraleapBone>(memnew(UltraleapBone));
ul_hand->palm_ref = Ref<UltraleapPalm>(memnew(UltraleapPalm));
ul_hand->thumb = Ref<UltraleapDigit>(memnew(UltraleapDigit));
ul_hand->index = Ref<UltraleapDigit>(memnew(UltraleapDigit));
ul_hand->middle = Ref<UltraleapDigit>(memnew(UltraleapDigit));
ul_hand->ring = Ref<UltraleapDigit>(memnew(UltraleapDigit));
ul_hand->pinky = Ref<UltraleapDigit>(memnew(UltraleapDigit));
ul_hand->set_thumb(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
ul_hand->set_index(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
ul_hand->set_middle(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
ul_hand->set_ring(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
ul_hand->set_pinky(Ref<UltraleapDigit>(memnew(UltraleapDigit)));
}
ul_hand->type = hand->type == eLeapHandType_Left ? UltraleapTypes::Chirality::Left : UltraleapTypes::Chirality::Right;

View File

@ -30,14 +30,6 @@ public:
float pinch_strength;
float grab_strength;
UltraleapDigit* digits[5] = {
memnew(UltraleapDigit),
memnew(UltraleapDigit),
memnew(UltraleapDigit),
memnew(UltraleapDigit),
memnew(UltraleapDigit)
};
// Getters / Setters
float get_confidence() { return confidence; }
void set_confidence(float value) { confidence = value; }