mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-09 04:56:53 +03:00
Nightly
- implementation mirroring - index.hthml
This commit is contained in:
13
README.md
13
README.md
@@ -29,17 +29,24 @@ A 3d-printable housing can be found here: https://www.thingiverse.com/thing:4571
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
##### Rolling - (2020-09-11)
|
##### Rolling - (2020-09-12)
|
||||||
|
|
||||||
|
* Option for mirroring input image
|
||||||
|
* Update index.html
|
||||||
|
|
||||||
|
2020-09-11
|
||||||
|
|
||||||
* Improved handling of PreValue
|
* Improved handling of PreValue
|
||||||
* Improved error handling for automated processflow (reduce spontaneous reboot - see Issues)
|
|
||||||
|
* Improved error handling for automated process flow (reduce spontaneous reboot - see Issues)
|
||||||
|
|
||||||
* Support of spaces in WLan SSID or password
|
* Support of spaces in WLan SSID or password
|
||||||
|
|
||||||
2020-09-10
|
2020-09-10
|
||||||
|
|
||||||
* Optimization of "DELETE ALL" - Autoreload of directory after delete, protection of wlan.ini
|
* Optimization of "DELETE ALL" - Autoreload of directory after delete, protection of wlan.ini
|
||||||
|
|
||||||
* Internal Optimization (removal of unnessary error messages, restructure CTfLiteClass)
|
* Internal Optimization (removal of unnecessary error messages, restructure CTfLiteClass)
|
||||||
|
|
||||||
* additional parameter in `wasserzahler.html?noerror=true` to suppress an potential error message in case of consitency check (is equal to `ErrorMessage` = False in `config.ini`)
|
* additional parameter in `wasserzahler.html?noerror=true` to suppress an potential error message in case of consitency check (is equal to `ErrorMessage` = False in `config.ini`)
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ ClassFlowAlignment::ClassFlowAlignment()
|
|||||||
anz_ref = 0;
|
anz_ref = 0;
|
||||||
suchex = 40;
|
suchex = 40;
|
||||||
suchey = 40;
|
suchey = 40;
|
||||||
|
initialmirror = false;
|
||||||
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
}
|
}
|
||||||
@@ -18,6 +19,7 @@ ClassFlowAlignment::ClassFlowAlignment(std::vector<ClassFlow*>* lfc)
|
|||||||
anz_ref = 0;
|
anz_ref = 0;
|
||||||
suchex = 40;
|
suchex = 40;
|
||||||
suchey = 40;
|
suchey = 40;
|
||||||
|
initialmirror = false;
|
||||||
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
||||||
ListFlowControll = lfc;
|
ListFlowControll = lfc;
|
||||||
}
|
}
|
||||||
@@ -38,7 +40,12 @@ bool ClassFlowAlignment::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
{
|
{
|
||||||
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
||||||
if ((zerlegt[0] == "InitalRotate") && (zerlegt.size() > 1))
|
if ((zerlegt[0] == "InitialMirror") && (zerlegt.size() > 1))
|
||||||
|
{
|
||||||
|
if (toUpper(zerlegt[1]) == "TRUE")
|
||||||
|
initialmirror = true;
|
||||||
|
}
|
||||||
|
if (((zerlegt[0] == "InitalRotate") || (zerlegt[0] == "InitialRotate")) && (zerlegt.size() > 1))
|
||||||
{
|
{
|
||||||
this->initalrotate = std::stod(zerlegt[1]);
|
this->initalrotate = std::stod(zerlegt[1]);
|
||||||
}
|
}
|
||||||
@@ -80,27 +87,39 @@ bool ClassFlowAlignment::doFlow(string time)
|
|||||||
string output3 = "/sdcard/img_tmp/rot_roi.jpg";
|
string output3 = "/sdcard/img_tmp/rot_roi.jpg";
|
||||||
string output2 = "/sdcard/img_tmp/alg.jpg";
|
string output2 = "/sdcard/img_tmp/alg.jpg";
|
||||||
string output4 = "/sdcard/img_tmp/alg_roi.jpg";
|
string output4 = "/sdcard/img_tmp/alg_roi.jpg";
|
||||||
|
string output1 = "/sdcard/img_tmp/mirror.jpg";
|
||||||
|
|
||||||
input = FormatFileName(input);
|
input = FormatFileName(input);
|
||||||
output = FormatFileName(output);
|
output = FormatFileName(output);
|
||||||
output2 = FormatFileName(output2);
|
output2 = FormatFileName(output2);
|
||||||
|
|
||||||
|
|
||||||
|
if (initialmirror){
|
||||||
|
CRotate *rt;
|
||||||
|
rt = new CRotate(input);
|
||||||
|
if (!rt->ImageOkay()){
|
||||||
|
LogFile.WriteToFile("ClassFlowAlignment::doFlow CRotate Inital Mirror raw.jpg not okay!");
|
||||||
|
delete rt;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
printf("do mirror\n");
|
||||||
|
rt->Mirror();
|
||||||
|
rt->SaveToFile(output1);
|
||||||
|
input = output1;
|
||||||
|
delete rt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (initalrotate != 0)
|
if (initalrotate != 0)
|
||||||
{
|
{
|
||||||
CRotate *rt;
|
CRotate *rt = NULL;
|
||||||
|
printf("Load rotationfile: %s\n", input.c_str());
|
||||||
rt = new CRotate(input);
|
rt = new CRotate(input);
|
||||||
if (!rt->ImageOkay()){
|
if (!rt->ImageOkay()){
|
||||||
LogFile.WriteToFile("ClassFlowAlignment::doFlow CRotate raw.jpg not okay!");
|
LogFile.WriteToFile("ClassFlowAlignment::doFlow CRotate raw.jpg not okay!");
|
||||||
delete rt;
|
delete rt;
|
||||||
LogFile.WriteToFile("ClassFlowAlignment::doFlow 1x reload.");
|
|
||||||
rt = new CRotate(input);
|
|
||||||
if (!rt->ImageOkay()){
|
|
||||||
LogFile.WriteToFile("ClassFlowAlignment::doFlow Reload auch nicht erfolgreich!");
|
|
||||||
delete rt;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
rt->Rotate(this->initalrotate);
|
rt->Rotate(this->initalrotate);
|
||||||
rt->SaveToFile(output);
|
rt->SaveToFile(output);
|
||||||
delete rt;
|
delete rt;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ class ClassFlowAlignment :
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
float initalrotate;
|
float initalrotate;
|
||||||
|
bool initialmirror;
|
||||||
string reffilename[2];
|
string reffilename[2];
|
||||||
int ref_x[2], ref_y[2];
|
int ref_x[2], ref_y[2];
|
||||||
int anz_ref;
|
int anz_ref;
|
||||||
|
|||||||
@@ -12,7 +12,21 @@
|
|||||||
|
|
||||||
string ClassFlowPostProcessing::GetPreValue()
|
string ClassFlowPostProcessing::GetPreValue()
|
||||||
{
|
{
|
||||||
return to_string(PreValue);
|
std::string result;
|
||||||
|
result = to_string(PreValue);
|
||||||
|
|
||||||
|
for (int i = 0; i < ListFlowControll->size(); ++i)
|
||||||
|
{
|
||||||
|
if (((*ListFlowControll)[i])->name().compare("ClassFlowAnalog") == 0)
|
||||||
|
{
|
||||||
|
int AnzahlNachkomma = ((ClassFlowAnalog*)(*ListFlowControll)[i])->AnzahlROIs();
|
||||||
|
std::stringstream stream;
|
||||||
|
stream << std::fixed << std::setprecision(AnzahlNachkomma) << PreValue;
|
||||||
|
result = stream.str();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClassFlowPostProcessing::LoadPreValue(void)
|
bool ClassFlowPostProcessing::LoadPreValue(void)
|
||||||
|
|||||||
@@ -44,6 +44,32 @@ void CResizeImage::Resize(int _new_dx, int _new_dy)
|
|||||||
stbi_image_free(odata);
|
stbi_image_free(odata);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CRotate::Mirror(){
|
||||||
|
int memsize = this->width * this->height * this->channels;
|
||||||
|
uint8_t* odata = (unsigned char*)GET_MEMORY(memsize);
|
||||||
|
|
||||||
|
int x_source, y_source;
|
||||||
|
stbi_uc* p_target;
|
||||||
|
stbi_uc* p_source;
|
||||||
|
|
||||||
|
for (int x = 0; x < this->width; ++x)
|
||||||
|
for (int y = 0; y < this->height; ++y)
|
||||||
|
{
|
||||||
|
p_target = odata + (this->channels * (y * this->width + x));
|
||||||
|
|
||||||
|
x_source = this->width - x;
|
||||||
|
y_source = y;
|
||||||
|
|
||||||
|
p_source = this->rgb_image + (this->channels * (y_source * this->width + x_source));
|
||||||
|
for (int channels = 0; channels < this->channels; ++channels)
|
||||||
|
p_target[channels] = p_source[channels];
|
||||||
|
}
|
||||||
|
|
||||||
|
// memcpy(this->rgb_image, odata, memsize);
|
||||||
|
this->memCopy(odata, this->rgb_image, memsize);
|
||||||
|
stbi_image_free(odata);
|
||||||
|
}
|
||||||
|
|
||||||
void CRotate::Rotate(float _angle, int _centerx, int _centery)
|
void CRotate::Rotate(float _angle, int _centerx, int _centery)
|
||||||
{
|
{
|
||||||
float m[2][3];
|
float m[2][3];
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ class CRotate: public CImageBasis
|
|||||||
void Rotate(float _angle);
|
void Rotate(float _angle);
|
||||||
void Rotate(float _angle, int _centerx, int _centery);
|
void Rotate(float _angle, int _centerx, int _centery);
|
||||||
void Translate(int _dx, int _dy);
|
void Translate(int _dx, int _dy);
|
||||||
|
void Mirror();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -397,7 +397,7 @@ esp_err_t handler_prevalue(httpd_req_t *req)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(_size) == 0)
|
if (strlen(_size) == 0)
|
||||||
zw = "Actual PreValue: " + tfliteflow.GetPrevalue();
|
zw = tfliteflow.GetPrevalue();
|
||||||
else
|
else
|
||||||
zw = "SetPrevalue to " + tfliteflow.UpdatePrevalue(_size);
|
zw = "SetPrevalue to " + tfliteflow.UpdatePrevalue(_size);
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -26,6 +26,17 @@
|
|||||||
<input type="submit" id="take" onclick="doTake()" value="Make new raw image (raw.jpg)">
|
<input type="submit" id="take" onclick="doTake()" value="Make new raw image (raw.jpg)">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<label for="mirror">Mirror image</label>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="mirror" name="mirror" value="1" onchange="drawRotated()">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
Pre-rotate Angle
|
Pre-rotate Angle
|
||||||
@@ -85,10 +96,13 @@
|
|||||||
url = basepath + "/fileserver/img_tmp/raw.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);
|
url = basepath + "/fileserver/img_tmp/raw.jpg" + "?session=" + Math.floor((Math.random() * 1000000) + 1);
|
||||||
document.getElementById("finerotate").value = 0;
|
document.getElementById("finerotate").value = 0;
|
||||||
document.getElementById("prerotateangle").value = getPreRotate();
|
document.getElementById("prerotateangle").value = getPreRotate();
|
||||||
|
document.getElementById("mirror").checked = getMirror();
|
||||||
document.getElementById("finerotate").disabled = false;
|
document.getElementById("finerotate").disabled = false;
|
||||||
document.getElementById("prerotateangle").disabled = false;
|
document.getElementById("prerotateangle").disabled = false;
|
||||||
document.getElementById("updatereferenceimage").disabled = false;
|
document.getElementById("updatereferenceimage").disabled = false;
|
||||||
document.getElementById("take").disabled = false;
|
document.getElementById("take").disabled = false;
|
||||||
|
document.getElementById("mirror").disabled = false;
|
||||||
|
|
||||||
// document.getElementById("ButtonRotate").disabled = false;
|
// document.getElementById("ButtonRotate").disabled = false;
|
||||||
isActReference = false;
|
isActReference = false;
|
||||||
loadCanvas(url);
|
loadCanvas(url);
|
||||||
@@ -103,7 +117,8 @@
|
|||||||
document.getElementById("prerotateangle").disabled = true;
|
document.getElementById("prerotateangle").disabled = true;
|
||||||
document.getElementById("updatereferenceimage").disabled = true;
|
document.getElementById("updatereferenceimage").disabled = true;
|
||||||
document.getElementById("take").disabled = true;
|
document.getElementById("take").disabled = true;
|
||||||
// document.getElementById("ButtonRotate").disabled = true;
|
document.getElementById("mirror").disabled = true;
|
||||||
|
|
||||||
isActReference = true;
|
isActReference = true;
|
||||||
loadCanvas(url);
|
loadCanvas(url);
|
||||||
ParseConfig();
|
ParseConfig();
|
||||||
@@ -122,7 +137,8 @@
|
|||||||
function SaveReference(){
|
function SaveReference(){
|
||||||
if (confirm("Are you sure you want to update the reference image?")) {
|
if (confirm("Are you sure you want to update the reference image?")) {
|
||||||
setPreRotate(document.getElementById("prerotateangle").value);
|
setPreRotate(document.getElementById("prerotateangle").value);
|
||||||
UpdateConfigFile(basepath);
|
setMirror(document.getElementById("mirror").checked);
|
||||||
|
UpdateConfigFileReferenceChange(basepath);
|
||||||
var canvas = document.getElementById("canvas");
|
var canvas = document.getElementById("canvas");
|
||||||
drawRotated(false);
|
drawRotated(false);
|
||||||
SaveCanvasToImage(canvas, "/config/reference.jpg", true, basepath);
|
SaveCanvasToImage(canvas, "/config/reference.jpg", true, basepath);
|
||||||
@@ -162,12 +178,15 @@
|
|||||||
canvas.addEventListener('mousemove', mouseMove, false);
|
canvas.addEventListener('mousemove', mouseMove, false);
|
||||||
basepath = getbasepath();
|
basepath = getbasepath();
|
||||||
loadConfig(basepath);
|
loadConfig(basepath);
|
||||||
|
ParseConfig();
|
||||||
showReference();
|
showReference();
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawRotated(_grid = true){
|
function drawRotated(_grid = true){
|
||||||
finerot= parseFloat(document.getElementById("finerotate").value);
|
finerot= parseFloat(document.getElementById("finerotate").value);
|
||||||
prerot = parseFloat(document.getElementById("prerotateangle").value);
|
prerot = parseFloat(document.getElementById("prerotateangle").value);
|
||||||
|
mirror = document.getElementById("mirror").checked;
|
||||||
|
|
||||||
if (finerot == 1) {
|
if (finerot == 1) {
|
||||||
prerot+=1
|
prerot+=1
|
||||||
finerot = 0
|
finerot = 0
|
||||||
@@ -185,9 +204,19 @@
|
|||||||
|
|
||||||
context.clearRect(0,0,imageObj.width,imageObj.height);
|
context.clearRect(0,0,imageObj.width,imageObj.height);
|
||||||
context.save();
|
context.save();
|
||||||
|
|
||||||
|
if (mirror) {
|
||||||
|
context.scale(-1, 1);
|
||||||
|
context.translate(-imageObj.width/2,imageObj.height/2);
|
||||||
|
context.rotate(-degrees*Math.PI/180);
|
||||||
|
context.drawImage(imageObj, imageObj.width/2,-imageObj.height/2, -imageObj.width, imageObj.height);
|
||||||
|
}
|
||||||
|
else {
|
||||||
context.translate(imageObj.width/2,imageObj.height/2);
|
context.translate(imageObj.width/2,imageObj.height/2);
|
||||||
context.rotate(degrees*Math.PI/180);
|
context.rotate(degrees*Math.PI/180);
|
||||||
context.drawImage(imageObj,-imageObj.width/2,-imageObj.height/2);
|
context.drawImage(imageObj,-imageObj.width/2,-imageObj.height/2);
|
||||||
|
}
|
||||||
|
|
||||||
context.restore();
|
context.restore();
|
||||||
if (_grid == true && !isActReference){
|
if (_grid == true && !isActReference){
|
||||||
drawGrid();
|
drawGrid();
|
||||||
|
|||||||
@@ -38,7 +38,13 @@ function ParseConfigAlignment(_aktline){
|
|||||||
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
||||||
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
||||||
if ((linesplit[0] == "InitalRotate") && (linesplit.length > 1))
|
if ((linesplit[0].toUpperCase() == "INITIALMIRROR") && (linesplit.length > 1))
|
||||||
|
{
|
||||||
|
initalrotate["mirror"] = linesplit[1].toUpperCase().localeCompare("TRUE") == 0;
|
||||||
|
initalrotate["pos_config_mirror"] = _aktline;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (((linesplit[0].toUpperCase() == "INITALROTATE") || (linesplit[0].toUpperCase() == "INITIALROTATE")) && (linesplit.length > 1))
|
||||||
{
|
{
|
||||||
initalrotate["angle"] = parseInt(linesplit[1]);
|
initalrotate["angle"] = parseInt(linesplit[1]);
|
||||||
initalrotate["pos_config"] = _aktline;
|
initalrotate["pos_config"] = _aktline;
|
||||||
@@ -159,16 +165,16 @@ function ParseConfig() {
|
|||||||
var aktline = 0;
|
var aktline = 0;
|
||||||
|
|
||||||
while (aktline < config_split.length){
|
while (aktline < config_split.length){
|
||||||
if (config_split[aktline].trim() == "[Alignment]") {
|
if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") {
|
||||||
aktline = ParseConfigAlignment(aktline);
|
aktline = ParseConfigAlignment(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (config_split[aktline].trim() == "[Digits]") {
|
if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") {
|
||||||
aktline = ParseConfigDigit(aktline);
|
aktline = ParseConfigDigit(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config_split[aktline].trim() == "[Analog]") {
|
if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") {
|
||||||
aktline = ParseConfigAnalog(aktline);
|
aktline = ParseConfigAnalog(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -185,6 +191,17 @@ function setPreRotate(_prerotate){
|
|||||||
initalrotate["angle"] = _prerotate;
|
initalrotate["angle"] = _prerotate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getMirror(){
|
||||||
|
if (initalrotate.hasOwnProperty("mirror")) {
|
||||||
|
return initalrotate["mirror"];
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setMirror(_mirror){
|
||||||
|
initalrotate["mirror"] = _mirror;
|
||||||
|
}
|
||||||
|
|
||||||
function SaveCanvasToImage(_canvas, _filename, _delete = true, _basepath = ""){
|
function SaveCanvasToImage(_canvas, _filename, _delete = true, _basepath = ""){
|
||||||
var JPEG_QUALITY=0.8;
|
var JPEG_QUALITY=0.8;
|
||||||
var dataUrl = _canvas.toDataURL('image/jpeg', JPEG_QUALITY);
|
var dataUrl = _canvas.toDataURL('image/jpeg', JPEG_QUALITY);
|
||||||
@@ -198,7 +215,11 @@ function SaveCanvasToImage(_canvas, _filename, _delete = true, _basepath = ""){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SaveConfigToServer(_basepath){
|
function SaveConfigToServer(_basepath){
|
||||||
FileDeleteOnServer("/config/config.ini", _basepath);
|
// leere Zeilen am Ende löschen
|
||||||
|
var zw = config_split.length - 1;
|
||||||
|
while (config_split[zw] == "") {
|
||||||
|
config_split.pop();
|
||||||
|
}
|
||||||
|
|
||||||
var config_gesamt = "";
|
var config_gesamt = "";
|
||||||
for (var i = 0; i < config_split.length; ++i)
|
for (var i = 0; i < config_split.length; ++i)
|
||||||
@@ -206,20 +227,60 @@ function SaveConfigToServer(_basepath){
|
|||||||
config_gesamt = config_gesamt + config_split[i] + "\n";
|
config_gesamt = config_gesamt + config_split[i] + "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FileDeleteOnServer("/config/config.ini", _basepath);
|
||||||
|
|
||||||
FileSendContent(config_gesamt, "/config/config.ini", _basepath);
|
FileSendContent(config_gesamt, "/config/config.ini", _basepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function UpdateConfigFile(_basepath){
|
function UpdateConfigFileReferenceChange(_basepath){
|
||||||
for (var _index = 0; _index < ref.length; ++_index){
|
for (var _index = 0; _index < ref.length; ++_index){
|
||||||
var zeile = ref[_index]["name"] + " " + ref[_index]["x"] + ", " + ref[_index]["y"];
|
var zeile = ref[_index]["name"] + " " + ref[_index]["x"] + ", " + ref[_index]["y"];
|
||||||
var _pos = ref[_index]["pos_ref"];
|
var _pos = ref[_index]["pos_ref"];
|
||||||
config_split[_pos] = zeile;
|
config_split[_pos] = zeile;
|
||||||
}
|
}
|
||||||
|
|
||||||
zeile = "InitalRotate=" + initalrotate["angle"];
|
zeile = "InitialRotate = " + initalrotate["angle"];
|
||||||
var _pos = initalrotate["pos_config"];
|
var _pos = initalrotate["pos_config"];
|
||||||
config_split[_pos] = zeile;
|
config_split[_pos] = zeile;
|
||||||
|
|
||||||
|
var mirror = false;
|
||||||
|
if (initalrotate.hasOwnProperty("mirror")) {
|
||||||
|
mirror = initalrotate["mirror"];
|
||||||
|
}
|
||||||
|
var mirror_pos = -1;
|
||||||
|
if (initalrotate.hasOwnProperty("pos_config_mirror")) {
|
||||||
|
mirror_pos = initalrotate["pos_config_mirror"];
|
||||||
|
}
|
||||||
|
if (mirror_pos > -1) {
|
||||||
|
if (mirror) {
|
||||||
|
config_split[mirror_pos] = "InitialMirror = True";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
config_split[mirror_pos] = "InitialMirror = False";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (mirror) { // neue Zeile muss an der richtigen Stelle eingefügt werden - hier direct nach [Alignment]
|
||||||
|
var aktline = 0;
|
||||||
|
|
||||||
|
while (aktline < config_split.length){
|
||||||
|
if (config_split[aktline].trim() == "[Alignment]") {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aktline++
|
||||||
|
}
|
||||||
|
|
||||||
|
// fuege neue Zeile in config_split ein
|
||||||
|
var zw = config_split[config_split.length-1];
|
||||||
|
config_split.push(zw);
|
||||||
|
for (var j = config_split.length-2; j > aktline + 1; --j){
|
||||||
|
config_split[j] = config_split[j-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
config_split[aktline + 1] = "InitialMirror = True"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SaveConfigToServer(_basepath);
|
SaveConfigToServer(_basepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ function includeHTML() {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="th">
|
<th class="th">
|
||||||
Current Value:
|
Checked Value:
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
Reference in New Issue
Block a user