[vtkusers] Why cannot I build and run a subclass of vtkInteractorStyleTrackballActor in the debug mode?

Jesse Kinross-Smith Jesse.Kinross-Smith at bentley.com
Wed Mar 21 20:21:06 EDT 2018


Ahh.. I got too excited in trying to help that I missed the obvious.  You were doing the vtkStandardNewMacro, but you were doing it further down the file.  Try putting it at the top of the file BEFORE the standard MFC 

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

This is mine for an example:

Header file:
class VTKINTERACTIONSTYLE_EXPORT vtkInteractorStyleCustom : public vtkInteractorStyleRubberBand3D
{
public:
	static vtkInteractorStyleCustom *New();
...


protected:
	vtkInteractorStyleMOSESGui();
	~vtkInteractorStyleMOSESGui();
...
};

And then my CPP file consists of:

#includes...

vtkStandardNewMacro(vtkInteractorStyleCustom);

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

vtkInteractorStyleCustom:: vtkInteractorStyleCustom () : vtkInteractorStyleRubberBand3D()
{
...
}

--
Jesse Kinross-Smith
Senior Software Engineer - BSW
Bentley Systems, Fremantle

-----Original Message-----
From: vtkusers [mailto:vtkusers-bounces at vtk.org] On Behalf Of pnt1614
Sent: Thursday, 22 March 2018 7:38 AM
To: vtkusers at vtk.org
Subject: [vtkusers] Why cannot I build and run a subclass of vtkInteractorStyleTrackballActor in the debug mode?

I use the following code (VTK and MFC) to drag a point to a new position.
After click a "picking" button, I use the middle mouse button to move pick and move a point. I can build and run the release mode, but I cannot build in the debug mode because of an error. Is there anyone experienced this problem? Please help me. Thank you.

The error messages are
"Error (active)      no instance of overloaded "InteractorStyle2::operator
new" matches the argument list

Error   C2660   'vtkObject::operator new': function does not take 3
arguments"


This my C++ code:
class InteractorStyle2 : public vtkInteractorStyleTrackballActor {
public:
  static InteractorStyle2* New();
  vtkTypeMacro(InteractorStyle2, vtkInteractorStyleTrackballActor);

  InteractorStyle2()
  {
    this->Move = false;
    this->PointPicker = vtkSmartPointer<vtkPointPicker>::New();

    // Setup ghost glyph
    vtkSmartPointer<vtkPoints> points =
        vtkSmartPointer<vtkPoints>::New();
    points->InsertNextPoint(0, 0, 0);
    this->MovePolyData = vtkSmartPointer<vtkPolyData>::New();
    this->MovePolyData->SetPoints(points);
    this->MoveGlyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();
    this->MoveGlyphFilter->SetInputData(this->MovePolyData);
    this->MoveGlyphFilter->Update();

    this->MoveMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
   
this->MoveMapper->SetInputConnection(this->MoveGlyphFilter->GetOutputPor
this->MoveMapper->t());

    this->MoveActor = vtkSmartPointer<vtkActor>::New();
    this->MoveActor->SetMapper(this->MoveMapper);
    this->MoveActor->VisibilityOff();
    this->MoveActor->GetProperty()->SetPointSize(10);
    this->MoveActor->GetProperty()->SetColor(1, 0, 0);
  }

  void OnMouseMove()
  {
    if (!this->Move)
        return;

    vtkInteractorStyleTrackballActor::OnMouseMove();
  }

  void OnMiddleButtonUp()
  {
    this->EndPan();

    this->Move = false;
    this->MoveActor->VisibilityOff(); // Turn off rendering a red point

    this->Data->GetPoints()->SetPoint(this->SelectedPoint,
this->MoveActor->GetPosition());
    this->Data->Modified();
    this->GetCurrentRenderer()->Render();
    this->GetCurrentRenderer()->GetRenderWindow()->Render();

  }
  void OnMiddleButtonDown()
  {
    // Get the selected point
    int x = this->Interactor->GetEventPosition()[0];
    int y = this->Interactor->GetEventPosition()[1];
    this->FindPokedRenderer(x, y);

    this->PointPicker->Pick(this->Interactor->GetEventPosition()[0],
        this->Interactor->GetEventPosition()[1],
        0,  // always zero.
       
this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer())
this->Interactor->;

    if (this->PointPicker->GetPointId() >= 0)
    {
        this->StartPan();
        this->MoveActor->VisibilityOn(); // turn on rendering a red point
        this->Move = true;
        this->SelectedPoint = this->PointPicker->GetPointId();

        std::cout << "Dragging point " << this->SelectedPoint << std::endl;

        double p[3];
        this->Data->GetPoint(this->SelectedPoint, p);
        std::cout << "p: " << p[0] << " " << p[1] << " " << p[2] << std::endl;
        this->MoveActor->SetPosition(p);

        this->GetCurrentRenderer()->AddActor(this->MoveActor);
        this->InteractionProp = this->MoveActor;
    }
  }

  vtkPolyData* Data;
  vtkPolyData* GlyphData;

  vtkSmartPointer<vtkPolyDataMapper> MoveMapper;
  vtkSmartPointer<vtkActor> MoveActor;
  vtkSmartPointer<vtkPolyData> MovePolyData;
  vtkSmartPointer<vtkVertexGlyphFilter> MoveGlyphFilter;

  vtkSmartPointer<vtkPointPicker> PointPicker;

  bool Move;
  vtkIdType SelectedPoint;
};
vtkStandardNewMacro(InteractorStyle2); // error occurs in the debug mode

//....
void CvtkMFCDlgExDlg::OnBnClickedButtonPicking()
{       
  vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
  points->InsertNextPoint(0, 0, 0);
  points->InsertNextPoint(1, 0, 0);
  points->InsertNextPoint(2, 0, 0);

  vtkSmartPointer<vtkPolyData> input = vtkSmartPointer<vtkPolyData>::New();
  input->SetPoints(points);

  vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter = vtkSmartPointer<vtkVertexGlyphFilter>::New();

  glyphFilter->SetInputData(input);
  glyphFilter->Update();

  // Create a mapper and actor
  vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
  mapper->SetInputConnection(glyphFilter->GetOutputPort());

  vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
  actor->SetMapper(mapper);
  actor->GetProperty()->SetPointSize(10);

  // Visualize
  vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();

  renderer->AddActor(actor);

  m_vtkWindow->AddRenderer(renderer);
  m_vtkWindow->Render();

  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = m_vtkWindow->GetInteractor();

  vtkSmartPointer<InteractorStyle2> style = vtkSmartPointer<InteractorStyle2>::New();
  renderWindowInteractor->SetInteractorStyle(style);

  style->Data = input;
}



--
Sent from: https://urldefense.proofpoint.com/v2/url?u=http-3A__vtk.1045678.n5.nabble.com_VTK-2DUsers-2Df1224199.html&d=DwICAg&c=hmGTLOph1qd_VnCqj81HzEWkDaxmYdIWRBdoFggzhj8&r=QPUyrnKdkaGJHD0OTha3x09u1N6qkcvUsRW8n2fg59E&m=HsDAM8uSamf6yLdv9u0Y3Bz8y1PqEyqlwZRYTwGdEgY&s=NIAFIEDf5L0rrSS86V_zdoKoe8nSLZjmBd89F5-L2C8&e=
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at https://urldefense.proofpoint.com/v2/url?u=http-3A__www.kitware.com_opensource_opensource.html&d=DwICAg&c=hmGTLOph1qd_VnCqj81HzEWkDaxmYdIWRBdoFggzhj8&r=QPUyrnKdkaGJHD0OTha3x09u1N6qkcvUsRW8n2fg59E&m=HsDAM8uSamf6yLdv9u0Y3Bz8y1PqEyqlwZRYTwGdEgY&s=dW8JORvscqn4ODNxJQnnrv7jq-oXxJ8MLWe-GRPAvy8&e=

Please keep messages on-topic and check the VTK FAQ at: https://urldefense.proofpoint.com/v2/url?u=http-3A__www.vtk.org_Wiki_VTK-5FFAQ&d=DwICAg&c=hmGTLOph1qd_VnCqj81HzEWkDaxmYdIWRBdoFggzhj8&r=QPUyrnKdkaGJHD0OTha3x09u1N6qkcvUsRW8n2fg59E&m=HsDAM8uSamf6yLdv9u0Y3Bz8y1PqEyqlwZRYTwGdEgY&s=HU0mKy-Jfjc1gWcLXUUtQsJGJnByhOKyRCcZBuFxCII&e=

Search the list archives at: https://urldefense.proofpoint.com/v2/url?u=http-3A__markmail.org_search_-3Fq-3Dvtkusers&d=DwICAg&c=hmGTLOph1qd_VnCqj81HzEWkDaxmYdIWRBdoFggzhj8&r=QPUyrnKdkaGJHD0OTha3x09u1N6qkcvUsRW8n2fg59E&m=HsDAM8uSamf6yLdv9u0Y3Bz8y1PqEyqlwZRYTwGdEgY&s=347P0Va3uvBfYPTHeJ1Bx1Wmt9oMUUDvFb1FNoSvVyw&e=

Follow this link to subscribe/unsubscribe:
https://urldefense.proofpoint.com/v2/url?u=https-3A__vtk.org_mailman_listinfo_vtkusers&d=DwICAg&c=hmGTLOph1qd_VnCqj81HzEWkDaxmYdIWRBdoFggzhj8&r=QPUyrnKdkaGJHD0OTha3x09u1N6qkcvUsRW8n2fg59E&m=HsDAM8uSamf6yLdv9u0Y3Bz8y1PqEyqlwZRYTwGdEgY&s=mJn5y0rmdBLoVkg_ZmwWWO4bfTnqD6uo09EV4I0FBTE&e=


More information about the vtkusers mailing list