View Issue Details

IDProjectCategoryView StatusLast Update
0002372FreeCADBugpublic2016-01-19 02:06
ReporterChapaikinVAAssigned Towmayer 
Status closedResolutionfixed 
PlatformLinuxOSUbuntuOS Version14.04 x64
Product Version 
Target VersionFixed in Version0.16 
Summary0002372: Application terminates on attempt to change external geometry from a sketch

Application terminates on attempt to set a constraint "Height" for a line from an external geometry.
Steps To Reproduce1. Open "Sketch"
2. Select "3-Line"
3. Set a constraint "Vertical distance" / "Height" (default: Shift+V)
Additional InformationOS: Ubuntu 14.04.3 LTS
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.16.6062 (Git)
Build type: None
Branch: master
Hash: 61e1a5ca2fee4ea7a95965afdbb510a450d46660
Python version: 2.7.6
Qt version: 4.8.6
Coin version: 4.0.0a
OCC version: 6.8.0.oce-0.17
TagsNo tags attached.


has duplicate 0002373 closedwmayer When Measuring in the distance between two external geometry Freecad crashes 



2015-12-18 09:06


Bug_external_2015-12-18 14:55:03.fcstd (Attachment missing)


2015-12-24 15:14

administrator   ~0006630

Cannot confirm this behaviour on Ubuntu 12.04 but it crashes on Windows 64-bit (debug mode).

Might be related to the used Eigen3 version. On Ubuntu it's 3.0.5 and on Windows it's 3.2.5.

The callstack is this:
     msvcr90d.dll!_wassert(const wchar_t * expr=0x000007feda2628c0, const wchar_t * filename=0x000007feda262810, unsigned int lineno=19) Line 337 C
> Sketcher_d.pyd!Eigen::SparseMatrixBase<Eigen::CwiseUnaryOp<Eigen::internal::scalar_abs2_op<double>,Eigen::Block<Eigen::SparseMatrix<double,0,int>,-1,1,1> const > >::sum() Line 19 + 0x48 bytes C++
     Sketcher_d.pyd!Eigen::SparseMatrixBase<Eigen::Block<Eigen::SparseMatrix<double,0,int>,-1,1,1> >::squaredNorm() Line 82 + 0x1b bytes C++
     Sketcher_d.pyd!Eigen::SparseMatrixBase<Eigen::Block<Eigen::SparseMatrix<double,0,int>,-1,1,1> >::norm() Line 90 + 0xa bytes C++
     Sketcher_d.pyd!Eigen::SparseQR<Eigen::SparseMatrix<double,0,int>,Eigen::COLAMDOrdering<int> >::factorize(const Eigen::SparseMatrix<double,0,int> & mat={...}) Line 378 + 0x54 bytes C++
     Sketcher_d.pyd!Eigen::SparseQR<Eigen::SparseMatrix<double,0,int>,Eigen::COLAMDOrdering<int> >::compute(const Eigen::SparseMatrix<double,0,int> & mat={...}) Line 102 C++
     Sketcher_d.pyd!Eigen::SparseQR<Eigen::SparseMatrix<double,0,int>,Eigen::COLAMDOrdering<int> >::SparseQR<Eigen::SparseMatrix<double,0,int>,Eigen::COLAMDOrdering<int> >(const Eigen::SparseMatrix<double,0,int> & mat={...}) Line 89 + 0xf bytes C++
     Sketcher_d.pyd!GCS::System::diagnose(GCS::Algorithm alg=DogLeg) Line 3446 + 0x50 bytes C++
     Sketcher_d.pyd!GCS::System::initSolution(GCS::Algorithm alg=DogLeg) Line 949 C++
     Sketcher_d.pyd!Sketcher::Sketch::setUpSketch(const std::vector<Part::Geometry *,std::allocator<Part::Geometry *> > & GeoList=[3](0x00000000091e05d0 {myCurve={...} },0x0000000009250fd0 {myCurve={...} },0x00000000090fc740 {myCurve={...} }), const std::vector<Sketcher::Constraint *,std::allocator<Sketcher::Constraint *> > & ConstraintList=[1](0x00000000090398f0 {Value=10.000000000000000 Type=DistanceY AlignmentType=Undef ...}), int extGeoCount=3) Line 138 C++
     Sketcher_d.pyd!Sketcher::SketchObject::solve(bool updateGeoAfterSolving=true) Line 204 + 0x75 bytes C++
     Sketcher_d.pyd!Sketcher::SketchObjectPy::addConstraint(_object * args=0x0000000003f54e90) Line 271 C++

The assert where is fails prints the message: "you are using a non initialized matrix".

When trying this on older versions 0.13, 0.14 or 0.15 an error dialog comes up explaining that it's not possible to set a vertical (length) constraint on an external geometry.

In 0.16 this dialog doesn't come up any more and I wonder why. So, it's clearly a regression independent of the used Eigen version.


2015-12-24 15:34

administrator   ~0006631

This is the link of the changes that introduced non-driving constraints. This means it's intended behaviour to allow to add constraints to external geometries.

So, it falls back to Eigen and we have to determine if the matrix is valid before applying Eigen stuff on it.


2015-12-24 16:02

administrator   ~0006633

For testing purposes I switched back to Eigen 3.0.5 on Windows and now it works. So, it's definitely related to the used version of Eigen. This means we have to a workaround for this...


2015-12-24 16:44

administrator   ~0006634

When debugging through then inside System::diagnose we have "clist" with a single element and an empty "plist". So, this means we get a 1 x 0 matrix which doesn't make sense.
(Btw, when just adding an external constraint the matrix is a 0 x 0 matrix.)

Now, with Eigen3.0.5 it doesn't crash because it executes the path of the dense matrix handling while Eigen3.2.x is goes the path of the sparse matrix handling.

So, it's a bug in FreeCAD and the function System::diagnose must return immediately when clist or plist is empty.

Issue History

Date Modified Username Field Change
2015-12-18 09:06 ChapaikinVA New Issue
2015-12-18 09:06 ChapaikinVA File Added: Bug_external_2015-12-18 14:55:03.fcstd
2015-12-20 23:13 yorik Relationship added related to 0002373
2015-12-24 15:14 wmayer Note Added: 0006630
2015-12-24 15:14 wmayer Assigned To => abdullah
2015-12-24 15:14 wmayer Status new => assigned
2015-12-24 15:34 wmayer Note Added: 0006631
2015-12-24 15:49 wmayer Relationship replaced has duplicate 0002373
2015-12-24 16:02 wmayer Note Added: 0006633
2015-12-24 16:44 wmayer Note Added: 0006634
2015-12-25 09:38 wmayer Changeset attached => FreeCAD Master master 632eaead
2015-12-25 09:38 wmayer Assigned To abdullah => wmayer
2015-12-25 09:38 wmayer Status assigned => closed
2015-12-25 09:38 wmayer Resolution open => fixed
2016-01-19 02:06 yorik Fixed in Version => 0.16