diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 6e17e1d72..6a0b733c5 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -104,6 +104,7 @@ #include "SoFCVectorizeU3DAction.h" #include "SoFCVectorizeSVGAction.h" #include "SoFCDB.h" +#include "Application.h" #include "MainWindow.h" #include "NavigationStyle.h" #include "ViewProvider.h" @@ -1447,6 +1448,7 @@ void View3DInventorViewer::viewAll(float factor) void View3DInventorViewer::viewSelection() { +#if 0 // Search for all SoFCSelection nodes SoSearchAction searchAction; searchAction.setType(SoFCSelection::getClassTypeId()); @@ -1472,6 +1474,18 @@ void View3DInventorViewer::viewSelection() root->addChild(select); } } +#else + SoGroup* root = new SoGroup(); + root->ref(); + + std::vector selection = Selection().getObjectsOfType(App::DocumentObject::getClassTypeId()); + for (std::vector::iterator it = selection.begin(); it != selection.end(); ++it) { + ViewProvider* vp = Application::Instance->getViewProvider(*it); + if (vp) { + root->addChild(vp->getRoot()); + } + } +#endif SoCamera* cam = this->getCamera(); if (cam) cam->viewAll(root, this->getViewportRegion()); diff --git a/src/Mod/PartDesign/App/FeatureSketchBased.cpp b/src/Mod/PartDesign/App/FeatureSketchBased.cpp index 4ccd562d9..9b01368fb 100644 --- a/src/Mod/PartDesign/App/FeatureSketchBased.cpp +++ b/src/Mod/PartDesign/App/FeatureSketchBased.cpp @@ -561,11 +561,15 @@ const bool SketchBased::checkLineCrossesFace(const gp_Lin &line, const TopoDS_Fa TopoDS_Wire wire = ShapeAnalysis::OuterWire(face); BRepExtrema_DistShapeShape distss(wire, mkEdge.Shape(), Precision::Confusion()); if (distss.IsDone()) { + if (distss.Value() > Precision::Confusion()) + return false; // build up map vertex->edge TopTools_IndexedDataMapOfShapeListOfShape vertex2Edge; TopExp::MapShapesAndAncestors(wire, TopAbs_VERTEX, TopAbs_EDGE, vertex2Edge); for (Standard_Integer i=1; i<= distss.NbSolution(); i++) { + if (distss.PointOnShape1(i).Distance(distss.PointOnShape2(i)) > Precision::Confusion()) + continue; BRepExtrema_SupportType type = distss.SupportTypeShape1(i); if (type == BRepExtrema_IsOnEdge) { //This further check is not really needed