Commit Graph

593 Commits

Author SHA1 Message Date
Zheng, Lei
576d51a78a Base::Reader: support reading child element with the same name as parent
Future GuiDocument.xml will save recursive tree item expansion status
using child element with the same name as the parent.
2019-08-17 14:52:11 +02:00
Zheng, Lei
35534149a4 Gui: AutoSaver and recovery changes
* Fix AutoSaver inconsistent BinaryBrep setting

* Use temperary name when auto saving, so that it won't overwrite the
  original file, which may cause corruption when crashing in the middel
  of auto saving, especially if auto saving in a separate thread.

* Support auto recovery document containing external links

* Do not mark success after auto recover, in case the program crash
  again before the user remember to save the just recovered file. Only
  mark when user saves the document.
2019-08-17 14:52:11 +02:00
Zheng, Lei
b057952a7e App: API changes for document recompute/save/restore/import/export
This patch adds support of recomputation with external linked object,
as well as external document auto loading and partial loading.

Application:

* Modified new/openDocument()/signalNewDocument to choose whether to
  signal GUI for creating a view for the document. This makes it possible
  to suppress view creation when opening external documents.

* New API openDocuments() which does the actual job of loading the
  document together with any external dependencies. There are afew
  extra arguments to allow setting FileName property differently from
  the actual file path, which are required when auto loading
  dependencies during document recovery (with future patch to
  Gui::DocumentRecovery)

* openDocumentPrivate() is an internal helper for opening individual
  document.

* New signalStart/FinishOpenDocument to be signaled before and after
  opening a document. There may be multiple depending documents actually
  opened in between these two signals.

* New signalBeforeRecomputeDocument signaled before recompute a
  document.

* New API addPendingDocument() for use by external capable link
  properties' to queue up external documents.

* isRestoring/isClosingAll(), for convenience status reporting.

Document:

* signalFinishImport/RestoreObjects, new signal triggered after imported
  or restored all input objects

* signalBeforeRecompute, signaled before start recomputing this document

* Modified signalRecomputed with additional recomputed objects, this is
  to make it more efficient for Gui::TreeWidget to check recomputation
  result.

* signalSkipRecompute, signal to inform which objects are skipped
  during recomputation because of their owner document SkipRecompute
  setting.

* restore/save/read/writeObjects() modified to suport partial
  loading. See [here](https://git.io/fj6PY) for more information.

* afterRestore(), internal function called to finish restore. The
  function is separated from restore() because there is quite a few
  critical steps needed to fully restore a document with external
  linking. See [here](https://git.io/fj6P4) for more information.

* DocumentP::_RecomputeLog is modified to store more accurate object
  recomputation error, including those happened during restore/import.

* isExporting(), new API for checking if an object is exporting.
  External linking properties will use this function to decide how to
  export.

* copyObject(), modified to support external linking objects, and
  accepts multiple input objects.

* moveObject(), modified to support arbitary object moves. The original
  implementation may cause crash if undo/redo is enabled. Furthermore,
  because the original information fakes the object's deletion to break
  its dependency, it does not work for objects that may auto delete their
  children when being deleted. The new implementation copy the object,
  and than paste it to the other document. It then deletes the input
  objects from the original document. In case of recursive move, it only
  deletes the depending object if it has an empty in list.

* importLinks(), new API to import any external object linked by the
  input objects into this document. It will auto correct all link
  references after importing.

* getDependencyList/_rebuildDependencyList(), these two APIs are unified
  and implemented by an internal function _buildDependencyList() with a
  new algorithm to handle external objects. The returned dependency list
  will now include objects from external documents. In case of cyclic
  dependencies, getDpendencyList() will report the actual objects
  involved in dependency loops.

* mustExecute(), new API to check if there are any object requires
  recomputation. This function will call _buildDependencyList() and
  check for external objects as well.

* addRecomputeObject(), new API for marking changes during document
  restore. It only marks the object but does not actually recompute
  them for performance reason. One use case is for geo feature to
  request for recomputation to generate geometry topological names.

* recompute(), support partial, external, and inverse dependency
  recomputation. Improve error handling during recomputation.
  See [here](https://git.io/fj6PO) for more information.

* _recomputeFeature(), suppoert user abort.

* getDependentDocuments/getInList(), new API to obtain an optional
  dependency sorted list of depending documents.

DocumentObject:

* Add various ObjectStatus flags

* isExporting/getExportName(), return a safe name for exporting, in the
  form of <ObjName>@<DocName>, which is guarrenteed to be unique.
  Various link property will save linked object using this name if the
  the linked object is exported together with the owner object, see
  [PropertyLinkBase::restoreLabelReference()](https://git.io/fj6XO)
  for more information.

* recomputeFeature(), add option to recompute this object together with
  all its dependent objects.

* canLoadPartial(), new API for [partial document loading](https://git.io/fj6PY).

MergeDocuments:

* Move object name mapping logic to various link properties. See

Base::Sequencer:

* Add new API checkAbort() for checking user abort.
2019-08-17 14:52:10 +02:00
Zheng, Lei
2d9ca92594 Base: misc patches
Convenience macros/function (in Interpreter.h)

* FC_PY_GetObject/Callable(), look for callables in a python object,
  which will be used in future patch to improve performance in various
  python observer/features.

* pyCall(WithKeywords)(), helper function to invoke the callable

Matrix4D:

* hasScale(), check if there is any scale in the transformation. If so,
  further check if the scale is uniform or not. This will be used in
  future patch for Part::TopoShape to decide which type of transform to
  apply.

Placement:

* translate/rotate(), new convenience API

Rotation:

* isSame/multiVec(), new convenience API

Polygon2d:

* Intersect(), GetCenter(), new convenience API.

FlagToggler:

* New class for exception safe flag toggling, similar to StateLocker
  but with template (actually, FlagToggler is added earlier by me).

BitsetLocker:

* New class for exception manipulation of a std::bitset variable.
2019-08-17 14:52:08 +02:00
Zheng, Lei
8f16147a40 Base: improve exception
For better FC and Python exception mapping.
2019-08-17 14:52:08 +02:00
Zheng, Lei
ea8965cbc2 Base::FileInfo: fix left overs in transient directory
Setting ReadWrite permssion removes executable permission, causing
error when removing directory on Linux.
2019-08-17 14:52:08 +02:00
Zheng, Lei
bfa68f2676 Console: improve console logging facility 2019-08-17 14:52:08 +02:00
wmayer
d1b47718cf handle gimbal lock when converting between quaternion and Euler angles (issue #0004062) 2019-07-22 16:31:42 +02:00
mwganson
89a62366ab [enable report view on warnings/erros] add reportoutputobserver class, manage report view visibility via QDocketWidget toggleViewAction() rather than directly with show(), remove unnecessary variables 2019-07-21 15:58:12 +02:00
mwganson
287eff3b31 Show report view on all warnings or errors by default, can be disabled in preferences 2019-07-21 15:57:57 +02:00
Yorik van Havre
b5a3d28fee Doxygen tweaks 2019-07-17 18:01:56 -03:00
Yorik van Havre
a6334a4bfd Cleanup in doxygen stuff 2019-07-15 23:20:52 -03:00
Abdullah Tahiri
b568c64260 MSVC2013 c++11 has make_unique pointer definition, so do not overload it. 2019-07-14 12:37:37 +02:00
Abdullah Tahiri
2d7805d963 Clang complains of the specialisation after implicit instantiation with the inversed order 2019-07-14 12:37:37 +02:00
Abdullah Tahiri
1d2c45c845 Base: Move std::make_unique to Base 2019-07-14 12:37:35 +02:00
Abdullah Tahiri
27620ed717 Part: GeometryDefaultExtensions template
========================================

Generalisation of code for a default geometry extension in the form of a template.

Default geometry extensions provide a standard interface for an extension having a single stored value (e.g. one int or one string).

Python implementation must be provided separatedly.
2019-07-14 12:37:31 +02:00
wmayer
344af8129b simplify handling of static Python libs 2019-07-03 16:09:47 +02:00
wmayer
2830652a39 workaround in PyCXX classes due to removed support of old-style classes 2019-06-25 18:15:10 +02:00
wmayer
31b5614fbd add define to inactivate some code blocks if needed 2019-06-03 18:40:45 +02:00
lo
1922c84ca0 cmake: add option to disable linking of python extension modules to python-libraries 2019-05-24 14:37:33 +02:00
wmayer
c7cf339ac6 replace raw string with normal C string to fix build failure 2019-05-23 23:28:33 +02:00
ezzieyguywuf
327d509bc9 Added python virtual environment initialization, if present. 2019-05-22 13:53:47 +02:00
luz.paz
92bf2228d9 Misc. typo fixes
Found via `codespell -q 3 -I ../fc-word-whitelist.txt -S ./.git,*.po,*.ts,./ChangeLog.txt,./src/3rdParty,./src/Mod/Assembly/App/opendcm,./src/CXX,./src/zipios++,./src/Base/swig*,./src/Mod/Robot/App/kdl_cp,./src/Mod/Import/App/SCL,./src/WindowsInstaller -L pard,wallthickness,commen,byteorder,alocation`
2019-05-17 13:19:36 +02:00
Bernd Hahnebach
3650b3e59d Units: add AngleOfFriction as another parameter with Angle unit 2019-04-30 07:41:56 +02:00
Abdullah Tahiri
b406677cc0 MSVC2013 constexpr to const 2019-04-24 17:56:37 +02:00
Abdullah Tahiri
2eb5c70147 Base::Console avoid magic numbers and enable external string size checks 2019-04-24 17:56:37 +02:00
wmayer
0521860740 rename BUILD_uSE_PCH to FREECAD_USE_PCH to be consistent with other build options 2019-04-15 13:31:31 +02:00
wmayer
9b351e8551 fix crash when checking an empty error message of an exception 2019-04-01 11:22:55 +02:00
wmayer
64f4d453b5 fix VS2917 warnings: C4091, C4477, C4302, C4311 2019-03-23 16:35:40 +01:00
wmayer
6f59c842c8 when saving parameters make sure document exists 2019-03-12 01:05:50 +01:00
wmayer
6b37fdc1a8 PVS issues:
consistently define copy constructor and assignment operator
remove superfluous casts
initialize member variables in constructor
avoid double assignment
2019-03-04 11:53:49 +01:00
wmayer
5ae635ac64 fix various flaws detected by PVS 2019-03-01 22:52:41 +01:00
wmayer
ce975cef2a avoid using hard-code precision when writing double to streams 2019-02-23 14:58:41 +01:00
wmayer
9a5a7a8866 disable commit 34264408 2019-02-19 22:28:46 +01:00
wmayer
d1ff2b7dce use format options when using repr() on a quantity 2019-02-19 13:46:22 +01:00
wmayer
5d8cd9dba4 PVS: V522 There might be dereferencing of a potential null pointer 'Py::Vector2d().getCxxObject()' 2019-02-18 00:00:10 +01:00
wmayer
6cb0b79e4b PVS: V705 It is possible that 'else' block was forgotten or commented out, thus altering the program's operation logics. 2019-02-17 19:54:24 +01:00
wmayer
6f1249d989 PVS: The 'then' statement is equivalent to the 'else' statement. 2019-02-17 19:52:35 +01:00
wmayer
b2a5f47e44 PVS: V560 A part of conditional expression is always true 2019-02-17 13:56:48 +01:00
Bernd Hahnebach
f1edabd09b Units: add various Material stress properties 2019-02-14 21:11:22 +01:00
wmayer
87f4106b24 fix possible infinite loop when transcoding from/to UTF-8 2019-02-14 11:06:30 +01:00
wmayer
fb27265934 Expose some standard units and quantities to Python 2019-02-12 15:12:19 +01:00
Mateusz Skowroński
ac508516da Use QString's multi-arg overload to save memory allocations. [-Wclazy-qstring-arg] Thanks Clazy! 2019-02-11 15:39:14 +01:00
luz.paz
105a9d5ee6 Crowdin: Base/Exception.h uniformity fix 2019-01-30 11:08:03 -02:00
wmayer
2aee1e8368 fixes 0003771: Memory leak in Part.Face.Surface 2019-01-23 22:38:51 +01:00
wmayer
8345b0c1c3 add method multVec to MatrixPy class for better consistency 2019-01-22 15:57:10 +01:00
wmayer
65c06fce5c add method restoreFinished and reimplement it in SketchObject 2018-12-29 15:27:32 +01:00
wandererfan
42820cc179 Remove u8 literals for Win compatibility 2018-12-23 11:03:02 -02:00
wandererfan
9c88743d1d Use correct unicode symbols for DMS units 2018-12-23 11:03:02 -02:00
wandererfan
d28f82eb8d Use same symbol for display and edit.
- UnitsSchemaImperialCivil was sometimes displaying
  degree symbol as "deg" and sometimes as "°"
2018-12-18 22:17:38 +01:00