Skip to content

Commit

Permalink
replace proCenter by midPos and add in effects table ui
Browse files Browse the repository at this point in the history
LedFixture
- adjustSizeAndPixel: use midPosAdjusted
- projectAndMap: set midPosAdjusted and use for distance from point like calculations

LedsLed
- add Leds.midPoint

LedModEffects
- add fxMiddle to UI
- loop right mouse click positions: set fxMiddle

LedModProjections
- MultiplyProjection: adjust midPos
- DistanceFromPointProjection: don't define own center/midpos
  • Loading branch information
ewoudwijma committed Jun 25, 2024
1 parent ab3a0b5 commit 0fa3306
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 27 deletions.
9 changes: 4 additions & 5 deletions src/App/LedFixture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ void Fixture::projectAndMap() {
//set start and endPos between bounderies of fixture
Coord3D startPosAdjusted = (leds->startPos).minimum(fixSize - Coord3D{1,1,1}) * 10;
Coord3D endPosAdjusted = (leds->endPos).minimum(fixSize - Coord3D{1,1,1}) * 10;
Coord3D midPosAdjusted = (leds->midPos).minimum(fixSize - Coord3D{1,1,1}); //not * 10

// mdl->setValue("fxStart", startPosAdjusted/10, rowNr); //rowNr
// mdl->setValue("fxEnd", endPosAdjusted/10, rowNr); //rowNr
Expand All @@ -108,9 +109,7 @@ void Fixture::projectAndMap() {

mdl->getValueRowNr = rowNr; //run projection functions in the right rowNr context

Coord3D proCenter = mdl->getValue("proCenter", rowNr);

if (projection) projection->adjustSizeAndPixel(sizeAdjusted, pixelAdjusted, proCenter);
if (projection) projection->adjustSizeAndPixel(sizeAdjusted, pixelAdjusted, midPosAdjusted);

if (leds->size == Coord3D{0,0,0}) { // first
ppf("projectAndMap first leds[%d] size:%d,%d,%d s:%d,%d,%d e:%d,%d,%d\n", rowNr, sizeAdjusted.x, sizeAdjusted.y, sizeAdjusted.z, startPosAdjusted.x, startPosAdjusted.y, startPosAdjusted.z, endPosAdjusted.x, endPosAdjusted.y, endPosAdjusted.z);
Expand All @@ -123,7 +122,7 @@ void Fixture::projectAndMap() {
switch (leds->effectDimension) {
case _1D: //effectDimension 1DxD
if (leds->size == Coord3D{0,0,0}) { // first
leds->size.x = sizeAdjusted.distance(proCenter);
leds->size.x = sizeAdjusted.distance(midPosAdjusted);
leds->size.y = 1;
leds->size.z = 1;
}
Expand All @@ -132,7 +131,7 @@ void Fixture::projectAndMap() {

if (projection) projection->adjustMapped(mapped, sizeAdjusted, (pixel - startPosAdjusted)/10);

mapped.x = mapped.distance(proCenter);
mapped.x = mapped.distance(midPosAdjusted);
mapped.y = 0;
mapped.z = 0;

Expand Down
2 changes: 1 addition & 1 deletion src/App/LedFixture.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class Projection {
virtual const char * tags() {return "";}
// virtual uint8_t dim() {return _1D;};

virtual void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &proCenter) {}
virtual void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &midPosAdjusted) {}

virtual void adjustMapped(Coord3D &mapped, Coord3D sizeAdjusted, Coord3D pixelAdjusted) {}

Expand Down
1 change: 1 addition & 0 deletions src/App/LedLeds.h
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,7 @@ class Leds {
unsigned8 projectionDimension = -1;

Coord3D startPos = {0,0,0}, endPos = {UINT16_MAX,UINT16_MAX,UINT16_MAX}; //default
Coord3D midPos = {0,0,0};
#ifdef STARBASE_USERMOD_MPU6050
bool proGyro = false;
#endif
Expand Down
30 changes: 29 additions & 1 deletion src/App/LedModEffects.h
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,34 @@ class LedModEffects:public SysModule {
default: return false;
}});

ui->initCoord3D(tableVar, "fxMiddle", {0,0,0}, 0, NUM_LEDS_Max, false, [this](JsonObject var, unsigned8 rowNr, unsigned8 funType) { switch (funType) { //varFun
case onSetValue:
for (forUnsigned8 rowNr = 0; rowNr < fixture.listOfLeds.size(); rowNr++) {
ppf("fxMiddle[%d] onSetValue %d,%d,%d\n", rowNr, fixture.listOfLeds[rowNr]->midPos.x, fixture.listOfLeds[rowNr]->midPos.y, fixture.listOfLeds[rowNr]->midPos.z);
mdl->setValue(var, fixture.listOfLeds[rowNr]->midPos, rowNr);
}
return true;
case onUI:
ui->setLabel(var, "Middle");
ui->setComment(var, "In pixels");
return true;
case onChange:
if (rowNr < fixture.listOfLeds.size()) {
fixture.listOfLeds[rowNr]->midPos = mdl->getValue(var, rowNr).as<Coord3D>();

ppf("fxStart[%d] chFun %d,%d,%d\n", rowNr, fixture.listOfLeds[rowNr]->midPos.x, fixture.listOfLeds[rowNr]->midPos.y, fixture.listOfLeds[rowNr]->midPos.z);

fixture.listOfLeds[rowNr]->fadeToBlackBy();
fixture.listOfLeds[rowNr]->doMap = true;
fixture.doMap = true;
}
else {
ppf("fxStart[%d] chfun rownr not in range > %d\n", rowNr, fixture.listOfLeds.size());
}
return true;
default: return false;
}});

ui->initCoord3D(tableVar, "fxEnd", {8,8,0}, 0, NUM_LEDS_Max, false, [this](JsonObject var, unsigned8 rowNr, unsigned8 funType) { switch (funType) { //varFun
case onSetValue:
for (forUnsigned8 rowNr = 0; rowNr < fixture.listOfLeds.size(); rowNr++) {
Expand Down Expand Up @@ -444,7 +472,7 @@ class LedModEffects:public SysModule {
token = strtok(NULL, ",");
if (token != NULL) newCoord->z = atoi(token) / 10; else newCoord->z = 0;

mdl->setValue(isStart?"fxStart":isEnd?"fxEnd":"proCenter", *newCoord, 0); //assuming row 0 for the moment
mdl->setValue(isStart?"fxStart":isEnd?"fxEnd":"fxMiddle", *newCoord, 0); //assuming row 0 for the moment

fixture.listOfLeds[rowNr]->doMap = true; //recalc projection
fixture.doMap = true;
Expand Down
40 changes: 20 additions & 20 deletions src/App/LedProjections.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ class MultiplyProjection: public Projection {

public: //to use in Preset1Projection

void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &proCenter) {
void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &midPosAdjusted) {
Coord3D proMulti = mdl->getValue("proMulti"); //, rowNr
//promulti can be 0,0,0 but /= protects from /div0
sizeAdjusted /= proMulti; sizeAdjusted = sizeAdjusted.maximum(Coord3D{1,1,1}); //size min 1,1,1
proCenter /= proMulti;
midPosAdjusted /= proMulti;
pixelAdjusted = pixelAdjusted%sizeAdjusted; // pixel % size
// ppf("Multiply %d,%d,%d\n", leds->size.x, leds->size.y, leds->size.z);
}
Expand Down Expand Up @@ -151,21 +151,21 @@ class DistanceFromPointProjection: public Projection {
public: //to use in Preset1Projection

void controls(Leds &leds, JsonObject parentVar) {
ui->initCoord3D(parentVar, "proCenter", {8,8,8}, 0, NUM_LEDS_Max, false, [&leds](JsonObject var, unsigned8 rowNr, unsigned8 funType) { switch (funType) { //varFun
case onUI:
ui->setLabel(var, "Center");
return true;
case onChange:
//initiate projectAndMap
ppf("proCenter %d %d\n", rowNr, leds.fixture->listOfLeds.size());
if (rowNr < leds.fixture->listOfLeds.size()) {
leds.fixture->listOfLeds[rowNr]->doMap = true; //Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.
leds.fixture->doMap = true;
}
// ui->setLabel(var, "Size");
return true;
default: return false;
}});
// ui->initCoord3D(parentVar, "proCenter", {8,8,8}, 0, NUM_LEDS_Max, false, [&leds](JsonObject var, unsigned8 rowNr, unsigned8 funType) { switch (funType) { //varFun
// case onUI:
// ui->setLabel(var, "Center");
// return true;
// case onChange:
// //initiate projectAndMap
// ppf("proCenter %d %d\n", rowNr, leds.fixture->listOfLeds.size());
// if (rowNr < leds.fixture->listOfLeds.size()) {
// leds.fixture->listOfLeds[rowNr]->doMap = true; //Guru Meditation Error: Core 1 panic'ed (StoreProhibited). Exception was unhandled.
// leds.fixture->doMap = true;
// }
// // ui->setLabel(var, "Size");
// return true;
// default: return false;
// }});
}
}; //DistanceFromPointProjection

Expand All @@ -174,9 +174,9 @@ class Preset1Projection: public Projection {
//uint8_t dim() {return _1D;} // every projection should work for all D
const char * tags() {return "💫";}

void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &proCenter) {
void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &midPosAdjusted) {
MultiplyProjection mp;
mp.adjustSizeAndPixel(sizeAdjusted, pixelAdjusted, proCenter);
mp.adjustSizeAndPixel(sizeAdjusted, pixelAdjusted, midPosAdjusted);
}

void adjustMapped(Coord3D &mapped, Coord3D sizeAdjusted, Coord3D pixelAdjusted) {
Expand Down Expand Up @@ -259,7 +259,7 @@ class PinwheelProjection: public Projection {
const char * name() {return "Pinwheel WIP";}
const char * tags() {return "💡";}

void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &proCenter) {
void adjustSizeAndPixel(Coord3D &sizeAdjusted, Coord3D &pixelAdjusted, Coord3D &midPosAdjusted) {
sizeAdjusted.x = mdl->getValue("Petals");
sizeAdjusted.y = 1;
sizeAdjusted.z = 1;
Expand Down

0 comments on commit 0fa3306

Please sign in to comment.