AP_Scripting: special case handling of copy method
allow for each copy() of Location, Vector2f and Vector3f without adding special methods to each type in C++
This commit is contained in:
parent
3273ead11b
commit
d56840e4ef
27
libraries/AP_Scripting/examples/copy_userdata.lua
Normal file
27
libraries/AP_Scripting/examples/copy_userdata.lua
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
--[[
|
||||||
|
An example of using the copy() method on userdata
|
||||||
|
--]]
|
||||||
|
|
||||||
|
|
||||||
|
local loc1 = Location()
|
||||||
|
loc1:lat(-35)
|
||||||
|
loc1:lng(-122)
|
||||||
|
|
||||||
|
-- if we did this as loc2 = loc1 then it actually takes a reference
|
||||||
|
-- by using copy() we get the intended behaviour
|
||||||
|
local loc2 = loc1:copy()
|
||||||
|
loc2:offset(3000,5000)
|
||||||
|
|
||||||
|
local diff = loc1:get_distance_NE(loc2)
|
||||||
|
gcs:send_text(0,string.format("locdiff=(%.2f,%.2f)", diff:x(), diff:y()))
|
||||||
|
|
||||||
|
local v1 = Vector2f()
|
||||||
|
v1:x(-35)
|
||||||
|
v1:y(-122)
|
||||||
|
|
||||||
|
local v2 = v1:copy()
|
||||||
|
v2:x(v2:x()+100)
|
||||||
|
v2:y(v2:y()+300)
|
||||||
|
|
||||||
|
local diff = v2 - v1
|
||||||
|
gcs:send_text(0,string.format("vdiff=(%.2f,%.2f)", diff:x(), diff:y()))
|
@ -18,6 +18,8 @@ userdata Location method get_bearing float Location
|
|||||||
userdata Location method get_distance_NED Vector3f Location
|
userdata Location method get_distance_NED Vector3f Location
|
||||||
userdata Location method get_distance_NE Vector2f Location
|
userdata Location method get_distance_NE Vector2f Location
|
||||||
userdata Location method change_alt_frame boolean Location::AltFrame'enum Location::AltFrame::ABSOLUTE Location::AltFrame::ABOVE_TERRAIN
|
userdata Location method change_alt_frame boolean Location::AltFrame'enum Location::AltFrame::ABSOLUTE Location::AltFrame::ABOVE_TERRAIN
|
||||||
|
userdata Location method copy Location
|
||||||
|
|
||||||
|
|
||||||
include AP_AHRS/AP_AHRS.h
|
include AP_AHRS/AP_AHRS.h
|
||||||
|
|
||||||
@ -119,6 +121,7 @@ userdata Vector3f operator -
|
|||||||
userdata Vector3f method dot float Vector3f
|
userdata Vector3f method dot float Vector3f
|
||||||
userdata Vector3f method cross Vector3f Vector3f
|
userdata Vector3f method cross Vector3f Vector3f
|
||||||
userdata Vector3f method scale Vector3f float'skip_check
|
userdata Vector3f method scale Vector3f float'skip_check
|
||||||
|
userdata Vector3f method copy Vector3f
|
||||||
|
|
||||||
userdata Vector2f field x float'skip_check read write
|
userdata Vector2f field x float'skip_check read write
|
||||||
userdata Vector2f field y float'skip_check read write
|
userdata Vector2f field y float'skip_check read write
|
||||||
@ -130,6 +133,8 @@ userdata Vector2f method is_zero boolean
|
|||||||
userdata Vector2f method rotate void float'skip_check
|
userdata Vector2f method rotate void float'skip_check
|
||||||
userdata Vector2f operator +
|
userdata Vector2f operator +
|
||||||
userdata Vector2f operator -
|
userdata Vector2f operator -
|
||||||
|
userdata Vector2f method copy Vector2f
|
||||||
|
|
||||||
|
|
||||||
include AP_Notify/AP_Notify.h
|
include AP_Notify/AP_Notify.h
|
||||||
singleton AP_Notify alias notify
|
singleton AP_Notify alias notify
|
||||||
|
@ -1692,7 +1692,12 @@ void emit_userdata_method(const struct userdata *data, const struct method *meth
|
|||||||
static_cast = FALSE;
|
static_cast = FALSE;
|
||||||
break;
|
break;
|
||||||
case TYPE_USERDATA:
|
case TYPE_USERDATA:
|
||||||
fprintf(source, " const %s &data = %s%s%s(", method->return_type.data.ud.name, ud_name, ud_access, method->name);
|
if (strcmp(method->name, "copy") == 0) {
|
||||||
|
// special case for copy method
|
||||||
|
fprintf(source, " const %s data = (*%s", method->return_type.data.ud.name, ud_name);
|
||||||
|
} else {
|
||||||
|
fprintf(source, " const %s &data = %s%s%s(", method->return_type.data.ud.name, ud_name, ud_access, method->name);
|
||||||
|
}
|
||||||
static_cast = FALSE;
|
static_cast = FALSE;
|
||||||
break;
|
break;
|
||||||
case TYPE_AP_OBJECT:
|
case TYPE_AP_OBJECT:
|
||||||
|
Loading…
Reference in New Issue
Block a user