Commit 99bfce50 authored by Andrey Filippov's avatar Andrey Filippov

target icon changes for known targets

parent 1433d7a0
......@@ -1721,8 +1721,10 @@ public class EyesisCorrectionParameters {
ArrayList<String> extras = new ArrayList<String>();
for (int i= 3; i < tokens.length; i++) {
extras.add(tokens[i]);
System.out.print("tokens ["+i+"] = "+tokens[i]+", ");
}
extra_map.put(dir_name, extras);
System.out.println();
}
break parse_set;
}
......
......@@ -3095,15 +3095,17 @@ public class CuasMotion {
final double input_range, // 5
final boolean scale2x,
final int target_type, // = 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
final int known_type, // 2; // Target location matching UAS flight log: 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
final double known_err, // 20; // Maximal distance between the detected target and UAS log position (in raw image pixels);
final float [][] fpixels,
final double [][][] targets60hz,
final boolean show_true_rng,// show true range (from the flight log)
final boolean show_mismatch,
final int frame0,
final int frame_step,
final int width_src,
final String title,
final String [] titles,
String diamond_path,
final UasLogReader uasLogReader,
final int debugLevel) {
String uas_log_path = null;
......@@ -3121,22 +3123,70 @@ public class CuasMotion {
uas_log_path = resourcePath.toString();
System.out.println("uas_log_path="+uas_log_path);
}
if (diamond_path == null) {
String resource_name = TARGET_ICONS[target_type][scale2x? 1 : 0];
URL resourceUrl = CuasMotion.class.getClassLoader().getResource("graphics/"+resource_name);
Path resourcePath = null;
try {
resourcePath = Paths.get(resourceUrl.toURI());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// preparation of the undetected target icon
String undetected_resource_name = TARGET_ICONS[target_type][scale2x? 1 : 0];
URL undetected_resourceUrl = CuasMotion.class.getClassLoader().getResource("graphics/"+undetected_resource_name);
Path undetected_resourcePath = null;
try {
undetected_resourcePath = Paths.get(undetected_resourceUrl.toURI());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String undetected_path = undetected_resourcePath.toString();
ColorProcessor undetected_cp = null;
try {
undetected_cp = new ColorProcessor(ImageIO.read(new File(undetected_path)));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
final int undetected_width = undetected_cp.getWidth();
final int undetected_height = undetected_cp.getHeight();
final int [] undetected_pixels = ((int []) undetected_cp.getPixels());
final int [][] undetected_rgba = new int [undetected_pixels.length][4];
for (int i = 0; i < undetected_rgba.length; i++) {
for (int s = 0; s <4; s++) {
undetected_rgba[i][s] = (undetected_pixels[i] >> (8 * s)) & 0xff;
}
}
// preparation of the detected target icon
String detected_resource_name = TARGET_ICONS[known_type][scale2x? 1 : 0];
URL detected_resourceUrl = CuasMotion.class.getClassLoader().getResource("graphics/"+detected_resource_name);
Path detected_resourcePath = null;
try {
detected_resourcePath = Paths.get(detected_resourceUrl.toURI());
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String detected_path = detected_resourcePath.toString();
ColorProcessor detected_cp = null;
try {
detected_cp = new ColorProcessor(ImageIO.read(new File(detected_path)));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
final int detected_width = detected_cp.getWidth();
final int detected_height = detected_cp.getHeight();
final int [] detected_pixels = ((int []) detected_cp.getPixels());
final int [][] detected_rgba = new int [detected_pixels.length][4];
for (int i = 0; i < detected_rgba.length; i++) {
for (int s = 0; s <4; s++) {
detected_rgba[i][s] = (detected_pixels[i] >> (8 * s)) & 0xff;
}
diamond_path = resourcePath.toString();
}
final int scale = scale2x? 2 : 1;
final Thread[] threads = ImageDtt.newThreadArray(QuadCLT.THREADS_MAX);
final AtomicInteger ai = new AtomicInteger(0);
// String diamond_path = "/media/elphel/NVME/lwir16-proc/eagle_mountain/graphics/diamond21x17.png";
final boolean annotate_mono = clt_parameters.imp.annotate_mono;
final boolean annotate_transparent_mono = clt_parameters.imp.annotate_transparent_mono;
final Color annotate_color_mono = clt_parameters.imp.annotate_color_mono;
......@@ -3148,24 +3198,7 @@ public class CuasMotion {
final int font_type = clt_parameters.imp.cuas_font_type;
final int space_before_text = 2;
ColorProcessor diamond_cp = null;
try {
diamond_cp = new ColorProcessor(ImageIO.read(new File(diamond_path)));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
final int diamond_width = diamond_cp.getWidth();
final int diamond_height = diamond_cp.getHeight();
final int [] diamond_pixels = ((int []) diamond_cp.getPixels());
final int [][] diamond_rgba = new int [diamond_pixels.length][4];
for (int i = 0; i < diamond_rgba.length; i++) {
for (int s = 0; s <4; s++) {
diamond_rgba[i][s] = (diamond_pixels[i] >> (8 * s)) & 0xff;
}
}
ColorProcessor uaslog_cp = null;
if (uas_log_path != null) {
......@@ -3312,15 +3345,15 @@ public class CuasMotion {
for (int dscene = half_step0; dscene < half_step1; dscene ++) {
int nscene = frame_center + dscene;
if ((nscene >=0) && (nscene < num_scenes)) {
double [] uas_pXpYDRange = uasLogReader.getUasPxPyDRange(titles[nscene]);
if (uaslog_rgba != null) { // draw uas from log
// get drone pixel coordinates
double [] uas_pXpYD = uasLogReader.getUasPxPyD(titles[nscene]);
int xc = (int) Math.round(scale * uas_pXpYD[0]);
int yc = (int) Math.round(scale * uas_pXpYD[1]);
int xc = (int) Math.round(scale * uas_pXpYDRange[0]);
int yc = (int) Math.round(scale * uas_pXpYDRange[1]);
int xl = xc - uaslog_width/2;
int yt = yc - uaslog_height/2;
if (nSeq < 0) { // disabled debug, keep 3 to use // 3) {
System.out.println(String.format("uas_pXpYD=[%f,%f,%f]",uas_pXpYD[0],uas_pXpYD[1],uas_pXpYD[2]));
System.out.println(String.format("uas_pXpYD=[%f,%f,%f]",uas_pXpYDRange[0],uas_pXpYDRange[1],uas_pXpYDRange[2]));
System.out.println(String.format("xc=%d, yc=%d, xl=%d, yt=%d",xc,yc,xl,yt));
System.out.println(String.format("A=%f, T=%f, R=%f",uasLogReader.getCameraATR()[0],uasLogReader.getCameraATR()[1],uasLogReader.getCameraATR()[1]));
System.out.println(String.format("titles[nscene]=%s, startTimeStamp=%f",titles[nscene],uasLogReader.getStartTimestamp()));
......@@ -3361,22 +3394,33 @@ public class CuasMotion {
double [][] targets = targets60hz[nscene];
if (targets != null) { // TODO: find why
int matching_target = findMatchingTarget(
targets, // double [][] targets,
uas_pXpYDRange, // double [] uas_pXpYD,
known_err); // double max_dist)
for (int ntarget = 0; ntarget < targets.length; ntarget++) {
// if ((ntarget == matching_target) && (dscene == half_step0)) {
// System.out.println("ntarget == matching_target="+ntarget+", nscene="+nscene+", nSeq="+nSeq);
// }
int xc = (int) Math.round(scale * targets[ntarget][TARGET_X]);
int yc = (int) Math.round(scale * targets[ntarget][TARGET_Y]);
int xl = xc - diamond_width/2;
int yt = yc - diamond_height/2;
for (int y = 0; y < diamond_height; y++) {
int icon_width = (ntarget == matching_target) ? detected_width : undetected_width;
int icon_height = (ntarget == matching_target) ? detected_height : undetected_height;
int [][] target_rgba = (ntarget == matching_target) ? detected_rgba : undetected_rgba;
final int [] target_pixels = (ntarget == matching_target) ? detected_pixels : undetected_pixels;
int xl = xc - icon_width/2;
int yt = yc - icon_height/2;
for (int y = 0; y < icon_height; y++) {
int py = yt + y;
if ((py >= 0) && (py < height)) {
for (int x = 0; x< diamond_width; x++) {
for (int x = 0; x< icon_width; x++) {
int px = xl +x;
int dpix = x + y * diamond_width;
int dpix = x + y * icon_width;
int ipix = px + py*width;
if ((px >=0) && (px < width)) {
int alpha = diamond_rgba[dpix][3];
int alpha = target_rgba[dpix][3];
if (alpha > 0) { // alpha
int dp = diamond_pixels[x + y * diamond_width];
int dp = target_pixels[x + y * icon_width];
if (alpha == 255) {
ipixels[nscene][ipix] = dp;
} else {
......@@ -3385,7 +3429,7 @@ public class CuasMotion {
int new_pix = 0xff000000;
for (int c = 0; c < 3; c++) {
int rgb = (img_pix >> (8 * c)) & 0xff;
rgb = (int) Math.round((1-k)*rgb + k* diamond_rgba[dpix][c]);
rgb = (int) Math.round((1-k)*rgb + k* target_rgba[dpix][c]);
if (rgb > 255) rgb = 255;
new_pix |= (rgb << (8*c));
}
......@@ -3397,25 +3441,23 @@ public class CuasMotion {
}
}
if (annotate) {
int text_left = xl + diamond_width + space_before_text * scale;
int text_left = xl + icon_width + space_before_text * scale;
int text_top = yt + scale * font_size; // text start from the bottom of the first line
ImageProcessor ip = fstack_scenes.getProcessor(nscene+1);
String txt = getTargetText(
clt_parameters, // CLTParameters clt_parameters,
targets[ntarget]); // double [] target);
int ntile = (int) targets[ntarget][TARGET_NTILE];
/// int ntile = (int) targets[ntarget][TARGET_NTILE];
// double [][] targets = targets60hz[nscene];
if (show_true_rng && (ntarget == matching_target)) {
// uas_pXpYDRange[3]
txt += String.format("\nTRNG%3.0f",uas_pXpYDRange[3]);
}
if (show_mismatch) {
txt += String.format("\nErr-%3.1f\nErr-%3.1f",
targets[ntarget][TARGET_MISMATCH_BEFORE],targets[ntarget][TARGET_MISMATCH_AFTER]);
/*
// if ((mismatch_ba != null)) {
double [] mm = mismatch_ba[nSeq][ntile];
if (mm != null) {
txt += String.format("\nErr-%3.1f\nErr-%3.1f", mm[0],mm[1]);
}
*/
}
ip.setColor(text_color);
ip.setFont(font_target);
......@@ -3438,6 +3480,30 @@ public class CuasMotion {
return imp;
}
private static int findMatchingTarget(
double [][] targets,
double [] uas_pXpYD,
double max_dist) {
double max_dist2 = max_dist * max_dist;
int best_index = -1;
double best_dist2 = max_dist2; // Double.NaN;
if ((targets == null) || (targets.length == 0)) {
return best_index;
}
for (int ntarg = 0; ntarg < targets.length; ntarg++) {
double dx = targets[ntarg][TARGET_X] - uas_pXpYD[0];
double dy = targets[ntarg][TARGET_Y] - uas_pXpYD[1];
double dist2 = dx*dx+dy*dy;
if (!(dist2 > best_dist2)) {
best_dist2 = dist2;
best_index = ntarg;
}
}
return best_index;
}
public static String getTargetText(
CLTParameters clt_parameters,
double [] target) {
......@@ -4629,7 +4695,10 @@ public class CuasMotion {
boolean target_by_horizon = clt_parameters.imp.cuas_by_horizon; // true;
double target_horizon= clt_parameters.imp.cuas_horizon; // a90
int target_type = clt_parameters.imp.cuas_target_type; //0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
int target_type = clt_parameters.imp.cuas_target_type; // 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
int known_type = clt_parameters.imp.cuas_known_type; // 2; // Target location matching UAS flight log: 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
double known_err = clt_parameters.imp.cuas_known_err; // 20; // Maximal distance between the detected target and UAS log position (in raw image pixels);
double input_range = clt_parameters.imp.cuas_input_range; // 5;
boolean scale2x = clt_parameters.imp.cuas_scale2x; //true;
boolean ra_background = clt_parameters.imp.cuas_ra_background; //true;
......@@ -4642,8 +4711,9 @@ public class CuasMotion {
boolean save_color = clt_parameters.imp.cuas_save_color; //true;
boolean save_video = clt_parameters.imp.cuas_save_video; //true;
boolean target_debug = clt_parameters.imp.cuas_target_debug; //true;
boolean show_true_rng = clt_parameters.imp.cuas_show_true_rng; // show true range (from the flight log)
boolean cuas_gaussian_ra = clt_parameters.imp.cuas_gaussian_ra; // use gaussian temporal Gaussian instead of running average
boolean cuas_gaussian_ra = clt_parameters.imp.cuas_gaussian_ra; // use gaussian temporal Gaussian instead of running average
int start_frame = 0;
int seq_length = corr_offset + corr_pairs;
......@@ -4831,15 +4901,17 @@ public class CuasMotion {
input_range, // final double input_range, // 5
scale2x, // boolean scale2x,
target_type, // final int target_type, // = 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
known_type, // final int known_type, // 2; // Target location matching UAS flight log: 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
known_err, // final double known_err, // 20; // Maximal distance between the detected target and UAS log position (in raw image pixels);
replaced_targets, // final float [][] fpixels,
targets60hz, // final double [][][] targets60hz,
show_true_rng, // final boolean show_true_rng,// show true range (from the flight log)
target_debug, // final boolean show_mismatch,
frame0, // final int frame0,
corr_inc, // final int frame_step,
cuasMotion.gpu_max_width, // final int width,
model_prefix+"-RGB"+ra_bg_suffix, // String title,
scene_titles, // String [] titles,
null, // diamond_path, // //String diamond_path, null - use resources
uasLogReader, // UasLogReader uasLogReader,
debugLevel); // final int debugLevel) {
// save tiff in model directory
......
......@@ -241,6 +241,16 @@ public class UasLogReader {
return getUasPxPyD(timestamp);
}
public double [] getUasPxPyDRange (
String stimestamp) {
double [] uasPxPyD = getUasPxPyD (stimestamp);
if (uasPxPyD == null) {
return null;
}
double range = getUasRange(stimestamp);
return new double[] {uasPxPyD[0],uasPxPyD[1],uasPxPyD[2], range};
}
public double [] getUasPxPyD (
double timestamp) {
......@@ -259,6 +269,18 @@ public class UasLogReader {
atr); // double [] camera_atr); // camera orientation relative to world frame
return pXpYD;
}
public double getUasRange(double timestamp) {
double [] ned = getNED(timestamp);
return Math.sqrt(ned[0]*ned[0]+ned[1]*ned[1]+ned[2]*ned[2]);
}
public double getUasRange(String stimestamp) {
double timestamp = Double.parseDouble(stimestamp.replace("_", "."));
return getUasRange(timestamp);
}
//
public static void testUasLogReader(
String filePath,
......
......@@ -783,6 +783,9 @@ min_str_neib_fpn 0.35
public boolean cuas_mask_round = true;
public int cuas_target_type = 0; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
public int cuas_known_type = 2; // 0 - unknown, 1 - known, 2 - friend, 3 - foe
public double cuas_known_err = 20; // pix, mark as "identified" when closer to the flight log position
public double cuas_input_range = 5;
public boolean cuas_scale2x = true;
public boolean cuas_ra_background = true; // apply running average to the background of the moving targets (false - use high-noise no-averaged images
......@@ -811,8 +814,7 @@ min_str_neib_fpn 0.35
public int cuas_py0 = 386; // pixel with known elevation
public double cuas_az0 = 201.5; // degrees for cuas_px0;
public double cuas_el0 = 0.0; // degrees for cuas_px0;
public boolean cuas_show_true_rng = true; // show true range (from the flight log)
public boolean cuas_debug = true; // save debug images (and show them if not in batch mode)
public boolean cuas_step_debug = true; // save debug images during per-step cuas recalculation (and show them if not in batch mode)
......@@ -2378,8 +2380,12 @@ min_str_neib_fpn 0.35
gd.addCheckbox ("Mask round", this.cuas_mask_round,
"Use round mask. Unchesked - use sharp square mask without any transition.");
gd.addNumericField("Targets icon type", this.cuas_target_type, 0,3,"",
gd.addNumericField("Unidentified targets icon type", this.cuas_target_type, 0,3,"",
"0 - unknown (dashed square), 1 - known (square), 2 - friend (circle), 3 - foe (diamond).");
gd.addNumericField("Identified Targets icon type", this.cuas_known_type, 0,3,"",
"0 - unknown (dashed square), 1 - known (square), 2 - friend (circle), 3 - foe (diamond).");
gd.addNumericField("Maximal distance from log position", this.cuas_known_err, 5,8,"pix",
"Maximal distance between the detected target and UAS log position (in raw image pixels).");
gd.addNumericField("Image range", this.cuas_input_range, 5,8,"10mK",
"Dispaly pixel values range (1.0 ~= 10 mK).");
......@@ -2435,6 +2441,8 @@ min_str_neib_fpn 0.35
"Azimuth corresponding to the known pixel X.");
gd.addNumericField("Known pixel azimuth", this.cuas_el0, 5,8,"degree",
"Elevation corresponding to the known pixel Y.");
gd.addCheckbox ("Show true range", this.cuas_show_true_rng,
"Show range true from the UAS log.");
gd.addMessage("=== Debug ===");
gd.addCheckbox ("Save/show debug images", this.cuas_debug,
......@@ -3467,6 +3475,9 @@ min_str_neib_fpn 0.35
this.cuas_mask_blur = gd.getNextNumber();
this.cuas_mask_round = gd.getNextBoolean();
this.cuas_target_type= (int) gd.getNextNumber();
this.cuas_known_type= (int) gd.getNextNumber();
this.cuas_known_err= gd.getNextNumber();
this.cuas_input_range = gd.getNextNumber();
this.cuas_scale2x = gd.getNextBoolean();
this.cuas_ra_background = gd.getNextBoolean();
......@@ -3501,6 +3512,7 @@ min_str_neib_fpn 0.35
this.cuas_py0 = (int) gd.getNextNumber();
this.cuas_az0 = gd.getNextNumber();
this.cuas_el0 = gd.getNextNumber();
this.cuas_show_true_rng = gd.getNextBoolean();
this.cuas_debug = gd.getNextBoolean();
this.cuas_step_debug = gd.getNextBoolean();
......@@ -4455,6 +4467,9 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_mask_blur", this.cuas_mask_blur+""); // double
properties.setProperty(prefix+"cuas_mask_round", this.cuas_mask_round+""); // boolean
properties.setProperty(prefix+"cuas_target_type", this.cuas_target_type+""); // int
properties.setProperty(prefix+"cuas_known_type", this.cuas_known_type+""); // int
properties.setProperty(prefix+"cuas_known_err", this.cuas_known_err+""); // double
properties.setProperty(prefix+"cuas_input_range", this.cuas_input_range+""); // double
properties.setProperty(prefix+"cuas_scale2x", this.cuas_scale2x+""); // boolean
properties.setProperty(prefix+"cuas_ra_background", this.cuas_ra_background+""); // boolean
......@@ -4479,11 +4494,12 @@ min_str_neib_fpn 0.35
properties.setProperty(prefix+"cuas_font_name", this.cuas_font_name+""); // String
properties.setProperty(prefix+"cuas_font_size", this.cuas_font_size+""); // int
properties.setProperty(prefix+"cuas_font_type", this.cuas_font_type+""); // int
properties.setProperty(prefix+"cuas_ifov", this.cuas_ifov+""); // double
properties.setProperty(prefix+"cuas_px0", this.cuas_px0+""); // int
properties.setProperty(prefix+"cuas_py0", this.cuas_py0+""); // int
properties.setProperty(prefix+"cuas_az0", this.cuas_az0+""); // double
properties.setProperty(prefix+"cuas_el0", this.cuas_el0+""); // double
properties.setProperty(prefix+"cuas_ifov", this.cuas_ifov+""); // double
properties.setProperty(prefix+"cuas_px0", this.cuas_px0+""); // int
properties.setProperty(prefix+"cuas_py0", this.cuas_py0+""); // int
properties.setProperty(prefix+"cuas_az0", this.cuas_az0+""); // double
properties.setProperty(prefix+"cuas_el0", this.cuas_el0+""); // double
properties.setProperty(prefix+"cuas_show_true_rng", this.cuas_show_true_rng+""); // boolean
properties.setProperty(prefix+"cuas_debug", this.cuas_debug+""); // boolean
properties.setProperty(prefix+"cuas_step_debug", this.cuas_step_debug+""); // boolean
......@@ -5411,6 +5427,9 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_mask_blur")!=null) this.cuas_mask_blur=Double.parseDouble(properties.getProperty(prefix+"cuas_mask_blur"));
if (properties.getProperty(prefix+"cuas_mask_round")!=null) this.cuas_mask_round=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_mask_round"));
if (properties.getProperty(prefix+"cuas_target_type")!=null) this.cuas_target_type=Integer.parseInt(properties.getProperty(prefix+"cuas_target_type"));
if (properties.getProperty(prefix+"cuas_known_type")!=null) this.cuas_known_type=Integer.parseInt(properties.getProperty(prefix+"cuas_known_type"));
if (properties.getProperty(prefix+"cuas_known_err")!=null) this.cuas_known_err=Double.parseDouble(properties.getProperty(prefix+"cuas_known_err"));
if (properties.getProperty(prefix+"cuas_input_range")!=null) this.cuas_input_range=Double.parseDouble(properties.getProperty(prefix+"cuas_input_range"));
if (properties.getProperty(prefix+"cuas_scale2x")!=null) this.cuas_scale2x=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_scale2x"));
if (properties.getProperty(prefix+"cuas_ra_background")!=null) this.cuas_ra_background=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_ra_background"));
......@@ -5440,6 +5459,7 @@ min_str_neib_fpn 0.35
if (properties.getProperty(prefix+"cuas_py0")!=null) this.cuas_py0=Integer.parseInt(properties.getProperty(prefix+"cuas_py0"));
if (properties.getProperty(prefix+"cuas_az0")!=null) this.cuas_az0=Double.parseDouble(properties.getProperty(prefix+"cuas_az0"));
if (properties.getProperty(prefix+"cuas_el0")!=null) this.cuas_el0=Double.parseDouble(properties.getProperty(prefix+"cuas_el0"));
if (properties.getProperty(prefix+"cuas_show_true_rng")!=null) this.cuas_show_true_rng=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_show_true_rng"));
if (properties.getProperty(prefix+"cuas_debug")!=null) this.cuas_debug=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_debug"));
if (properties.getProperty(prefix+"cuas_step_debug")!=null) this.cuas_step_debug=Boolean.parseBoolean(properties.getProperty(prefix+"cuas_step_debug"));
......@@ -6366,6 +6386,9 @@ min_str_neib_fpn 0.35
imp.cuas_mask_blur = this.cuas_mask_blur;
imp.cuas_mask_round = this.cuas_mask_round;
imp.cuas_target_type= this.cuas_target_type;
imp.cuas_known_type= this.cuas_known_type;
imp.cuas_known_err= this.cuas_known_err;
imp.cuas_input_range = this.cuas_input_range;
imp.cuas_scale2x = this.cuas_scale2x;
imp.cuas_ra_background = this.cuas_ra_background;
......@@ -6392,6 +6415,7 @@ min_str_neib_fpn 0.35
imp.cuas_py0 = this.cuas_py0;
imp.cuas_az0 = this.cuas_az0;
imp.cuas_el0 = this.cuas_el0;
imp.cuas_show_true_rng = this.cuas_show_true_rng;
imp.cuas_debug = this.cuas_debug;
imp.cuas_step_debug = this.cuas_step_debug;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment