#endif
#ifdef _WIN32
-#define _WIN32_WINNT 0x0400 // for TrackMouseEvent support requires Win95 with IE 3.0 or greater.
#include <windows.h>
#include <WNT_WClass.hxx>
#include <WNT_Window.hxx>
// Function : WClass
// Purpose :
//=========================================================
-const Handle(MMgt_TShared)& IVtkDraw::WClass()
+const Handle(Standard_Transient)& IVtkDraw::WClass()
{
- static Handle(MMgt_TShared) aWindowClass;
+ static Handle(Standard_Transient) aWindowClass;
#ifdef _WIN32
if (aWindowClass.IsNull())
{
aWindowClass = new WNT_WClass ("GWVTK_Class", DefWindowProc,
CS_VREDRAW | CS_HREDRAW, 0, 0,
- ::LoadCursor (NULL, IDC_ARROW));
+ ::LoadCursorW (NULL, IDC_ARROW));
}
#endif
return aWindowClass;
TCollection_AsciiString aName;
TopoDS_Shape anOldShape, aNewShape;
- vtkSmartPointer<vtkRenderer> aRenderer = GetRenderer();
+ vtkSmartPointer<vtkRenderer>& aRenderer = GetRenderer();
for (Standard_Integer anIndex = 1; anIndex < theArgNum; ++anIndex)
{
// Get name of shape
{
if (aNewShape.IsNull()) continue;
// Create actor from DRAW shape
- vtkActor* anActor = CreateActor (GenerateId(), aNewShape);
+ Standard_Integer anId = GenerateId();
+ vtkSmartPointer<vtkActor> anActor = CreateActor (anId, aNewShape);
// Update maps
GetMapOfShapes().Bind (aNewShape, aName);
GetMapOfActors().Bind (anActor, aName);
// Display actor
- PipelineByActorName (aName)->AddToRenderer (aRenderer);
+ GetPipeline(anId)->AddToRenderer(aRenderer);
// Compute selection for displayed actors
GetPicker()->SetSelectionMode (SM_Shape, Standard_True);
return 0;
}
+//================================================================
+// Function : VtkRemove
+// Purpose : Remove the actor from memory.
+//================================================================
+static Standard_Integer VtkRemove(Draw_Interpretor& theDI,
+ Standard_Integer theArgNum,
+ const char** theArgs)
+{
+ // Check viewer
+ if (!GetInteractor()->IsEnabled())
+ {
+ theDI << theArgs[0] << " error : call ivtkinit before\n";
+ return 1; // TCL_ERROR
+ }
+
+ vtkSmartPointer<vtkRenderer> aRenderer = GetRenderer();
+
+ // Remove all objects
+ if (theArgNum == 1)
+ {
+ // Remove all actors from the renderer
+ DoubleMapOfActorsAndNames::Iterator anIterator(GetMapOfActors());
+ while (anIterator.More())
+ {
+ vtkSmartPointer<IVtkTools_ShapeDataSource> aSrc =
+ IVtkTools_ShapeObject::GetShapeSource(anIterator.Key1());
+ if (aSrc.GetPointer() != NULL && !(aSrc->GetShape().IsNull()))
+ {
+ GetPicker()->RemoveSelectableObject(aSrc->GetShape());
+ }
+ else
+ {
+ aRenderer->RemoveActor(anIterator.Key1());
+ }
+ anIterator.Next();
+ }
+ // Remove all pipelines from the renderer
+ for (ShapePipelineMap::Iterator anIt(*GetPipelines()); anIt.More(); anIt.Next())
+ {
+ anIt.Value()->RemoveFromRenderer(aRenderer);
+ }
+ // Clear maps and remove all TopoDS_Shapes, actors and pipelines
+ GetMapOfShapes().Clear();
+ GetMapOfActors().Clear();
+ GetPipelines()->Clear();
+ }
+ // Remove named objects
+ else
+ {
+ TCollection_AsciiString aName;
+ for (Standard_Integer anIndex = 1; anIndex < theArgNum; ++anIndex)
+ {
+ aName = theArgs[anIndex];
+ if (GetMapOfActors().IsBound2(aName))
+ {
+ // Remove the actor and its pipeline (if found) from the renderer
+ vtkSmartPointer<vtkActor> anActor = GetMapOfActors().Find2(aName);
+ vtkSmartPointer<IVtkTools_ShapeDataSource> aSrc =
+ IVtkTools_ShapeObject::GetShapeSource(anActor);
+ if (aSrc.GetPointer() != NULL && !(aSrc->GetShape().IsNull()))
+ {
+ IVtk_IdType aShapeID = aSrc->GetShape()->GetId();
+ GetPicker()->RemoveSelectableObject(aSrc->GetShape());
+ GetPipeline(aSrc->GetShape()->GetId())->RemoveFromRenderer(aRenderer);
+ GetPipelines()->UnBind(aShapeID); // Remove a pipepline
+ }
+ else
+ {
+ aRenderer->RemoveActor(anActor);
+ }
+ // Remove the TopoDS_Shape and the actor
+ GetMapOfShapes().UnBind2(aName); // Remove a TopoDS shape
+ GetMapOfActors().UnBind2(aName); // Remove an actor
+ }
+ }
+ }
+
+ // Redraw window
+ aRenderer->ResetCamera();
+ GetInteractor()->GetRenderWindow()->Render();
+ return 0;
+}
+
//================================================================
// Function : VtkSetDisplayMode
// Purpose :
if (theArgNum == 3)
{
aMode = atoi (theArgs[1]);
- isTurnOn = atoi (theArgs[2]);
+ isTurnOn = (atoi (theArgs[2]) != 0);
if (aMode < 0 || aMode > 8)
{
theDI << theArgs[0] << " error: only 0-8 selection modes are supported\n";
if (theArgNum == 4)
{
aMode = atoi (theArgs[2]);
- isTurnOn = atoi (theArgs[3]);
+ isTurnOn = (atoi (theArgs[3]) != 0);
if (aMode < 0 || aMode > 8)
{
return 1; // TCL_ERROR
}
- Standard_Integer anY = GetInteractor()->GetRenderWindow()->GetSize()[1] - atoi (theArgs[1]) - 1;
+ Standard_Integer anY = GetInteractor()->GetRenderWindow()->GetSize()[1] - atoi (theArgs[2]) - 1;
GetInteractor()->MoveTo (atoi (theArgs[1]), anY);
GetInteractor()->OnSelection();
return 0;
"\n\t\t: Removes from renderer named objects or all objects.",
__FILE__, VtkErase, group);
+ theCommands.Add("ivtkremove",
+ "ivtkremove usage:\n"
+ "ivtkremove [name1 name2 ...]"
+ "\n\t\t: Removes from renderer and from memory named objects or all objects.",
+ __FILE__, VtkRemove, group);
+
theCommands.Add("ivtksetdispmode",
"ivtksetdispmode usage:\n"
"ivtksetdispmode [name] mode (0,1)"