App: add new convenient class SubObjectT

Derived from App::DocumentObjectT to add support of sub object

Also some minor changes to App::DocumentObjectT

Changed Gui::SelectionChanges to make use of SubObjectT
This commit is contained in:
Zheng, Lei
2019-12-05 10:34:51 +08:00
committed by WandererFan
parent 5d60f3af01
commit 39959f9500
6 changed files with 324 additions and 121 deletions

View File

@@ -97,22 +97,26 @@ public:
setArrow();
return;
}
if((msg.Type!=Gui::SelectionChanges::SetPreselect
if(msg.Type!=Gui::SelectionChanges::SetPreselect
&& msg.Type!=Gui::SelectionChanges::MovePreselect)
|| !msg.pOriginalMsg || !msg.pSubObject || !msg.pParentObject)
return;
auto obj = msg.Object.getObject();
if(!obj)
return;
Base::Matrix4D mat;
auto sobj = obj->getSubObject(msg.pSubName,0,&mat);
if(!sobj)
return;
Base::Matrix4D linkMat;
auto sobj = msg.pSubObject->getLinkedObject(true,&linkMat,false);
auto linked = sobj->getLinkedObject(true,&linkMat,false);
auto vp = Base::freecad_dynamic_cast<ViewProviderPath>(
Application::Instance->getViewProvider(sobj));
Application::Instance->getViewProvider(linked));
if(!vp) {
setArrow();
return;
}
if(vp->pt0Index >= 0) {
Base::Matrix4D mat;
msg.pParentObject->getSubObject(msg.pSubName,0,&mat);
mat *= linkMat;
mat.inverse();
Base::Vector3d pt = mat*Base::Vector3d(msg.x,msg.y,msg.z);