From 7d102a53709b95694c62842ced2b6992f0114d1d Mon Sep 17 00:00:00 2001 From: vocx-fc Date: Tue, 11 Feb 2020 00:33:13 -0600 Subject: [PATCH 01/13] Draft: move Draft_Edit to another module --- src/Mod/Draft/CMakeLists.txt | 2 +- src/Mod/Draft/DraftTools.py | 6 +++--- src/Mod/Draft/{DraftEdit.py => draftguitools/gui_edit.py} | 6 +++++- 3 files changed, 9 insertions(+), 5 deletions(-) rename src/Mod/Draft/{DraftEdit.py => draftguitools/gui_edit.py} (99%) diff --git a/src/Mod/Draft/CMakeLists.txt b/src/Mod/Draft/CMakeLists.txt index fa8f6673c2..37658b24c4 100644 --- a/src/Mod/Draft/CMakeLists.txt +++ b/src/Mod/Draft/CMakeLists.txt @@ -13,7 +13,6 @@ SET(Draft_SRCS_base DraftVecUtils.py DraftGeomUtils.py DraftLayer.py - DraftEdit.py DraftFillet.py WorkingPlane.py getSVG.py @@ -85,6 +84,7 @@ SET(Draft_GUI_tools draftguitools/gui_snaps.py draftguitools/gui_snapper.py draftguitools/gui_trackers.py + draftguitools/gui_edit.py draftguitools/README.md ) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index 912e11f803..ab7f5428bb 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -36,7 +36,7 @@ __url__ = "https://www.freecadweb.org" # Generic stuff #--------------------------------------------------------------------------- -import sys, os, FreeCAD, FreeCADGui, WorkingPlane, math, re, Draft, Draft_rc, DraftVecUtils +import sys, FreeCAD, FreeCADGui, WorkingPlane, math, Draft, Draft_rc, DraftVecUtils from FreeCAD import Vector from PySide import QtCore,QtGui import DraftGui @@ -56,9 +56,9 @@ if not hasattr(FreeCAD, "DraftWorkingPlane"): # Commands that have been migrated to their own modules #--------------------------------------------------------------------------- -import DraftEdit -# import DraftFillet +import draftguitools.gui_edit import draftguitools.gui_selectplane +# import DraftFillet import drafttaskpanels.task_shapestring as task_shapestring import drafttaskpanels.task_scale as task_scale diff --git a/src/Mod/Draft/DraftEdit.py b/src/Mod/Draft/draftguitools/gui_edit.py similarity index 99% rename from src/Mod/Draft/DraftEdit.py rename to src/Mod/Draft/draftguitools/gui_edit.py index 095115269c..09d5687e50 100644 --- a/src/Mod/Draft/DraftEdit.py +++ b/src/Mod/Draft/draftguitools/gui_edit.py @@ -1,4 +1,8 @@ -# -*- coding: utf8 -*- +"""Provide the Draft_Edit command used by the Draft workbench.""" +## @package gui_edit +# \ingroup DRAFT +# \brief Provide the Draft_Edit command used by the Draft workbench + #*************************************************************************** #* Copyright (c) 2009, 2010 Yorik van Havre * #* Copyright (c) 2009, 2010 Ken Cline * From 3f726f662f277f95c54c4bf7e7a28dd36a808dc8 Mon Sep 17 00:00:00 2001 From: vocx-fc Date: Thu, 13 Feb 2020 01:47:44 -0600 Subject: [PATCH 02/13] Draft: update unit test for gui_edit --- src/Mod/Draft/drafttests/test_import_tools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/drafttests/test_import_tools.py b/src/Mod/Draft/drafttests/test_import_tools.py index 77bd030f4a..1232da5ef0 100644 --- a/src/Mod/Draft/drafttests/test_import_tools.py +++ b/src/Mod/Draft/drafttests/test_import_tools.py @@ -38,7 +38,7 @@ class DraftImportTools(unittest.TestCase): def test_import_gui_draftedit(self): """Import Draft Edit.""" - module = "DraftEdit" + module = "draftguitools.gui_edit" if not App.GuiUp: aux._no_gui(module) self.assertTrue(True) From ae72e2c762831ddb84213c73053645c3ffec7f5c Mon Sep 17 00:00:00 2001 From: "luz.paz" Date: Fri, 3 Apr 2020 12:30:58 -0400 Subject: [PATCH 03/13] Trivial code formatting for some {.cpp,.h} files --- src/App/DocumentObject.h | 2 +- src/App/Extension.cpp | 8 ++--- src/App/Property.h | 24 +++++++------- src/Base/Console.cpp | 67 ++++++++++++++++++++-------------------- src/Base/Exception.cpp | 12 +++---- src/Base/Interpreter.cpp | 4 +-- src/Base/MatrixPyImp.cpp | 8 ++--- src/Base/Quantity.cpp | 6 ++-- src/Base/Rotation.cpp | 16 +++++----- src/Base/Tools.h | 4 +-- src/Base/Tools2D.cpp | 16 +++++----- src/Base/Type.cpp | 14 ++++----- src/Base/Unit.cpp | 6 ++-- src/Base/UnitPyImp.cpp | 2 +- 14 files changed, 95 insertions(+), 94 deletions(-) diff --git a/src/App/DocumentObject.h b/src/App/DocumentObject.h index ca86a0719e..f4202f6eb8 100644 --- a/src/App/DocumentObject.h +++ b/src/App/DocumentObject.h @@ -78,7 +78,7 @@ public: DocumentObjectExecReturn(const char* sWhy, DocumentObject* WhichObject=0) : Which(WhichObject) { - if(sWhy) + if (sWhy) Why = sWhy; } diff --git a/src/App/Extension.cpp b/src/App/Extension.cpp index f0fb3d59f2..fe55f97ca9 100644 --- a/src/App/Extension.cpp +++ b/src/App/Extension.cpp @@ -74,13 +74,13 @@ Extension::~Extension() void Extension::initExtensionType(Base::Type type) { m_extensionType = type; - if(m_extensionType.isBad()) + if (m_extensionType.isBad()) throw Base::RuntimeError("Extension: Extension type not set"); } void Extension::initExtension(ExtensionContainer* obj) { - if(m_extensionType.isBad()) + if (m_extensionType.isBad()) throw Base::RuntimeError("Extension: Extension type not set"); //all properties are initialised without PropertyContainer father. Now that we know it we can @@ -107,13 +107,13 @@ PyObject* Extension::getExtensionPyObject(void) { std::string Extension::name() const { - if(m_extensionType.isBad()) + if (m_extensionType.isBad()) throw Base::RuntimeError("Extension::name: Extension type not set"); std::string temp(m_extensionType.getName()); std::string::size_type pos = temp.find_last_of(':'); - if(pos != std::string::npos) + if (pos != std::string::npos) return temp.substr(pos+1); else return std::string(); diff --git a/src/App/Property.h b/src/App/Property.h index 07df953ffd..be321d346c 100644 --- a/src/App/Property.h +++ b/src/App/Property.h @@ -329,7 +329,7 @@ public: * before, and only then will it call the property's aboutToSetValue(). */ void aboutToChange() { - if(!mProp.hasChanged) { + if (!mProp.hasChanged) { mProp.hasChanged = true; mProp.aboutToSetValue(); } @@ -350,12 +350,12 @@ public: // Must make sure to not throw in a destructor try { mProp.hasSetValue(); - }catch(Base::Exception &e) { + } catch(Base::Exception &e) { e.ReportException(); - }catch(...) {} + } catch(...) {} mProp.hasChanged = false; } - if(mProp.signalCounter>0) + if (mProp.signalCounter>0) mProp.signalCounter--; } @@ -367,9 +367,9 @@ public: // Destructor cannot throw. So we provide this function to allow error // propagation. void tryInvoke() { - if(mProp.signalCounter==1 && mProp.hasChanged) { + if (mProp.signalCounter==1 && mProp.hasChanged) { mProp.hasSetValue(); - if(mProp.signalCounter>0) + if (mProp.signalCounter>0) --mProp.signalCounter; mProp.hasChanged = false; } @@ -500,14 +500,14 @@ public: virtual void set1Value(int index, const_reference value) { int size = getSize(); - if(index<-1 || index>size) + if (index<-1 || index>size) throw Base::RuntimeError("index out of bound"); atomic_change guard(*this); - if(index==-1 || index == size) { + if (index==-1 || index == size) { index = size; setSize(index+1,value); - }else + } else _lValueList[index] = value; this->_touchList.insert(index); guard.tryInvoke(); @@ -517,17 +517,17 @@ protected: void setPyValues(const std::vector &vals, const std::vector &indices) override { - if(indices.empty()) { + if (indices.empty()) { ListT values; values.resize(vals.size()); - for(std::size_t i=0,count=vals.size();i::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) + for (std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) delete (*Iter); } @@ -383,32 +383,32 @@ void ConsoleSingleton::DetachObserver(ILogger *pcObserver) void ConsoleSingleton::NotifyMessage(const char *sMsg) { - for(std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { - if((*Iter)->bMsg) + for (std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { + if ((*Iter)->bMsg) (*Iter)->SendLog(sMsg, LogStyle::Message); // send string to the listener } } void ConsoleSingleton::NotifyWarning(const char *sMsg) { - for(std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { - if((*Iter)->bWrn) + for (std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { + if ((*Iter)->bWrn) (*Iter)->SendLog(sMsg, LogStyle::Warning); // send string to the listener } } void ConsoleSingleton::NotifyError(const char *sMsg) { - for(std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { - if((*Iter)->bErr) + for (std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { + if ((*Iter)->bErr) (*Iter)->SendLog(sMsg, LogStyle::Error); // send string to the listener } } void ConsoleSingleton::NotifyLog(const char *sMsg) { - for(std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { - if((*Iter)->bLog) + for (std::set::iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { + if ((*Iter)->bLog) (*Iter)->SendLog(sMsg, LogStyle::Log); // send string to the listener } } @@ -416,26 +416,26 @@ void ConsoleSingleton::NotifyLog(const char *sMsg) ILogger *ConsoleSingleton::Get(const char *Name) const { const char* OName; - for(std::set::const_iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { + for (std::set::const_iterator Iter=_aclObservers.begin();Iter!=_aclObservers.end();++Iter) { OName = (*Iter)->Name(); // get the name - if(OName && strcmp(OName,Name) == 0) + if (OName && strcmp(OName,Name) == 0) return *Iter; } return 0; } int *ConsoleSingleton::GetLogLevel(const char *tag, bool create) { - if(!tag) tag = ""; - if(_logLevels.find(tag) != _logLevels.end()) + if (!tag) tag = ""; + if (_logLevels.find(tag) != _logLevels.end()) return &_logLevels[tag]; - if(!create) return 0; + if (!create) return 0; int &ret = _logLevels[tag]; ret = -1; return &ret; } void ConsoleSingleton::Refresh() { - if(_bCanRefresh) + if (_bCanRefresh) qApp->processEvents(QEventLoop::ExcludeUserInputEvents); } @@ -459,7 +459,7 @@ void ConsoleSingleton::Destruct(void) ConsoleSingleton & ConsoleSingleton::Instance(void) { // not initialized? - if(!_pcSingleton) + if (!_pcSingleton) { _pcSingleton = new ConsoleSingleton(); } @@ -681,19 +681,19 @@ PyObject *ConsoleSingleton::sPyGetStatus(PyObject * /*self*/, PyObject *args) PY_TRY{ bool b=false; ILogger *pObs = Instance().Get(pstr1); - if(!pObs) + if (!pObs) { Py_INCREF(Py_None); return Py_None; } - if(strcmp(pstr2,"Log") == 0) + if (strcmp(pstr2,"Log") == 0) b = pObs->bLog; - else if(strcmp(pstr2,"Wrn") == 0) + else if (strcmp(pstr2,"Wrn") == 0) b = pObs->bWrn; - else if(strcmp(pstr2,"Msg") == 0) + else if (strcmp(pstr2,"Msg") == 0) b = pObs->bMsg; - else if(strcmp(pstr2,"Err") == 0) + else if (strcmp(pstr2,"Err") == 0) b = pObs->bErr; return Py_BuildValue("i",b?1:0); @@ -710,22 +710,23 @@ PyObject *ConsoleSingleton::sPySetStatus(PyObject * /*self*/, PyObject *args) PY_TRY{ ILogger *pObs = Instance().Get(pstr1); - if(pObs) + if (pObs) { - if(strcmp(pstr2,"Log") == 0) + if (strcmp(pstr2,"Log") == 0) pObs->bLog = (Bool==0)?false:true; - else if(strcmp(pstr2,"Wrn") == 0) + else if (strcmp(pstr2,"Wrn") == 0) pObs->bWrn = (Bool==0)?false:true; - else if(strcmp(pstr2,"Msg") == 0) + else if (strcmp(pstr2,"Msg") == 0) pObs->bMsg = (Bool==0)?false:true; - else if(strcmp(pstr2,"Err") == 0) + else if (strcmp(pstr2,"Err") == 0) pObs->bErr = (Bool==0)?false:true; else Py_Error(Base::BaseExceptionFreeCADError,"Unknown Message Type (use Log, Err, Msg or Wrn)"); Py_INCREF(Py_None); return Py_None; - } else { + } + else { Py_Error(Base::BaseExceptionFreeCADError,"Unknown Console Type"); } @@ -948,8 +949,8 @@ std::stringstream &LogLevel::prefix(std::stringstream &str, const char *src, int { static FC_TIME_POINT s_tstart; static bool s_timing = false; - if(print_time) { - if(!s_timing) { + if (print_time) { + if (!s_timing) { s_timing = true; _FC_TIME_INIT(s_tstart); } @@ -957,10 +958,10 @@ std::stringstream &LogLevel::prefix(std::stringstream &str, const char *src, int auto d = std::chrono::duration_cast(tnow-s_tstart); str << d.count() << ' '; } - if(print_tag) str << '<' << tag << "> "; - if(print_src==2) { + if (print_tag) str << '<' << tag << "> "; + if (print_src==2) { PyFrameObject* frame = PyEval_GetFrame(); - if(frame) { + if (frame) { line = PyFrame_GetLineNumber(frame); #if PY_MAJOR_VERSION >= 3 src = PyUnicode_AsUTF8(frame->f_code->co_filename); @@ -969,7 +970,7 @@ std::stringstream &LogLevel::prefix(std::stringstream &str, const char *src, int #endif } } - if(print_src && src && src[0]) { + if (print_src && src && src[0]) { #ifdef FC_OS_WIN32 const char *_f = std::strrchr(src, '\\'); #else diff --git a/src/Base/Exception.cpp b/src/Base/Exception.cpp index 048b0baf46..522429de6d 100644 --- a/src/Base/Exception.cpp +++ b/src/Base/Exception.cpp @@ -91,14 +91,14 @@ void Exception::ReportException (void) const { if (!_isReported) { const char *msg; - if(_sErrMsg.empty()) + if (_sErrMsg.empty()) msg = typeid(*this).name(); else msg = _sErrMsg.c_str(); #ifdef FC_DEBUG - if(_function.size()) { + if (_function.size()) { _FC_ERR(_file.c_str(),_line, _function << " -- " << msg); - }else + } else #endif _FC_ERR(_file.c_str(),_line,msg); _isReported = true; @@ -319,14 +319,14 @@ void FileException::ReportException (void) const { if (!_isReported) { const char *msg; - if(_sErrMsgAndFileName.empty()) + if (_sErrMsgAndFileName.empty()) msg = typeid(*this).name(); else msg = _sErrMsgAndFileName.c_str(); #ifdef FC_DEBUG - if(_function.size()) { + if (_function.size()) { _FC_ERR(_file.c_str(),_line, _function << " -- " << msg); - }else + } else #endif _FC_ERR(_file.c_str(),_line,msg); _isReported = true; diff --git a/src/Base/Interpreter.cpp b/src/Base/Interpreter.cpp index ad7175014e..03b74aee61 100644 --- a/src/Base/Interpreter.cpp +++ b/src/Base/Interpreter.cpp @@ -82,7 +82,7 @@ PyException::PyException(void) _exceptionType = PP_last_exception_type; - if(PP_last_exception_type) { + if (PP_last_exception_type) { // WARNING: we are assuming that python type object will never be // destroyed, so we don't keep reference here to save book-keeping in // our copy constructor and destructor @@ -123,7 +123,7 @@ void PyException::raiseException() { if (_exceptionType == Base::BaseExceptionFreeCADAbort) edict.setItem("sclassname", Py::String(typeid(Base::AbortException).name())); - if(_isReported) + if (_isReported) edict.setItem("breported", Py::True()); Base::ExceptionFactory::Instance().raiseException(edict.ptr()); } diff --git a/src/Base/MatrixPyImp.cpp b/src/Base/MatrixPyImp.cpp index bb3501d3b2..6c18dfe0ca 100644 --- a/src/Base/MatrixPyImp.cpp +++ b/src/Base/MatrixPyImp.cpp @@ -178,10 +178,10 @@ PyObject * MatrixPy::number_power_handler (PyObject* self, PyObject* other, PyOb Base::Matrix4D a = static_cast(self)->value(); long b = Py::Int(other); - if(!b) + if (!b) return new MatrixPy(Matrix4D()); - if(b < 0) { + if (b < 0) { if (fabs(a.determinant()) > DBL_EPSILON) a.inverseGauss(); else { @@ -192,7 +192,7 @@ PyObject * MatrixPy::number_power_handler (PyObject* self, PyObject* other, PyOb } auto res = a; - for(--b;b;--b) + for (--b;b;--b) res *= a; return new MatrixPy(res); } @@ -303,7 +303,7 @@ PyObject* MatrixPy::scale(PyObject * args) PyObject* MatrixPy::hasScale(PyObject * args) { double tol=0; - if(!PyArg_ParseTuple(args, "|d", &tol)) + if (!PyArg_ParseTuple(args, "|d", &tol)) return 0; return Py::new_reference_to(Py::Int(getMatrixPtr()->hasScale(tol))); } diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index 4218fc1957..5fab996453 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -396,11 +396,11 @@ double num_change(char* yytext,char dez_delim,char grp_delim) double ret_val; char temp[40]; int i = 0; - for(char* c=yytext;*c!='\0';c++){ + for (char* c=yytext;*c!='\0';c++){ // skip group delimiter - if(*c==grp_delim) continue; + if (*c==grp_delim) continue; // check for a dez delimiter other then dot - if(*c==dez_delim && dez_delim !='.') + if (*c==dez_delim && dez_delim !='.') temp[i++] = '.'; else temp[i++] = *c; diff --git a/src/Base/Rotation.cpp b/src/Base/Rotation.cpp index 24bb6840b7..4d4971a6c3 100644 --- a/src/Base/Rotation.cpp +++ b/src/Base/Rotation.cpp @@ -121,7 +121,7 @@ void Rotation::evaluateVector() // Taken from // // Note: -1 < w < +1 (|w| == 1 not allowed, with w:=quat[3]) - if((this->quat[3] > -1.0) && (this->quat[3] < 1.0)) { + if ((this->quat[3] > -1.0) && (this->quat[3] < 1.0)) { double rfAngle = acos(this->quat[3]) * 2.0; double scale = sin(rfAngle / 2.0); // Get a normalized vector @@ -287,7 +287,7 @@ void Rotation::setValue(const Vector3d & rotateFrom, const Vector3d & rotateTo) else { // We can use any axis perpendicular to u (and v) Vector3d t = u % Vector3d(1.0, 0.0, 0.0); - if(t.Length() < Base::Vector3d::epsilon()) + if (t.Length() < Base::Vector3d::epsilon()) t = u % Vector3d(0.0, 1.0, 0.0); this->setValue(t.x, t.y, t.z, 0.0); } @@ -455,7 +455,7 @@ Rotation Rotation::slerp(const Rotation & q0, const Rotation & q1, double t) double scale1 = t; double dot = q0.quat[0]*q1.quat[0]+q0.quat[1]*q1.quat[1]+q0.quat[2]*q1.quat[2]+q0.quat[3]*q1.quat[3]; bool neg=false; - if(dot < 0.0) { + if (dot < 0.0) { dot = -dot; neg = true; } @@ -495,10 +495,10 @@ Rotation Rotation::makeRotationByAxes(Vector3d xdir, Vector3d ydir, Vector3d zdi }; //convert priorityOrder string into a sequence of ints. - if(strlen(priorityOrder)!=3) + if (strlen(priorityOrder)!=3) THROWM(ValueError, "makeRotationByAxes: length of priorityOrder is not 3"); int order[3]; - for(int i = 0; i < 3; ++i){ + for (int i = 0; i < 3; ++i){ order[i] = priorityOrder[i] - 'X'; if (order[i] < 0 || order[i] > 2) THROWM(ValueError, "makeRotationByAxes: characters in priorityOrder must be uppercase X, Y, or Z. Some other character encountered.") @@ -531,7 +531,7 @@ Rotation Rotation::makeRotationByAxes(Vector3d xdir, Vector3d ydir, Vector3d zdi //pick up the strict direction Vector3d mainDir; - for(int i = 0; i < 3; ++i){ + for (int i = 0; i < 3; ++i){ mainDir = *(dirs[order[0]]); if (mainDir.Length() > tol) break; @@ -544,7 +544,7 @@ Rotation Rotation::makeRotationByAxes(Vector3d xdir, Vector3d ydir, Vector3d zdi //pick up the 2nd priority direction, "hint" direction. Vector3d hintDir; - for(int i = 0; i < 2; ++i){ + for (int i = 0; i < 2; ++i){ hintDir = *(dirs[order[1]]); if ((hintDir.Cross(mainDir)).Length() > tol) break; @@ -619,7 +619,7 @@ Rotation Rotation::makeRotationByAxes(Vector3d xdir, Vector3d ydir, Vector3d zdi //build the rotation, by constructing a matrix first. Matrix4D m; m.setToUnity(); - for(int i = 0; i < 3; ++i){ + for (int i = 0; i < 3; ++i){ //matrix indexing: [row][col] m[0][i] = finaldirs[i].x; m[1][i] = finaldirs[i].y; diff --git a/src/Base/Tools.h b/src/Base/Tools.h index 7b0826bcc8..1decb4517d 100644 --- a/src/Base/Tools.h +++ b/src/Base/Tools.h @@ -202,12 +202,12 @@ struct FlagToggler { FlagToggler(Flag &_flag, Flag check) :flag(_flag),toggled(check==_flag) { - if(toggled) + if (toggled) flag = !flag; } ~FlagToggler() { - if(toggled) + if (toggled) flag = !flag; } }; diff --git a/src/Base/Tools2D.cpp b/src/Base/Tools2D.cpp index 973469d36f..b62aeb4a18 100644 --- a/src/Base/Tools2D.cpp +++ b/src/Base/Tools2D.cpp @@ -425,29 +425,29 @@ void Polygon2d::Intersect (const Polygon2d &rclPolygon, std::list &rc } bool Polygon2d::Intersect (const Polygon2d &other) const { - if(other.GetCtVectors()<2 || GetCtVectors() < 2) + if (other.GetCtVectors()<2 || GetCtVectors() < 2) return false; - for(auto &v : _aclVct) { - if(other.Contains(v)) + for (auto &v : _aclVct) { + if (other.Contains(v)) return true; } - if(Contains(other[0])) + if (Contains(other[0])) return true; - for(size_t j=1; j::const_iterator pos; pos = typemap.find(name); - if(pos != typemap.end()) + if (pos != typemap.end()) return typedata[pos->second]->type; else return Type::badType(); @@ -186,7 +186,7 @@ Type Type::fromName(const char *name) Type Type::fromKey(unsigned int key) { - if(key < typedata.size()) + if (key < typedata.size()) return typedata[key]->type; else return Type::badType(); @@ -207,7 +207,7 @@ bool Type::isDerivedFrom(const Type type) const Type temp(*this); do { - if(temp == type) + if (temp == type) return true; temp = temp.getParent(); } while (temp != badType()); @@ -221,7 +221,7 @@ int Type::getAllDerivedFrom(const Type type, std::vector & List) for(std::vector::const_iterator it = typedata.begin();it!= typedata.end();++it) { - if((*it)->type.isDerivedFrom(type)) + if ((*it)->type.isDerivedFrom(type)) { List.push_back((*it)->type); cnt++; diff --git a/src/Base/Unit.cpp b/src/Base/Unit.cpp index 933118700e..f3c63b763f 100644 --- a/src/Base/Unit.cpp +++ b/src/Base/Unit.cpp @@ -355,7 +355,7 @@ QString Unit::getString(void) const } if (Sig.Mass < 0) { - if(mult) + if (mult) ret<<'*'; mult = true; ret << "kg"; @@ -364,7 +364,7 @@ QString Unit::getString(void) const } if (Sig.Time < 0) { - if(mult) + if (mult) ret<<'*'; mult = true; ret << "s"; @@ -373,7 +373,7 @@ QString Unit::getString(void) const } if (Sig.ElectricCurrent < 0) { - if(mult) + if (mult) ret<<'*'; mult = true; ret << "A"; diff --git a/src/Base/UnitPyImp.cpp b/src/Base/UnitPyImp.cpp index 768abd2b30..07ebb12056 100644 --- a/src/Base/UnitPyImp.cpp +++ b/src/Base/UnitPyImp.cpp @@ -26,7 +26,7 @@ std::string UnitPy::representation(void) const ret << Sig.LuminousIntensity << ","; ret << Sig.Angle << ")"; std::string type = getUnitPtr()->getTypeString().toUtf8().constData(); - if(! type.empty()) + if (! type.empty()) ret << " [" << type << "]"; return ret.str(); From 6a96fc2bee76a4e6d74a1ddc8ec75cbfb6a6b0b8 Mon Sep 17 00:00:00 2001 From: Jean-Marie Verdun Date: Sun, 5 Apr 2020 21:09:23 -0400 Subject: [PATCH 04/13] Fix MacOS build with Catalina and latest homebrew Add support for self signed certificate in the case the end user wants to use minio or any other self hosted s3 storage --- src/Mod/Cloud/App/AppCloud.cpp | 21 +++++++++++++++++++++ src/Mod/Cloud/App/CMakeLists.txt | 2 +- src/Mod/Cloud/CMakeLists.txt | 10 ++++++---- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/Mod/Cloud/App/AppCloud.cpp b/src/Mod/Cloud/App/AppCloud.cpp index d1ae135e13..e669c67cf9 100644 --- a/src/Mod/Cloud/App/AppCloud.cpp +++ b/src/Mod/Cloud/App/AppCloud.cpp @@ -212,6 +212,11 @@ void Cloud::CloudWriter::createBucket() // Let's build the Header and call to curl curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); +#ifdef ALLOW_SELF_SIGNED_CERTIFICATE + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); +#endif + if ( curl ) { struct curl_slist *chunk = NULL; @@ -390,6 +395,10 @@ Cloud::CloudWriter::CloudWriter(const char* Url, const char* AccessKey, const ch // Let's build the Header and call to curl curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); +#ifdef ALLOW_SELF_SIGNED_CERTIFICATE + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); +#endif if ( curl ) { // Let's build our own header @@ -577,6 +586,10 @@ Cloud::CloudReader::CloudReader(const char* Url, const char* AccessKey, const ch std::string s; RequestData = Cloud::ComputeDigestAmzS3v2("GET", "application/xml", path, this->SecretKey, NULL, 0); curl = curl_easy_init(); +#ifdef ALLOW_SELF_SIGNED_CERTIFICATE + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); +#endif if ( curl ) { // Let's build our own header @@ -661,6 +674,10 @@ void Cloud::CloudReader::DownloadFile(Cloud::CloudReader::FileEntry *entry) // Let's build the Header and call to curl curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); +#ifdef ALLOW_SELF_SIGNED_CERTIFICATE + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); +#endif if ( curl ) { struct curl_slist *chunk = NULL; @@ -771,6 +788,10 @@ void Cloud::CloudWriter::pushCloud(const char *FileName, const char *data, long // Let's build the Header and call to curl curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); +#ifdef ALLOW_SELF_SIGNED_CERTIFICATE + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0); + curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); +#endif if ( curl ) { struct curl_slist *chunk = NULL; diff --git a/src/Mod/Cloud/App/CMakeLists.txt b/src/Mod/Cloud/App/CMakeLists.txt index d51883b4f5..3c5a43edba 100644 --- a/src/Mod/Cloud/App/CMakeLists.txt +++ b/src/Mod/Cloud/App/CMakeLists.txt @@ -11,7 +11,7 @@ include_directories( set(Cloud_LIBS FreeCADApp - ${OPENSSL_LIBRARIES} + ${OPENSSL_LINK_LIBRARIES} ${CURL_LIBRARIES} ${XercesC_LIBRARIES} ${Boost_LIBRARIES} diff --git a/src/Mod/Cloud/CMakeLists.txt b/src/Mod/Cloud/CMakeLists.txt index e7293661e1..d359859b64 100644 --- a/src/Mod/Cloud/CMakeLists.txt +++ b/src/Mod/Cloud/CMakeLists.txt @@ -1,8 +1,10 @@ +#----------------------------- Control certificate validation ------------ +option(ALLOW_SELF_SIGNED_CERTIFICATE "Allow self signed certificate" OFF) +if (ALLOW_SELF_SIGNED_CERTIFICATE) +add_compile_options("-DALLOW_SELF_SIGNED_CERTIFICATE") +endif () #------------------------------ OpenSSL and CURL ------------------------- -if (APPLE) - set(OPENSSL_ROOT_DIR ${HOMEBREW_PREFIX}/Cellar/openssl/*) -endif(APPLE) -if (UNIX AND NOT APPLE) +if (UNIX AND APPLE) find_package(PkgConfig REQUIRED) pkg_search_module(OPENSSL REQUIRED openssl) elseif(WIN32 AND LIBPACK_FOUND) From 9f28844bf295620987dfa912b4a5305a367ab669 Mon Sep 17 00:00:00 2001 From: vocx-fc Date: Thu, 2 Apr 2020 00:00:52 -0600 Subject: [PATCH 05/13] Draft: example file with a preview in the Start page --- data/examples/draft_test_objects.FCStd | Bin 92535 -> 99389 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/examples/draft_test_objects.FCStd b/data/examples/draft_test_objects.FCStd index 2f40a67f2bc446201e1244bf0a56998a07343fa8..4293fa4c9092d5427a785b113e8e1264e5389592 100644 GIT binary patch delta 6966 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 Date: Wed, 1 Apr 2020 21:26:54 -0600 Subject: [PATCH 06/13] Draft: Draft_Text split lines by newline characters --- src/Mod/Draft/DraftGui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Draft/DraftGui.py b/src/Mod/Draft/DraftGui.py index 8e3798f824..4c12910ac3 100644 --- a/src/Mod/Draft/DraftGui.py +++ b/src/Mod/Draft/DraftGui.py @@ -1619,7 +1619,7 @@ class DraftToolBar: """this function sends the entered text to the active draft command if enter has been pressed twice. Otherwise it blanks the line. """ - self.sourceCmd.text = self.textValue.toPlainText().split() + self.sourceCmd.text = self.textValue.toPlainText().splitlines() self.sourceCmd.createObject() def displayPoint(self, point=None, last=None, plane=None, mask=None): From a0ec9771520c114917cc501b2cc9355db8f40688 Mon Sep 17 00:00:00 2001 From: Syres916 <46537884+Syres916@users.noreply.github.com> Date: Tue, 31 Mar 2020 15:25:57 +0100 Subject: [PATCH 07/13] [Gui] Edit Menu Remove Duplicate Shift+E... ....shortcut, return Toggle Edit to pre-Big Merge with no shortcut. See Discussion https://forum.freecadweb.org/viewtopic.php?f=3&t=44394 --- src/Gui/CommandDoc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Gui/CommandDoc.cpp b/src/Gui/CommandDoc.cpp index c1beaad45a..a79ad6a289 100644 --- a/src/Gui/CommandDoc.cpp +++ b/src/Gui/CommandDoc.cpp @@ -1503,7 +1503,7 @@ StdCmdEdit::StdCmdEdit() sToolTipText = QT_TR_NOOP("Toggles the selected object's edit mode"); sWhatsThis = "Std_Edit"; sStatusTip = QT_TR_NOOP("Activates or Deactivates the selected object's edit mode"); - sAccel = "Shift+E"; + sAccel = ""; #if QT_VERSION >= 0x040200 sPixmap = "edit-edit"; #endif From 43844e9a59670b178a869d19ea186a9b5509b3d1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 6 Apr 2020 14:12:44 +0200 Subject: [PATCH 08/13] Part: [skip ci] set again Two-side rendering as default lighting style --- src/Mod/Part/Gui/DlgSettingsObjectColor.ui | 3 +++ src/Mod/Part/Gui/ViewProviderExt.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Mod/Part/Gui/DlgSettingsObjectColor.ui b/src/Mod/Part/Gui/DlgSettingsObjectColor.ui index 97da9983d8..9de8a266bd 100644 --- a/src/Mod/Part/Gui/DlgSettingsObjectColor.ui +++ b/src/Mod/Part/Gui/DlgSettingsObjectColor.ui @@ -251,6 +251,9 @@ Two-side rendering + + true + TwoSideRendering diff --git a/src/Mod/Part/Gui/ViewProviderExt.cpp b/src/Mod/Part/Gui/ViewProviderExt.cpp index 70230e0af6..709873bc3d 100644 --- a/src/Mod/Part/Gui/ViewProviderExt.cpp +++ b/src/Mod/Part/Gui/ViewProviderExt.cpp @@ -246,7 +246,7 @@ ViewProviderPartExt::ViewProviderPartExt() ("User parameter:BaseApp/Preferences/Mod/Part"); NormalsFromUV = hPart->GetBool("NormalsFromUVNodes", NormalsFromUV); - long twoside = hPart->GetBool("TwoSideRendering", false) ? 1 : 0; + long twoside = hPart->GetBool("TwoSideRendering", true) ? 1 : 0; // Let the user define a custom lower limit but a value less than // OCCT's epsilon is not allowed From a0c5f999a39481224279a214006b9354b3c9e0c5 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 6 Apr 2020 17:07:09 +0200 Subject: [PATCH 09/13] Cloud: fix broken CMake file --- src/Mod/Cloud/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Mod/Cloud/CMakeLists.txt b/src/Mod/Cloud/CMakeLists.txt index d359859b64..c2519f4f84 100644 --- a/src/Mod/Cloud/CMakeLists.txt +++ b/src/Mod/Cloud/CMakeLists.txt @@ -29,8 +29,8 @@ elseif(WIN32 AND LIBPACK_FOUND) set(OPENSSL_VERSION ${openssl_version_str}) endif () else() - find_package(OPENSSL REQUIRED) -endif(UNIX AND NOT APPLE) + find_package(OpenSSL REQUIRED) +endif(UNIX AND APPLE) if(OPENSSL_FOUND) message(STATUS "openssl-${OPENSSL_VERSION} has been found\n") else() From 7f0852ef117a01dbbbfc11b5eddf6f37024d0d07 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 6 Apr 2020 17:58:08 +0200 Subject: [PATCH 10/13] Cloud: [skip ci] restore old CMake variable to link to OpenSSL to fix build failure on Linux and Windows --- src/Mod/Cloud/App/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mod/Cloud/App/CMakeLists.txt b/src/Mod/Cloud/App/CMakeLists.txt index 3c5a43edba..d51883b4f5 100644 --- a/src/Mod/Cloud/App/CMakeLists.txt +++ b/src/Mod/Cloud/App/CMakeLists.txt @@ -11,7 +11,7 @@ include_directories( set(Cloud_LIBS FreeCADApp - ${OPENSSL_LINK_LIBRARIES} + ${OPENSSL_LIBRARIES} ${CURL_LIBRARIES} ${XercesC_LIBRARIES} ${Boost_LIBRARIES} From 3c52ff6c7fe99714b38923765f43ce8c082904bd Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 6 Apr 2020 19:50:08 +0200 Subject: [PATCH 11/13] Gui: [skip ci] improve whitespaces --- src/Gui/View3DInventorViewer.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 519a904e8d..0458794dea 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -1332,22 +1332,27 @@ bool View3DInventorViewer::isEnabledVBO() const void View3DInventorViewer::setRenderCache(int mode) { - if(mode<0) { + if (mode<0) { ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath ("User parameter:BaseApp/Preferences/View"); - int setting = hGrp->GetInt("RenderCache",0); - if(mode==-2) { - if(pcViewProviderRoot && setting!=1) + + int setting = hGrp->GetInt("RenderCache", 0); + if (mode == -2) { + if (pcViewProviderRoot && setting != 1) pcViewProviderRoot->renderCaching = SoSeparator::ON; mode = 2; - }else{ - if(pcViewProviderRoot) + } + else { + if (pcViewProviderRoot) pcViewProviderRoot->renderCaching = SoSeparator::AUTO; mode = setting; } } + SoFCSeparator::setCacheMode( - mode==0?SoSeparator::AUTO:(mode==1?SoSeparator::ON:SoSeparator::OFF)); + mode == 0 ? SoSeparator::AUTO : + (mode == 1 ? SoSeparator::ON : SoSeparator::OFF) + ); } void View3DInventorViewer::setEnabledNaviCube(bool on) From 20745f330143e243d335069b4530da2197da3643 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 6 Apr 2020 19:50:58 +0200 Subject: [PATCH 12/13] Gui: [skip ci] add options to set one-pass and backface-pass rendering --- src/Gui/DlgSettings3DView.ui | 55 +++++++++++++++++++++++++++----- src/Gui/DlgSettings3DViewImp.cpp | 4 +++ src/Gui/View3DInventor.cpp | 12 +++++++ 3 files changed, 63 insertions(+), 8 deletions(-) diff --git a/src/Gui/DlgSettings3DView.ui b/src/Gui/DlgSettings3DView.ui index 07024daf4e..25c45f3814 100644 --- a/src/Gui/DlgSettings3DView.ui +++ b/src/Gui/DlgSettings3DView.ui @@ -214,6 +214,45 @@ but slower response to any scene changes. + + + + + + Transparent objects: + + + + + + + + 120 + 0 + + + + Render types of transparent objects + + + TransparentObjectRenderType + + + View + + + + One pass + + + + + Backface pass + + + + + @@ -223,7 +262,7 @@ but slower response to any scene changes. - + @@ -236,14 +275,14 @@ but slower response to any scene changes. - + Eye to eye distance for stereo modes - + @@ -279,7 +318,7 @@ bounding box size of the 3D object that is currently displayed. - + Backlight is enabled with the defined color @@ -295,7 +334,7 @@ bounding box size of the 3D object that is currently displayed. - + false @@ -318,7 +357,7 @@ bounding box size of the 3D object that is currently displayed. - + Qt::Horizontal @@ -331,7 +370,7 @@ bounding box size of the 3D object that is currently displayed. - + false @@ -347,7 +386,7 @@ bounding box size of the 3D object that is currently displayed. - + false diff --git a/src/Gui/DlgSettings3DViewImp.cpp b/src/Gui/DlgSettings3DViewImp.cpp index 6365e0e547..90db0ba8ce 100644 --- a/src/Gui/DlgSettings3DViewImp.cpp +++ b/src/Gui/DlgSettings3DViewImp.cpp @@ -83,6 +83,8 @@ void DlgSettings3DViewImp::saveSettings() index = ui->renderCache->currentIndex(); hGrp->SetInt("RenderCache", index); + ui->comboTransparentRender->onSave(); + QVariant const &vBoxMarkerSize = ui->boxMarkerSize->itemData(ui->boxMarkerSize->currentIndex()); hGrp->SetInt("MarkerSize", vBoxMarkerSize.toInt()); @@ -124,6 +126,8 @@ void DlgSettings3DViewImp::loadSettings() index = hGrp->GetInt("RenderCache", 0); ui->renderCache->setCurrentIndex(index); + ui->comboTransparentRender->onRestore(); + int const current = hGrp->GetInt("MarkerSize", 9L); ui->boxMarkerSize->addItem(tr("5px"), QVariant(5)); ui->boxMarkerSize->addItem(tr("7px"), QVariant(7)); diff --git a/src/Gui/View3DInventor.cpp b/src/Gui/View3DInventor.cpp index b0228fe3c1..71c3608b4a 100644 --- a/src/Gui/View3DInventor.cpp +++ b/src/Gui/View3DInventor.cpp @@ -189,6 +189,7 @@ View3DInventor::View3DInventor(Gui::Document* pcDocument, QWidget* parent, OnChange(*hGrp,"Dimensions3dVisible"); OnChange(*hGrp,"DimensionsDeltaVisible"); OnChange(*hGrp,"PickRadius"); + OnChange(*hGrp,"TransparentObjectRenderType"); stopSpinTimer = new QTimer(this); connect(stopSpinTimer, SIGNAL(timeout()), this, SLOT(stopAnimating())); @@ -414,6 +415,17 @@ void View3DInventor::OnChange(ParameterGrp::SubjectType &rCaller,ParameterGrp::M else if (strcmp(Reason, "PickRadius") == 0) { _viewer->setPickRadius(rGrp.GetFloat("PickRadius", 5.0f)); } + else if (strcmp(Reason, "TransparentObjectRenderType") == 0) { + long renderType = rGrp.GetInt("TransparentObjectRenderType", 0); + if (renderType == 0) { + _viewer->getSoRenderManager()->getGLRenderAction() + ->setTransparentDelayedObjectRenderType(SoGLRenderAction::ONE_PASS); + } + else if (renderType == 1) { + _viewer->getSoRenderManager()->getGLRenderAction() + ->setTransparentDelayedObjectRenderType(SoGLRenderAction::NONSOLID_SEPARATE_BACKFACE_PASS); + } + } else { unsigned long col1 = rGrp.GetUnsigned("BackgroundColor",3940932863UL); unsigned long col2 = rGrp.GetUnsigned("BackgroundColor2",859006463UL); // default color (dark blue) From 235991907829197f807d7a38451312b7e6d3c44b Mon Sep 17 00:00:00 2001 From: Patrick F Date: Mon, 6 Apr 2020 21:11:40 +0200 Subject: [PATCH 13/13] Removed offset check --- src/Mod/Path/PathScripts/PathDeburr.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Mod/Path/PathScripts/PathDeburr.py b/src/Mod/Path/PathScripts/PathDeburr.py index e44ab90c71..aa1b1e6d21 100644 --- a/src/Mod/Path/PathScripts/PathDeburr.py +++ b/src/Mod/Path/PathScripts/PathDeburr.py @@ -59,8 +59,7 @@ def toolDepthAndOffset(width, extraDepth, tool): toolOffset = float(tool.FlatRadius) extraOffset = float(tool.Diameter) / 2 - width if 180 == angle else extraDepth / tan offset = toolOffset + extraOffset - if offset < 0.0001: - offset = 0.01 + return (depth, offset)