#619 Made TreeView stable

Merged, abandoned or rejected pull requests are moved here to clear the main Pull Requests forum.
realthunder
Posts: 151
Joined: Tue Jan 03, 2017 10:55 am

#619 Made TreeView stable

Postby realthunder » Wed Mar 15, 2017 3:44 am

The TreeView item (DocumentObjectItem) and DocumentObject now have a N:1 relationship. Adding or removing object with claimed children no longer affects existing TreeView items. Semi-lazy-loading strategy is employed to avoid creating duplicate items until expansion.

Previous related discussion thread: https://forum.freecadweb.org/viewtopic.php?f=34&t=20197

Also improved TreeView drag and drop by enabling drop only action (i.e. no item removal from dragged parent item) if CTRL key is pressed at the time of drop.

This is a somewhat significant change, considering the important role of TreeView, and also numerous possible use cases. Please fork and tested it.
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 12:07 pm

Interesting...
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 12:19 pm

Links:
Pull request: https://github.com/FreeCAD/FreeCAD/pull/619
Clone address: https://github.com/realthunder/FreeCAD.git branch "StableTree"
(was a bit painful to find, so I post here :roll: )
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 2:30 pm

I compiled your branch, and got a quick crash. Note that I have part-o-magic active...
I didn't do a clean build, so it might be a false alarm. I'll investigate further in the meantime, if you don't manage to fix it sooner ;)
Attachments
realthunder-tree-crash.png
realthunder-tree-crash.png (201 KiB) Viewed 333 times
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 3:43 pm

False alarm. After clean build, no crashes so far.
realthunder
Posts: 151
Joined: Tue Jan 03, 2017 10:55 am

Re: #619 Made TreeView stable

Postby realthunder » Wed Mar 15, 2017 4:07 pm

DeepSOIC wrote:False alarm. After clean build, no crashes so far.

-_-; wish there is a wiping sweat emoticon.

On the other hand, I'll be surprised if this patch isn't causing a bunch of problems here and there.
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 4:11 pm

Lazy loading works well. This graph (with every compoundfilter claiming compound as child), there is no significant memory consumption.
realthunder-tree-test-lazy.png
realthunder-tree-test-lazy.png (437.99 KiB) Viewed 307 times


Overall, so far I put a thick approval :D

Minor complaints:
* when I select an object in tree, and it has a twin item, the twin shows no signs of being a twin. That is, no highlighting. I guess it might be important to be so for drag-drop support to work properly. In contrast, if I select an object in 3d view, all instantiations of the object in tree are highlighted.

EDIT: I only tested it as user, I didn't look into the code.
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 4:22 pm

Oh, no :cry: it just crashed again...
realthunder
Posts: 151
Joined: Tue Jan 03, 2017 10:55 am

Re: #619 Made TreeView stable

Postby realthunder » Wed Mar 15, 2017 4:45 pm

DeepSOIC wrote:Oh, no :cry: it just crashed again...

Did it crashed at the same line number? It's an assertion failure. That assertion is probably incorrect. I've removed it. Please sync the branch and try again.
DeepSOIC
Posts: 4693
Joined: Fri Aug 29, 2014 12:45 am
Location: Saint-Petersburg, Russia

Re: #619 Made TreeView stable

Postby DeepSOIC » Wed Mar 15, 2017 4:48 pm

I caught the crash in debugger.

What I did:
1. Create Part-o-magic ShapeGroup
2. Part Cube
3. Part Cylinder ->crash

The crash is occasional, and at first it was happening almost every time, now it happens really occasionally. And I don't know why.

Call stack:

Code: Select all

0   std::_Tree<std::_Tset_traits<Gui::DocumentObjectItem * __ptr64,std::less<Gui::DocumentObjectItem * __ptr64>,std::allocator<Gui::DocumentObjectItem * __ptr64>,0>>::_Lmost   xtree   2123   0x7ffc06baaca3   
1   std::_Tree<std::_Tset_traits<Gui::DocumentObjectItem * __ptr64,std::less<Gui::DocumentObjectItem * __ptr64>,std::allocator<Gui::DocumentObjectItem * __ptr64>,0>>::begin   xtree   1212   0x7ffc06bad9cd   
2   Gui::DocumentItem::testStatus   Tree.cpp   1260   0x7ffc06b837de   
3   Gui::TreeWidget::onTestStatus   Tree.cpp   730   0x7ffc06b8107f   
4   Gui::TreeWidget::qt_static_metacall   moc_Tree.cpp   82   0x7ffc06b7c0cd   
5   QBuffer::qt_static_metacall   QtCored4      0x5b3fb109   
6   QBuffer::qt_static_metacall   QtCored4      0x5b499040   
7   QBuffer::qt_static_metacall   QtCored4      0x5b4122a5   
8   QBuffer::qt_static_metacall   QtCored4      0x5b3fcaf3   
9   QAbstractItemView::qt_metacast   QtGuid4      0x5928bbf6   
10   QAbstractItemView::qt_metacast   QtGuid4      0x592865e8   
11   Gui::GUIApplication::notify   GuiApplication.cpp   91   0x7ffc0693e822   
12   QBuffer::qt_static_metacall   QtCored4      0x5b3da1ca   
13   QBuffer::qt_static_metacall   QtCored4      0x5b3e2d43   
14   QBuffer::qt_static_metacall   QtCored4      0x5b430bc7   
15   QBuffer::qt_static_metacall   QtCored4      0x5b42e4a3   
16   CallWindowProcW   USER32      0x7ffc47401c24   
17   DispatchMessageW   USER32      0x7ffc4740156c   
18   DialogBoxIndirectParamAorW   USER32      0x7ffc4741e4a6   
19   DialogBoxIndirectParamAorW   USER32      0x7ffc4741e223   
20   SoftModalMessageBox   USER32      0x7ffc4747ae5b   
21   MessageBoxW   USER32      0x7ffc474788e8   
22   MessageBoxTimeoutW   USER32      0x7ffc47478565   
23   MessageBoxW   USER32      0x7ffc474785ee   
24   _CppXcptFilter   MSVCR120D      0x7ffc2c4f7509   
25   wassert   MSVCR120D      0x7ffc2c4eccad   
26   Gui::DocumentItem::slotNewObject   Tree.cpp   1006   0x7ffc06b8459d   
27   Gui::DocumentItem::populateItem   Tree.cpp   1124   0x7ffc06b84278   
28   Gui::DocumentItem::slotChangeObject   Tree.cpp   1144   0x7ffc06b851e6   
29   boost::_mfi::mf1<void,Gui::DocumentItem,Gui::ViewProviderDocumentObject const & __ptr64>::operator()   mem_fn_template.hpp   166   0x7ffc06ba76b9   
30   boost::_bi::list2<boost::_bi::value<Gui::DocumentItem * __ptr64>,boost::arg<1>>::operator()<boost::_mfi::mf1<void,Gui::DocumentItem,Gui::ViewProviderDocumentObject const & __ptr64>,boost::_bi::list2<Gui::ViewProviderDocumentObject const & __ptr6   bind.hpp   314   0x7ffc06b8d1ba   
31   boost::_bi::bind_t<void,boost::_mfi::mf1<void,Gui::DocumentItem,Gui::ViewProviderDocumentObject const & __ptr64>,boost::_bi::list2<boost::_bi::value<Gui::DocumentItem * __ptr64>,boost::arg<1>>>::operator()<Gui::ViewProviderDocumentObject,App::P   bind_template.hpp   103   0x7ffc06b8da38   
32   boost::detail::function::void_function_obj_invoker2<boost::_bi::bind_t<void,boost::_mfi::mf1<void,Gui::DocumentItem,Gui::ViewProviderDocumentObject const & __ptr64>,boost::_bi::list2<boost::_bi::value<Gui::DocumentItem * __ptr64>,boost::arg<1>>    function_template.hpp   154   0x7ffc06bb32dc   
33   boost::function2<void,Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64>::operator()   function_template.hpp   768   0x7ffc068f2bde   
34   boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64)>>::operat   signal_template.hpp   120   0x7ffc068d139f   
35   boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr6   slot_call_iterator.hpp   61   0x7ffc068fd0fc   
36   boost::iterator_core_access::dereference<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::   iterator_facade.hpp   515   0x7ffc068e4308   
37   boost::iterator_facade<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocume   iterator_facade.hpp   640   0x7ffc068f0670   
38   boost::detail::postfix_increment_proxy<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::Vi   iterator_facade.hpp   146   0x7ffc068eab0d   
39   boost::operator++<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObj   iterator_facade.hpp   730   0x7ffc068d1047   
40   boost::last_value<void>::operator()<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(Gui::ViewP   last_value.hpp   49   0x7ffc068d1dc9   
41   boost::signal2<void,Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr64,boost::last_value<void>,int,std::less<int>,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64,App::Property const & __ptr6   signal_template.hpp   354   0x7ffc068f3649   
42   Gui::Document::slotChangedObject   Document.cpp   526   0x7ffc068c3123   
43   boost::_mfi::mf2<void,Gui::Document,App::DocumentObject const & __ptr64,App::Property const & __ptr64>::operator()   mem_fn_template.hpp   281   0x7ffc068f2ee3   
44   boost::_bi::list3<boost::_bi::value<Gui::Document * __ptr64>,boost::arg<1>,boost::arg<2>>::operator()<boost::_mfi::mf2<void,Gui::Document,App::DocumentObject const & __ptr64,App::Property const & __ptr64>,boost::_bi::list2<App::DocumentObject co   bind.hpp   393   0x7ffc068d1ad8   
45   boost::_bi::bind_t<void,boost::_mfi::mf2<void,Gui::Document,App::DocumentObject const & __ptr64,App::Property const & __ptr64>,boost::_bi::list3<boost::_bi::value<Gui::Document * __ptr64>,boost::arg<1>,boost::arg<2>>>::operator()<App::DocumentO   bind_template.hpp   103   0x7ffc068d2268   
46   boost::detail::function::void_function_obj_invoker2<boost::_bi::bind_t<void,boost::_mfi::mf2<void,Gui::Document,App::DocumentObject const & __ptr64,App::Property const & __ptr64>,boost::_bi::list3<boost::_bi::value<Gui::Document * __ptr64>,boost:   function_template.hpp   154   0x7ffc0690308c   
47   boost::function2<void,App::DocumentObject const & __ptr64,App::Property const & __ptr64>::operator()   function_template.hpp   768   0x7ffc11a96fae   
48   boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64,App::Property const & __ptr64)>>::operator()<boost::signals::det   signal_template.hpp   120   0x7ffc119ea04f   
49   boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64,App::Property const &    slot_call_iterator.hpp   61   0x7ffc11ad4b3c   
50   boost::iterator_core_access::dereference<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObje   iterator_facade.hpp   515   0x7ffc11a2b778   
51   boost::iterator_facade<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64   iterator_facade.hpp   640   0x7ffc11a8a800   
52   boost::detail::postfix_increment_proxy<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObject   iterator_facade.hpp   146   0x7ffc11a57e8d   
53   boost::operator++<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64,App:   iterator_facade.hpp   730   0x7ffc119e8c47   
54   boost::last_value<void>::operator()<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound2<void>::caller<App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::function<void __cdecl(App::DocumentObject co   last_value.hpp   49   0x7ffc119eb0c9   
55   boost::signal2<void,App::DocumentObject const & __ptr64,App::Property const & __ptr64,boost::last_value<void>,int,std::less<int>,boost::function<void __cdecl(App::DocumentObject const & __ptr64,App::Property const & __ptr64)>>::operator()   signal_template.hpp   354   0x7ffc11a9c359   
56   App::Document::onChangedProperty   Document.cpp   955   0x7ffc119d69a5   
57   App::DocumentObject::onChanged   DocumentObject.cpp   419   0x7ffc11b031ad   
58   Part::Feature::onChanged   PartFeature.cpp   144   0x7ffc088c3e6d   
59   App::FeaturePythonT<Part::Feature>::onChanged   FeaturePython.h   203   0x7ffc088d0969   
60   App::Property::hasSetValue   Property.cpp   126   0x7ffc11c06bda   
61   App::PropertyLinkList::setValues   PropertyLinks.cpp   241   0x7ffc11c23aad   
62   App::GroupExtension::addObject   GroupExtension.cpp   74   0x7ffc11b23893   
63   App::OriginGroupExtension::addObject   OriginGroupExtension.cpp   193   0x7ffc11bb93d1   
64   App::GroupExtensionPy::addObject   GroupExtensionPyImp.cpp   90   0x7ffc11b285c9   
65   App::GroupExtensionPy::staticCallback_addObject   GroupExtensionPy.cpp   220   0x7ffc11b28292   
66   PyCFunction_Call   methodobject.c   81   0x1e17dd18   
67   call_function   ceval.c   4033   0x1e21c934   
68   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
69   PyEval_EvalCodeEx   ceval.c   3265   0x1e214dff   
70   fast_function   ceval.c   4133   0x1e21deea   
71   call_function   ceval.c   4055   0x1e21ca19   
72   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
73   fast_function   ceval.c   4120   0x1e21de4f   
74   call_function   ceval.c   4055   0x1e21ca19   
75   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
76   fast_function   ceval.c   4120   0x1e21de4f   
77   call_function   ceval.c   4055   0x1e21ca19   
78   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
79   PyEval_EvalCodeEx   ceval.c   3265   0x1e214dff   
80   fast_function   ceval.c   4133   0x1e21deea   
81   call_function   ceval.c   4055   0x1e21ca19   
82   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
83   fast_function   ceval.c   4120   0x1e21de4f   
84   call_function   ceval.c   4055   0x1e21ca19   
85   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
86   PyEval_EvalCodeEx   ceval.c   3265   0x1e214dff   
87   function_call   funcobject.c   531   0x1e15cb1d   
88   PyObject_Call   abstract.c   2529   0x1e10bddb   
89   instancemethod_call   classobject.c   2602   0x1e12b749   
90   PyObject_Call   abstract.c   2529   0x1e10bddb   
91   PyEval_CallObjectWithKeywords   ceval.c   3903   0x1e214426   
92   PyObject_CallObject   abstract.c   2518   0x1e10c360   
93   PySide::SignalManager::callPythonMetaMethod   signalmanager.cpp   480   0x7ffc2a38417f   
94   PySide::GlobalReceiverV2::qt_metacall   globalreceiverv2.cpp   293   0x7ffc2a38e506   
95   QBuffer::qt_static_metacall   QtCored4      0x5b3e6d74   
96   QBuffer::qt_static_metacall   QtCored4      0x5b3fb202   
97   QBuffer::qt_static_metacall   QtCored4      0x5b499040   
98   QBuffer::qt_static_metacall   QtCored4      0x5b4122a5   
99   initQtCore   QtCore_d      0x7ffc0fb4e5bc   
100   QBuffer::qt_static_metacall   QtCored4      0x5b3fcaf3   
101   initQtCore   QtCore_d      0x7ffc0fb4dd6c   
102   QAbstractItemView::qt_metacast   QtGuid4      0x5928bbf6   
103   QAbstractItemView::qt_metacast   QtGuid4      0x592865e8   
104   Gui::GUIApplication::notify   GuiApplication.cpp   91   0x7ffc0693e822   
105   QBuffer::qt_static_metacall   QtCored4      0x5b3da1ca   
106   QBuffer::qt_static_metacall   QtCored4      0x5b3e2d43   
107   QBuffer::qt_static_metacall   QtCored4      0x5b430bc7   
108   QBuffer::qt_static_metacall   QtCored4      0x5b42e4a3   
109   CallWindowProcW   USER32      0x7ffc47401c24   
110   DispatchMessageW   USER32      0x7ffc4740156c   
111   QBuffer::qt_static_metacall   QtCored4      0x5b42eef8   
112   QAbstractItemView::qt_metacast   QtGuid4      0x5937c875   
113   QBuffer::qt_static_metacall   QtCored4      0x5b3d8379   
114   Gui::BitmapFactoryInst::pixmapFromSvg   BitmapFactory.cpp   396   0x7ffc068ba92f   
115   Gui::BitmapFactoryInst::loadPixmap   BitmapFactory.cpp   239   0x7ffc068bcbcc   
116   Gui::BitmapFactoryInst::pixmap   BitmapFactory.cpp   278   0x7ffc068b9f85   
117   Gui::ViewProvider::getIcon   ViewProvider.cpp   247   0x7ffc06e3f4f2   
118   Gui::DocumentItem::slotNewObject   Tree.cpp   1017   0x7ffc06b847a2   
119   boost::_mfi::mf2<void,Gui::DocumentItem,Gui::DocumentObjectItem * __ptr64,Gui::ViewProviderDocumentObject const & __ptr64>::operator()   mem_fn_template.hpp   281   0x7ffc06ba7833   
120   boost::_bi::list3<boost::_bi::value<Gui::DocumentItem * __ptr64>,boost::_bi::value<Gui::DocumentObjectItem * __ptr64>,boost::arg<1>>::operator()<boost::_mfi::mf2<void,Gui::DocumentItem,Gui::DocumentObjectItem * __ptr64,Gui::ViewProviderDocumentO   bind.hpp   393   0x7ffc06b8d5cd   
121   boost::_bi::bind_t<void,boost::_mfi::mf2<void,Gui::DocumentItem,Gui::DocumentObjectItem * __ptr64,Gui::ViewProviderDocumentObject const & __ptr64>,boost::_bi::list3<boost::_bi::value<Gui::DocumentItem * __ptr64>,boost::_bi::value<Gui::DocumentObj   bind_template.hpp   48   0x7ffc06b8d98b   
122   boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void,boost::_mfi::mf2<void,Gui::DocumentItem,Gui::DocumentObjectItem * __ptr64,Gui::ViewProviderDocumentObject const & __ptr64>,boost::_bi::list3<boost::_bi::value<Gui::Docume   function_template.hpp   154   0x7ffc06bb3262   
123   boost::function1<void,Gui::ViewProviderDocumentObject const & __ptr64>::operator()   function_template.hpp   768   0x7ffc068f2b11   
124   boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64)>>::operator()<boost::signals::detail::connection_slot_pair>   signal_template.hpp   120   0x7ffc068d14d3   
125   boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64)>>,boost::signals::detail::   slot_call_iterator.hpp   61   0x7ffc068fd25c   
126   boost::iterator_core_access::dereference<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject con   iterator_facade.hpp   515   0x7ffc068e4388   
127   boost::iterator_facade<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64)>>,b   iterator_facade.hpp   640   0x7ffc068f0710   
128   boost::detail::postfix_increment_proxy<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const   iterator_facade.hpp   146   0x7ffc068eabad   
129   boost::operator++<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64)>>,boost:   iterator_facade.hpp   730   0x7ffc068d1167   
130   boost::last_value<void>::operator()<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<Gui::ViewProviderDocumentObject const & __ptr64,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const &    last_value.hpp   49   0x7ffc068d1f09   
131   boost::signal1<void,Gui::ViewProviderDocumentObject const & __ptr64,boost::last_value<void>,int,std::less<int>,boost::function<void __cdecl(Gui::ViewProviderDocumentObject const & __ptr64)>>::operator()   signal_template.hpp   354   0x7ffc068f327c   
132   Gui::Document::slotNewObject   Document.cpp   466   0x7ffc068c2cd8   
133   boost::_mfi::mf1<void,Gui::Document,App::DocumentObject const & __ptr64>::operator()   mem_fn_template.hpp   166   0x7ffc068f2e29   
134   boost::_bi::list2<boost::_bi::value<Gui::Document * __ptr64>,boost::arg<1>>::operator()<boost::_mfi::mf1<void,Gui::Document,App::DocumentObject const & __ptr64>,boost::_bi::list1<App::DocumentObject const & __ptr64>>   bind.hpp   314   0x7ffc068d18aa   
135   boost::_bi::bind_t<void,boost::_mfi::mf1<void,Gui::Document,App::DocumentObject const & __ptr64>,boost::_bi::list2<boost::_bi::value<Gui::Document * __ptr64>,boost::arg<1>>>::operator()<App::DocumentObject>   bind_template.hpp   48   0x7ffc068d210b   
136   boost::detail::function::void_function_obj_invoker1<boost::_bi::bind_t<void,boost::_mfi::mf1<void,Gui::Document,App::DocumentObject const & __ptr64>,boost::_bi::list2<boost::_bi::value<Gui::Document * __ptr64>,boost::arg<1>>>,void,App::Document   function_template.hpp   154   0x7ffc06902f92   
137   boost::function1<void,App::DocumentObject const & __ptr64>::operator()   function_template.hpp   768   0x7ffc11a96d41   
138   boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>::operator()<boost::signals::detail::connection_slot_pair>   signal_template.hpp   120   0x7ffc119ea183   
139   boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>,boost::signals::detail::named_slot_map_iterator>   slot_call_iterator.hpp   61   0x7ffc11ad4c9c   
140   boost::iterator_core_access::dereference<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>,boost::   iterator_facade.hpp   515   0x7ffc11a2b7f8   
141   boost::iterator_facade<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>,boost::signals::detail::n   iterator_facade.hpp   640   0x7ffc11a8a8a0   
142   boost::detail::postfix_increment_proxy<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>,boost::si   iterator_facade.hpp   146   0x7ffc11a57f2d   
143   boost::operator++<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>,boost::signals::detail::named_   iterator_facade.hpp   730   0x7ffc119e8d67   
144   boost::last_value<void>::operator()<boost::signals::detail::slot_call_iterator<boost::signals::detail::call_bound1<void>::caller<App::DocumentObject const & __ptr64,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>,boost::signa   last_value.hpp   49   0x7ffc119eb209   
145   boost::signal1<void,App::DocumentObject const & __ptr64,boost::last_value<void>,int,std::less<int>,boost::function<void __cdecl(App::DocumentObject const & __ptr64)>>::operator()   signal_template.hpp   354   0x7ffc11a9b7ec   
146   App::Document::addObject   Document.cpp   2194   0x7ffc119cb82c   
147   App::DocumentPy::addObject   DocumentPyImp.cpp   228   0x7ffc11b48928   
148   App::DocumentPy::staticCallback_addObject   DocumentPy.cpp   1115   0x7ffc11b48792   
149   PyCFunction_Call   methodobject.c   81   0x1e17dd18   
150   call_function   ceval.c   4033   0x1e21c934   
151   PyEval_EvalFrameEx   ceval.c   2681   0x1e21a2ca   
152   PyEval_EvalCodeEx   ceval.c   3265   0x1e214dff   
153   PyEval_EvalCode   ceval.c   679   0x1e2144a9   
154   run_mod   pythonrun.c   1377   0x1e278ed9   
155   PyRun_StringFlags   pythonrun.c   1340   0x1e27655d   
156   Base::InterpreterSingleton::runString   Interpreter.cpp   196   0x7ffc2aff12b5   
157   Gui::Command::runCommand   Command.cpp   485   0x7ffc0699638a   
158   CmdPartCylinder::activated   CommandParametric.cpp   63   0x7ffc09c6782b   
159   Gui::Command::invoke   Command.cpp   300   0x7ffc069957be   
160   Gui::Action::onActivated   Action.cpp   95   0x7ffc06980cde   
161   Gui::Action::qt_static_metacall   moc_Action.cpp   49   0x7ffc069801e1   
162   QBuffer::qt_static_metacall   QtCored4      0x5b3fb109   
163   QAbstractItemView::qt_metacast   QtGuid4      0x5925a5dd   
164   QAbstractItemView::qt_metacast   QtGuid4      0x59259a0d   
165   QAbstractItemView::qt_metacast   QtGuid4      0x5927f595   
166   QAbstractItemView::qt_metacast   QtGuid4      0x59a7ad84   
167   QAbstractItemView::qt_metacast   QtGuid4      0x59922c67   
168   QAbstractItemView::qt_metacast   QtGuid4      0x59921d46   
169   QAbstractItemView::qt_metacast   QtGuid4      0x59a7a89c   
170   QAbstractItemView::qt_metacast   QtGuid4      0x5932d556   
171   QAbstractItemView::qt_metacast   QtGuid4      0x59921879   
172   QAbstractItemView::qt_metacast   QtGuid4      0x59a7a6da   
173   QAbstractItemView::qt_metacast   QtGuid4      0x5928bbf6   
174   QAbstractItemView::qt_metacast   QtGuid4      0x59286f26   
175   Gui::GUIApplication::notify   GuiApplication.cpp   91   0x7ffc0693e822   
176   QBuffer::qt_static_metacall   QtCored4      0x5b3da1ca   
177   QBuffer::qt_static_metacall   QtCored4      0x5b4a3a6c   
178   QAbstractItemView::qt_metacast   QtGuid4      0x5928dac6   
179   QAbstractItemView::qt_metacast   QtGuid4      0x5937877f   
180   QAbstractItemView::qt_metacast   QtGuid4      0x59373991   
181   CallWindowProcW   USER32      0x7ffc47401c24   
182   DispatchMessageW   USER32      0x7ffc4740156c   
183   QBuffer::qt_static_metacall   QtCored4      0x5b42eef8   
184   QAbstractItemView::qt_metacast   QtGuid4      0x5937c875   
185   QBuffer::qt_static_metacall   QtCored4      0x5b3d5f24   
186   QBuffer::qt_static_metacall   QtCored4      0x5b3d6207   
187   QBuffer::qt_static_metacall   QtCored4      0x5b3d824c   
188   QAbstractItemView::qt_metacast   QtGuid4      0x592861c8   
189   Gui::Application::runApplication   Application.cpp   1757   0x7ffc067fbde7   
190   main   MainGui.cpp   239   0x7ff77a5835c5   
191   WinMain   FreeCAD_d      0x7ff77a5932d1   
192   __tmainCRTStartup   crtexe.c   618   0x7ff77a591391   
193   WinMainCRTStartup   crtexe.c   466   0x7ff77a59110e   
194   BaseThreadInitThunk   KERNEL32      0x7ffc48568364   
195   RtlUserThreadStart   ntdll      0x7ffc487170d1   


My analysis:
key points in stack are: Cylinder creation -> Tree is notified -> Tree loads icon -> during icon load, Part-o-magic's timer fires -> part-o-magic tries to add Cylinder to ShapeGroup -> Tree is notified -> Tree crashes