Commit Graph

94 Commits

Author SHA1 Message Date
AjinkyaDahale
137db465db Skeleton of general CmdSketcherConstraint Class 2017-01-31 17:07:45 +01:00
wmayer
d065c2fe5b fix whitespaces 2017-01-20 19:22:50 +01:00
abdullahtahiriyo
8d9af6f203 Merge branch 'master' into bspline_2017 2017-01-18 22:48:27 +01:00
Abdullah Tahiri
84041c0e50 Sketcher: BSpline SnellsLaw - unsupported 2017-01-15 22:34:14 +01:00
Abdullah Tahiri
6bf7d4d6c9 Sketcher: BSpline point-on-object - unsupported 2017-01-15 22:29:21 +01:00
AjinkyaDahale
4c001f40f3 Horizontal and Vertical Constraint creation modes 2017-01-15 17:00:45 +01:00
Abdullah Tahiri
6f09b31456 Sketcher: BSpline - Equality not supported user indication 2017-01-15 01:40:04 +01:00
Abdullah Tahiri
8f4eaf7587 Sketcher: BSpline - UI Perpendicularity 2017-01-15 01:27:46 +01:00
Abdullah Tahiri
14a34202a9 Sketcher: BSpline - Informing the user of non-supported tangencies 2017-01-15 00:57:05 +01:00
Abdullah Tahiri
bb6e480b3c Sketcher: BSpline simplified endpoint tangency/perpendicularity solver implementation
=====================================================================================

Support for tangency/perpendicularity using angle via point for BSpline with appropriate
endpoint multiplicity so that the endpoints goes thru the first and last poles (control points).

Warning: Not applicable to periodic BSplines.
Warning: Not applicable to any non-periodic BSpline with inappropriate endpoint conditions.
2017-01-15 00:42:25 +01:00
wmayer
268a575d28 make code a bit more readable 2017-01-09 10:07:59 +01:00
wmayer
ba28171f43 issue #0000753: angle constraint auto places the constraints visuals including its value in the wrong place 2017-01-08 16:47:06 +01:00
wmayer
0975bdc78c fix -Wunused-parameter 2017-01-04 18:20:43 +01:00
AjinkyaDahale
0caf0710d6 Coincident constraint making mode added
One small problem remains that the origin is not selectable as one point
in coincident constraint making mode.
2017-01-04 12:58:11 +01:00
AjinkyaDahale
a8d25c0723 Lock doesn't complain "no selection" 2017-01-04 12:58:11 +01:00
AjinkyaDahale
f3a5754e3e Lock constraint in always available when sketch is open
Earlier it was available only when a selection is made
2017-01-04 12:58:11 +01:00
AjinkyaDahale
640c6d0e06 Lock constraint can be applied with better selection
Can't yet start without selection: the button on toolbar is not active
without a selection yet
2017-01-04 12:58:11 +01:00
AjinkyaDahale
c312e254d1 Added DrawSketchHandlerLock 2017-01-04 12:58:11 +01:00
wmayer
a421803c09 fix whitespaces 2016-12-28 14:22:42 +01:00
Abdullah Tahiri
70fb71b11d Sketcher: Parabola perpendicularity constraint 2016-12-24 15:24:36 +01:00
Abdullah Tahiri
8fe59b20f7 Sketcher: Parabola tangency support
===================================

Support for tangency with any preexisting supported geometry using angle via point.
2016-12-24 15:02:52 +01:00
Abdullah Tahiri
507f5605d9 Sketch: Hyperbola tangency to line
==================================

As a way to lock a line to hyperbola tangency to a branch has not been identified, this tangency is implemented
by adding a point at the tangency point in order to avoid the jumping.
2016-11-27 18:45:33 +01:00
Abdullah Tahiri
1fe7154c27 Sketcher: Hyperbola perpendicularity constraint
=================================================

Line perpendicular to hyperbola using via point constraint.
2016-11-27 18:45:33 +01:00
Abdullah Tahiri
47a854e2ea Sketcher: Hyperbola Tangency to Curves
======================================

Implementation of the Tangency via point for all curves to Hyperbola (no line to Hyperbola yet).
2016-11-27 18:45:33 +01:00
wmayer
b1904dfd28 replace hard coded numbers with static constants 2016-10-23 13:44:26 +02:00
wmayer
c06b6f081f fix -Wextra in Sketcher 2016-09-22 18:34:35 +02:00
wmayer
d1d9db6d1c fix Coverity issues 2016-08-20 19:45:36 +02:00
wmayer
d4368eb186 Coverity issues: check return value of dynamic_cast or replace it with static_cast 2016-08-17 10:43:58 +02:00
wmayer
1febd2da5a make sure that action is created when calling updateAction 2016-07-02 13:19:25 +02:00
DeepSOIC
038b9e71c1 Sketcher: negative constraint value avoidance
by swapping elements being constrained at creation time, should the
precalculated value happen to be negative.
2016-03-12 21:28:37 +01:00
DeepSOIC
acec16d5dc Sketcher: never ever hide constraint value sign, anymore 2016-03-12 21:28:22 +01:00
wmayer
92b330bbcb + support of unicode names for sketch constraints 2015-09-24 03:17:47 +02:00
Mateusz Skowroński
05f95c0506 Fix files encoding. Go from ISO8859-1 to UTF-8. 2015-09-21 19:50:49 -03:00
Eivind Kvedalen
cacf7bdaf1 Sketcher: Added support for expressions. 2015-09-21 14:51:10 +02:00
wmayer
f0c9368f71 + minor changes 2015-09-13 23:24:12 +02:00
Abdullah Tahiri
4b9a379b90 Sketcher bug/feature request: arePointsCoincident/coincidence creation
======================================================================

1. SketchObject::arePointsCoincident upgraded to check for indirect coincidence.
2. Coincidence constraint creation now checks for indirect coincidences and avoids
creating redundant coincidence constraints (for example during box selection).
2015-09-09 22:56:14 +02:00
wmayer
756a9c8130 + fix various warnings with gcc 2015-09-01 19:29:39 +02:00
Alexander Golubev
62d130bea0 Mod/Sketcher: suppress warning
Warning was:
src/Mod/Sketcher/Gui/CommandConstraints.cpp|1031 col 28| warning: '&&' within '||' [-Wlogical-op-parentheses]
2015-08-29 18:35:58 +02:00
Alexander Golubev
dc94ec65b8 Mod/Sketcher: add missing brackets in conditions
Warning was:
src/Mod/Sketcher/Gui/CommandConstraints.cpp|131 col 99| warning: '&&' within '||' [-Wlogical-op-parentheses]
2015-08-29 18:35:58 +02:00
Abdullah Tahiri
e51628042a Sketcher: Auto Update Mode bug fix
==================================

Bug:
http://forum.freecadweb.org/viewtopic.php?f=10&t=11341&start=60#p92422

Why?
- When coding Auto Update Mode I forgot to solve the sketch when the constraint is cancelled to restore the solver level constraints.
2015-06-24 17:57:05 +02:00
Abdullah Tahiri
fde23817f0 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
db57b42e5a 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
48c5b79b81 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
d0c4deb570 + Use update mechanism for CmdSketcherToggleDrivingConstraint 2015-06-03 18:31:30 +02:00
wmayer
42d5955ee2 + fix some warnings 2015-05-30 20:59:25 +02:00
Abdullah Tahiri
c4f08644d8 Sketcher: UI Improvement Smart button for constraints and geometry toogle/creation
==================================================================================

Geometry button:
- if no object selected, the legacy toggle icon has a new functionality, switch to/from creating in construction mode
- if object selected, it has the legacy functionality
- the button can be clicked during "continuos creation mode" to switch from creating to/from creating in construction mode

Constraint button:
- The button is not selectable if nothing is selected (it would be impossible to determine the effect)
- When constraints are selected, the button toggles the constraints to/from Driving.
- When geometry is selected, the button switches from/to reference mode, the change is apparent from the color of the constraint icons.

Continuous creation mode:
- Default changed so that it is active unless you change it in settings

Updated terminology
2015-05-30 16:39:32 +02:00
Abdullah Tahiri
4a052bebb5 Sketcher: Driving/reference creation improvements and some other fixes
======================================================================

- Changing from Driving to reference does not include unnecessary solvings.
- Added some checks to avoid making Driving constraints when calling directly from python and involving only external geometry (would give redundant constraints).
- New python command toggleDriving to just change the status from reference to Driving
- New UI toolbar Command to toggle constraints
- Fix to allow switching from/to construction mode during continuous mode creation.
- Enable/Disable for constraints in constraints widget has changed to operate on multiselection and now effects "toggle" instead of enable/disable.
- Disable the option to directly create a SnellsLaw non-driving constraint (this constraint does not support direct creation, it can be toggled to non-driving after creation though).
2015-05-30 16:39:32 +02:00
Abdullah Tahiri
9df780b41b Sketcher New Feature: Toggle Mode for Reference/Driving constraints
===================================================================

It allows to create constraints directly into Reference or Driving mode.

It does not include icons
2015-05-30 16:39:30 +02:00
Abdullah Tahiri
f59ef75cfa Sketcher new Feature: Non-driving constraints (aka Driven constraints or dimensions)
====================================================================================

It allows to enable and disable a constraint in the constraint list.

When disabled, the constraints current value is shown, but its value is not enforced (it is driven by the other constraints and user interaction).

A disabled constraint can be enabled (as far as it is enforceable, see non-driving constraints to external geometry below).

The sketcher functionality has been extended to support non-driving constraints to external geometry elements. This were previously excluded from
the possibility of creating a constraint on them (as their values depend on other sketches and would be redundant with the unchanged value or conflicting when value is changed).
Now these constraints are created as non-driving, but as they are not enforceable, the UI does not allow you to make them driving.

The constraint filter has been extended to include a Non-Driving constraints category.

Thanks again to Werner for his continuous support, and specially in this case to DeepSOIC, as he pointed towards a much better implementation solution than my original idea.
2015-05-30 16:39:25 +02:00
Abdullah Tahiri
ea2cc64b91 Bug fix: Sketcher: "Ask for value after creating distance constraint" setting not working
========================================================================================

How to replicate:
1. Go to Preferences->Display->Sketch and disable that checkbox.
2. Create a distance constraint (radius, distance, ...)

It will ask for the value regardless of whether the checkbox is clicked or not.

Why?
In SketcherSettings.ui the prefpath is "Mod/Sketcher"
The code refered to ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/Mod/Sketcher/General");
2015-05-26 13:45:24 +02:00