Commit Graph

6081 Commits

Author SHA1 Message Date
Abdullah Tahiri
516b0d3c56 Sketcher: Workaround for Eigen bug: SparseQR crash on matrices with rows>cols
=============================================================================

There is an issue with an assertion in Eigen, as reported here:
https://forum.kde.org/viewtopic.php?f=74&t=117474
http://forum.freecadweb.org/viewtopic.php?f=10&t=11341&p=92153#p92146

The work-around is to disable debug assertions for Eigen until the problem
gets solved.
2015-06-24 17:57:00 +02:00
Abdullah Tahiri
6030da1182 Sketcher: Solver improvements and bug fixes
===========================================

- Improvement Debug added to redundant solving in Iteration Mode, to show when just one iteration solved the system
- Fix wrong QR information on empty sketch
2015-06-24 17:56:59 +02:00
Abdullah Tahiri
bae32f74bb Sketcher: New setting: Show advanced solver taskbox
===================================================

I makes the advanced solver taskbox by default disabled (not shown) and provides
a setting in Preferences->Display->Sketcher to enable it.
2015-06-24 17:56:59 +02:00
Abdullah Tahiri
796c9d79d4 Sketcher: New Features: SparseQR decomposition and Solver advanced control TaskBox
==================================================================================

The solver has been adapted to use Eigen's SparseQR QR decomposition algorithm. The original
Dense QR implementation is maintained and can be selected using the Advanced Control TaskBox (see below).

The use of SparseQR provides over an order of magnitude improvement in solving time in complex sketches due to
the Sparse nature of the Jacobian matrix of the system of equations.

The solver advanced control is a new TaskBox in the Sketcher that allows to select which algorithms are to be used for
the different solving operations and tweak its parameters. It is not intended to be a user control, but means to debug
solving problems and improve the algorithms and their configuration.

This commit also introduces multithread support for Eigen. Currently it is only limited to products and does not provide
a substantial speed improvement. It is expected to have more multithreaded operations in Eigen in the future.

As a bonus, the TaskBoxes in the Taskbar of the Sketcher remember the last state (collapsed or deployed).
2015-06-24 17:56:58 +02:00
Abdullah Tahiri
02df1acb5f Gui: New feature: Extension of TaskView to notify if a taskbox is hidden or visible
===================================================================================

http://forum.freecadweb.org/viewtopic.php?f=10&t=11363
2015-06-24 17:56:58 +02:00
Abdullah Tahiri
480d23f8e1 Sketcher: Bug fix: Unexpected crashes during certain operations
===============================================================

The sketcher crashed for example during effecting a fillet operation.

Cause:
The ElementsWidget/ConstraintWidget was being updated as a consequence of adding/removing geometry/constraints, and it was effecting
a selection after the update, in cases where the geometry in the screen was not being redraw (because the sketchobject was still unsolved), therefore
trying to select an element that according to ViewProvider did not exist (as it is created during redraw).

Solution:
Widgets update when their properties changes, provided that a redraw is effected (which actually also saves some (negligible) time, as they are only updated when they should).
2015-06-24 17:56:57 +02:00
Abdullah Tahiri
93c836fdcf Sketcher: Bug fix Trim
======================

In no update mode, the last constraint was not enforced. The DoF was not properly shown.

The trim operation it is always solved at the end now if in no recompute mode.
2015-06-24 17:56:56 +02:00
Abdullah Tahiri
65310f00ab Sketcher bug fixes: Crash on deleting a line from the sketch
============================================================

- Crashing on deleting line on fully constraint box

As a bonus:
- Fully constrained sketch not shown in green on opening the sketch
2015-06-24 17:56:56 +02:00
Przemo Firszt
4caa464ebb FEM: All FEM results are stored in a single object
Functionality previously provided by setNodeColorByResult is now
in setNodeColorByScalars. FemResult* object is no longer required,
the function accepts list of elements and a list of values.

Functionality previously provided by setNodeDisplacementByResult is now
in setNodeDisplacementByVectors. FemResult* object is no longer required,
the function accepts list of elements and a list of vectors.

A side effect: FemResultValues and FemResultVector are no longer used
and have bee removed.

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
2015-06-24 17:44:02 +02:00
DeepSOIC
ed6af74a78 Navigation: fix unable to deselect after editing a sketch
After editing a sketch, it was impossible to deselect the just-edited
sketch by clicking empty space (gesture navigation).
2015-06-24 17:27:07 +02:00
wmayer
9680f13854 + fix loading of certain urls in web page 2015-06-24 13:35:13 +02:00
Fredrik Johansson
16c740a6f9 Add ability to have external orocos-kdl library instead of the suplied
in FreeCAD, used in Robot and Path workbenches

cmake switch: FREECAD_USE_EXTERNAL_KDL

Makes Robot workbench and Path compilable on OS X 10.9
2015-06-24 11:54:31 +02:00
lorenz_l
bc920f9a24 set names for QTimer in mainWindow, to find them from python 2015-06-23 20:23:52 +02:00
Yorik van Havre
18624df555 Draft: Better docstring for DraftGeomUtils.fillet() 2015-06-22 22:03:13 -03:00
Yorik van Havre
4379846dfa Arch: Section planes now restore the view clipping when loaded 2015-06-22 21:58:56 -03:00
Yorik van Havre
cd25a34171 Arch: added warning message when wall base is not a Part or Mesh 2015-06-21 21:45:18 -03:00
wmayer
72abf54d12 + setup qss search paths 2015-06-19 23:27:39 +02:00
wmayer
0ea718177d + set utf-8 encoding when recording a macro 2015-06-19 14:52:20 +02:00
Abdullah Tahiri
074d5d7f11 Sketcher: Bug fix External geometry not appearing upon insertion
================================================================

A last moment change to regulate redrawing introduced this issue (reducing the redrawing to the cases where the solver geometry and the sketchObject geometry are equal).
This change also solved other issues.

The case of adding external geometry is special because the DoF is the same after insertion, yet there is an insertion (as opposed to the toggle case, where there is a change but no insertion).

SketchObject has been adapted to require a solver update before moving (which also caused a non-yet-reported crash, a separate bug), and CommandCreateGeo has been adapted to trigger a solve with
auto update mode disabled. This solve is a very low cost one as the geometry is already in place.
2015-06-17 14:53:34 +02:00
Yorik van Havre
8b4492ebc5 Arch: small bugfix in cutvolumes 2015-06-17 09:45:01 -03:00
wmayer
238becaebb + further optimization in sketcher 2015-06-16 10:18:11 +02:00
wmayer
788fadf4a8 + fix const correctness 2015-06-15 23:42:37 +02:00
Abdullah Tahiri
ec5f3b2b98 Sketcher: new Feature: Group creation of Sketcher geometry and other improvements and bug fixes
===============================================================================================

Group creation:
- complex geometries (consisting of several geometry elements and constraints) have been rewritten to use python list (one command call for all geometries and constraints)
- Ellipse ExposeInternalGeo as group creation of geometries and constraints

To construction mode creation:
- addGeometry python and SketchObject functions modified to take an additional optional parameter "construction" to create the geometry/geometries directly as construction.
  In addition to the shorter form, this helps generate less amount of onChange propagation and Redraws.
- all the geometry creation commands in CommandCreateGeo.cpp have been rewritten to use the new construction argument. This includes modifying the regular polygon script to
take a new optional parameter to create geometry as construction in addGeometry.
- special care is taken in group creation not make construction points
- Show/hide internal geometry implemented with this option.

To solving:
- the solve previously included after every geometry addition (when in no Update, e.i. no Recompute mode) has been removed and each Gui::Command calls either an UpdateActive
for recompute or a Solve in no Update mode. This is behaviour is less intrusive and uniform with group creation.

Bug fixes and redrawing reduction:
- Fixes the CheckId exception problem. The solution also helps further remove redraws during creation of complex geometry (e.g. Slot)
- Fixes touching the sketch by only opening it.
- Code clean up.
2015-06-15 22:56:36 +02:00
Abdullah Tahiri
61bd2d41ac Sketcher: Requested Feature: Remove help button
===============================================

The help button next to the close button in the Task dialog is now removed.

It was requested that this button is removed as it is inconsistent with other help sources and it is not implemented.
2015-06-15 22:56:20 +02:00
Abdullah Tahiri
d1acd124cc Sketcher: Bug fix: Undo/Redo implementation
================================================

Fixes a bug in master that the dependent 3D geometry would not update on Undo (in Auto update mode enabled).

Undo and redo signals are handled by ViewProvider in order to introduce an recompute or solve() of the sketchObject
as determined by the Auto Update Mode in order to update DoF and dependent geometry if necessary.
2015-06-15 22:56:04 +02:00
Abdullah Tahiri
da5270131c Gui New Feature: Gui::Document support for App::Document undo and redo signals
==========================================================================

It defines new slots connected to App::Document's signalUndo/signalRedo, which
triggers Gui::Document's signalUndoDocument and signalRedoDocument signals.

setModified is not executed upon redo/undo, as this is already done on modification of the properties if
properties were modified, and if there were not, no setModified is needed anyway.
2015-06-15 22:55:49 +02:00
Abdullah Tahiri
eb7a3c763c Bug fix: General reduction solution / new sketch solving model
=================================================================

The new solving architecture focus all the solving on the SketchObject.

Actions that change the DoF can call execute() (i.e. recompute) or Solve() depending on whether a full recompute of dependent features is required or not.
In both calls the geometry of the solver is updated with the geometry of the SketchObject.

The only additional call that calls the solver is MovePoint. This function may or may not update the geometry of the SketchObject
(as now it is intended for UI related solving, like dragging, rubberbands, ...).

In operations that do not involve a change of DoF and therefore do not require a sketch solving, it may happen that as a side effect of moving a point, the
geometry changes to old behaviour. In order to avoid that, those SketchObject operations, as for example setConstruction or ToggleConstruction,
must set a flag "bool solverNeedsUpdate" to true. In case a movePoint is executed before any other solver execution, the geometry is first updated and then
the moving is performed.

So to keep in mind when programming sketcher operations:
-> Need recompute (UpdateActive)
-> Need solving because DoF changed (solve())
-> The operation does not change DoF (set solverNeedsUpdate to true)
2015-06-15 22:55:28 +02:00
Abdullah Tahiri
4b0bd78814 Sketcher: Bug fixes to Auto-Update Mode
=======================================

- Fixing toggle AutoUpdate Mode
- Fix Auto-Update Sketcher tools
- Fix missing createGeo recomputes
- Missing constraints recomputes fixed

Various fixes for non-Update mode:
- Fixes lack of update upon entering a conflicting datum constraint.
- Fixes lack of update upon setting the reference/driving status of a constraint

- Added tooltips to buttons
2015-06-15 22:55:04 +02:00
Abdullah Tahiri
339717c96f Sketcher: Bug fix of New Solver Model: DoF and solver update on deletion of constraints
=========================================================

Upon deletion of a constraint, the constraint was still enforced for UI operations (dragging of a point) and DoF was not updated.
2015-06-15 22:54:49 +02:00
Abdullah Tahiri
a21265f9b6 Sketcher: New Feature: Avoiding to continuously recompute all the sketch (and dependent objects)
======================================================================================

There is a checkbox, default disabled, that makes the commands NOT to generate a recompute after each.
This means that if you are editing a sketch that is used to generate a pad or pocket, if the checkbox is
disabled, the dependent objects do not get recomputed.

There is a button next to it to force a manual recompute, in case it is needed.

If the user wants the previous behavior, he only needs to activate the checkbox. The previous status of the box
is restored upon entering a sketch in edit mode.

It is remarkable the case of the Fillet and Trim

On changing ActSketch (solvedSketch) to SketchObject and making movePoint not systematically update the geometry, the solving in MovePoint was confronted with solving for "the last solved geometry",
which is the default behaviour, in some situations (Fillet and Trim) where geometry had changed at SketchObject level, and was the subject of the moving actions.

MovePoint has been updated to take an extra optional parameter, to force the change in solved geometry in those situations.

Some other minor bug also fixed in Fillet creation in CommandCreateGeo.cpp

This commit also introduces conditional recompute on some operations of:
- constraints
- geometry creation (reubication of update active to comprise the autoconstraints within a single UpdateActive)
2015-06-15 22:54:32 +02:00
Abdullah Tahiri
0e92e6356f Sketcher: Major re-structuration: New Solving Model: General Sketch Solve call reduction
=======================================================================================

ActSketch in ViewProvider dissapears. The temporal sketch (sketch.cpp) for solving is now a data member of SketchObject.cpp (hereinafter solvedSketch). All the solving is concentrated in SketchObject.cpp.

SketchObject provides an interface to expose its solver, as it is still currently needed for some UI operations from ViewProviderSketch, like dragging points (solving rubber bands).

ViewProviderSketch still can select whether to draw the solvedSketch geometry (previously ActSketch) geometry (UI staff) or the SketchObject geometry. Performancewise, it makes sense to separate this two
geometries, as the SketchObject one involves modifying the Geometry and Constraint Properties (including all the undo related functionality), which would mess the undo functinality and incur in a big
peformance penalisation while dragging. One characteristic of solvedSketch is that its geometry is solved, whereas the geometry of SketchObject may not have been solved yet.

These geometries may differ at for the following reasons:
1. The geometry corresponds to an ongoing dragging operation, so solvedSketch has the last calculated dragging geometry, while SketchObject has the one corresponding to initial position.
2. Geometry/constraints were added to the sketch, but no solve/execute was triggered yet (envisioned situation is the future group creation functionality not in this commit).

What do I gain?

- Inserting a (simple) geometry element now costs 1 solver execution.
- Inserting a constraint now costs 1 solver executions.

For reference, in previous versions inserting a constraint involved 5 solver executions.

The following information provide a historical review of the coding of this commit (formed of 10 squashed commits):

This is a general sketch solve call reduction, not only during geometry creation (this commit does not include until here any specific measure to reduce calls on geometry creation, that is another branch)

After a lot of profiling, it seems that the "cause"(tm) that creates so many solver calls is that every update generates a solving in ViewProviderSketch, regardless of the need for that update,
many times with the only aim of providing the DoF for the message dialog and keeping ActSketch in sync with SketchObject in case it is needed (currently UI moving points, constraints,...).

Sketch solver is now a data member of SketchObject instead of a temporal object that gets initilized and destroyed.

This allows:
1. Potentially more synergy reducing calls to setUpSketch (still to be seen, still to be optimized)
2. Allowing SketchObject to access the latest geometry that has been solved => In future, allow objects that use SketchObject to obtain the latest
solved geometry instead the geometry of SketchObject that may still be unsolved. This is relevant for drawing the geometry

No more solving in ViewProviderSketch. Solving a Sketch is now an exclusive competence of SketchObject.

There is however a lot of cleaning to do in ViewProviderSketch

(I mean, not that these commits are making a mess in VPSketch,
but that as a consequence of the changes, it should be possible to
optimize VPSketch, specially moving and drawing methods)

Very useful comment for future developers that may wonder why a solve per constraint just upon addition is necessary.

Added a new function to get the size of the geometry of the instance of the solver object (Sketch.cpp).
The previous way was to extract the geometry, which is costly and error prone, as you have to delete it afterwards.

Inserted comment about the necessity of triggering a Part2D update during edit mode
2015-06-15 22:53:59 +02:00
wmayer
280019ddf9 + implement Geometry.copy for Python 2015-06-15 21:28:29 +02:00
Eivind Kvedalen
f99fd100e6 Added zoom and automatic refresh of dependency graph view. 2015-06-15 11:32:24 +02:00
Yorik van Havre
1749ff2d5d Added a Revert command to the File menu - fixes #2040 2015-06-14 22:58:07 -03:00
Yorik van Havre
d0cfe4b010 Arch: Allow to build Arch objects from Part Compounds - fixes #2095
Arch objects can now be based on a Part Compound and will take
its DiffuseColor property. Arch objects that are clones of
such objects will also copy that property.
2015-06-14 18:36:54 -03:00
Eivind Kvedalen
d0d98b8775 Spreadsheet: Fixed exception bug in SheetPy::setCustomAttributes(...). 2015-06-13 12:48:21 +02:00
Eivind Kvedalen
e864bb8d92 Spreadsheet: Added test macro. 2015-06-13 12:47:52 +02:00
Eivind Kvedalen
efc21a5a63 Spreadsheet: Removed superfluous fc_target_copy_resource call in CMakeLists.txt. 2015-06-13 12:47:36 +02:00
Eivind Kvedalen
9d5d05a708 Spreadsheet: Fixed handling of unary minus/plus, exponentation order, and unit rule (#2099) 2015-06-13 12:47:19 +02:00
Eivind Kvedalen
12e4d59458 Spreadsheet: Fixed bug in setEdit method for Spreadsheet module (#2144) 2015-06-13 12:46:53 +02:00
Yorik van Havre
edbbcfb790 Draft: Fixed placement of one-face Facebinders 2015-06-12 11:08:49 -03:00
Yorik van Havre
40f8bb4143 Arch: Fixed encoding bug in IFC export 2015-06-11 23:02:29 -03:00
wmayer
5040a97b0b + filter out removed workbenches 2015-06-11 00:19:20 +02:00
wmayer
4a7419c064 + fix whitespaces 2015-06-10 23:21:46 +02:00
Przemo Firszt
615d037de0 App: Add workbenches with unknown status to enabled list
Newly installed workbenches are not on enabled nor disabled list, so
they were treated as disabled. That behaviur could be confusing for
the user as a newly installed workbench was not shouwing up on the
workbench list. This commit changes that behaviour and new workbenches
are enabled by default.

Reported-by: r-frank
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
2015-06-10 22:11:24 +02:00
wmayer
4f5534a87a + fixes #0002116: FreeCAD crash when I click on treeview 2015-06-09 21:55:35 +02:00
wmayer
54317becbf + fix writing STEP settings 2015-06-09 21:23:16 +02:00
Przemo Firszt
3a7772d0f7 FEM: Save/restore result dialog settings
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
2015-06-09 13:07:49 -03:00
Przemo Firszt
793a5b79f1 FEM: Rename dialog element callbacks
Also setDisplacement function has been removed

Signed-off-by: Przemo Firszt <przemo@firszt.eu>
2015-06-09 13:07:49 -03:00
Przemo Firszt
5853eabc62 FEM: Always import FemGui
Signed-off-by: Przemo Firszt <przemo@firszt.eu>
2015-06-09 13:07:49 -03:00