diff --git a/src/Mod/TechDraw/App/Cube.cpp b/src/Mod/TechDraw/App/Cube.cpp index 43774940f1..14d4d93e17 100644 --- a/src/Mod/TechDraw/App/Cube.cpp +++ b/src/Mod/TechDraw/App/Cube.cpp @@ -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::value_type("Bottom", b)); m_mapFrameDir.insert(std::map::value_type("Front" , f)); m_mapFrameDir.insert(std::map::value_type("Left" , l)); m_mapFrameDir.insert(std::map::value_type("Rear" , k)); m_mapFrameDir.insert(std::map::value_type("Right" , r)); m_mapFrameDir.insert(std::map::value_type("Top" , t)); -// m_mapFrameDir.insert(std::map::value_type("FrontTopRight" , b)); -// m_mapFrameDir.insert(std::map::value_type("FrontTopLeft" , b)); -// m_mapFrameDir.insert(std::map::value_type("FrontBottomLeft" , b)); -// m_mapFrameDir.insert(std::map::value_type("FrontBottomRight", b)); + m_mapFrameDir.insert(std::map::value_type("FrontBottomLeft" , fbl)); + m_mapFrameDir.insert(std::map::value_type("FrontBottomRight", fbr)); + m_mapFrameDir.insert(std::map::value_type("FrontTopLeft" , ftl)); + m_mapFrameDir.insert(std::map::value_type("FrontTopRight" , ftr)); + m_mapFrameRot.clear(); m_mapFrameRot.insert(std::map::value_type("Bottom", br)); m_mapFrameRot.insert(std::map::value_type("Front" , fr)); m_mapFrameRot.insert(std::map::value_type("Left" , lr)); m_mapFrameRot.insert(std::map::value_type("Rear" , kr)); m_mapFrameRot.insert(std::map::value_type("Right" , rr)); m_mapFrameRot.insert(std::map::value_type("Top" , tr)); -// m_mapFrameRot.insert(std::map::value_type("FrontTopRight" , br)); -// m_mapFrameRot.insert(std::map::value_type("FrontTopLeft" , br)); -// m_mapFrameRot.insert(std::map::value_type("FrontBottomLeft" , br)); -// m_mapFrameRot.insert(std::map::value_type("FrontBottomRight", br)); + m_mapFrameRot.insert(std::map::value_type("FrontTopRight" , ftrr)); + m_mapFrameRot.insert(std::map::value_type("FrontTopLeft" , ftlr)); + m_mapFrameRot.insert(std::map::value_type("FrontBottomLeft" , fblr)); + m_mapFrameRot.insert(std::map::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" diff --git a/src/Mod/TechDraw/App/Cube.h b/src/Mod/TechDraw/App/Cube.h index 5ef5584689..f9c06c46e9 100644 --- a/src/Mod/TechDraw/App/Cube.h +++ b/src/Mod/TechDraw/App/Cube.h @@ -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: diff --git a/src/Mod/TechDraw/App/DrawProjGroup.cpp b/src/Mod/TechDraw/App/DrawProjGroup.cpp index fc31ed6df5..180965e120 100644 --- a/src/Mod/TechDraw/App/DrawProjGroup.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroup.cpp @@ -60,10 +60,11 @@ const std::map 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 DrawProjGroup::m_frameToStdRot = { { "Front", Base::Vector3d(1, 0, 0) }, //front @@ -71,13 +72,69 @@ const std::map 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 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 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() { diff --git a/src/Mod/TechDraw/App/DrawProjGroup.h b/src/Mod/TechDraw/App/DrawProjGroup.h index b900f0cd1a..d0ee8a6901 100644 --- a/src/Mod/TechDraw/App/DrawProjGroup.h +++ b/src/Mod/TechDraw/App/DrawProjGroup.h @@ -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 m_frameToStdDir; //for initializing cube and static const std::map m_frameToStdRot; //creating DPGI's - + static const std::map m_dirRotToConfig; + static const std::map m_frontTopToConfig; }; } //namespace TechDraw diff --git a/src/Mod/TechDraw/App/dirs.cpp b/src/Mod/TechDraw/App/dirs.cpp index 8289daafbd..29653f70f4 100644 --- a/src/Mod/TechDraw/App/dirs.cpp +++ b/src/Mod/TechDraw/App/dirs.cpp @@ -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) ); diff --git a/src/Mod/TechDraw/App/rots.cpp b/src/Mod/TechDraw/App/rots.cpp index 2e782ca08e..6baf962d9c 100644 --- a/src/Mod/TechDraw/App/rots.cpp +++ b/src/Mod/TechDraw/App/rots.cpp @@ -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), diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp index 8f98c15c0b..3013817189 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp @@ -176,30 +176,27 @@ void TaskProjGroup::rotateButtonClicked(void) void TaskProjGroup::on3DClicked(void) { - Base::Vector3d dir3D = get3DViewDir(); + std::pair 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 TaskProjGroup::get3DViewDir() { + std::pair 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 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; } diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.h b/src/Mod/TechDraw/Gui/TaskProjGroup.h index 1ea902590c..4407e8014f 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.h +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.h @@ -91,7 +91,7 @@ protected: * between checkboxes and viewToggled() */ void setupViewCheckboxes(bool addConnections = false); - Base::Vector3d get3DViewDir(void); + std::pair get3DViewDir(void); void setUiPrimary(void); QString formatVector(Base::Vector3d v); diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.ui b/src/Mod/TechDraw/Gui/TaskProjGroup.ui index beebff70e0..0a95b29407 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.ui +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.ui @@ -343,10 +343,10 @@ - Set Primary Direction to 3D Front + Return Primary Direction to Initial Value - 3D Front + Reset @@ -618,6 +618,19 @@ height: 24px; + + + + Qt::Horizontal + + + + 40 + 20 + + + +