diff --git a/src/render/interact/AnomalyDrawTool.cpp b/src/render/interact/AnomalyDrawTool.cpp index 637dbd4..8b7c7a8 100644 --- a/src/render/interact/AnomalyDrawTool.cpp +++ b/src/render/interact/AnomalyDrawTool.cpp @@ -51,26 +51,34 @@ void AnomalyDrawTool::start(DrawMode mode, const Vec3& planeOrigin, const Vec3& onFinish_ = std::move(onFinish); onCancel_ = std::move(onCancel); pts_.clear(); - ptsBeforeClick_.clear(); lastClickMs_ = -1.0; hasCursor_ = false; active_ = true; installObservers(); - // 屏幕操作提示(左上角),按形态给不同指引。 + // 屏幕操作提示(右上角,避开左侧工具条):标题 + 当前形态的结束方式 + 取消,分行排版。 if (renderer_) { const char* tip = mode_ == DrawMode::Point - ? "标注点:左键单击落点即完成 · Esc 取消" + ? "标注点\n左键单击落点即完成\nEsc 取消" : (mode_ == DrawMode::Line - ? "标注线:左键逐点 · 双击完成 · Backspace 撤点 · Esc 取消" - : "标注面:左键逐点 · 点回起点闭合 · Backspace 撤点 · Esc 取消"); + ? "标注线\n左键逐点 · 双击结束\nBackspace 撤点 · Esc 取消" + : "标注面\n左键逐点 · 点回起点闭合\nBackspace 撤点 · Esc 取消"); hint_ = vtkSmartPointer::New(); hint_->SetInput(tip); - hint_->GetTextProperty()->SetFontSize(16); - hint_->GetTextProperty()->SetColor(1.0, 0.9, 0.0); + auto* tp = hint_->GetTextProperty(); + tp->SetFontSize(15); + tp->SetLineSpacing(1.3); + tp->SetColor(0.90, 0.94, 1.0); // 近白(canvas-text) + tp->SetJustificationToRight(); // 右对齐,贴右上 + tp->SetVerticalJustificationToTop(); + tp->SetBackgroundColor(0.04, 0.07, 0.12); // 深底 + tp->SetBackgroundOpacity(0.66); + tp->SetFrame(1); + tp->SetFrameColor(0.37, 0.55, 0.96); // accent 描边 + tp->SetFrameWidth(1); hint_->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport(); - hint_->GetPositionCoordinate()->SetValue(0.02, 0.94); + hint_->GetPositionCoordinate()->SetValue(0.985, 0.975); // 右上角 renderer_->AddViewProp(hint_); if (interactor_) interactor_->Render(); } @@ -282,12 +290,9 @@ void AnomalyDrawTool::installObservers() { self->lastClickX_ = p[0]; self->lastClickY_ = p[1]; if (dbl) { - // 隔离单/双击:回滚"双击第一下"那次加点(否则线多一段、面多一条边),再完成。 - self->pts_ = self->ptsBeforeClick_; - self->updatePreview(); + // 双击结束:第一下已落点(=双击位置),保留为末顶点直接完成(含双击位置,同地图工具)。 self->finish(); } else { - self->ptsBeforeClick_ = self->pts_; // 快照本次点击前状态,供随后可能的双击回滚 self->addVertex(); } break; diff --git a/src/render/interact/AnomalyDrawTool.hpp b/src/render/interact/AnomalyDrawTool.hpp index 7f1cefa..7be9472 100644 --- a/src/render/interact/AnomalyDrawTool.hpp +++ b/src/render/interact/AnomalyDrawTool.hpp @@ -56,7 +56,6 @@ private: DrawMode mode_ = DrawMode::Face; Vec3 origin_{{0, 0, 0}}, normal_{{0, 0, 1}}; std::vector pts_; - std::vector ptsBeforeClick_; // 上一次单击前快照:双击时回滚"第一下"加点/移点,隔离单/双击 std::function&)> onFinish_; std::function onCancel_;