// Created on: 2011-10-14 // Created by: Roman KOZLOV // Copyright (c) 2011-2014 OPEN CASCADE SAS // // This file is part of Open CASCADE Technology software library. // // This library is free software; you can redistribute it and/or modify it under // the terms of the GNU Lesser General Public License version 2.1 as published // by the Free Software Foundation, with special exception defined in the file // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT // distribution for complete text of the license and disclaimer of any warranty. // // Alternatively, this file may be used under the terms of Open CASCADE // commercial license or contractual agreement. #include // prevent disabling some MSVC warning messages by VTK headers #ifdef _MSC_VER #pragma warning(push) #endif #include #include #include #include #include #ifdef _MSC_VER #pragma warning(pop) #endif IMPLEMENT_STANDARD_RTTIEXT(IVtkVTK_ShapeData,IVtk_IShapeData) //================================================================ // Function : Constructor // Purpose : //================================================================ IVtkVTK_ShapeData::IVtkVTK_ShapeData() { myPolyData = vtkSmartPointer::New(); myPolyData->Allocate(); myPolyData->SetPoints (vtkSmartPointer::New()); mySubShapeIDs = vtkSmartPointer::New(); mySubShapeIDs->SetName (IVtkVTK_ShapeData::ARRNAME_SUBSHAPE_IDS()); mySubShapeIDs->SetNumberOfComponents (1); myPolyData->GetCellData()->AddArray (mySubShapeIDs); myMeshTypes = vtkSmartPointer::New(); myMeshTypes->SetName (IVtkVTK_ShapeData::ARRNAME_MESH_TYPES()); myMeshTypes->SetNumberOfComponents (1); myPolyData->GetCellData()->AddArray (myMeshTypes); } //================================================================ // Function : Destructor // Purpose : //================================================================ IVtkVTK_ShapeData::~IVtkVTK_ShapeData() { } //================================================================ // Function : InsertCoordinate // Purpose : //================================================================ IVtk_PointId IVtkVTK_ShapeData::InsertCoordinate (double theX, double theY, double theZ) { return myPolyData->GetPoints()->InsertNextPoint (theX, theY, theZ); } //================================================================ // Function : InsertVertex // Purpose : //================================================================ void IVtkVTK_ShapeData::InsertVertex (const IVtk_IdType theShapeID, const IVtk_PointId thePointId, const IVtk_MeshType theMeshType) { vtkIdType aPointIdVTK = thePointId; myPolyData->InsertNextCell (VTK_VERTEX, 1, &aPointIdVTK); insertNextSubShapeId (theShapeID, theMeshType); } //================================================================ // Function : InsertLine // Purpose : //================================================================ void IVtkVTK_ShapeData::InsertLine (const IVtk_IdType theShapeID, const IVtk_PointId thePointId1, const IVtk_PointId thePointId2, const IVtk_MeshType theMeshType) { vtkIdType aPoints[2] = { thePointId1, thePointId2 }; myPolyData->InsertNextCell (VTK_LINE, 2, aPoints); insertNextSubShapeId (theShapeID, theMeshType); } //================================================================ // Function : InsertLine // Purpose : //================================================================ void IVtkVTK_ShapeData::InsertLine (const IVtk_IdType theShapeID, const IVtk_PointIdList* thePointIds, const IVtk_MeshType theMeshType) { if (!thePointIds->IsEmpty()) { vtkSmartPointer anIdList = vtkSmartPointer::New(); // Fill the vtk id list by ids from IVtk_PointIdList. IVtk_PointIdList::Iterator anIterOfIds = IVtk_PointIdList::Iterator(*thePointIds); anIdList->Allocate(thePointIds->Extent()); for(; anIterOfIds.More(); anIterOfIds.Next()) { anIdList->InsertNextId (anIterOfIds.Value()); } myPolyData->InsertNextCell (VTK_POLY_LINE, anIdList); insertNextSubShapeId (theShapeID, theMeshType); } } //================================================================ // Function : InsertTriangle // Purpose : //================================================================ void IVtkVTK_ShapeData::InsertTriangle (const IVtk_IdType theShapeID, const IVtk_PointId thePointId1, const IVtk_PointId thePointId2, const IVtk_PointId thePointId3, const IVtk_MeshType theMeshType) { vtkIdType aPoints[3] = { thePointId1, thePointId2, thePointId3 }; myPolyData->InsertNextCell (VTK_TRIANGLE, 3, aPoints); insertNextSubShapeId (theShapeID, theMeshType); }