OSDN Git Service

On exporting graphics, resolution and background color can be specified
authortoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Wed, 2 Jul 2014 08:54:33 +0000 (08:54 +0000)
committertoshinagata1964 <toshinagata1964@a2be9bc6-48de-4e38-9406-05402d4bc13c>
Wed, 2 Jul 2014 08:54:33 +0000 (08:54 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/molby/trunk@557 a2be9bc6-48de-4e38-9406-05402d4bc13c

MolLib/MainView.c
Scripts/commands.rb
wxSources/MoleculeView.cpp
wxSources/MoleculeView.h
wxSources/MyDocument.cpp

index 64c3a37..c9291b3 100755 (executable)
@@ -1741,7 +1741,7 @@ MainView_drawModel(MainView *mview)
     glViewport(0, 0, width, height);
     
        /*  Clear the buffer  */
-    glClearColor(mview->background_color[0], mview->background_color[1], mview->background_color[2], 0);
+    glClearColor(mview->background_color[0], mview->background_color[1], mview->background_color[2], mview->background_color[3]);
     glClear(GL_COLOR_BUFFER_BIT |
             GL_DEPTH_BUFFER_BIT);
        
index 34bbd1f..2c6eab1 100755 (executable)
@@ -425,6 +425,27 @@ class Molecule
          show
     }
   end
+
+  def ask_graphic_export_scale
+    scale = get_global_settings("global.export_graphic_scale")
+       scale = (scale ? scale.to_i - 1 : 3)
+       bg_color = get_global_settings("global.export_background_color")
+       bg_color = (bg_color ? bg_color.to_i + 1 : 0)
+    hash = Dialog.run("Set Export Properties") {
+         layout(2,
+               item(:text, :title=>"Resolution:"),
+               item(:popup, :subitems=>["Screen", "Screenx2", "Screenx3", "Screenx4", "Screenx5"], :tag=>"resolution", :value=>scale),
+               item(:text, :title=>"Background color:"),
+               item(:popup, :subitems=>["Same as Screen", "Transparent", "Black", "White"], :tag=>"bg_color", :value=>bg_color))
+       }
+       if hash[:status] == 0
+         set_global_settings("global.export_graphic_scale", (hash["resolution"] + 1).to_s)
+         set_global_settings("global.export_background_color", (hash["bg_color"] - 1).to_s)
+         return 0
+       else
+         return -1
+       end
+  end
   
   #  DEBUG
   def cmd_test
index 8674844..2baade4 100755 (executable)
@@ -425,11 +425,12 @@ MoleculeView::OnDraw(wxDC *dc)
 }
 
 wxImage *
-MoleculeView::CaptureGLCanvas(float scale)
+MoleculeView::CaptureGLCanvas(float scale, int bg_color)
 {
        if (canvas && mview->mol != NULL) {
                int x, y, width, height;
-
+               float bgcol[4];
+               
                canvas->SetCurrent();
                canvas->GetClientSize(&width, &height);
                width *= scale;
@@ -455,9 +456,31 @@ MoleculeView::CaptureGLCanvas(float scale)
                MainView_initializeOpenGL();
 
                mview->offline_scale = scale;
+               for (x = 0; x < 4; x++) {
+                       bgcol[x] = mview->background_color[x];
+               }
+               if (bg_color == 0) {
+                       mview->background_color[0] = 0;
+                       mview->background_color[1] = 0;
+                       mview->background_color[2] = 0;
+                       mview->background_color[3] = 0;
+               } else if (bg_color == 1) {
+                       mview->background_color[0] = 0;
+                       mview->background_color[1] = 0;
+                       mview->background_color[2] = 0;
+                       mview->background_color[3] = 1;
+               } else if (bg_color == 2) {
+                       mview->background_color[0] = 1;
+                       mview->background_color[1] = 1;
+                       mview->background_color[2] = 1;
+                       mview->background_color[3] = 1;
+               }
                MoleculeLock(mview->mol);
                MainView_drawModel(mview);
                MoleculeUnlock(mview->mol);
+               for (x = 0; x < 4; x++) {
+                       mview->background_color[x] = bgcol[x];
+               }
                mview->offline_scale = 0.0;
 
                glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);
index 5eda91e..92522ef 100755 (executable)
@@ -61,7 +61,7 @@ public:
     void OnDraw(wxDC *dc);
     void OnUpdate(wxView *sender, wxObject *hint = (wxObject *) NULL);
     bool OnClose(bool deleteWindow = true);
-       wxImage *CaptureGLCanvas(float scale = 1.0);
+       wxImage *CaptureGLCanvas(float scale = 1.0, int bg_color = -1);
 
        virtual void Activate (bool activate);
        virtual wxPrintout *OnCreatePrintout();
index 112f618..b62706e 100755 (executable)
@@ -365,7 +365,17 @@ MyDocument::OnExportGraphic(wxCommandEvent& event)
        wxString wildcard = _T("PNG File (*.png)|*.png|TIFF File (*.tif)|*.tif|All Files (*.*)|*.*");
        wxFileName fname(GetFilename());
        wxString fnstr;
-       int i;
+       Int scale, bg_color, n, i;
+       char *p;
+       i = MolActionCreateAndPerform(mol, SCRIPT_ACTION(";i"), "ask_graphic_export_scale", &n);
+       if (i != 0 || n < 0)
+               return;
+       i = MyAppCallback_getGlobalSettingsWithType("global.export_graphic_scale", 'i', &scale);
+       if (i != 0)
+               scale = 4;
+       i = MyAppCallback_getGlobalSettingsWithType("global.export_background_color", 'i', &bg_color);
+       if (i != 0)
+               bg_color = 0;
        GetPrintableName(fnstr);
        if ((i = fnstr.Find('.', true)) != wxNOT_FOUND) {
                fnstr = fnstr.Mid(0, i);
@@ -374,8 +384,7 @@ MyDocument::OnExportGraphic(wxCommandEvent& event)
        if (dialog->ShowModal() == wxID_OK) {
                wxString fnpath = dialog->GetPath();
                MoleculeView *myview = (MoleculeView *)GetFirstView();
-               float scale = 4.0;
-               wxImage *img = myview->CaptureGLCanvas(scale);
+               wxImage *img = myview->CaptureGLCanvas(scale, bg_color);
                wxString ext = fnpath.AfterLast('.');
                wxBitmapType type = wxBITMAP_TYPE_PNG;
                if (ext.CmpNoCase(_T("tif")) == 0)