Reset/Match 3d buttons working
This commit is contained in:
@@ -57,36 +57,40 @@ Cube::~Cube(void)
|
||||
|
||||
void Cube::initialize(Base::Vector3d r, Base::Vector3d rr, Base::Vector3d l, Base::Vector3d lr,
|
||||
Base::Vector3d f, Base::Vector3d fr, Base::Vector3d k, Base::Vector3d kr, //k for bacK (rear)
|
||||
Base::Vector3d t, Base::Vector3d tr, Base::Vector3d b, Base::Vector3d br)
|
||||
Base::Vector3d t, Base::Vector3d tr, Base::Vector3d b, Base::Vector3d br,
|
||||
Base::Vector3d fbl, Base::Vector3d fblr, Base::Vector3d fbr, Base::Vector3d fbrr,
|
||||
Base::Vector3d ftl, Base::Vector3d ftlr, Base::Vector3d ftr, Base::Vector3d ftrr)
|
||||
{
|
||||
Base::Console().Message("TRACE - Cube::init()\n");
|
||||
//Base::Vector3d FTR = f+t+r;
|
||||
//Base::Vector3d FTL = f+t-r;
|
||||
//Base::Vector3d FBL = f-t-r;
|
||||
//Base::Vector3d FBR = -f-t-r;
|
||||
m_mapFrameDir.clear();
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("Bottom", b));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("Front" , f));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("Left" , l));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("Rear" , k));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("Right" , r));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("Top" , t));
|
||||
// m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopRight" , b));
|
||||
// m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopLeft" , b));
|
||||
// m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomLeft" , b));
|
||||
// m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomRight", b));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomLeft" , fbl));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomRight", fbr));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopLeft" , ftl));
|
||||
m_mapFrameDir.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopRight" , ftr));
|
||||
|
||||
m_mapFrameRot.clear();
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("Bottom", br));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("Front" , fr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("Left" , lr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("Rear" , kr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("Right" , rr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("Top" , tr));
|
||||
// m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopRight" , br));
|
||||
// m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopLeft" , br));
|
||||
// m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomLeft" , br));
|
||||
// m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomRight", br));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopRight" , ftrr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontTopLeft" , ftlr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomLeft" , fblr));
|
||||
m_mapFrameRot.insert(std::map<std::string, Base::Vector3d>::value_type("FrontBottomRight", fbrr));
|
||||
|
||||
m_conTab.initialize(); //all possible configs of ABCDEF in RightFrontTopLeftRearBottom
|
||||
m_conTab.initialize(); //all possible configs of ABCDEF in RightFrontTopLeftRearBottom order
|
||||
// m_conTab.dump("conTab after init");
|
||||
}
|
||||
|
||||
@@ -98,8 +102,10 @@ void Cube::rotateUp()
|
||||
shiftFrame("Rear" , "Bottom");
|
||||
shiftFrame("Top" , "Rear");
|
||||
restoreSwap("Top");
|
||||
|
||||
|
||||
updateIsoDirs();
|
||||
updateRotsToConfig(getCurrConfig());
|
||||
updateIsoRots();
|
||||
dump("RotateUp(board after Rot update)");
|
||||
// dumpState("RotateUp(after update)");
|
||||
//validateBoard();
|
||||
@@ -116,7 +122,9 @@ void Cube::rotateDown()
|
||||
shiftFrame("Bottom" , "Rear");
|
||||
restoreSwap("Bottom");
|
||||
|
||||
updateIsoDirs();
|
||||
updateRotsToConfig(getCurrConfig());
|
||||
updateIsoRots();
|
||||
dump("RotateDown(board after Rot update)");
|
||||
// dumpState("RotateDown(after update)");
|
||||
//validateBoard();
|
||||
@@ -134,7 +142,9 @@ void Cube::rotateRight()
|
||||
shiftFrame("Right" , "Rear");
|
||||
restoreSwap("Right");
|
||||
|
||||
updateIsoDirs();
|
||||
updateRotsToConfig(getCurrConfig());
|
||||
updateIsoRots();
|
||||
dump("RotateRight(board after Rot update)");
|
||||
// bool boardState = validateBoard(getCurrConfig());
|
||||
// Base::Console().Message("TRACE - Cube::rotateRight - boardState: %d\n",boardState);
|
||||
@@ -150,7 +160,9 @@ void Cube::rotateLeft()
|
||||
shiftFrame("Left" , "Rear");
|
||||
restoreSwap("Left");
|
||||
|
||||
updateIsoDirs();
|
||||
updateRotsToConfig(getCurrConfig());
|
||||
updateIsoRots();
|
||||
dump("RotateLeft(board after Rot updates)");
|
||||
// dumpState("RotateLeft(after update)");
|
||||
|
||||
@@ -165,7 +177,9 @@ void Cube::spinCCW()
|
||||
shiftFrame("Top" , "Left");
|
||||
restoreSwap("Top");
|
||||
|
||||
updateIsoDirs();
|
||||
updateRotsToConfig(getCurrConfig());
|
||||
updateIsoRots();
|
||||
dump("SpinCCW(board after Rot updates)");
|
||||
// dumpState("SpinCCW(after update)");
|
||||
}
|
||||
@@ -179,11 +193,37 @@ void Cube::spinCW()
|
||||
shiftFrame("Top", "Right");
|
||||
restoreSwap("Top");
|
||||
|
||||
updateIsoDirs();
|
||||
updateRotsToConfig(getCurrConfig());
|
||||
updateIsoRots();
|
||||
dump("spinCW(board after Rot updates)");
|
||||
// dumpState("SpinCW(after update)");
|
||||
}
|
||||
|
||||
void Cube::updateIsoDirs()
|
||||
{
|
||||
Base::Vector3d flb = getFront() + getLeft() + getBottom();
|
||||
Base::Vector3d frb = getFront() + getRight() + getBottom();
|
||||
Base::Vector3d flt = getFront() + getLeft() + getTop();
|
||||
Base::Vector3d frt = getFront() + getRight() + getTop();
|
||||
m_mapFrameDir.at("FrontBottomLeft") = flb;
|
||||
m_mapFrameDir.at("FrontBottomRight") = frb;
|
||||
m_mapFrameDir.at("FrontTopLeft") = flt;
|
||||
m_mapFrameDir.at("FrontTopRight") = frt;
|
||||
}
|
||||
|
||||
void Cube::updateIsoRots()
|
||||
{
|
||||
Base::Vector3d flb = getFrontRot() + getLeftRot() + getBottomRot();
|
||||
Base::Vector3d frb = getFrontRot() + getRightRot() + getBottomRot();
|
||||
Base::Vector3d flt = getFrontRot() + getLeftRot() + getTopRot();
|
||||
Base::Vector3d frt = getFrontRot() + getRightRot() + getTopRot();
|
||||
m_mapFrameRot.at("FrontBottomLeft") = flb;
|
||||
m_mapFrameRot.at("FrontBottomRight") = frb;
|
||||
m_mapFrameRot.at("FrontTopLeft") = flt;
|
||||
m_mapFrameRot.at("FrontTopRight") = frt;
|
||||
}
|
||||
|
||||
std::string Cube::dirToView(Base::Vector3d v)
|
||||
{
|
||||
std::string result;
|
||||
@@ -198,7 +238,7 @@ std::string Cube::dirToView(Base::Vector3d v)
|
||||
|
||||
void Cube::updateDirsToConfig(std::string cfg)
|
||||
{
|
||||
// Base::Console().Message("TRACE - Cube::updateDirs(%s) \n",cfg.c_str());
|
||||
Base::Console().Message("TRACE - Cube::updateDirs(%s) \n",cfg.c_str());
|
||||
Base::Vector3d boardValue = m_conTab.getDirItem(cfg,"Front");
|
||||
m_mapFrameDir.at("Front") = boardValue;
|
||||
boardValue = m_conTab.getDirItem(cfg,"Rear");
|
||||
@@ -356,6 +396,25 @@ void Cube::dump(char * title)
|
||||
Base::Console().Message("Cube: Board State - config: %s Dirs: %s Rots: %s\n",boardConfig.c_str(),boardDirs.c_str(),boardRots.c_str());
|
||||
}
|
||||
|
||||
//dumps the current "board" -ISO's
|
||||
void Cube::dumpISO(char * title)
|
||||
{
|
||||
//FBL/FBR/FTL/FTR
|
||||
//
|
||||
Base::Console().Message("Cube ISO: %s\n", title);
|
||||
Base::Console().Message("FBL: %s/%s \nFBR: %s/%s \nFTL: %s/%s\nFTR: %s/%s\n",
|
||||
DrawUtil::formatVector(getFBL()).c_str(),DrawUtil::formatVector(getFBLRot()).c_str(),
|
||||
DrawUtil::formatVector(getFBR()).c_str(),DrawUtil::formatVector(getFBRRot()).c_str(),
|
||||
DrawUtil::formatVector(getFTL()).c_str(),DrawUtil::formatVector(getFTLRot()).c_str(),
|
||||
DrawUtil::formatVector(getFTR()).c_str(),DrawUtil::formatVector(getFTRRot()).c_str());
|
||||
std::string boardDirs = dirToView(getBottom()) + dirToView(getFront()) + dirToView(getLeft()) +
|
||||
dirToView(getRear()) + dirToView(getRight()) + dirToView(getTop());
|
||||
std::string boardRots = dirToView(getBottomRot()) + dirToView(getFrontRot()) + dirToView(getLeftRot()) +
|
||||
dirToView(getRearRot()) + dirToView(getRightRot()) + dirToView(getTopRot());
|
||||
std::string boardConfig = dirToView(getFront()) + dirToView(getRight());
|
||||
Base::Console().Message("Cube: Board State - config: %s Dirs: %s Rots: %s\n",boardConfig.c_str(),boardDirs.c_str(),boardRots.c_str());
|
||||
}
|
||||
|
||||
//dumps the config state
|
||||
void Cube::dumpState(char* title)
|
||||
{
|
||||
@@ -413,6 +472,35 @@ Base::Vector3d Cube::getBottom()
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFBL()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameDir.at("FrontBottomLeft");
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFBR()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameDir.at("FrontBottomRight");
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFTL()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameDir.at("FrontTopLeft");
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFTR()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameDir.at("FrontTopRight");
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
Base::Vector3d Cube::getRightRot()
|
||||
{
|
||||
std::string myFace = "D";
|
||||
@@ -461,6 +549,34 @@ Base::Vector3d Cube::getBottomRot()
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFBLRot()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameRot.at("FrontBottomLeft");
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFBRRot()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameRot.at("FrontBottomRight");
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFTLRot()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameRot.at("FrontTopLeft");
|
||||
return result;
|
||||
}
|
||||
|
||||
Base::Vector3d Cube::getFTRRot()
|
||||
{
|
||||
Base::Vector3d result;
|
||||
result = m_mapFrameRot.at("FrontTopRight");
|
||||
return result;
|
||||
}
|
||||
|
||||
//********************************************************
|
||||
configLine::configLine(int ln, std::string ky, Base::Vector3d b, Base::Vector3d f,
|
||||
Base::Vector3d l, Base::Vector3d k,
|
||||
@@ -578,6 +694,8 @@ void configTable::addRotItem(configLine cl)
|
||||
void configTable::initialize(void)
|
||||
{
|
||||
Base::Console().Message("TRACE - cT::initialize()\n");
|
||||
dirs.clear();
|
||||
rots.clear();
|
||||
configLine cl;
|
||||
//Rotations
|
||||
#include "rots.cpp"
|
||||
|
||||
@@ -82,9 +82,11 @@ public:
|
||||
Cube();
|
||||
~Cube();
|
||||
|
||||
void initialize(Base::Vector3d r, Base::Vector3d rr, Base::Vector3d l, Base::Vector3d lr,
|
||||
Base::Vector3d f, Base::Vector3d fr, Base::Vector3d k, Base::Vector3d kr, //k for bacK (rear)
|
||||
Base::Vector3d t, Base::Vector3d tr, Base::Vector3d b, Base::Vector3d br);
|
||||
void initialize(Base::Vector3d r, Base::Vector3d rr, Base::Vector3d l, Base::Vector3d lr,
|
||||
Base::Vector3d f, Base::Vector3d fr, Base::Vector3d k, Base::Vector3d kr, //k for bacK (rear)
|
||||
Base::Vector3d t, Base::Vector3d tr, Base::Vector3d b, Base::Vector3d br,
|
||||
Base::Vector3d fbl, Base::Vector3d fblr, Base::Vector3d fbr, Base::Vector3d fbrr,
|
||||
Base::Vector3d ftl, Base::Vector3d ftlr, Base::Vector3d ftr, Base::Vector3d ftrr);
|
||||
|
||||
|
||||
|
||||
@@ -94,6 +96,9 @@ public:
|
||||
void rotateLeft ();
|
||||
void spinCCW();
|
||||
void spinCW();
|
||||
|
||||
void updateIsoDirs();
|
||||
void updateIsoRots();
|
||||
|
||||
Base::Vector3d getRight();
|
||||
Base::Vector3d getFront();
|
||||
@@ -101,13 +106,22 @@ public:
|
||||
Base::Vector3d getLeft();
|
||||
Base::Vector3d getRear();
|
||||
Base::Vector3d getBottom();
|
||||
Base::Vector3d getFBL();
|
||||
Base::Vector3d getFBR();
|
||||
Base::Vector3d getFTL();
|
||||
Base::Vector3d getFTR();
|
||||
|
||||
Base::Vector3d getRightRot();
|
||||
Base::Vector3d getFrontRot();
|
||||
Base::Vector3d getTopRot();
|
||||
Base::Vector3d getLeftRot();
|
||||
Base::Vector3d getRearRot();
|
||||
Base::Vector3d getBottomRot();
|
||||
|
||||
Base::Vector3d getFBLRot();
|
||||
Base::Vector3d getFBRRot();
|
||||
Base::Vector3d getFTLRot();
|
||||
Base::Vector3d getFTRRot();
|
||||
|
||||
static std::string dirToView(Base::Vector3d v);
|
||||
std::string getBoardKey(void);
|
||||
void updateDirsToConfig(std::string cfg);
|
||||
@@ -116,6 +130,7 @@ public:
|
||||
std::string getCurrConfig(void);
|
||||
|
||||
void dump(char * title);
|
||||
void dumpISO(char * title);
|
||||
void dumpState(char * title);
|
||||
|
||||
private:
|
||||
|
||||
@@ -60,10 +60,11 @@ const std::map<std::string,Base::Vector3d> DrawProjGroup::m_frameToStdDir = {
|
||||
{ "Left", Base::Vector3d(-1, 0, 0) }, //left
|
||||
{ "Top", Base::Vector3d(0, 0, 1) }, //top
|
||||
{ "Bottom", Base::Vector3d(0, 0, -1) }, //bottom
|
||||
{ "FrontTopLeft", Base::Vector3d(-1,-1,1) }, //FTL
|
||||
{ "FrontTopRight", Base::Vector3d(1, -1, 1) }, //FTR
|
||||
{ "FrontBottomLeft", Base::Vector3d(-1, -1, -1) }, //FBL
|
||||
{ "FrontBottomRight", Base::Vector3d(1, -1, -1) }, //FBR
|
||||
{ "FrontBottomLeft", Base::Vector3d(-1, -1, -1) } }; //FBL
|
||||
{ "FrontTopLeft", Base::Vector3d(-1,-1,1) }, //FTL
|
||||
{ "FrontTopRight", Base::Vector3d(1, -1, 1) } //FTR
|
||||
};
|
||||
|
||||
const std::map<std::string,Base::Vector3d> DrawProjGroup::m_frameToStdRot = {
|
||||
{ "Front", Base::Vector3d(1, 0, 0) }, //front
|
||||
@@ -71,13 +72,69 @@ const std::map<std::string,Base::Vector3d> DrawProjGroup::m_frameToStdRot = {
|
||||
{ "Right", Base::Vector3d(0, -1, 0) }, //right this makes the first rendering correct, but
|
||||
{ "Left", Base::Vector3d(0, 1, 0) }, //left every 2nd subsequent rendering upside down (ie cube is incorrect)
|
||||
// { "Right", Base::Vector3d(0, 1, 0) }, //right this makes the first rendering upside down
|
||||
// { "Left", Base::Vector3d(0, -1, 0) }, //left but subsequent renderings right side up (ie cube is correct)
|
||||
// { "Left", Base::Vector3d(0, -1, 0) }, /left but subsequent renderings right side up (ie cube is correct)
|
||||
{ "Top", Base::Vector3d(1, 0, 0) }, //top
|
||||
{ "Bottom", Base::Vector3d(1, 0, 0) }, //bottom
|
||||
{ "FrontTopLeft", Base::Vector3d(-2, -1, 0.5) }, //FTL ???
|
||||
{ "FrontTopRight", Base::Vector3d(2, -1, 0.5) }, //FTR OK
|
||||
{ "FrontBottomRight", Base::Vector3d(2, -1, -0.5) }, //FBR probable
|
||||
{ "FrontBottomLeft", Base::Vector3d(-2, -1, -0.5) } }; //FBL ???
|
||||
{ "FrontBottomLeft", Base::Vector3d(2, -1, 0.5) }, //FBL LFB
|
||||
{ "FrontBottomRight", Base::Vector3d(2, -1, -0.5) }, //FBR RFB
|
||||
{ "FrontTopLeft", Base::Vector3d(2, -1, -0.5) }, //FTL LFT
|
||||
{ "FrontTopRight", Base::Vector3d(2, 1, 0.5) } //FTR RFT
|
||||
};
|
||||
|
||||
// map of front.dir+front.rot onto config
|
||||
const std::map<std::string,std::string> DrawProjGroup::m_dirRotToConfig = {
|
||||
{"AB","AB"},
|
||||
{"AC","AC"},
|
||||
{"AD","AD"},
|
||||
{"AE","AE"},
|
||||
{"BF","BA"},
|
||||
{"BC","BC"},
|
||||
{"BD","BD"},
|
||||
{"BA","BF"},
|
||||
{"CD","CA"},
|
||||
{"CB","CB"},
|
||||
{"CE","CE"},
|
||||
{"CA","CF"},
|
||||
{"DF","DA"},
|
||||
{"DB","DB"},
|
||||
{"DE","DE"},
|
||||
{"DC","DF"},
|
||||
{"EF","EA"},
|
||||
{"EC","EC"},
|
||||
{"ED","ED"},
|
||||
{"EA","EF"},
|
||||
{"FB","FB"},
|
||||
{"FF","FC"},
|
||||
{"FD","FD"},
|
||||
{"FE","FE"} };
|
||||
|
||||
// map frontDir + topDir onto config
|
||||
const std::map<std::string,std::string> DrawProjGroup::m_frontTopToConfig = {
|
||||
{ "AC" , "AB" },
|
||||
{ "AE" , "AC" },
|
||||
{ "AB" , "AD" },
|
||||
{ "AD" , "AE" },
|
||||
{ "BD" , "BA" },
|
||||
{ "BA" , "BC" },
|
||||
{ "BF" , "BD" },
|
||||
{ "BC" , "BF" },
|
||||
{ "CB" , "CA" },
|
||||
{ "CF" , "CB" },
|
||||
{ "CA" , "CE" },
|
||||
{ "CE" , "CF" },
|
||||
{ "DE" , "DA" },
|
||||
{ "DA" , "DB" },
|
||||
{ "DF" , "DE" },
|
||||
{ "DB" , "DF" },
|
||||
{ "EC" , "EA" },
|
||||
{ "EF" , "EC" },
|
||||
{ "EA" , "ED" },
|
||||
{ "ED" , "EF" },
|
||||
{ "FD" , "FB" },
|
||||
{ "FB" , "FC" },
|
||||
{ "FE" , "FD" },
|
||||
{ "FC" , "FE" } };
|
||||
|
||||
|
||||
PROPERTY_SOURCE(TechDraw::DrawProjGroup, TechDraw::DrawViewCollection)
|
||||
|
||||
@@ -96,10 +153,15 @@ DrawProjGroup::DrawProjGroup(void)
|
||||
ADD_PROPERTY_TYPE(spacingY, (15), agroup, App::Prop_None, "Vertical spacing between views");
|
||||
|
||||
m_cube = new Cube();
|
||||
// D/C/A/F/B/E/FBL/
|
||||
m_cube->initialize(m_frameToStdDir.at("Right"), m_frameToStdRot.at("Right"),
|
||||
m_frameToStdDir.at("Left"), m_frameToStdRot.at("Left"),
|
||||
m_frameToStdDir.at("Front"), m_frameToStdRot.at("Front"), m_frameToStdDir.at("Rear"), m_frameToStdRot.at("Rear"),
|
||||
m_frameToStdDir.at("Top"), m_frameToStdRot.at("Top"), m_frameToStdDir.at("Bottom"), m_frameToStdRot.at("Bottom"));
|
||||
m_frameToStdDir.at("Top"), m_frameToStdRot.at("Top"), m_frameToStdDir.at("Bottom"), m_frameToStdRot.at("Bottom"),
|
||||
m_frameToStdDir.at("FrontBottomLeft"), m_frameToStdRot.at("FrontBottomLeft"),
|
||||
m_frameToStdDir.at("FrontBottomRight"), m_frameToStdRot.at("FrontBottomRight"),
|
||||
m_frameToStdDir.at("FrontTopLeft"), m_frameToStdRot.at("FrontTopLeft"),
|
||||
m_frameToStdDir.at("FrontTopRight"), m_frameToStdRot.at("FrontTopRight") );
|
||||
}
|
||||
|
||||
DrawProjGroup::~DrawProjGroup()
|
||||
@@ -799,23 +861,23 @@ void DrawProjGroup::updateSecondaryDirs()
|
||||
break;
|
||||
}
|
||||
case FrontTopLeft : {
|
||||
newDir = m_frameToStdDir.at("FrontTopLeft");
|
||||
newAxis = m_frameToStdRot.at("FrontTopLeft");
|
||||
newDir = m_cube->getFTL();
|
||||
newAxis = m_cube->getFTLRot();
|
||||
break;
|
||||
}
|
||||
case FrontTopRight : {
|
||||
newDir = m_frameToStdDir.at("FrontTopRight");
|
||||
newAxis = m_frameToStdRot.at("FrontTopRight");
|
||||
newDir = m_cube->getFTR();
|
||||
newAxis = m_cube->getFTRRot();
|
||||
break;
|
||||
}
|
||||
case FrontBottomLeft : {
|
||||
newDir = m_frameToStdDir.at("FrontBottomLeft");
|
||||
newAxis = m_frameToStdRot.at("FrontBottomLeft");
|
||||
newDir = m_cube->getFBL();
|
||||
newAxis = m_cube->getFBLRot();
|
||||
break;
|
||||
}
|
||||
case FrontBottomRight : {
|
||||
newDir = m_frameToStdDir.at("FrontBottomRight");
|
||||
newAxis = m_frameToStdRot.at("FrontBottomRight");
|
||||
newDir = m_cube->getFBR();
|
||||
newAxis = m_cube->getFBRRot();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
@@ -887,8 +949,51 @@ void DrawProjGroup::spinCCW()
|
||||
updateSecondaryDirs();
|
||||
}
|
||||
|
||||
//*************************************
|
||||
// find a config with Dir as Front view and Up as Top view
|
||||
void DrawProjGroup::setTable(Base::Vector3d dir, Base::Vector3d up)
|
||||
{
|
||||
|
||||
std::string viewFront = Cube::dirToView(dir); //convert to closest basis vector
|
||||
std::string viewUp = Cube::dirToView(up); //convert to closest basis vector
|
||||
std::string altKey = viewFront + viewUp;
|
||||
std::string config;
|
||||
Base::Console().Message("TRACE - DPG::setTable - using altKey: %s\n", altKey.c_str());
|
||||
try {
|
||||
config = m_frontTopToConfig.at(altKey);
|
||||
}
|
||||
// catch (const std::out_of_range& oor) {
|
||||
// std::cerr << "Out of Range error: " << oor.what() << '\n';
|
||||
// }
|
||||
catch (...) {
|
||||
Base::Console().Error("Error - DPG::setTable - no match for alt config: %s\n",altKey.c_str());
|
||||
return;
|
||||
}
|
||||
Base::Console().Message("TRACE - DPG::setTable - found config: %s **\n",config.c_str());
|
||||
m_cube->updateDirsToConfig(config);
|
||||
m_cube->updateRotsToConfig(config);
|
||||
updateSecondaryDirs();
|
||||
|
||||
}
|
||||
|
||||
void DrawProjGroup::resetTable(void)
|
||||
{
|
||||
m_cube->initialize(m_frameToStdDir.at("Right"), m_frameToStdRot.at("Right"),
|
||||
m_frameToStdDir.at("Left"), m_frameToStdRot.at("Left"),
|
||||
m_frameToStdDir.at("Front"), m_frameToStdRot.at("Front"), m_frameToStdDir.at("Rear"), m_frameToStdRot.at("Rear"),
|
||||
m_frameToStdDir.at("Top"), m_frameToStdRot.at("Top"), m_frameToStdDir.at("Bottom"), m_frameToStdRot.at("Bottom"),
|
||||
m_frameToStdDir.at("FrontBottomLeft"), m_frameToStdRot.at("FrontBottomLeft"),
|
||||
m_frameToStdDir.at("FrontBottomRight"), m_frameToStdRot.at("FrontBottomRight"),
|
||||
m_frameToStdDir.at("FrontTopLeft"), m_frameToStdRot.at("FrontTopLeft"),
|
||||
m_frameToStdDir.at("FrontTopRight"), m_frameToStdRot.at("FrontTopRight") );
|
||||
updateSecondaryDirs();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//*************************************
|
||||
//obs??
|
||||
//! rebuild view direction map from existing DPGI's if possible or from Anchor
|
||||
void DrawProjGroup::onDocumentRestored()
|
||||
{
|
||||
|
||||
@@ -125,6 +125,9 @@ public:
|
||||
void rotateDown(void);
|
||||
void spinCW(void);
|
||||
void spinCCW(void);
|
||||
|
||||
void setTable(Base::Vector3d dir, Base::Vector3d rot);
|
||||
void resetTable(void);
|
||||
|
||||
protected:
|
||||
void onChanged(const App::Property* prop);
|
||||
@@ -166,7 +169,8 @@ protected:
|
||||
TechDraw::Cube* m_cube;
|
||||
static const std::map<std::string,Base::Vector3d> m_frameToStdDir; //for initializing cube and
|
||||
static const std::map<std::string,Base::Vector3d> m_frameToStdRot; //creating DPGI's
|
||||
|
||||
static const std::map<std::string,std::string> m_dirRotToConfig;
|
||||
static const std::map<std::string,std::string> m_frontTopToConfig;
|
||||
};
|
||||
|
||||
} //namespace TechDraw
|
||||
|
||||
@@ -15,8 +15,9 @@
|
||||
cl = configLine( 5 , "BA", Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0),
|
||||
Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0) );
|
||||
addDirItem(cl);
|
||||
cl = configLine( 6 , "BC", Base::Vector3d(0,0,-1), Base::Vector3d(0,0,1), Base::Vector3d(1,0,0),
|
||||
Base::Vector3d(0,0,-1), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1) );
|
||||
//BC = FBDECA
|
||||
cl = configLine( 6 , "BC", Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), Base::Vector3d(1,0,0),
|
||||
Base::Vector3d(0,0,-1), Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0) );
|
||||
addDirItem(cl);
|
||||
cl = configLine( 7 , "BD", Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0),
|
||||
Base::Vector3d(0,0,-1), Base::Vector3d(1,0,0), Base::Vector3d(0,1,0) );
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
cl = configLine( 18 , "EC", Base::Vector3d(-1,0,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1),
|
||||
Base::Vector3d(1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0) );
|
||||
addRotItem(cl);
|
||||
cl = configLine( 19 , "ED", Base::Vector3d(1,0,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1),
|
||||
cl = configLine( 19 , "ED", Base::Vector3d(1,0,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1),
|
||||
Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(1,0,0) );
|
||||
addRotItem(cl);
|
||||
cl = configLine( 20 , "EF", Base::Vector3d(0,-1,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1),
|
||||
|
||||
@@ -176,30 +176,27 @@ void TaskProjGroup::rotateButtonClicked(void)
|
||||
|
||||
void TaskProjGroup::on3DClicked(void)
|
||||
{
|
||||
Base::Vector3d dir3D = get3DViewDir();
|
||||
std::pair<Base::Vector3d,Base::Vector3d> dir3D = get3DViewDir();
|
||||
Base::Vector3d dir = dir3D.first;
|
||||
Base::Vector3d up = dir3D.second;
|
||||
Base::Console().Message("TRACE - TPG::on3DClicked - dir: %s up: %s\n",
|
||||
DrawUtil::formatVector(dir).c_str(),DrawUtil::formatVector(up).c_str());
|
||||
|
||||
TechDraw::DrawProjGroupItem* front = multiView->getProjItem("Front");
|
||||
if (front) {
|
||||
front->Direction.setValue(dir3D);
|
||||
//front->OrientBasis.setValue(rot3D);
|
||||
//front->recomputeFeature();
|
||||
if (front) { //why "if front"???
|
||||
Base::Console().Message("TRACE - TPG::on3DClicked - front found\n");
|
||||
multiView->setTable(dir,up);
|
||||
setUiPrimary();
|
||||
//multiView->makeInitialMap(front);
|
||||
//multiView->updateSecondaryDirs();
|
||||
Gui::Command::updateActive();
|
||||
}
|
||||
}
|
||||
|
||||
void TaskProjGroup::onResetClicked(void)
|
||||
{
|
||||
// Base::Vector3d dir = multiView->nameToStdDirection("Front");
|
||||
|
||||
TechDraw::DrawProjGroupItem* front = multiView->getProjItem("Front");
|
||||
if (front) {
|
||||
//multiView->reset()
|
||||
// front->recomputeFeature();
|
||||
multiView->resetTable();
|
||||
setUiPrimary();
|
||||
// multiView->makeInitialMap(front);
|
||||
// multiView->updateSecondaryDirs();
|
||||
Gui::Command::updateActive();
|
||||
}
|
||||
}
|
||||
@@ -414,9 +411,13 @@ void TaskProjGroup::setUiPrimary()
|
||||
ui->lePrimary->setText(formatVector(frontDir));
|
||||
}
|
||||
|
||||
Base::Vector3d TaskProjGroup::get3DViewDir()
|
||||
|
||||
//should return a configuration? frontdir,upDir mapped in DPG
|
||||
std::pair<Base::Vector3d,Base::Vector3d> TaskProjGroup::get3DViewDir()
|
||||
{
|
||||
std::pair<Base::Vector3d,Base::Vector3d> result;
|
||||
Base::Vector3d viewDir(0.0,-1.0,0.0); //default to front
|
||||
Base::Vector3d viewUp(0.0,0.0,1.0); //default to top
|
||||
std::list<MDIView*> mdis = Gui::Application::Instance->activeDocument()->getMDIViews();
|
||||
Gui::View3DInventor *view;
|
||||
Gui::View3DInventorViewer *viewer = nullptr;
|
||||
@@ -429,13 +430,21 @@ Base::Vector3d TaskProjGroup::get3DViewDir()
|
||||
}
|
||||
if (!viewer) {
|
||||
Base::Console().Log("LOG - TaskProjGroup could not find a 3D viewer\n");
|
||||
return viewDir;
|
||||
return std::make_pair( viewDir, viewUp);
|
||||
}
|
||||
|
||||
SbVec3f dvec = viewer->getViewDirection();
|
||||
SbVec3f dvec = viewer->getViewDirection();
|
||||
SbVec3f upvec = viewer->getUpDirection();
|
||||
|
||||
viewDir = Base::Vector3d(dvec[0], dvec[1], dvec[2]);
|
||||
viewDir = viewDir * -1; //Inventor coords are opposite projection direction coords
|
||||
return viewDir;
|
||||
viewUp = Base::Vector3d(upvec[0],upvec[1],upvec[2]);
|
||||
Base::Console().Message("TRACE - TPG::get3dview - Viewer dir: %s Viewer Up: %s \n",
|
||||
DrawUtil::formatVector(viewDir).c_str(),DrawUtil::formatVector(viewUp).c_str());
|
||||
viewDir *= -1.0; //Inventor dir is opposite TD dir, Inventor up is same as TD up
|
||||
Base::Console().Message("TRACE - TPG::get3dview - (adjusted) Viewer dir: %s Viewer Up: %s \n",
|
||||
DrawUtil::formatVector(viewDir).c_str(),DrawUtil::formatVector(viewUp).c_str());
|
||||
result = std::make_pair(viewDir,viewUp);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ protected:
|
||||
* between checkboxes and viewToggled()
|
||||
*/
|
||||
void setupViewCheckboxes(bool addConnections = false);
|
||||
Base::Vector3d get3DViewDir(void);
|
||||
std::pair<Base::Vector3d,Base::Vector3d> get3DViewDir(void);
|
||||
void setUiPrimary(void);
|
||||
QString formatVector(Base::Vector3d v);
|
||||
|
||||
|
||||
@@ -343,10 +343,10 @@
|
||||
<item row="2" column="0">
|
||||
<widget class="QPushButton" name="butReset">
|
||||
<property name="toolTip">
|
||||
<string>Set Primary Direction to 3D Front</string>
|
||||
<string>Return Primary Direction to Initial Value</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>3D Front</string>
|
||||
<string>Reset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -618,6 +618,19 @@ height: 24px;
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_6">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="butCCWRotate">
|
||||
<property name="toolTip">
|
||||
|
||||
Reference in New Issue
Block a user