fix: fix world model point map bug

This commit is contained in:
kradchen
2025-10-23 15:51:09 +08:00
parent 5b39805d9f
commit b3ffe90533
2 changed files with 16 additions and 14 deletions

View File

@@ -137,9 +137,8 @@ void AngleAnnotationActor::onMeasureMouseMove(vtkRenderWindowInteractor *iren) {
int y = iren->GetEventPosition()[1];
vtkRenderer *renderer = iren->FindPokedRenderer(x, y);
if (!renderer) return;
renderer->SetDisplayPoint(x, y, 0.0);
renderer->DisplayToWorld();
double *p = renderer->GetWorldPoint();
double p[3]={0.0,0.0,0.0};
MapScreenPointToWorld(x, y,renderer,p);
if (this->placedPointCount == 1) {
controlP2->SetWorldPosition(p);
this->SetWorldPosition2(p);
@@ -155,9 +154,8 @@ bool AngleAnnotationActor::onMeasureLeftButtonDown(vtkRenderWindowInteractor *ir
int y = iren->GetEventPosition()[1];
vtkRenderer *renderer = iren->FindPokedRenderer(x, y);
if (!renderer) return false;
renderer->SetDisplayPoint(x, y, 0.0);
renderer->DisplayToWorld();
double *p = renderer->GetWorldPoint();
double p[3]={0.0,0.0,0.0};
MapScreenPointToWorld(x, y,renderer,p);
if (this->placedPointCount == 0) {
controlP1->SetWorldPosition(p);
controlP2->SetWorldPosition(p);
@@ -184,9 +182,8 @@ bool AngleAnnotationActor::onMeasureLeftButtonUp(vtkRenderWindowInteractor *iren
int y = iren->GetEventPosition()[1];
vtkRenderer *renderer = iren->FindPokedRenderer(x, y);
if (!renderer) return true;
renderer->SetDisplayPoint(x, y, 0.0);
renderer->DisplayToWorld();
double *p = renderer->GetWorldPoint();
double p[3]={0.0,0.0,0.0};
MapScreenPointToWorld(x, y,renderer,p);
if (this->placedPointCount == 1) {
controlP2->SetWorldPosition(p);
this->SetWorldPosition2(p);

View File

@@ -69,9 +69,8 @@ bool OpenPolyAnnotationActor::onMeasureLeftButtonDown(vtkRenderWindowInteractor
int y = iren->GetEventPosition()[1];
vtkRenderer *renderer = iren->FindPokedRenderer(x, y);
if (!renderer) return false;
renderer->SetDisplayPoint(x, y, 0.0);
renderer->DisplayToWorld();
double *p = renderer->GetWorldPoint();
double p[3]={0.0,0.0,0.0};
MapScreenPointToWorld(x, y,renderer,p);
auto controlP = ControlPointRActor::New();
controlP->SetWorldPosition(p);
@@ -189,12 +188,18 @@ void OpenPolyAnnotationActor::UpdatePerimeterAndAreaText()
double *rp = renderPoints->GetPoint(0);
text->SetDisplayPosition(rp[0] + 10, rp[1] - 20);
double distance = 0.0;
for (vtkIdType i = 1; i < BaseDataPoints->GetNumberOfPoints(); ++i)
for (vtkIdType i = 0; i < BaseDataPoints->GetNumberOfPoints(); ++i)
{
double p1[3] = {0.};
double p2[3] = {0.};
BaseDataPoints->GetPoint(i, p1);
BaseDataPoints->GetPoint(i - 1, p2);
if (i+1<BaseDataPoints->GetNumberOfPoints())
{
BaseDataPoints->GetPoint(i + 1, p2);
}
else if (Closed){
BaseDataPoints->GetPoint(0, p2);
}
distance += std::sqrt(vtkMath::Distance2BetweenPoints(p1, p2));
}