diff --git a/src/Mod/TechDraw/App/Cube.cpp b/src/Mod/TechDraw/App/Cube.cpp index 14d4d93e178e..892ad229a2f4 100644 --- a/src/Mod/TechDraw/App/Cube.cpp +++ b/src/Mod/TechDraw/App/Cube.cpp @@ -27,7 +27,6 @@ #endif #include -//#include #include "DrawUtil.h" #include "Cube.h" @@ -55,17 +54,14 @@ Cube::~Cube(void) { } +// D/C/A/F/B/E/FBL/FBR/FTL/FTR 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 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; + //these frames are only used at DPGI creation time? m_mapFrameDir.clear(); m_mapFrameDir.insert(std::map::value_type("Bottom", b)); m_mapFrameDir.insert(std::map::value_type("Front" , f)); @@ -90,8 +86,7 @@ void Cube::initialize(Base::Vector3d r, Base::Vector3d rr, Base::Vector3d l, Bas 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 order -// m_conTab.dump("conTab after init"); + m_conTab.initialize(); //all possible configs of ABCDEF in bottom/front/left/(k)rear/right/top order } void Cube::rotateUp() @@ -103,18 +98,13 @@ void Cube::rotateUp() shiftFrame("Top" , "Rear"); restoreSwap("Top"); - updateIsoDirs(); - updateRotsToConfig(getCurrConfig()); - updateIsoRots(); - dump("RotateUp(board after Rot update)"); -// dumpState("RotateUp(after update)"); - //validateBoard(); - + updateIsoDirs(); //calculatge iso directions from ortho dirs + updateRotsToConfig(getCurrConfig()); //update rotations for ortho views from config table + updateIsoRots(); //calculate iso rotations from iso/ortho dirs } void Cube::rotateDown() { - //Front -> Bottom -> Rear -> Top -> Front??? saveSwap("Front"); shiftFrame("Top" , "Front"); @@ -125,16 +115,10 @@ void Cube::rotateDown() updateIsoDirs(); updateRotsToConfig(getCurrConfig()); updateIsoRots(); - dump("RotateDown(board after Rot update)"); -// dumpState("RotateDown(after update)"); - //validateBoard(); - } void Cube::rotateRight() { - //dump("RotateRight (board before)"); - //Front -> Right -> Rear -> Left -> Front??? saveSwap("Front"); shiftFrame("Left" , "Front"); @@ -145,10 +129,6 @@ void Cube::rotateRight() updateIsoDirs(); updateRotsToConfig(getCurrConfig()); updateIsoRots(); - dump("RotateRight(board after Rot update)"); -// bool boardState = validateBoard(getCurrConfig()); -// Base::Console().Message("TRACE - Cube::rotateRight - boardState: %d\n",boardState); -// dumpState("RotateRight(state after update)"); } void Cube::rotateLeft() @@ -163,9 +143,6 @@ void Cube::rotateLeft() updateIsoDirs(); updateRotsToConfig(getCurrConfig()); updateIsoRots(); - dump("RotateLeft(board after Rot updates)"); -// dumpState("RotateLeft(after update)"); - } void Cube::spinCCW() @@ -180,8 +157,6 @@ void Cube::spinCCW() updateIsoDirs(); updateRotsToConfig(getCurrConfig()); updateIsoRots(); - dump("SpinCCW(board after Rot updates)"); -// dumpState("SpinCCW(after update)"); } void Cube::spinCW() @@ -196,8 +171,6 @@ void Cube::spinCW() updateIsoDirs(); updateRotsToConfig(getCurrConfig()); updateIsoRots(); - dump("spinCW(board after Rot updates)"); -// dumpState("SpinCW(after update)"); } void Cube::updateIsoDirs() @@ -214,14 +187,14 @@ void Cube::updateIsoDirs() 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; +// 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) @@ -238,7 +211,6 @@ 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::Vector3d boardValue = m_conTab.getDirItem(cfg,"Front"); m_mapFrameDir.at("Front") = boardValue; boardValue = m_conTab.getDirItem(cfg,"Rear"); @@ -255,7 +227,6 @@ void Cube::updateDirsToConfig(std::string cfg) void Cube::updateRotsToConfig(std::string cfg) { - Base::Console().Message("TRACE - Cube::updateRots(%s) \n",cfg.c_str()); Base::Vector3d boardValue = m_conTab.getRotItem(cfg,"Front"); m_mapFrameRot.at("Front") = boardValue; boardValue = m_conTab.getRotItem(cfg,"Rear"); @@ -272,22 +243,16 @@ void Cube::updateRotsToConfig(std::string cfg) bool Cube::validateBoard(std::string cfg) { -// Base::Console().Message("TRACE - Cube::validateBoard(%s)\n",cfg.c_str()); bool result = true; //check that Dirs match std::string strCfgDir; std::string strBoardDir; - -// Base::Console().Message("TRACE - Cube::validateBoard(%s) - BoardDirCount: %d BoardRotCount: %d\n", -// cfg.c_str(),m_mapFrameDir.size(),m_mapFrameRot.size()); for (auto& f: m_mapFrameDir) { Base::Vector3d boardValue = f.second; strBoardDir += dirToView(boardValue); } strCfgDir = m_conTab.getCfgDirStr(cfg); -// Base::Console().Message("TRACE - Cube::validateBoard(%s) - Config Dirs: %s Board Dirs: %s\n", -// cfg.c_str(),strCfgDir.c_str(),strBoardDir.c_str()); if (strCfgDir != strBoardDir) { result = false; return result; @@ -305,9 +270,6 @@ bool Cube::validateBoard(std::string cfg) if (strCfgRot != strBoardRot) { result = false; } -// Base::Console().Message("TRACE - Cube::validateBoard - Config Rots: %s Board Rots: %s\n",strCfgRot.c_str(),strBoardRot.c_str()); - -// Base::Console().Message("TRACE - Cube::validateBoard - result: %d\n",result); return result; } @@ -315,11 +277,11 @@ bool Cube::validateBoard(std::string cfg) std::string Cube::getBoardKey() { std::string result; - Base::Vector3d frontDir = m_mapFrameDir.at("Front"); - std::string frontView = dirToView(frontDir); - Base::Vector3d rightDir = m_mapFrameDir.at("Right"); - std::string rightView = dirToView(rightDir); - result = frontView + rightView; +// Base::Vector3d frontDir = m_mapFrameDir.at("Front"); +// std::string frontView = dirToView(frontDir); +// Base::Vector3d rightDir = m_mapFrameDir.at("Right"); +// std::string rightView = dirToView(rightDir); +// result = frontView + rightView; return result; } @@ -331,30 +293,9 @@ std::string Cube::getCurrConfig(void) boardValue = m_mapFrameDir.at("Right"); std::string viewRight = dirToView(boardValue); std::string result = viewFront + viewRight; -// Base::Console().Message("TRACE - Cube::getCurrCon - Result: %s Front: %s Right: %s\n",result.c_str(),viewFront.c_str(),viewRight.c_str()); -// for (auto& i : m_mapFrameDir) { -// Base::Console().Message("m_mapFrameDir: %s - %s - %s\n", -// (i.first).c_str(),DrawUtil::formatVector(i.second).c_str(),dirToView(i.second).c_str()); -// } return result; } -//std::string Cube::stdDirToFace(Base::Vector3d dir) -//{ -// std::string result; -//// int i = 0; -//// auto it = m_stdDirToFaceKeys.begin(); //map find and at don't much like vector3d -//// for (; it != m_stdDirToFaceKeys.end(); it++) { -//// Base::Vector3d key = (*it); -//// if ( key == dir ) { -//// result = m_stdDirToFaceData.at(i); -//// break; -//// } -//// i++; -//// } -// return result; -//} - void Cube::saveSwap(std::string frame) { m_swapDir = m_mapFrameDir.at(frame); @@ -426,7 +367,6 @@ void Cube::dumpState(char* title) Base::Vector3d Cube::getRight() { - std::string myFace = "D"; Base::Vector3d result; result = m_mapFrameDir.at("Right"); return result; @@ -434,7 +374,6 @@ Base::Vector3d Cube::getRight() Base::Vector3d Cube::getFront() { - std::string myFace = "A"; Base::Vector3d result; result = m_mapFrameDir.at("Front"); return result; @@ -442,7 +381,6 @@ Base::Vector3d Cube::getFront() Base::Vector3d Cube::getTop() { - std::string myFace = "B"; Base::Vector3d result; result = m_mapFrameDir.at("Top"); return result; @@ -450,7 +388,6 @@ Base::Vector3d Cube::getTop() Base::Vector3d Cube::getLeft() { - std::string myFace = "C"; Base::Vector3d result; result = m_mapFrameDir.at("Left"); return result; @@ -458,7 +395,6 @@ Base::Vector3d Cube::getLeft() Base::Vector3d Cube::getRear() { - std::string myFace = "F"; Base::Vector3d result; result = m_mapFrameDir.at("Rear"); return result; @@ -466,7 +402,6 @@ Base::Vector3d Cube::getRear() Base::Vector3d Cube::getBottom() { - std::string myFace = "E"; Base::Vector3d result; result = m_mapFrameDir.at("Bottom"); return result; @@ -511,7 +446,6 @@ Base::Vector3d Cube::getRightRot() Base::Vector3d Cube::getFrontRot() { - std::string myFace = "A"; Base::Vector3d result; result = m_mapFrameRot.at("Front"); return result; @@ -519,7 +453,6 @@ Base::Vector3d Cube::getFrontRot() Base::Vector3d Cube::getTopRot() { - std::string myFace = "B"; Base::Vector3d result; result = m_mapFrameRot.at("Top"); return result; @@ -527,7 +460,6 @@ Base::Vector3d Cube::getTopRot() Base::Vector3d Cube::getLeftRot() { - std::string myFace = "C"; Base::Vector3d result; result = m_mapFrameRot.at("Left"); return result; @@ -535,7 +467,6 @@ Base::Vector3d Cube::getLeftRot() Base::Vector3d Cube::getRearRot() { - std::string myFace = "F"; Base::Vector3d result; result = m_mapFrameRot.at("Rear"); return result; @@ -552,28 +483,81 @@ Base::Vector3d Cube::getBottomRot() Base::Vector3d Cube::getFBLRot() { Base::Vector3d result; - result = m_mapFrameRot.at("FrontBottomLeft"); + double magic1 = 157.5 * M_PI / 180.0; // 90 + 45 + magic1 +// double magic1 = -22.5 * M_PI / 180.0; //45*/2 + double magic2 = -17.632 * M_PI / 180.0; //±35.264° / 2 "magic angle"?? + // < list) { configLine result; -// Base::Console().Message("TRACE - conTab::getLine(%s)\n",k.c_str()); for (auto& l: list) { if (k == l.getKey()) { result = l; break; } } -// Base::Console().Message("result: %s\n",result.getString().c_str()); return result; } @@ -693,16 +671,163 @@ 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" -//Directions items -#include "dirs.cpp" +//#include "rots.cpp" +// Rots - b/f/l/k/r/t + cl = configLine( 1 , "AB", Base::Vector3d(0,0,1), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0), + Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1) ); + addRotItem(cl); + cl = configLine( 2 , "AC", Base::Vector3d(-1,0,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), + Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0) ); + addRotItem(cl); + cl = configLine( 3 , "AD", Base::Vector3d(1,0,0), Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), + Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0) ); + addRotItem(cl); + cl = configLine( 4 , "AE", Base::Vector3d(0,0,-1), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0), + Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1) ); + addRotItem(cl); + cl = configLine( 5 , "BA", Base::Vector3d(0,-1,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), + Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0) ); + addRotItem(cl); + cl = configLine( 6 , "BC", 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( 7 , "BD", 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( 8 , "BF", Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), + Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0) ); + addRotItem(cl); + cl = configLine( 9 , "CA", Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(-1,0,0), + Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,1,0) ); + addRotItem(cl); + cl = configLine( 10 , "CB", 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) ); + addRotItem(cl); + cl = configLine( 11 , "CE", 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) ); + addRotItem(cl); + cl = configLine( 12 , "CF", Base::Vector3d(0,-1,0), Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), + Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0) ); + addRotItem(cl); + cl = configLine( 13 , "DA", Base::Vector3d(0,1,0), Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), + Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0) ); + addRotItem(cl); + cl = configLine( 14 , "DB", 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) ); + addRotItem(cl); + cl = configLine( 15 , "DE", 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) ); + addRotItem(cl); + cl = configLine( 16 , "DF", Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(1,0,0), + Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,-1,0) ); + addRotItem(cl); + cl = configLine( 17 , "EA", Base::Vector3d(0,1,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), + Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0) ); + addRotItem(cl); + 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), + 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), + Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0) ); + addRotItem(cl); + cl = configLine( 21 , "FB", Base::Vector3d(0,0,1), Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0), + Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0), Base::Vector3d(0,0,1) ); + addRotItem(cl); + cl = configLine( 22 , "FC", Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), + Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0) ); + addRotItem(cl); + cl = configLine( 23 , "FD", Base::Vector3d(1,0,0), Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), + Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(1,0,0) ); + addRotItem(cl); + cl = configLine( 24 , "FE", Base::Vector3d(0,0,-1), Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), + Base::Vector3d(0,0,1), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1) ); + addRotItem(cl); - Base::Console().Message("TRACE - cT::initialize dirs: %d rots %d\n",dirs.size(),rots.size()); + +//Directions items +//#include "dirs.cpp" +// Dirs - b/f/l/k/r/t + cl = configLine( 1 , "AB", Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1), + Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0) ); + addDirItem(cl); + cl = configLine( 2 , "AC", Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0), + Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1) ); + addDirItem(cl); + cl = configLine( 3 , "AD", Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), + Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,1) ); + addDirItem(cl); + cl = configLine( 4 , "AE", Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), + Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), Base::Vector3d(1,0,0) ); + addDirItem(cl); + 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); + //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) ); + addDirItem(cl); + cl = configLine( 8 , "BF", 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( 9 , "CA", Base::Vector3d(0,0,-1), Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), + Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1) ); + addDirItem(cl); + cl = configLine( 10 , "CB", Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1), + Base::Vector3d(1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0) ); + addDirItem(cl); + cl = configLine( 11 , "CE", Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1), + Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0) ); + addDirItem(cl); + cl = configLine( 12 , "CF", Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), + Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1) ); + addDirItem(cl); + cl = configLine( 13 , "DA", Base::Vector3d(0,0,1), Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), + Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1) ); + addDirItem(cl); + cl = configLine( 14 , "DB", Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1), + Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0) ); + addDirItem(cl); + cl = configLine( 15 , "DE", Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,1), + Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0) ); + addDirItem(cl); + cl = configLine( 16 , "DF", Base::Vector3d(0,0,-1), Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), + Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,1) ); + addDirItem(cl); + cl = configLine( 17 , "EA", 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( 18 , "EC", 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( 19 , "ED", 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( 20 , "EF", 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( 21 , "FB", Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), + Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), Base::Vector3d(1,0,0) ); + addDirItem(cl); + cl = configLine( 22 , "FC", Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), + Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1) ); + addDirItem(cl); + cl = configLine( 23 , "FD", Base::Vector3d(0,0,1), Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), + Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1) ); + addDirItem(cl); + cl = configLine( 24 , "FE", Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), + Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1), Base::Vector3d(-1,0,0) ); + addDirItem(cl); } void configTable::dump(char* title) diff --git a/src/Mod/TechDraw/App/DrawProjGroup.cpp b/src/Mod/TechDraw/App/DrawProjGroup.cpp index 180965e12069..5da1c1d84322 100644 --- a/src/Mod/TechDraw/App/DrawProjGroup.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroup.cpp @@ -53,6 +53,7 @@ const char* DrawProjGroup::ProjectionTypeEnums[] = {"Default", "Third Angle", NULL}; +//default starting dirs & rots const std::map DrawProjGroup::m_frameToStdDir = { { "Front", Base::Vector3d(0, -1, 0) }, //front { "Rear", Base::Vector3d(0, 1, 0) }, //rear @@ -60,27 +61,26 @@ 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 - { "FrontBottomLeft", Base::Vector3d(-1, -1, -1) }, //FBL + { "FrontBottomLeft", Base::Vector3d(-1, -1, -1) }, //FBL { "FrontBottomRight", Base::Vector3d(1, -1, -1) }, //FBR { "FrontTopLeft", Base::Vector3d(-1,-1,1) }, //FTL - { "FrontTopRight", Base::Vector3d(1, -1, 1) } //FTR + { "FrontTopRight", Base::Vector3d(1, -1, 1) } //FTR }; const std::map DrawProjGroup::m_frameToStdRot = { { "Front", Base::Vector3d(1, 0, 0) }, //front { "Rear", Base::Vector3d(-1, 0, 0) }, //rear - { "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) + { "Right", Base::Vector3d(0, -1, 0) }, //right + { "Left", Base::Vector3d(0, 1, 0) }, //left { "Top", Base::Vector3d(1, 0, 0) }, //top { "Bottom", Base::Vector3d(1, 0, 0) }, //bottom - { "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 + { "FrontBottomLeft", Base::Vector3d(2, 1, 0.5) }, + { "FrontBottomRight", Base::Vector3d(2, -1, -0.5) }, + { "FrontTopLeft", Base::Vector3d(2, 1, -0.5) }, + { "FrontTopRight", Base::Vector3d(2, -1, 0.5) } }; +//one of these is obs?? // map of front.dir+front.rot onto config const std::map DrawProjGroup::m_dirRotToConfig = { {"AB","AB"}, @@ -171,7 +171,7 @@ DrawProjGroup::~DrawProjGroup() void DrawProjGroup::onChanged(const App::Property* prop) { - //TODO: For some reason, when the projection type is changed, the isometric views show change appropriately, but the orthographic ones dont... Or vice-versa. why would you change from 1st to 3rd in mid drawing? + //TODO: For some reason, when the projection type is changed, the isometric views show change appropriately, but the orthographic ones dont... Or vice-versa. WF: why would you change from 1st to 3rd in mid drawing? //if group hasn't been added to page yet, can't scale or distribute projItems TechDraw::DrawPage *page = getPage(); if (!isRestoring() && page) { @@ -441,7 +441,6 @@ bool DrawProjGroup::hasProjection(const char *viewProjType) const App::DocumentObject * DrawProjGroup::addProjection(const char *viewProjType) { - //Base::Console().Message("TRACE - DPG::addProjection(%s)\n",viewProjType); //if this is the first Projection added, it should automatically be the Anchor/front view // or if viewProjType == "Front" Anchor.setValue(view) DrawProjGroupItem *view( nullptr ); @@ -466,9 +465,12 @@ App::DocumentObject * DrawProjGroup::addProjection(const char *viewProjType) Anchor.setValue(docObj); view->Direction.setValue(m_frameToStdDir.at("Front")); //just (Base::Vector3d(0.0,-1.0,0.0)) view->OrientBasis.setValue(m_frameToStdRot.at("Front")); - //view->recomputeFeature(); } else { - //really need to check with Cube to get current dir & rot + //TODO: really need to check with Cube to get current dir & rot this uses initial values from table + //if (DPGI(front) and DPGI(right) exist) config = front.face + right.face + // + //else + // use start up values (m_frameToStdDir/m_frameToStdRot) view->Direction.setValue(m_frameToStdDir.at(viewProjType)); view->OrientBasis.setValue(m_frameToStdRot.at(viewProjType)); } @@ -478,7 +480,6 @@ App::DocumentObject * DrawProjGroup::addProjection(const char *viewProjType) view->recomputeFeature(); } - Base::Console().Message("TRACE - DPG::addProjection exits\n"); return view; } @@ -539,13 +540,14 @@ void DrawProjGroup::arrangeViewPointers(DrawProjGroupItem *viewPtrs[10]) const // Iterate through views and populate viewPtrs if ( strcmp(projType, "Third Angle") == 0 || strcmp(projType, "First Angle") == 0 ) { - // Third Angle: FTL T FTRight - // L F Right Rear - // FBL B FBRight + // Third Angle: FTL T FTRight 0 1 2 + // L F Right Rear 3 4 5 6 + // FBL B FBRight 7 8 9 // - // First Angle: FBRight B FBL - // Right F L Rear - // FTRight T FTL + // First Angle: FBRight B FBL 0 1 2 + // Right F L Rear 3 4 5 6 + // FTRight T FTL 7 8 9 + bool thirdAngle = (strcmp(projType, "Third Angle") == 0); for (auto it : Views.getValues()) { auto oView( dynamic_cast(it) ); @@ -606,6 +608,7 @@ void DrawProjGroup::makeViewBbs(DrawProjGroupItem *viewPtrs[10], bool DrawProjGroup::distributeProjections() { //TODO: bounding boxes do not take view orientation into account + // ie X&Y widths might be swapped on page if (!AutoDistribute.getValue()) { return true; } @@ -623,70 +626,84 @@ bool DrawProjGroup::distributeProjections() Base::BoundBox3d bboxes[10]; makeViewBbs(viewPtrs, bboxes); - // Now that things are setup, do the spacing - double scale = Scale.getValue(); - if (scale < 1.0) scale = 1.0; - double xSpacing = scale * spacingX.getValue(); //in mm - double ySpacing = scale * spacingY.getValue(); //in mm + double xSpacing = spacingX.getValue(); //in mm/scale + double ySpacing = spacingY.getValue(); //in mm/scale + + double bigRow = 0.0; + double bigCol = 0.0; + for (auto& b: bboxes) { + if (!b.IsValid()) { + continue; + } + if (b.LengthX() > bigCol) { + bigCol = b.LengthX(); + } + if (b.LengthY() > bigRow) { + bigRow = b.LengthY(); + } + } + + //if we have iso's, make sure they fit the grid. + if (viewPtrs[0] || viewPtrs[2] || viewPtrs[7] || viewPtrs[9]) { + bigCol = std::max(bigCol,bigRow); + bigRow = bigCol; + } + + //viewPtrs + // 0 1 2 + // 3 4 5 6 + // 7 8 9 if (viewPtrs[0] && viewPtrs[0]->allowAutoPos() && bboxes[0].IsValid()) { - double displace = std::max(bboxes[0].LengthX() + bboxes[4].LengthX(), - bboxes[0].LengthY() + bboxes[4].LengthY()); - viewPtrs[0]->X.setValue(displace / -2.0 - xSpacing); - viewPtrs[0]->Y.setValue(displace / 2.0 + ySpacing); + viewPtrs[0]->X.setValue(-bigCol - xSpacing); + viewPtrs[0]->Y.setValue(bigRow + ySpacing); } if (viewPtrs[1] && viewPtrs[1]->allowAutoPos() && bboxes[1].IsValid()) { - viewPtrs[1]->Y.setValue((bboxes[1].LengthY() + bboxes[4].LengthY()) / 2.0 + ySpacing); + viewPtrs[1]->Y.setValue(bigRow + ySpacing); } if (viewPtrs[2] && viewPtrs[2]->allowAutoPos() ) { - double displace = std::max(bboxes[2].LengthX() + bboxes[4].LengthX(), - bboxes[2].LengthY() + bboxes[4].LengthY()); - viewPtrs[2]->X.setValue(displace / 2.0 + xSpacing); - viewPtrs[2]->Y.setValue(displace / 2.0 + ySpacing); + viewPtrs[2]->X.setValue(bigCol + xSpacing); + viewPtrs[2]->Y.setValue(bigRow + ySpacing); } if (viewPtrs[3] && viewPtrs[3]->allowAutoPos() && bboxes[3].IsValid() && bboxes[4].IsValid()) { - viewPtrs[3]->X.setValue((bboxes[3].LengthX() + bboxes[4].LengthX()) / -2.0 - xSpacing); + viewPtrs[3]->X.setValue(-bigCol - xSpacing); } if (viewPtrs[4]) { // TODO: Move this check above, and figure out a sane bounding box based on other existing views } if (viewPtrs[5] && viewPtrs[5]->allowAutoPos() && bboxes[5].IsValid() && bboxes[4].IsValid()) { - viewPtrs[5]->X.setValue((bboxes[5].LengthX() + bboxes[4].LengthX()) / 2.0 + xSpacing); + viewPtrs[5]->X.setValue(bigCol + xSpacing); } if (viewPtrs[6] && viewPtrs[6]->allowAutoPos() && bboxes[6].IsValid()) { //"Rear" if (viewPtrs[5] && bboxes[5].IsValid()) { - viewPtrs[6]->X.setValue(viewPtrs[5]->X.getValue() + bboxes[5].LengthX()/2.0 + xSpacing + bboxes[6].LengthX() / 2.0 ); + viewPtrs[6]->X.setValue(viewPtrs[5]->X.getValue() + bigCol + xSpacing); }else if (viewPtrs[4] && bboxes[4].IsValid()) { - viewPtrs[6]->X.setValue((bboxes[6].LengthX() + bboxes[4].LengthX()) / 2.0 + xSpacing); + viewPtrs[6]->X.setValue(bigCol + xSpacing); } } if (viewPtrs[7] && viewPtrs[7]->allowAutoPos() && bboxes[7].IsValid()) { - double displace = std::max(bboxes[7].LengthX() + bboxes[4].LengthX(), - bboxes[7].LengthY() + bboxes[4].LengthY()); - viewPtrs[7]->X.setValue(displace / -2.0 - xSpacing); - viewPtrs[7]->Y.setValue(displace / -2.0 - ySpacing); + viewPtrs[7]->X.setValue(-bigCol - xSpacing); + viewPtrs[7]->Y.setValue(-bigRow - ySpacing); } if (viewPtrs[8] && viewPtrs[8]->allowAutoPos() && bboxes[8].IsValid() && bboxes[4].IsValid()) { - viewPtrs[8]->Y.setValue((bboxes[8].LengthY() + bboxes[4].LengthY()) / -2.0 - ySpacing); + viewPtrs[8]->Y.setValue(-bigRow - ySpacing); } if (viewPtrs[9] && viewPtrs[9]->allowAutoPos() && bboxes[9].IsValid()) { - double displace = std::max(bboxes[9].LengthX() + bboxes[4].LengthX(), - bboxes[9].LengthY() + bboxes[4].LengthY()); - viewPtrs[9]->X.setValue(displace / 2.0 + xSpacing); - viewPtrs[9]->Y.setValue(displace / -2.0 - ySpacing); + viewPtrs[9]->X.setValue(bigCol + xSpacing); + viewPtrs[9]->Y.setValue(-bigRow - ySpacing); } return true; @@ -782,12 +799,11 @@ bool DrawProjGroup::hasAnchor(void) TechDraw::DrawProjGroupItem* DrawProjGroup::getAnchor(void) { -// Base::Console().Message("TRACE - DPG::getAnchor() - %s\n",getNameInDocument()); DrawProjGroupItem* result = nullptr; App::DocumentObject* docObj = Anchor.getValue(); if (docObj == nullptr) { //explode! DPG w/o anchor - Base::Console().Message("TRACE - DPG::getAnchor - DPG has no Anchor!!!\n"); + Base::Console().Error("Error - DPG::getAnchor - DPG has no Anchor!!!\n"); } else { result = static_cast(docObj); } @@ -822,7 +838,6 @@ Base::Vector3d DrawProjGroup::getAnchorDirection(void) void DrawProjGroup::updateSecondaryDirs() { -// Base::Console().Message("TRACE - DPG::updateSecondaryDirs() - %s\n",getNameInDocument()); for (auto& docObj: Views.getValues()) { Base::Vector3d newDir; Base::Vector3d newAxis; @@ -891,88 +906,75 @@ void DrawProjGroup::updateSecondaryDirs() v->OrientBasis.setValue(newAxis); v->recomputeFeature(); } -// Base::Console().Message("TRACE - DPG::updateSecondaryDirs exits\n"); } void DrawProjGroup::rotateRight() { //Front -> Right -> Rear -> Left -> Front - //m_cube->dump("TRACE - DPG::rotR before"); m_cube->rotateRight(); - //m_cube->dump("TRACE - DPG::rotR after"); updateSecondaryDirs(); } void DrawProjGroup::rotateLeft() { //Front -> Left -> Rear -> Right -> Front - //m_cube->dump("TRACE - DPG::rotL before"); m_cube->rotateLeft(); - //m_cube->dump("TRACE - DPG::rotL after"); updateSecondaryDirs(); } void DrawProjGroup::rotateUp() { //Front -> Top -> Rear -> Bottom -> Front - //m_cube->dump("TRACE - DPG::rotU before"); m_cube->rotateUp(); - //m_cube->dump("TRACE - DPG::rotU after"); updateSecondaryDirs(); } void DrawProjGroup::rotateDown() { //Front -> Bottom -> Rear -> Top -> Front - m_cube->dump("TRACE - DPG::rotD before"); m_cube->rotateDown(); - m_cube->dump("TRACE - DPG::rotD after"); updateSecondaryDirs(); } void DrawProjGroup::spinCW() { //Top -> Right -> Bottom -> Left -> Top - //m_cube->dump("TRACE - DPG::spinCW before"); m_cube->spinCW(); - //m_cube->dump("TRACE - DPG::spinCW after"); updateSecondaryDirs(); } void DrawProjGroup::spinCCW() { //Top -> Left -> Bottom -> Right -> Top - //m_cube->dump("TRACE - DPG::spingCCW before"); m_cube->spinCCW(); - //m_cube->dump("TRACE - DPG::spinCCW after"); updateSecondaryDirs(); } // find a config with Dir as Front view and Up as Top view +// used in setting view to match OpenInventor 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 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()); + catch (const std::out_of_range& oor) { + Base::Console().Error("Error - DPG::setTable - no match for alt config: %s - %s\n",altKey.c_str(),oor.what()); return; } - Base::Console().Message("TRACE - DPG::setTable - found config: %s **\n",config.c_str()); - m_cube->updateDirsToConfig(config); - m_cube->updateRotsToConfig(config); - updateSecondaryDirs(); + setConfig(config); +} +// set config to a specific value +void DrawProjGroup::setConfig(std::string cfg) +{ + m_cube->updateDirsToConfig(cfg); + m_cube->updateRotsToConfig(cfg); + updateSecondaryDirs(); } void DrawProjGroup::resetTable(void) @@ -988,56 +990,55 @@ void DrawProjGroup::resetTable(void) updateSecondaryDirs(); } +//dumps the current iso DPGI's +void DrawProjGroup::dumpISO(char * title) +{ +//FBL/FBR/FTL/FTR +// + Base::Console().Message("DPG ISO: %s\n", title); + for (auto& docObj: Views.getValues()) { + Base::Vector3d dir; + Base::Vector3d axis; + DrawProjGroupItem* v = static_cast(docObj); + std::string t = v->Type.getValueAsString(); + dir = v->Direction.getValue(); + axis = v->OrientBasis.getValue(); - - + Base::Console().Message("%s: %s/%s\n", + t.c_str(),DrawUtil::formatVector(dir).c_str(),DrawUtil::formatVector(axis).c_str()); + } +} //************************************* -//obs?? -//! rebuild view direction map from existing DPGI's if possible or from Anchor +//! rebuild view direction map from existing DPGI's void DrawProjGroup::onDocumentRestored() { -// Base::Vector3d f,r,t; -// Base::Vector3d fr,rr,tr; -// bool ffound = false; -// bool rfound = false; -// bool tfound = false; -// -// for (auto& docObj: Views.getValues()) { -// DrawProjGroupItem* v = static_cast(docObj); -// ProjItemType type = static_cast(v->Type.getValue()); -// switch (type) { -// case Front : { -// f = v->Direction.getValue(); -// fr = v->OrientBasis.getValue(); -// ffound = true; -// break; -// } -// case Right : { -// r = v->Direction.getValue(); -// rr = v->OrientBasis.getValue(); -// rfound = true; -// break; -// } -// case Top : { -// t = v->Direction.getValue(); -// tr = v->OrientBasis.getValue(); -// tfound = true; -// break; -// } -// default: { -// break; -// } -// } -// } -// if (ffound && rfound && tfound) { -// //m_cube->reinit(r,rr,f,fr,t,tr); -// Base::Console().Log("LOG: - DPG::restore - found Right,Front,Top\n"); -// } else { -// m_cube->initialize(r,f,t); -// Base::Console().Log("LOG: - DPG::restore - didn't find Right,Front,Top\n"); -// } -// DrawViewCollection::onDocumentRestored(); + if (hasProjection("Front") && hasProjection("Right")) { + Base::Vector3d dirFront = getProjItem("Front")->Direction.getValue(); + std::string viewFront = Cube::dirToView(dirFront); + Base::Vector3d dirRight = getProjItem("Right")->Direction.getValue(); + std::string viewRight = Cube::dirToView(dirRight); + std::string config = viewFront + viewRight; + setConfig(config); + } else if (hasProjection("Front")) { + Base::Vector3d dirFront = getProjItem("Front")->Direction.getValue(); + std::string viewDir = Cube::dirToView(dirFront); + Base::Vector3d rotFront = getProjItem("Rot")->OrientBasis.getValue(); + std::string viewRot = Cube::dirToView(rotFront); + std::string config = viewDir + viewRot; + //find(config) or try/catch + try { + config = m_dirRotToConfig.at(config); + setConfig(config); + } + catch (...) { + Base::Console().Message("ERROR: DPG cannot set configuration: %s using AD\n",config.c_str()); + setConfig("AD"); + } + } else { + Base::Console().Message("ERROR: DPG cannot find Front view on restore\n"); + setConfig("AD"); // set to default config?? + } } PyObject *DrawProjGroup::getPyObject(void) diff --git a/src/Mod/TechDraw/App/DrawProjGroup.h b/src/Mod/TechDraw/App/DrawProjGroup.h index d0ee8a690133..e93d0dea7b9f 100644 --- a/src/Mod/TechDraw/App/DrawProjGroup.h +++ b/src/Mod/TechDraw/App/DrawProjGroup.h @@ -127,7 +127,9 @@ class TechDrawExport DrawProjGroup : public TechDraw::DrawViewCollection void spinCCW(void); void setTable(Base::Vector3d dir, Base::Vector3d rot); + void setConfig(std::string cfg); void resetTable(void); + void dumpISO(char * title); protected: void onChanged(const App::Property* prop); diff --git a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp index d39ea09fbf79..b50633788921 100644 --- a/src/Mod/TechDraw/App/DrawProjGroupItem.cpp +++ b/src/Mod/TechDraw/App/DrawProjGroupItem.cpp @@ -87,25 +87,6 @@ short DrawProjGroupItem::mustExecute() const void DrawProjGroupItem::onChanged(const App::Property *prop) { -// //TODO: too many executes! -// //TODO: Should we allow changes to the Type here? Seems that should be handled through DrawProjGroup -// if (!isRestoring()) { -//// //Base::Console().Message("TRACE - DPGI::onChanged(%s) - %s/%s\n",prop->getName(),getNameInDocument(),Label.getValue()); -// if (prop == &Type && Type.isTouched()) { -//// //Base::Console().Message("TRACE - DPGI::onChanged(%s) - Type: %s\n",prop->getName(),Type.getValueAsString()); -//// execute(); -// } else if (prop == &Direction) { -// if (getGroup() != nullptr) { -// OrientBasis.setValue(getGroup()->getXAxisDir(Type.getValueAsString())); -// Base::Console().Message("TRACE - DPGI::onChanged(%s) - Direction: %s Orient: %s\n", -// prop->getName(),DrawUtil::formatVector(Direction.getValue()).c_str(), -// DrawUtil::formatVector(OrientBasis.getValue()).c_str()); -// } -// } -//// execute(); -//// } //else if (prop == &OrientBasis) { //don't want to do twice though! -// } - TechDraw::DrawViewPart::onChanged(prop); } @@ -139,36 +120,25 @@ gp_Ax2 DrawProjGroupItem::getViewAxis(const Base::Vector3d& pt, const Base::Vector3d& axis, const bool flip) const { -// Base::Console().Message("TRACE - DPGI::getViewAxis - %s/%s - Type: %s\n",getNameInDocument(),Label.getValue(),Type.getValueAsString()); gp_Ax2 viewAxis; Base::Vector3d x = OrientBasis.getValue(); Base::Vector3d nx = x; x.Normalize(); Base::Vector3d na = axis; na.Normalize(); -// Base::Console().Message("TRACE - DPGI::getViewAxis - axis: %s orient: %s\n", -// DrawUtil::formatVector(axis).c_str(),DrawUtil::formatVector(x).c_str()); if (DrawUtil::checkParallel(nx,na)) { //parallel/antiparallel -// Base::Console().Message("TRACE - DPGI::getViewAxis - parallel flip: %d\n",flip); viewAxis = TechDrawGeometry::getViewAxis(pt,axis,flip); //use default orientation } else { - //Base::Console().Message("TRACE - DPGI::getViewAxis - skew flip: %d\n",flip); -// if (Type.isValue("Right") || Type.isValue("Left")) { //no difference with incorrect initial axis -// viewAxis = TechDrawGeometry::getViewAxis(pt,axis,x,!flip); //no difference with correct initial axis!! -// } else { - viewAxis = TechDrawGeometry::getViewAxis(pt,axis,x,flip); -// } + viewAxis = TechDrawGeometry::getViewAxis(pt,axis,x,flip); } - //Base::Console().Message("TRACE - DPGI::getViewAxis exits\n"); return viewAxis; } //! rotate OrientBasis by angle radians around view Direction Base::Vector3d DrawProjGroupItem::rotated(const double angle) { - Base::Console().Message("TRACE - DPGI::rotated - %s/%s angle: %.3f\n",Label.getValue(),Type.getValueAsString(),angle); Base::Vector3d line = Direction.getValue(); Base::Vector3d oldBasis = OrientBasis.getValue(); Base::Vector3d newBasis; @@ -176,16 +146,6 @@ Base::Vector3d DrawProjGroupItem::rotated(const double angle) Base::Matrix4D xForm; xForm.rotLine(line,angle); newBasis = xForm * (oldBasis); - Base::Console().Message("TRACE - DPGI::rotated - line: %s old: %s new: %s\n", - DrawUtil::formatVector(line).c_str(), - DrawUtil::formatVector(oldBasis).c_str(), - DrawUtil::formatVector(newBasis).c_str()); -// if (getGroup() != nullptr) { -// if (getGroup()->getException(Type.getValueAsString())) { -// newBasis = newBasis * -1.0; -// Base::Console().Message("TRACE - DPGI::rotated - EXCEPTION\n"); -// } -// } return newBasis; } diff --git a/src/Mod/TechDraw/App/DrawUtil.cpp b/src/Mod/TechDraw/App/DrawUtil.cpp index 5eef409b6399..6a8af27a331c 100644 --- a/src/Mod/TechDraw/App/DrawUtil.cpp +++ b/src/Mod/TechDraw/App/DrawUtil.cpp @@ -344,6 +344,49 @@ Base::Vector3d DrawUtil::vecRotate(Base::Vector3d vec, return result; } +Base::Vector3d DrawUtil::closestBasis(Base::Vector3d v) +{ + Base::Vector3d result(0.0,-1,0); + Base::Vector3d stdX(1.0,0.0,0.0); + Base::Vector3d stdY(0.0,1.0,0.0); + Base::Vector3d stdZ(0.0,0.0,1.0); + Base::Vector3d stdXr(-1.0,0.0,0.0); + Base::Vector3d stdYr(0.0,-1.0,0.0); + Base::Vector3d stdZr(0.0,0.0,-1.0); + double angleX,angleY,angleZ,angleXr,angleYr,angleZr, angleMin; + + angleX = stdX.GetAngle(v); + angleY = stdY.GetAngle(v); + angleZ = stdZ.GetAngle(v); + angleXr = stdXr.GetAngle(v); + angleYr = stdYr.GetAngle(v); + angleZr = stdZr.GetAngle(v); + + angleMin = angleX; + result = stdX; + if (angleY < angleMin) { + angleMin = angleY; + result = stdY; + } + if (angleZ < angleMin) { + angleMin = angleZ; + result = stdZ; + } + if (angleXr < angleMin) { + angleMin = angleXr; + result = stdXr; + } + if (angleYr < angleMin) { + angleMin = angleYr; + result = stdYr; + } + if (angleZr < angleMin) { + angleMin = angleZr; + result = stdZr; + } + return result; +} + //based on Function provided by Joe Dowsett, 2014 double DrawUtil::sensibleScale(double working_scale) { diff --git a/src/Mod/TechDraw/App/DrawUtil.h b/src/Mod/TechDraw/App/DrawUtil.h index 6abecf2fc975..739a2e284ccd 100644 --- a/src/Mod/TechDraw/App/DrawUtil.h +++ b/src/Mod/TechDraw/App/DrawUtil.h @@ -67,6 +67,8 @@ class TechDrawExport DrawUtil { double angle, Base::Vector3d axis, Base::Vector3d org = Base::Vector3d(0.0,0.0,0.0)); + static Base::Vector3d closestBasis(Base::Vector3d v); + //debugging routines diff --git a/src/Mod/TechDraw/App/dirs.cpp b/src/Mod/TechDraw/App/dirs.cpp deleted file mode 100644 index 29653f70f429..000000000000 --- a/src/Mod/TechDraw/App/dirs.cpp +++ /dev/null @@ -1,75 +0,0 @@ - -// Dirs - b/f/l/k/r/t - cl = configLine( 1 , "AB", Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1), - Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0) ); - addDirItem(cl); - cl = configLine( 2 , "AC", Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0), - Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1) ); - addDirItem(cl); - cl = configLine( 3 , "AD", Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), - Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,1) ); - addDirItem(cl); - cl = configLine( 4 , "AE", Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), - Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), Base::Vector3d(1,0,0) ); - addDirItem(cl); - 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); - //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) ); - addDirItem(cl); - cl = configLine( 8 , "BF", 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( 9 , "CA", Base::Vector3d(0,0,-1), Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), - Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1) ); - addDirItem(cl); - cl = configLine( 10 , "CB", Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1), - Base::Vector3d(1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0) ); - addDirItem(cl); - cl = configLine( 11 , "CE", Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1), - Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0) ); - addDirItem(cl); - cl = configLine( 12 , "CF", Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), - Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1) ); - addDirItem(cl); - cl = configLine( 13 , "DA", Base::Vector3d(0,0,1), Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), - Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1) ); - addDirItem(cl); - cl = configLine( 14 , "DB", Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1), - Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0) ); - addDirItem(cl); - cl = configLine( 15 , "DE", Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,1), - Base::Vector3d(-1,0,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0) ); - addDirItem(cl); - cl = configLine( 16 , "DF", Base::Vector3d(0,0,-1), Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), - Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,1) ); - addDirItem(cl); - cl = configLine( 17 , "EA", 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( 18 , "EC", 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( 19 , "ED", 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( 20 , "EF", 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( 21 , "FB", Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), - Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), Base::Vector3d(1,0,0) ); - addDirItem(cl); - cl = configLine( 22 , "FC", Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), - Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,0,1) ); - addDirItem(cl); - cl = configLine( 23 , "FD", Base::Vector3d(0,0,1), Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), - Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,0,-1) ); - addDirItem(cl); - cl = configLine( 24 , "FE", Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), - Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1), Base::Vector3d(-1,0,0) ); - addDirItem(cl); diff --git a/src/Mod/TechDraw/App/rots.cpp b/src/Mod/TechDraw/App/rots.cpp deleted file mode 100644 index 6baf962d9c9e..000000000000 --- a/src/Mod/TechDraw/App/rots.cpp +++ /dev/null @@ -1,73 +0,0 @@ -// Rots - b/f/l/k/r/t - cl = configLine( 1 , "AB", Base::Vector3d(0,0,1), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0), - Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1) ); - addRotItem(cl); - cl = configLine( 2 , "AC", Base::Vector3d(-1,0,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), - Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0) ); - addRotItem(cl); - cl = configLine( 3 , "AD", Base::Vector3d(1,0,0), Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), - Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(1,0,0) ); - addRotItem(cl); - cl = configLine( 4 , "AE", Base::Vector3d(0,0,-1), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0), - Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1) ); - addRotItem(cl); - cl = configLine( 5 , "BA", Base::Vector3d(0,-1,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), - Base::Vector3d(0,-1,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0) ); - addRotItem(cl); - cl = configLine( 6 , "BC", 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( 7 , "BD", 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( 8 , "BF", Base::Vector3d(-1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), - Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0) ); - addRotItem(cl); - cl = configLine( 9 , "CA", Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(-1,0,0), - Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(0,1,0) ); - addRotItem(cl); - cl = configLine( 10 , "CB", 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) ); - addRotItem(cl); - cl = configLine( 11 , "CE", 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) ); - addRotItem(cl); - cl = configLine( 12 , "CF", Base::Vector3d(0,-1,0), Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), - Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0) ); - addRotItem(cl); - cl = configLine( 13 , "DA", Base::Vector3d(0,1,0), Base::Vector3d(0,1,0), Base::Vector3d(1,0,0), - Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0) ); - addRotItem(cl); - cl = configLine( 14 , "DB", 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) ); - addRotItem(cl); - cl = configLine( 15 , "DE", 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) ); - addRotItem(cl); - cl = configLine( 16 , "DF", Base::Vector3d(0,-1,0), Base::Vector3d(-1,0,0), Base::Vector3d(1,0,0), - Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), Base::Vector3d(0,-1,0) ); - addRotItem(cl); - cl = configLine( 17 , "EA", Base::Vector3d(0,1,0), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1), - Base::Vector3d(0,-1,0), Base::Vector3d(0,0,1), Base::Vector3d(0,1,0) ); - addRotItem(cl); - 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), - 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), - Base::Vector3d(0,1,0), Base::Vector3d(0,0,1), Base::Vector3d(-1,0,0) ); - addRotItem(cl); - cl = configLine( 21 , "FB", Base::Vector3d(0,0,1), Base::Vector3d(0,0,1), Base::Vector3d(0,-1,0), - Base::Vector3d(0,0,-1), Base::Vector3d(0,1,0), Base::Vector3d(0,0,1) ); - addRotItem(cl); - cl = configLine( 22 , "FC", Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0), - Base::Vector3d(1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(-1,0,0) ); - addRotItem(cl); - cl = configLine( 23 , "FD", Base::Vector3d(1,0,0), Base::Vector3d(1,0,0), Base::Vector3d(0,-1,0), - Base::Vector3d(-1,0,0), Base::Vector3d(0,1,0), Base::Vector3d(1,0,0) ); - addRotItem(cl); - cl = configLine( 24 , "FE", Base::Vector3d(0,0,-1), Base::Vector3d(0,0,-1), Base::Vector3d(0,-1,0), - Base::Vector3d(0,0,1), Base::Vector3d(0,1,0), Base::Vector3d(0,0,-1) ); - addRotItem(cl); diff --git a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp index 3013817189c7..3aa270e7d15b 100644 --- a/src/Mod/TechDraw/Gui/TaskProjGroup.cpp +++ b/src/Mod/TechDraw/Gui/TaskProjGroup.cpp @@ -179,12 +179,9 @@ void TaskProjGroup::on3DClicked(void) 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) { //why "if front"??? - Base::Console().Message("TRACE - TPG::on3DClicked - front found\n"); multiView->setTable(dir,up); setUiPrimary(); Gui::Command::updateActive(); @@ -438,11 +435,9 @@ std::pair TaskProjGroup::get3DViewDir() viewDir = Base::Vector3d(dvec[0], dvec[1], dvec[2]); 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()); + viewDir = DrawUtil::closestBasis(viewDir); + viewUp = DrawUtil::closestBasis(viewUp); result = std::make_pair(viewDir,viewUp); return result; }