6
* Copyright 2008-12 MetaEmotion S.L. All rights reserved.
7
* http://ginkgo-cadx.com
9
* This file is licensed under LGPL v3 license.
10
* See License.txt for details
15
#include "copyimagetoclipboardtool.h"
16
#include <export/contracts/iwidgetscontract.h>
17
#include <api/controllers/ieventscontroller.h>
18
#include <eventos/modificacionimagen.h>
19
#include <eventos/render.h>
20
#include <api/iwidgetsmanager.h>
21
#include <main/entorno.h>
22
#include <main/controllers/commandcontroller.h>
28
#include <vtk/vtkginkgoimageviewer.h>
30
#include <vtkPolyDataMapper.h>
32
#include <vtkSmartPointer.h>
33
#include <vtkRenderWindow.h>
34
#include <vtkRenderer.h>
35
#include <vtkRenderWindowInteractor.h>
36
#include <vtkPolyData.h>
37
#include <vtkSphereSource.h>
38
#include <vtkWindowToImageFilter.h>
39
#include <vtkJPEGWriter.h>
41
#include <resources/ginkgoresourcesmanager.h>
43
#include <wx/bitmap.h>
45
#include <wx/dataobj.h>
46
#include <wx/clipbrd.h>
48
GNC::GCS::ITool* GNC::CopyImageToClipboardTool::NewTool()
50
return new GNC::CopyImageToClipboardTool();
53
GNC::CopyImageToClipboardTool::CopyImageToClipboardTool()
56
GNC::CopyImageToClipboardTool::~CopyImageToClipboardTool()
60
bool GNC::CopyImageToClipboardTool::ExecuteAction()
62
std::string tempName = GNC::Entorno::Instance()->CreateGinkgoTempFile();
64
vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
65
vtkSmartPointer<vtkWindowToImageFilter>::New();
66
windowToImageFilter->SetInput(WidgetsContract->GetViewerActivo()->GetRenderWindow());
67
windowToImageFilter->SetInputBufferTypeToRGB(); //also record the alpha (transparency) channel
68
windowToImageFilter->Update();
70
// put the pixels into a wxImage ...
71
vtkSmartPointer<vtkImageData> timg = windowToImageFilter->GetOutput();
72
unsigned char *pVtkPix = (unsigned char *)timg->GetScalarPointer();
74
unsigned long imgsize = timg->GetDimensions()[0] * timg->GetDimensions()[1] * sizeof(unsigned char) * 3;
75
unsigned char* data = new unsigned char[imgsize];
76
int linesize = timg->GetDimensions()[0] *3;
77
for (int y = 0; y < timg->GetDimensions()[1]; ++y) {
78
int offsetWx = imgsize - (linesize * (y +1));
79
int offsetVtk = y*linesize;
80
for (int x = 0; x < linesize; ++x) {
81
data[offsetWx+x] = pVtkPix[offsetVtk+x];
85
wxImage image(timg->GetDimensions()[0], timg->GetDimensions()[1],data,false);
86
// ... and send the image to the clipboard
87
if (wxTheClipboard->Open())
89
wxTheClipboard->SetData( new wxBitmapDataObject(wxBitmap(image)) );
90
wxTheClipboard->Close();