Sketcher infinite axes
This commit is contained in:
committed by
Yorik van Havre
parent
407b056952
commit
ea8814785a
@@ -808,8 +808,6 @@ void EditModeCoinManager::processGeometryConstraintsInformationOverlay(
|
||||
|
||||
processGeometryInformationOverlay(geolistfacade);
|
||||
|
||||
updateAxesLength();
|
||||
|
||||
pEditModeConstraintCoinManager->processConstraints(geolistfacade);
|
||||
}
|
||||
|
||||
@@ -852,22 +850,18 @@ void EditModeCoinManager::processGeometryInformationOverlay(const GeoListFacade&
|
||||
overlayParameters.visibleInformationChanged = false; // just updated
|
||||
}
|
||||
|
||||
void EditModeCoinManager::updateAxesLength()
|
||||
void EditModeCoinManager::updateAxesLength(const Base::BoundBox2d& bb)
|
||||
{
|
||||
auto zCrossH = ViewProviderSketchCoinAttorney::getViewOrientationFactor(viewProvider)
|
||||
* drawingParameters.zCross;
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(
|
||||
0,
|
||||
SbVec3f(-analysisResults.boundingBoxMagnitudeOrder, 0.0f, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(
|
||||
1,
|
||||
SbVec3f(analysisResults.boundingBoxMagnitudeOrder, 0.0f, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(
|
||||
2,
|
||||
SbVec3f(0.0f, -analysisResults.boundingBoxMagnitudeOrder, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(
|
||||
3,
|
||||
SbVec3f(0.0f, analysisResults.boundingBoxMagnitudeOrder, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(0,
|
||||
SbVec3f(bb.MinX, 0.0f, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(1,
|
||||
SbVec3f(bb.MaxX, 0.0f, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(2,
|
||||
SbVec3f(0.0f, bb.MinY, zCrossH));
|
||||
editModeScenegraphNodes.RootCrossCoordinate->point.set1Value(3,
|
||||
SbVec3f(0.0f, bb.MaxY, zCrossH));
|
||||
}
|
||||
|
||||
void EditModeCoinManager::updateColor()
|
||||
|
||||
@@ -44,6 +44,8 @@ class Vector3;
|
||||
|
||||
class Vector2d;
|
||||
|
||||
class BoundBox2d;
|
||||
|
||||
class Placement;
|
||||
} // namespace Base
|
||||
|
||||
@@ -256,6 +258,9 @@ public:
|
||||
void setConstraintSelectability(bool enabled = true);
|
||||
//@}
|
||||
|
||||
// Updates the Axes extension to span the specified area.
|
||||
void updateAxesLength(const Base::BoundBox2d& bb);
|
||||
|
||||
private:
|
||||
// This function populates the coin nodes with the information of the current geometry
|
||||
void processGeometry(const GeoListFacade& geolistfacade);
|
||||
@@ -265,9 +270,6 @@ private:
|
||||
// parallel.
|
||||
void processGeometryInformationOverlay(const GeoListFacade& geolistfacade);
|
||||
|
||||
// updates the Axes length to extend beyond the calculated bounding box magnitude
|
||||
void updateAxesLength();
|
||||
|
||||
// updates the parameters to be used for the Overlay information layer
|
||||
void updateOverlayParameters();
|
||||
|
||||
|
||||
@@ -3459,8 +3459,10 @@ void ViewProviderSketch::setEditViewer(Gui::View3DInventorViewer* viewer, int Mo
|
||||
|
||||
viewer->setupEditingRoot();
|
||||
|
||||
cameraSensor.setData(new VPRender {this, viewer->getSoRenderManager()});
|
||||
cameraSensor.attach(viewer->getSoRenderManager()->getSceneGraph());
|
||||
auto *camSensorData = new VPRender {this, viewer->getSoRenderManager()};
|
||||
cameraSensor.setData(camSensorData);
|
||||
cameraSensor.setDeleteCallback(&ViewProviderSketch::camSensDeleteCB, camSensorData);
|
||||
cameraSensor.attach(viewer->getCamera());
|
||||
}
|
||||
|
||||
void ViewProviderSketch::unsetEditViewer(Gui::View3DInventorViewer* viewer)
|
||||
@@ -3468,6 +3470,7 @@ void ViewProviderSketch::unsetEditViewer(Gui::View3DInventorViewer* viewer)
|
||||
auto dataPtr = static_cast<VPRender*>(cameraSensor.getData());
|
||||
delete dataPtr;
|
||||
cameraSensor.setData(nullptr);
|
||||
cameraSensor.setDeleteCallback(nullptr, nullptr);
|
||||
cameraSensor.detach();
|
||||
|
||||
viewer->removeGraphicsItem(rubberband.get());
|
||||
@@ -3475,6 +3478,22 @@ void ViewProviderSketch::unsetEditViewer(Gui::View3DInventorViewer* viewer)
|
||||
viewer->setSelectionEnabled(true);
|
||||
}
|
||||
|
||||
void ViewProviderSketch::camSensDeleteCB(void* data, SoSensor *s)
|
||||
{
|
||||
auto *proxyVPrdr = static_cast<VPRender*>(data);
|
||||
if (!proxyVPrdr)
|
||||
return;
|
||||
|
||||
// The camera object the observer was attached to is gone, try to re-attach the sensor
|
||||
// to the new camera.
|
||||
// This happens i.e. when the user switches the camera type from orthographic to
|
||||
// perspective.
|
||||
SoCamera *camera = proxyVPrdr->renderMgr->getCamera();
|
||||
if (camera) {
|
||||
static_cast<SoNodeSensor *>(s)->attach(camera);
|
||||
}
|
||||
}
|
||||
|
||||
void ViewProviderSketch::camSensCB(void* data, SoSensor*)
|
||||
{
|
||||
VPRender* proxyVPrdr = static_cast<VPRender*>(data);
|
||||
@@ -3516,6 +3535,15 @@ void ViewProviderSketch::onCameraChanged(SoCamera* cam)
|
||||
Base::Interpreter().runStringObject(cmdStr.toLatin1());
|
||||
}
|
||||
|
||||
// Stretch the axes to cover the whole viewport.
|
||||
Gui::View3DInventor* view = qobject_cast<Gui::View3DInventor*>(this->getActiveView());
|
||||
if (view) {
|
||||
Base::Placement plc = getEditingPlacement();
|
||||
const Base::BoundBox2d vpBBox = view->getViewer()
|
||||
->getViewportOnXYPlaneOfPlacement(plc);
|
||||
editCoinManager->updateAxesLength(vpBBox);
|
||||
}
|
||||
|
||||
drawGrid(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -717,7 +717,8 @@ protected:
|
||||
void unsetEdit(int ModNum) override;
|
||||
void setEditViewer(Gui::View3DInventorViewer*, int ModNum) override;
|
||||
void unsetEditViewer(Gui::View3DInventorViewer*) override;
|
||||
static void camSensCB(void* data, SoSensor*); // camera sensor callback
|
||||
static void camSensCB(void* data, SoSensor*); // camera sensor callback
|
||||
static void camSensDeleteCB(void* data, SoSensor*); // camera sensor callback
|
||||
void onCameraChanged(SoCamera* cam);
|
||||
//@}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user