Mercurial > hg > orthanc-stone
diff Framework/Scene2DViewport/AngleMeasureTool.cpp @ 722:28b9e3a54200
Undo mechanism implemented (not connected to UI yet). Undo stack and measuring
tools are now handled by the ViewportController. Multi-touch does not crash
trackers anymore.
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Tue, 21 May 2019 10:27:54 +0200 |
parents | 8b6adfb62a2f |
children | 712ff6ff3c19 |
line wrap: on
line diff
--- a/Framework/Scene2DViewport/AngleMeasureTool.cpp Mon May 20 12:49:29 2019 +0200 +++ b/Framework/Scene2DViewport/AngleMeasureTool.cpp Tue May 21 10:27:54 2019 +0200 @@ -77,207 +77,209 @@ void AngleMeasureTool::RefreshScene() { - if (IsEnabled()) + if (IsSceneAlive()) { - // get the scaling factor - const double pixelToScene = - GetScene()->GetCanvasToSceneTransform().ComputeZoom(); - if (!layersCreated) + if (IsEnabled()) { - // Create the layers if need be + // get the scaling factor + const double pixelToScene = + GetScene()->GetCanvasToSceneTransform().ComputeZoom(); - assert(textBaseZIndex_ == -1); + if (!layersCreated) { - polylineZIndex_ = GetScene()->GetMaxDepth() + 100; - //LOG(INFO) << "set polylineZIndex_ to: " << polylineZIndex_; - std::auto_ptr<PolylineSceneLayer> layer(new PolylineSceneLayer()); - GetScene()->SetLayer(polylineZIndex_, layer.release()); + // Create the layers if need be - } - { - textBaseZIndex_ = GetScene()->GetMaxDepth() + 100; - // create the four text background layers + assert(textBaseZIndex_ == -1); { - std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); - GetScene()->SetLayer(textBaseZIndex_, layer.release()); - } - { - std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); - GetScene()->SetLayer(textBaseZIndex_+1, layer.release()); - } - { - std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); - GetScene()->SetLayer(textBaseZIndex_+2, layer.release()); + polylineZIndex_ = GetScene()->GetMaxDepth() + 100; + //LOG(INFO) << "set polylineZIndex_ to: " << polylineZIndex_; + std::auto_ptr<PolylineSceneLayer> layer(new PolylineSceneLayer()); + GetScene()->SetLayer(polylineZIndex_, layer.release()); + } { - std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); - GetScene()->SetLayer(textBaseZIndex_+3, layer.release()); + textBaseZIndex_ = GetScene()->GetMaxDepth() + 100; + // create the four text background layers + { + std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); + GetScene()->SetLayer(textBaseZIndex_, layer.release()); + } + { + std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); + GetScene()->SetLayer(textBaseZIndex_ + 1, layer.release()); + } + { + std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); + GetScene()->SetLayer(textBaseZIndex_ + 2, layer.release()); + } + { + std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); + GetScene()->SetLayer(textBaseZIndex_ + 3, layer.release()); + } + + // and the text layer itself + { + std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); + GetScene()->SetLayer(textBaseZIndex_ + 4, layer.release()); + } + } - - // and the text layer itself - { - std::auto_ptr<TextSceneLayer> layer(new TextSceneLayer()); - GetScene()->SetLayer(textBaseZIndex_+4, layer.release()); - } - + layersCreated = true; + } + else + { + assert(GetScene()->HasLayer(polylineZIndex_)); + assert(GetScene()->HasLayer(textBaseZIndex_)); } - layersCreated = true; - } - else - { - assert(GetScene()->HasLayer(polylineZIndex_)); - assert(GetScene()->HasLayer(textBaseZIndex_)); - } - { - // Fill the polyline layer with the measurement line + { + // Fill the polyline layer with the measurement line + + PolylineSceneLayer* polylineLayer = GetPolylineLayer(); + polylineLayer->ClearAllChains(); + polylineLayer->SetColor(0, 183, 17); - PolylineSceneLayer* polylineLayer = GetPolylineLayer(); - polylineLayer->ClearAllChains(); - polylineLayer->SetColor(0, 183, 17); + // sides + { + { + PolylineSceneLayer::Chain chain; + chain.push_back(side1End_); + chain.push_back(center_); + polylineLayer->AddChain(chain, false); + } + { + PolylineSceneLayer::Chain chain; + chain.push_back(side2End_); + chain.push_back(center_); + polylineLayer->AddChain(chain, false); + } + } - // sides - { + // handles + { + //void AddSquare(PolylineSceneLayer::Chain& chain,const Scene2D& scene,const ScenePoint2D& centerS,const double& sideLength) + + { + PolylineSceneLayer::Chain chain; + AddSquare(chain, *GetScene(), side1End_, 10.0 * pixelToScene); //TODO: take DPI into account + polylineLayer->AddChain(chain, true); + } + + { + PolylineSceneLayer::Chain chain; + AddSquare(chain, *GetScene(), side2End_, 10.0 * pixelToScene); //TODO: take DPI into account + polylineLayer->AddChain(chain, true); + } + } + + // arc { PolylineSceneLayer::Chain chain; - chain.push_back(side1End_); - chain.push_back(center_); - polylineLayer->AddChain(chain, false); - } - { - PolylineSceneLayer::Chain chain; - chain.push_back(side2End_); - chain.push_back(center_); + + const double ARC_RADIUS_CANVAS_COORD = 30.0; + AddShortestArc(chain, *GetScene(), side1End_, center_, side2End_, + ARC_RADIUS_CANVAS_COORD * pixelToScene); polylineLayer->AddChain(chain, false); } } - - // handles { - //void AddSquare(PolylineSceneLayer::Chain& chain,const Scene2D& scene,const ScenePoint2D& centerS,const double& sideLength) - - { - PolylineSceneLayer::Chain chain; - AddSquare(chain, *GetScene(), side1End_, 10.0* pixelToScene); //TODO: take DPI into account - polylineLayer->AddChain(chain, true); - } + // Set the text layer - { - PolylineSceneLayer::Chain chain; - AddSquare(chain, *GetScene(), side2End_, 10.0* pixelToScene); //TODO: take DPI into account - polylineLayer->AddChain(chain, true); - } - } - - // arc - { - PolylineSceneLayer::Chain chain; - - const double ARC_RADIUS_CANVAS_COORD = 30.0; - AddShortestArc(chain, *GetScene(), side1End_, center_, side2End_, - ARC_RADIUS_CANVAS_COORD*pixelToScene); - polylineLayer->AddChain(chain, false); - } - } - { - // Set the text layer - - double p1cAngle = atan2( - side1End_.GetY() - center_.GetY(), - side1End_.GetX() - center_.GetX()); + double p1cAngle = atan2( + side1End_.GetY() - center_.GetY(), + side1End_.GetX() - center_.GetX()); - double p2cAngle = atan2( - side2End_.GetY() - center_.GetY(), - side2End_.GetX() - center_.GetX()); + double p2cAngle = atan2( + side2End_.GetY() - center_.GetY(), + side2End_.GetX() - center_.GetX()); - double delta = NormalizeAngle(p2cAngle - p1cAngle); + double delta = NormalizeAngle(p2cAngle - p1cAngle); - double theta = p1cAngle + delta/2; + double theta = p1cAngle + delta / 2; - const double TEXT_CENTER_DISTANCE_CANVAS_COORD = 90; + const double TEXT_CENTER_DISTANCE_CANVAS_COORD = 90; - double offsetX = TEXT_CENTER_DISTANCE_CANVAS_COORD * cos(theta); + double offsetX = TEXT_CENTER_DISTANCE_CANVAS_COORD * cos(theta); - double offsetY = TEXT_CENTER_DISTANCE_CANVAS_COORD * sin(theta); + double offsetY = TEXT_CENTER_DISTANCE_CANVAS_COORD * sin(theta); - double pointX = center_.GetX() + offsetX * pixelToScene; - double pointY = center_.GetY() + offsetY * pixelToScene; + double pointX = center_.GetX() + offsetX * pixelToScene; + double pointY = center_.GetY() + offsetY * pixelToScene; - char buf[64]; - double angleDeg = RadiansToDegrees(delta); + char buf[64]; + double angleDeg = RadiansToDegrees(delta); - // http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=00B0&mode=hex - sprintf(buf, "%0.02f\xc2\xb0", angleDeg); + // http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=00B0&mode=hex + sprintf(buf, "%0.02f\xc2\xb0", angleDeg); - SetTextLayerOutlineProperties( - *GetScene(), textBaseZIndex_, buf, ScenePoint2D(pointX, pointY)); + SetTextLayerOutlineProperties( + *GetScene(), textBaseZIndex_, buf, ScenePoint2D(pointX, pointY)); - // TODO:make it togglable - bool enableInfoDisplay = false; - if (enableInfoDisplay) - { - TrackerSample_SetInfoDisplayMessage("center_.GetX()", - boost::lexical_cast<std::string>(center_.GetX())); + // TODO:make it togglable + bool enableInfoDisplay = false; + if (enableInfoDisplay) + { + TrackerSample_SetInfoDisplayMessage("center_.GetX()", + boost::lexical_cast<std::string>(center_.GetX())); - TrackerSample_SetInfoDisplayMessage("center_.GetY()", - boost::lexical_cast<std::string>(center_.GetY())); + TrackerSample_SetInfoDisplayMessage("center_.GetY()", + boost::lexical_cast<std::string>(center_.GetY())); - TrackerSample_SetInfoDisplayMessage("side1End_.GetX()", - boost::lexical_cast<std::string>(side1End_.GetX())); + TrackerSample_SetInfoDisplayMessage("side1End_.GetX()", + boost::lexical_cast<std::string>(side1End_.GetX())); - TrackerSample_SetInfoDisplayMessage("side1End_.GetY()", - boost::lexical_cast<std::string>(side1End_.GetY())); + TrackerSample_SetInfoDisplayMessage("side1End_.GetY()", + boost::lexical_cast<std::string>(side1End_.GetY())); - TrackerSample_SetInfoDisplayMessage("side2End_.GetX()", - boost::lexical_cast<std::string>(side2End_.GetX())); + TrackerSample_SetInfoDisplayMessage("side2End_.GetX()", + boost::lexical_cast<std::string>(side2End_.GetX())); - TrackerSample_SetInfoDisplayMessage("side2End_.GetY()", - boost::lexical_cast<std::string>(side2End_.GetY())); + TrackerSample_SetInfoDisplayMessage("side2End_.GetY()", + boost::lexical_cast<std::string>(side2End_.GetY())); - TrackerSample_SetInfoDisplayMessage("p1cAngle (deg)", - boost::lexical_cast<std::string>(RadiansToDegrees(p1cAngle))); + TrackerSample_SetInfoDisplayMessage("p1cAngle (deg)", + boost::lexical_cast<std::string>(RadiansToDegrees(p1cAngle))); - TrackerSample_SetInfoDisplayMessage("delta (deg)", - boost::lexical_cast<std::string>(RadiansToDegrees(delta))); + TrackerSample_SetInfoDisplayMessage("delta (deg)", + boost::lexical_cast<std::string>(RadiansToDegrees(delta))); - TrackerSample_SetInfoDisplayMessage("theta (deg)", - boost::lexical_cast<std::string>(RadiansToDegrees(theta))); + TrackerSample_SetInfoDisplayMessage("theta (deg)", + boost::lexical_cast<std::string>(RadiansToDegrees(theta))); - TrackerSample_SetInfoDisplayMessage("p2cAngle (deg)", - boost::lexical_cast<std::string>(RadiansToDegrees(p2cAngle))); + TrackerSample_SetInfoDisplayMessage("p2cAngle (deg)", + boost::lexical_cast<std::string>(RadiansToDegrees(p2cAngle))); - TrackerSample_SetInfoDisplayMessage("offsetX (pix)", - boost::lexical_cast<std::string>(offsetX)); + TrackerSample_SetInfoDisplayMessage("offsetX (pix)", + boost::lexical_cast<std::string>(offsetX)); - TrackerSample_SetInfoDisplayMessage("offsetY (pix)", - boost::lexical_cast<std::string>(offsetY)); + TrackerSample_SetInfoDisplayMessage("offsetY (pix)", + boost::lexical_cast<std::string>(offsetY)); - TrackerSample_SetInfoDisplayMessage("pointX", - boost::lexical_cast<std::string>(pointX)); + TrackerSample_SetInfoDisplayMessage("pointX", + boost::lexical_cast<std::string>(pointX)); - TrackerSample_SetInfoDisplayMessage("pointY", - boost::lexical_cast<std::string>(pointY)); + TrackerSample_SetInfoDisplayMessage("pointY", + boost::lexical_cast<std::string>(pointY)); - TrackerSample_SetInfoDisplayMessage("angleDeg", - boost::lexical_cast<std::string>(angleDeg)); - } + TrackerSample_SetInfoDisplayMessage("angleDeg", + boost::lexical_cast<std::string>(angleDeg)); + } + } } - } - else - { - if (layersCreated) + else { - RemoveFromScene(); - layersCreated = false; + if (layersCreated) + { + RemoveFromScene(); + layersCreated = false; + } } } } - - }