Fix slow rendering with new graphics 11/7011/5
Calixte DENIZET [Wed, 18 Apr 2012 20:15:23 +0000 (22:15 +0200)]
Change-Id: I5fe7fd63942f39d328e270467c5e2269e8f2d4d0

49 files changed:
scilab/modules/graphic_objects/includes/CurrentFigure.h
scilab/modules/graphic_objects/src/cpp/CurrentFigure.cpp
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/CallGraphicController.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/axes/TicksProperty.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/figure/Figure.java
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/graphicController/GraphicController.java
scilab/modules/graphic_objects/src/jni/CallGraphicController.cpp
scilab/modules/graphic_objects/src/jni/CallGraphicController.hxx
scilab/modules/graphic_objects/src/jni/graphic_objects.giws.xml
scilab/modules/graphics/Makefile.am
scilab/modules/graphics/macros/colorbar.sci
scilab/modules/graphics/sci_gateway/c/sci_delete.c
scilab/modules/graphics/sci_gateway/c/sci_drawaxis.c
scilab/modules/graphics/sci_gateway/c/sci_fec.c
scilab/modules/graphics/sci_gateway/c/sci_grayplot.c
scilab/modules/graphics/sci_gateway/c/sci_matplot.c
scilab/modules/graphics/sci_gateway/c/sci_matplot1.c
scilab/modules/graphics/sci_gateway/c/sci_move.c
scilab/modules/graphics/sci_gateway/c/sci_newaxes.c
scilab/modules/graphics/sci_gateway/c/sci_param3d.c
scilab/modules/graphics/sci_gateway/c/sci_param3d1.c
scilab/modules/graphics/sci_gateway/c/sci_plot2d.c
scilab/modules/graphics/sci_gateway/c/sci_plot2d1.c
scilab/modules/graphics/sci_gateway/c/sci_plot3d.c
scilab/modules/graphics/sci_gateway/c/sci_show_pixmap.c
scilab/modules/graphics/sci_gateway/c/sci_unzoom.c
scilab/modules/graphics/sci_gateway/c/sci_xarc.c
scilab/modules/graphics/sci_gateway/c/sci_xarcs.c
scilab/modules/graphics/sci_gateway/c/sci_xarrows.c
scilab/modules/graphics/sci_gateway/c/sci_xdel.c
scilab/modules/graphics/sci_gateway/c/sci_xfarcs.c
scilab/modules/graphics/sci_gateway/c/sci_xfpoly.c
scilab/modules/graphics/sci_gateway/c/sci_xfpolys.c
scilab/modules/graphics/sci_gateway/c/sci_xgrid.c
scilab/modules/graphics/sci_gateway/c/sci_xpoly.c
scilab/modules/graphics/sci_gateway/c/sci_xpolys.c
scilab/modules/graphics/sci_gateway/c/sci_xrect.c
scilab/modules/graphics/sci_gateway/c/sci_xrects.c
scilab/modules/graphics/sci_gateway/c/sci_xsegs.c
scilab/modules/graphics/sci_gateway/c/sci_xset.c
scilab/modules/graphics/sci_gateway/c/sci_xstring.c
scilab/modules/graphics/sci_gateway/c/sci_xstringb.c
scilab/modules/graphics/sci_gateway/c/sci_xtitle.c
scilab/modules/graphics/src/c/Champ.c
scilab/modules/graphics/src/c/DrawObjects.c
scilab/modules/graphics/src/c/Plo2dn.c
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/canvas/SwingScilabCanvas.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/DrawerVisitor.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/ruler/AxesRulerSpriteFactory.java

index 864ef3d..0889753 100644 (file)
@@ -29,4 +29,12 @@ GRAPHIC_OBJECTS_IMPEXP void setCurrentFigure(char* UID);
  */
 GRAPHIC_OBJECTS_IMPEXP BOOL isCurrentFigure(char* UID);
 
+GRAPHIC_OBJECTS_IMPEXP void startFigureDataWriting(char * UID);
+
+GRAPHIC_OBJECTS_IMPEXP void endFigureDataWriting(char * UID);
+
+GRAPHIC_OBJECTS_IMPEXP void startCurrentFigureDataWriting();
+
+GRAPHIC_OBJECTS_IMPEXP void endCurrentFigureDataWriting();
+
 #endif /* !__CURRENT_FIGURE_H__ */
index 8310220..9d28e37 100644 (file)
@@ -16,8 +16,13 @@ extern "C"
 {
 #include "BOOL.h"
 #include "CurrentFigure.h"
+#include "setGraphicObjectProperty.h"
+#include "graphicObjectProperties.h"
+#include "getScilabJavaVM.h"
 }
 
+#include "CallGraphicController.hxx"
+
 char* getCurrentFigure(void)
 {
     return ScilabView::getCurrentFigure();
@@ -36,3 +41,24 @@ BOOL isCurrentFigure(char* UID)
     }
     return FALSE;
 }
+
+
+void startCurrentFigureDataWriting()
+{
+    startFigureDataWriting(getCurrentFigure());
+}
+
+void endCurrentFigureDataWriting()
+{
+    endFigureDataWriting(getCurrentFigure());
+}
+
+void startFigureDataWriting(char * UID)
+{
+    org_scilab_modules_graphic_objects::CallGraphicController::disableDrawing(getScilabJavaVM(), UID);
+}
+
+void endFigureDataWriting(char * UID)
+{
+    org_scilab_modules_graphic_objects::CallGraphicController::enableDrawing(getScilabJavaVM(), UID);
+}
index 289b923..d026f73 100644 (file)
@@ -25,6 +25,14 @@ import org.scilab.modules.graphic_objects.utils.MenuBarBuilder;
  **/
 public final class CallGraphicController {
 
+    public static void disableDrawing(String id) {
+        GraphicController.getController().disableDrawing(id);
+    }
+
+    public static void enableDrawing(String id) {
+        GraphicController.getController().enableDrawing(id);
+    }
+
     public static void setGraphicObjectRelationship(String parentId, String childId) {
         GraphicController.getController().setGraphicObjectRelationship(parentId, childId);
     }
index 29ab827..94e0ea9 100644 (file)
@@ -22,525 +22,541 @@ import org.scilab.modules.graphic_objects.textObject.FormattedText;
  * @author Manuel JULIACHS
  */
 public class TicksProperty {
-       /** TicksProperty properties names */
-       public enum TicksPropertyProperty { AUTO, LOCATIONS, LABELS,
-               FONT_SIZE, FONT_STYLE, FONT_COLOR, SUBTICKS };
-
-       /** Default number of ticks */
-       private static final int DEFAULT_NUMBER_OF_TICKS = 11;
-
-       /** Specifies whether ticks are automatically computed or not */
-       private boolean auto;
-
-       /** Number of subticks between two main ticks */
-       private int subticks;
-
-       /** Default font */
-       private Font defaultFont;
-
-       /** TicksArrays class */
-       private class TicksArrays {
-               /** Ticks locations */
-               private double[] locations;
-
-               /** Ticks labels */
-               private ArrayList <FormattedText> labels;
-
-               /** Number of ticks */
-               private int number;
-
-               /**
-                * Constructor
-                */
-               public TicksArrays(int number) {
-                       locations = new double[number];
-                       labels = new ArrayList<FormattedText>(number);
-
-                       for (int i = 0; i < number; i++) {
-                               labels.add(i, new FormattedText());
-                       }
-
-                       this.number = number;
-               }
-
-               /**
-                * @return the number of ticks
-                */
-               public Integer getNumber() {
-                       return number;
-               }
-
-               /**
-                * @return the labels
-                */
-               public ArrayList<FormattedText> getLabels() {
-                       return labels;
-               }
-
-               /**
-                * @param labels the labels to set
-                */
-               public void setLabels(ArrayList<FormattedText> labels) {
-                       if (!this.labels.isEmpty()) {
-                               this.labels.clear();
-                       }
-
-                       for (int i = 0; i < labels.size(); i++) {
-                               this.labels.add(i, new FormattedText(labels.get(i)));
-                       }
-               }
-
-               /**
-                * @return the labels strings
-                */
-               public String[] getLabelsStrings() {
-                       String[] labelsStrings;
-
-                       labelsStrings = new String[number];
-
-                       for (int i = 0; i < number; i++) {
-                               labelsStrings[i] = new String(labels.get(i).getText());
-                       }
-
-                       return labelsStrings;
-               }
-
-               /**
-                * Sets the ticks labels strings
-                * Requires the corresponding ticks locations to have previously been set.
-                * @param labels the labels to set
-                */
-               public void setLabelsStrings(String[] labels) {
-                       if (labels.length != number) {
-                               return;
-                       }
-
-                       if (this.labels == null || this.labels.size() != labels.length) {
-                               this.labels = new ArrayList<FormattedText>(0);
-
-                               for (int i = 0; i < labels.length; i++) {
-                                       FormattedText newText = new FormattedText();
-
-                                       newText.setFont(new Font(defaultFont));
-                                       this.labels.add(i, newText);
-                               }
-                       }
-
-                       for (int i = 0; i < number; i++) {
-                               this.labels.get(i).setText(labels[i]);
-                       }
-               }
-
-               /**
-                * @return the locations
-                */
-               public Double[] getLocations() {
-                       Double[] retLocations;
-
-                       retLocations = new Double[number];
-
-                       for (int i = 0; i < number; i++) {
-                               retLocations[i] = locations[i];
-                       }
-
-                       return retLocations;
-               }
-
-               /**
-                * Sets the ticks locations
-                * Also sets the current number of ticks to the size of the locations array
-                * if the latter is resized.
-                * @param locations the locations to set
-                */
-               public void setLocations(Double[] locations) {
-                       if (this.locations == null || number != locations.length) {
-                               this.locations = new double[locations.length];
-                               number = locations.length;
-                       }
-
-                       for (int i = 0; i < locations.length; i++) {
-                               this.locations[i] = locations[i];
-                       }
-               }
-
-               /**
-                * Supposes all ticks labels have the same font style.
-                * To be corrected.
-                * @return the ticks labels font style
-                */
-               public Integer getFontStyle() {
-                       return labels.get(0).getFont().getStyle();
-               }
-
-               /**
-                * Supposes all ticks labels have the same font style.
-                * To be corrected.
-                * @param fontStyle the ticks labels font style to set
-                */
-               public void setFontStyle(Integer fontStyle) {
-                       for (int i = 0; i < labels.size(); i++) {
-                               labels.get(i).getFont().setStyle(fontStyle);
-                       }
-               }
-
-               /**
-                * Supposes all ticks labels have the same font size.
-                * To be corrected.
-                * @return the ticks labels font size
-                */
-               public Double getFontSize() {
-                       return labels.get(0).getFont().getSize();
-               }
-
-               /**
-                * Supposes all ticks labels have the same font size.
-                * To be corrected.
-                * @param fontSize the ticks labels font size to set
-                */
-               public void setFontSize(Double fontSize) {
-                       for (int i = 0; i < labels.size(); i++) {
-                               labels.get(i).getFont().setSize(fontSize);
-                       }
-               }
-
-               /**
-                * Supposes all ticks labels have the same font color.
-                * To be corrected.
-                * @return the ticks labels font color
-                */
-               public Integer getFontColor() {
-                       return labels.get(0).getFont().getColor();
-               }
-
-               /**
-                * Supposes all ticks labels have the same font color.
-                * To be corrected.
-                * @param fontColor the ticks labels font color to set
-                */
-               public void setFontColor(Integer fontColor) {
-                       for (int i = 0; i < labels.size(); i++) {
-                               labels.get(i).getFont().setColor(fontColor);
-                       }
-               }
-
-               /**
-                * Supposes all ticks labels have the same font fractional.
-                * To be corrected.
-                * @return the ticks labels font fractional
-                */
-               public Boolean getFontFractional() {
-                       return labels.get(0).getFont().getFractional();
-               }
-
-               /**
-                * Supposes all ticks labels have the same font fractional.
-                * To be corrected.
-                * @param fontFractional the ticks labels font fractional to set
-                */
-               public void setFontFractional(Boolean fontFractional) {
-                       for (int i = 0; i < labels.size(); i++) {
-                               labels.get(i).getFont().setFractional(fontFractional);
-                       }
-               }
-
-
-       }
-
-       /** Automatic ticks */
-       TicksArrays automaticTicks;
-
-       /** User ticks */
-       TicksArrays userTicks;
-
-       /** Constructor */
-       public TicksProperty() {
-               auto = false;
-
-               subticks = 0;
-
-               defaultFont = new Font();
-
-               automaticTicks = new TicksArrays(DEFAULT_NUMBER_OF_TICKS);
-               userTicks = new TicksArrays(0);
-       }
-
-       /**
-        * Copy constructor
-        * @param ticksProperty the TicksProperty to copy
-        */
-       public TicksProperty(TicksProperty ticksProperty) {
-               auto = ticksProperty.auto;
-
-               subticks = ticksProperty.subticks;
-
-               defaultFont = new Font(ticksProperty.defaultFont);
-
-               automaticTicks = new TicksArrays(0);
-               userTicks = new TicksArrays(0);
-
-               automaticTicks.setLocations(ticksProperty.automaticTicks.getLocations());
-               userTicks.setLocations(ticksProperty.userTicks.getLocations());
-
-               automaticTicks.setLabels(ticksProperty.automaticTicks.getLabels());
-               userTicks.setLabels(ticksProperty.userTicks.getLabels());
-       }
-
-       /**
-        * @return the auto
-        */
-       public Boolean getAuto() {
-               return auto;
-       }
-
-       /**
-        * @param auto the auto to set
-        */
-       public void setAuto(Boolean auto) {
-               this.auto = auto;
-       }
-
-       /**
-        * @return the labels
-        */
-       public ArrayList<FormattedText> getLabels() {
-               if (auto) {
-                       return automaticTicks.getLabels();
-               } else {
-                       return userTicks.getLabels();
-               }
-       }
-
-       /**
-        * @param labels the labels to set
-        */
-       public void setLabels(ArrayList<FormattedText> labels) {
-               if (auto) {
-                       automaticTicks.setLabels(labels);
-               } else {
-                       userTicks.setLabels(labels);
-               }
-       }
-
-       /**
-        * @return the labels strings
-        */
-       public String[] getLabelsStrings() {
-               if (auto) {
-                       return automaticTicks.getLabelsStrings();
-               } else  {
-                       return userTicks.getLabelsStrings();
-               }
-       }
-
-       /**
-        * Sets the ticks labels strings
-        * Requires the corresponding ticks locations to have previously been set.
-        * @param labels the labels to set
-        */
-       public void setLabelsStrings(String[] labels) {
-               if (auto) {
-                       automaticTicks.setLabelsStrings(labels);
-               } else {
-                       userTicks.setLabelsStrings(labels);
-               }
-       }
-
-       /**
-        * @return the number of ticks
-        */
-       public Integer getNumber() {
-               if (auto) {
-                       return automaticTicks.getNumber();
-               } else {
-                       return userTicks.getNumber();
-               }
-       }
-
-       /**
-        * @return the locations
-        */
-       public Double[] getLocations() {
-               if (auto) {
-                       return automaticTicks.getLocations();
-               } else {
-                       return userTicks.getLocations();
-               }
-       }
-
-       /**
-        * Sets the ticks locations
-        * Also sets the current number of ticks to the size of the locations array
-        * if the latter is resized.
-        * @param locations the locations to set
-        */
-       public void setLocations(Double[] locations) {
-               if (auto) {
-                       automaticTicks.setLocations(locations);
-               } else {
-                       userTicks.setLocations(locations);
-               }
-       }
-
-       /**
-        * @return the subticks
-        */
-       public Integer getSubticks() {
-               return subticks;
-       }
-
-       /**
-        * @param subticks the subticks to set
-        */
-       public void setSubticks(Integer subticks) {
-               this.subticks = subticks;
-       }
-
-       /**
-        * Supposes that all automatic and user ticks labels have the same font style.
-        * To be corrected (commented out block) when the associated C get function is completed.
-        * @return the ticks labels font style
-        */
-       public Integer getFontStyle() {
-               return automaticTicks.getFontStyle();
-
-               /*
-               if (auto) {
-                       return automaticTicks.getFontStyle();
-               } else {
-                       return userTicks.getFontStyle();
-               }
-               */
-       }
-
-       /**
-        * Supposes that all automatic and user ticks labels have the same font style.
-        * To be corrected (commented out block) when the associated C set function is completed.
-        * @param fontStyle the ticks labels font style to set
-        */
-       public void setFontStyle(Integer fontStyle) {
-               defaultFont.setStyle(fontStyle);
-
-               automaticTicks.setFontStyle(fontStyle);
-               userTicks.setFontStyle(fontStyle);
-
-               /*
-               if (auto) {
-                       automaticTicks.setFontStyle(fontStyle);
-               } else {
-                       userTicks.setFontStyle(fontStyle);
-               }
-               */
-       }
-
-       /**
-        * Supposes that all automatic and user ticks labels have the same font size.
-        * To be corrected (commented out block) when the associated C get function is completed.
-        * @return the ticks labels font size
-        */
-       public Double getFontSize() {
-               return automaticTicks.getFontSize();
-
-               /*
-               if (auto) {
-                       return automaticTicks.getFontSize();
-               } else {
-                       return userTicks.getFontSize();
-               }
-               */
-       }
-
-       /**
-        * Supposes that all automatic and user ticks labels have the same font size.
-        * To be corrected (commented out block) when the associated C set function is completed.
-        * @param fontSize the ticks labels font size to set
-        */
-       public void setFontSize(Double fontSize) {
-               defaultFont.setSize(fontSize);
-
-               automaticTicks.setFontSize(fontSize);
-               userTicks.setFontSize(fontSize);
-
-               /*
-               if (auto) {
-                       automaticTicks.setFontSize(fontSize);
-               } else {
-                       userTicks.setFontSize(fontSize);
-               }
-               */
-       }
-
-       /**
-        * Supposes that all automatic and user ticks labels have the same font color.
-        * To be corrected (commented out block) when the associated C get function is completed.
-        * @return the ticks labels font color
-        */
-       public Integer getFontColor() {
-               return automaticTicks.getFontColor();
-
-               /*
-               if (auto) {
-                       return automaticTicks.getFontColor();
-               } else {
-                       return userTicks.getFontColor();
-               }
-               */
-       }
-
-       /**
-        * Supposes that all automatic and user ticks labels have the same font color.
-        * To be corrected (commented out block) when the associated C set function is completed.
-        * @param fontColor the ticks labels font color to set
-        */
-       public void setFontColor(Integer fontColor) {
-               defaultFont.setColor(fontColor);
-
-               automaticTicks.setFontColor(fontColor);
-               userTicks.setFontColor(fontColor);
-
-               /*
-               if (auto) {
-                       automaticTicks.setFontColor(fontColor);
-               } else {
-                       userTicks.setFontColor(fontColor);
-               }
-               */
-       }
-
-       /**
-        * Supposes all automatic and user ticks labels have the same font fractional.
-        * To be corrected (commented out block) when the associated C get function is completed.
-        * @return the ticks labels font fractional
-        */
-       public Boolean getFontFractional() {
-               return automaticTicks.getFontFractional();
-
-               /*
-               if (auto) {
-                       return automaticTicks.getFontFractional();
-               } else {
-                       return userTicks.getFontFractional();
-               }
-               */
-       }
-
-       /**
-        * Supposes all automatic and user ticks labels have the same font fractional.
-        * To be corrected (commented out block) when the associated C set function is completed.
-        * @param fontFractional the ticks labels font fractional to set
-        */
-       public void setFontFractional(Boolean fontFractional) {
-               defaultFont.setFractional(fontFractional);
-
-               automaticTicks.setFontFractional(fontFractional);
-               userTicks.setFontFractional(fontFractional);
-
-               /*
-               if (auto) {
-                       automaticTicks.setFontFractional(fontFractional);
-               } else {
-                       userTicks.setFontFractional(fontFractional);
-               }
-               */
-       }
+    /** TicksProperty properties names */
+    public enum TicksPropertyProperty { AUTO, LOCATIONS, LABELS,
+            FONT_SIZE, FONT_STYLE, FONT_COLOR, SUBTICKS };
+
+    /** Default number of ticks */
+    private static final int DEFAULT_NUMBER_OF_TICKS = 11;
+
+    /** Specifies whether ticks are automatically computed or not */
+    private boolean auto;
+
+    /** Number of subticks between two main ticks */
+    private int subticks;
+
+    /** Default font */
+    private Font defaultFont;
+
+    /** TicksArrays class */
+    private class TicksArrays {
+        /** Ticks locations */
+        private double[] locations;
+
+        /** Ticks labels */
+        private ArrayList <FormattedText> labels;
+
+        /** Number of ticks */
+        private int number;
+
+        /**
+         * Constructor
+         */
+        public TicksArrays(int number) {
+            locations = new double[number];
+            labels = new ArrayList<FormattedText>(number);
+
+            for (int i = 0; i < number; i++) {
+                labels.add(i, new FormattedText());
+            }
+
+            this.number = number;
+        }
+
+        /**
+         * @return the number of ticks
+         */
+        public Integer getNumber() {
+            return number;
+        }
+
+        /**
+         * @return the labels
+         */
+        public ArrayList<FormattedText> getLabels() {
+            return labels;
+        }
+
+        /**
+         * @param labels the labels to set
+         */
+        public void setLabels(ArrayList<FormattedText> labels) {
+            if (!this.labels.isEmpty()) {
+                this.labels.clear();
+            }
+
+            for (int i = 0; i < labels.size(); i++) {
+                this.labels.add(i, new FormattedText(labels.get(i)));
+            }
+        }
+
+        /**
+         * @return the labels strings
+         */
+        public String[] getLabelsStrings() {
+            String[] labelsStrings;
+
+            labelsStrings = new String[number];
+
+            for (int i = 0; i < number; i++) {
+                labelsStrings[i] = new String(labels.get(i).getText());
+            }
+
+            return labelsStrings;
+        }
+
+        /**
+         * Sets the ticks labels strings
+         * Requires the corresponding ticks locations to have previously been set.
+         * @param labels the labels to set
+         */
+        public void setLabelsStrings(String[] labels) {
+            if (labels.length != number) {
+                return;
+            }
+
+            if (this.labels == null || this.labels.size() != labels.length) {
+                this.labels = new ArrayList<FormattedText>(0);
+
+                for (int i = 0; i < labels.length; i++) {
+                    FormattedText newText = new FormattedText();
+
+                    newText.setFont(new Font(defaultFont));
+                    this.labels.add(i, newText);
+                }
+            }
+
+            for (int i = 0; i < number; i++) {
+                this.labels.get(i).setText(labels[i]);
+            }
+        }
+
+        /**
+         * @return the locations
+         */
+        public Double[] getLocations() {
+            Double[] retLocations;
+
+            retLocations = new Double[number];
+
+            for (int i = 0; i < number; i++) {
+                retLocations[i] = locations[i];
+            }
+
+            return retLocations;
+        }
+
+        /**
+         * Sets the ticks locations
+         * Also sets the current number of ticks to the size of the locations array
+         * if the latter is resized.
+         * @param locations the locations to set
+         */
+        public void setLocations(Double[] locations) {
+            if (this.locations == null || number != locations.length) {
+                this.locations = new double[locations.length];
+                number = locations.length;
+            }
+
+            for (int i = 0; i < locations.length; i++) {
+                this.locations[i] = locations[i];
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font style.
+         * To be corrected.
+         * @return the ticks labels font style
+         */
+        public Integer getFontStyle() {
+            if (!labels.isEmpty()) {
+                return labels.get(0).getFont().getStyle();
+            } else {
+                return 0;
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font style.
+         * To be corrected.
+         * @param fontStyle the ticks labels font style to set
+         */
+        public void setFontStyle(Integer fontStyle) {
+            for (int i = 0; i < labels.size(); i++) {
+                labels.get(i).getFont().setStyle(fontStyle);
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font size.
+         * To be corrected.
+         * @return the ticks labels font size
+         */
+        public Double getFontSize() {
+            if (!labels.isEmpty()) {
+                return labels.get(0).getFont().getSize();
+            } else {
+                return 1.0;
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font size.
+         * To be corrected.
+         * @param fontSize the ticks labels font size to set
+         */
+        public void setFontSize(Double fontSize) {
+            for (int i = 0; i < labels.size(); i++) {
+                labels.get(i).getFont().setSize(fontSize);
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font color.
+         * To be corrected.
+         * @return the ticks labels font color
+         */
+        public Integer getFontColor() {
+            if (!labels.isEmpty()) {
+                return labels.get(0).getFont().getColor();
+            } else {
+                return 0;
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font color.
+         * To be corrected.
+         * @param fontColor the ticks labels font color to set
+         */
+        public void setFontColor(Integer fontColor) {
+            for (int i = 0; i < labels.size(); i++) {
+                labels.get(i).getFont().setColor(fontColor);
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font fractional.
+         * To be corrected.
+         * @return the ticks labels font fractional
+         */
+        public Boolean getFontFractional() {
+            if (!labels.isEmpty()) {
+                return labels.get(0).getFont().getFractional();
+            } else {
+                return false;
+            }
+        }
+
+        /**
+         * Supposes all ticks labels have the same font fractional.
+         * To be corrected.
+         * @param fontFractional the ticks labels font fractional to set
+         */
+        public void setFontFractional(Boolean fontFractional) {
+            for (int i = 0; i < labels.size(); i++) {
+                labels.get(i).getFont().setFractional(fontFractional);
+            }
+        }
+
+
+    }
+
+    /** Automatic ticks */
+    TicksArrays automaticTicks;
+
+    /** User ticks */
+    TicksArrays userTicks;
+
+    /** Constructor */
+    public TicksProperty() {
+        auto = false;
+
+        subticks = 0;
+
+        defaultFont = new Font();
+
+        automaticTicks = new TicksArrays(DEFAULT_NUMBER_OF_TICKS);
+        userTicks = new TicksArrays(0);
+    }
+
+    /**
+     * Copy constructor
+     * @param ticksProperty the TicksProperty to copy
+     */
+    public TicksProperty(TicksProperty ticksProperty) {
+        auto = ticksProperty.auto;
+
+        subticks = ticksProperty.subticks;
+
+        defaultFont = new Font(ticksProperty.defaultFont);
+
+        automaticTicks = new TicksArrays(0);
+        userTicks = new TicksArrays(0);
+
+        automaticTicks.setLocations(ticksProperty.automaticTicks.getLocations());
+        userTicks.setLocations(ticksProperty.userTicks.getLocations());
+
+        automaticTicks.setLabels(ticksProperty.automaticTicks.getLabels());
+        userTicks.setLabels(ticksProperty.userTicks.getLabels());
+    }
+
+    /**
+     * @return the auto
+     */
+    public Boolean getAuto() {
+        return auto;
+    }
+
+    /**
+     * @param auto the auto to set
+     */
+    public void setAuto(Boolean auto) {
+        this.auto = auto;
+    }
+
+    /**
+     * @return the labels
+     */
+    public ArrayList<FormattedText> getLabels() {
+        if (auto) {
+            return automaticTicks.getLabels();
+        } else {
+            return userTicks.getLabels();
+        }
+    }
+
+    /**
+     * @param labels the labels to set
+     */
+    public void setLabels(ArrayList<FormattedText> labels) {
+        if (auto) {
+            automaticTicks.setLabels(labels);
+        } else {
+            userTicks.setLabels(labels);
+        }
+    }
+
+    /**
+     * @return the labels strings
+     */
+    public String[] getLabelsStrings() {
+        if (auto) {
+            return automaticTicks.getLabelsStrings();
+        } else  {
+            return userTicks.getLabelsStrings();
+        }
+    }
+
+    /**
+     * Sets the ticks labels strings
+     * Requires the corresponding ticks locations to have previously been set.
+     * @param labels the labels to set
+     */
+    public void setLabelsStrings(String[] labels) {
+        if (auto) {
+            automaticTicks.setLabelsStrings(labels);
+        } else {
+            userTicks.setLabelsStrings(labels);
+        }
+    }
+
+    /**
+     * @return the number of ticks
+     */
+    public Integer getNumber() {
+        if (auto) {
+            return automaticTicks.getNumber();
+        } else {
+            return userTicks.getNumber();
+        }
+    }
+
+    /**
+     * @return the locations
+     */
+    public Double[] getLocations() {
+        if (auto) {
+            return automaticTicks.getLocations();
+        } else {
+            return userTicks.getLocations();
+        }
+    }
+
+    /**
+     * Sets the ticks locations
+     * Also sets the current number of ticks to the size of the locations array
+     * if the latter is resized.
+     * @param locations the locations to set
+     */
+    public void setLocations(Double[] locations) {
+        if (auto) {
+            automaticTicks.setLocations(locations);
+        } else {
+            userTicks.setLocations(locations);
+        }
+    }
+
+    /**
+     * @return the subticks
+     */
+    public Integer getSubticks() {
+        return subticks;
+    }
+
+    /**
+     * @param subticks the subticks to set
+     */
+    public void setSubticks(Integer subticks) {
+        this.subticks = subticks;
+    }
+
+    /**
+     * Supposes that all automatic and user ticks labels have the same font style.
+     * To be corrected (commented out block) when the associated C get function is completed.
+     * @return the ticks labels font style
+     */
+    public Integer getFontStyle() {
+        return automaticTicks.getFontStyle();
+
+        /*
+          if (auto) {
+          return automaticTicks.getFontStyle();
+          } else {
+          return userTicks.getFontStyle();
+          }
+        */
+    }
+
+    /**
+     * Supposes that all automatic and user ticks labels have the same font style.
+     * To be corrected (commented out block) when the associated C set function is completed.
+     * @param fontStyle the ticks labels font style to set
+     */
+    public void setFontStyle(Integer fontStyle) {
+        defaultFont.setStyle(fontStyle);
+
+        automaticTicks.setFontStyle(fontStyle);
+        userTicks.setFontStyle(fontStyle);
+
+        /*
+          if (auto) {
+          automaticTicks.setFontStyle(fontStyle);
+          } else {
+          userTicks.setFontStyle(fontStyle);
+          }
+        */
+    }
+
+    /**
+     * Supposes that all automatic and user ticks labels have the same font size.
+     * To be corrected (commented out block) when the associated C get function is completed.
+     * @return the ticks labels font size
+     */
+    public Double getFontSize() {
+        return automaticTicks.getFontSize();
+
+        /*
+          if (auto) {
+          return automaticTicks.getFontSize();
+          } else {
+          return userTicks.getFontSize();
+          }
+        */
+    }
+
+    /**
+     * Supposes that all automatic and user ticks labels have the same font size.
+     * To be corrected (commented out block) when the associated C set function is completed.
+     * @param fontSize the ticks labels font size to set
+     */
+    public void setFontSize(Double fontSize) {
+        defaultFont.setSize(fontSize);
+
+        automaticTicks.setFontSize(fontSize);
+        userTicks.setFontSize(fontSize);
+
+        /*
+          if (auto) {
+          automaticTicks.setFontSize(fontSize);
+          } else {
+          userTicks.setFontSize(fontSize);
+          }
+        */
+    }
+
+    /**
+     * Supposes that all automatic and user ticks labels have the same font color.
+     * To be corrected (commented out block) when the associated C get function is completed.
+     * @return the ticks labels font color
+     */
+    public Integer getFontColor() {
+        return automaticTicks.getFontColor();
+
+        /*
+          if (auto) {
+          return automaticTicks.getFontColor();
+          } else {
+          return userTicks.getFontColor();
+          }
+        */
+    }
+
+    /**
+     * Supposes that all automatic and user ticks labels have the same font color.
+     * To be corrected (commented out block) when the associated C set function is completed.
+     * @param fontColor the ticks labels font color to set
+     */
+    public void setFontColor(Integer fontColor) {
+        defaultFont.setColor(fontColor);
+
+        automaticTicks.setFontColor(fontColor);
+        userTicks.setFontColor(fontColor);
+
+        /*
+          if (auto) {
+          automaticTicks.setFontColor(fontColor);
+          } else {
+          userTicks.setFontColor(fontColor);
+          }
+        */
+    }
+
+    /**
+     * Supposes all automatic and user ticks labels have the same font fractional.
+     * To be corrected (commented out block) when the associated C get function is completed.
+     * @return the ticks labels font fractional
+     */
+    public Boolean getFontFractional() {
+        return automaticTicks.getFontFractional();
+
+        /*
+          if (auto) {
+          return automaticTicks.getFontFractional();
+          } else {
+          return userTicks.getFontFractional();
+          }
+        */
+    }
+
+    /**
+     * Supposes all automatic and user ticks labels have the same font fractional.
+     * To be corrected (commented out block) when the associated C set function is completed.
+     * @param fontFractional the ticks labels font fractional to set
+     */
+    public void setFontFractional(Boolean fontFractional) {
+        defaultFont.setFractional(fontFractional);
+
+        automaticTicks.setFontFractional(fontFractional);
+        userTicks.setFontFractional(fontFractional);
+
+        /*
+          if (auto) {
+          automaticTicks.setFontFractional(fontFractional);
+          } else {
+          userTicks.setFontFractional(fontFractional);
+          }
+        */
+    }
 
 }
index cc40013..f793cc9 100644 (file)
@@ -345,6 +345,8 @@ public class Figure extends GraphicObject {
     /** Rotation type */
     private RotationType rotation;
 
+    private boolean drawingEnabled;
+
     /** Constructor */
     public Figure() {
         super();
@@ -359,6 +361,7 @@ public class Figure extends GraphicObject {
         eventHandler = new EventHandler();
         tag = "";
         rotation = RotationType.UNARY;
+       drawingEnabled = false;//true;
     }
 
     @Override
@@ -383,6 +386,18 @@ public class Figure extends GraphicObject {
         visitor.visit(this);
     }
 
+    public void enableDrawing() {
+       drawingEnabled = true;
+    }
+
+    public void disableDrawing() {
+       drawingEnabled = false;
+    }
+
+    public boolean canDraw() {
+       return drawingEnabled && getImmediateDrawing() && !getPixmap();
+    }
+
     /**
      * Returns the enum associated to a property name
      * @param propertyName the property name
@@ -853,7 +868,7 @@ public class Figure extends GraphicObject {
      * @param immediateDrawing the immediateDrawing to set
      */
     public void setImmediateDrawing(Boolean immediateDrawing) {
-        renderingMode.immediateDrawing = immediateDrawing;
+       renderingMode.immediateDrawing = immediateDrawing;
     }
 
     /**
index 93f5779..aa07a1b 100644 (file)
@@ -20,6 +20,7 @@ import java.util.HashSet;
 import java.util.Set;
 import java.util.Vector;
 
+import org.scilab.modules.graphic_objects.figure.Figure;
 import org.scilab.modules.graphic_objects.graphicModel.GraphicModel;
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
@@ -118,6 +119,23 @@ public class GraphicController {
         return new UID();
     }
 
+    public void enableDrawing(String id) {
+       GraphicObject go = GraphicModel.getModel().getObjectFromId(id);
+       if (go instanceof Figure) {
+           Figure figure = (Figure) go;
+           figure.enableDrawing(); 
+           objectUpdate(id, "");
+       }
+    }
+
+    public void disableDrawing(String id) {
+       GraphicObject go = GraphicModel.getModel().getObjectFromId(id);
+       if (go instanceof Figure) {
+           Figure figure = (Figure) go;
+           figure.disableDrawing(); 
+       }
+    }
+
     /**
      * Returns the object associated to an id
      * @param id the object id
index f3ec4ef..5d6b8c9 100644 (file)
@@ -1,6 +1,6 @@
 #include "CallGraphicController.hxx"
 /* Generated by GIWS (version 2.0.0) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/graphic_objects.giws.xml 
+giws -e -r -f graphic_objects.giws.xml 
 */
 /*
 
@@ -110,6 +110,8 @@ throw GiwsException::JniObjectCreationException(curEnv, this->className());
 curEnv->DeleteLocalRef(localInstance);
 
                 /* Methods ID set to NULL */
+voiddisableDrawingjstringjava_lang_StringID=NULL;
+voidenableDrawingjstringjava_lang_StringID=NULL;
 voiddeleteGraphicObjectjstringjava_lang_StringID=NULL;
 jstringcloneGraphicObjectjstringjava_lang_StringID=NULL;
 jstringaskGraphicObjectjstringjava_lang_StringID=NULL;
@@ -157,7 +159,9 @@ throw GiwsException::JniObjectCreationException(curEnv, this->className());
 throw GiwsException::JniObjectCreationException(curEnv, this->className());
         }
         /* Methods ID set to NULL */
-        voiddeleteGraphicObjectjstringjava_lang_StringID=NULL;
+        voiddisableDrawingjstringjava_lang_StringID=NULL;
+voidenableDrawingjstringjava_lang_StringID=NULL;
+voiddeleteGraphicObjectjstringjava_lang_StringID=NULL;
 jstringcloneGraphicObjectjstringjava_lang_StringID=NULL;
 jstringaskGraphicObjectjstringjava_lang_StringID=NULL;
 voidsetGraphicObjectRelationshipjstringjava_lang_Stringjstringjava_lang_StringID=NULL;
@@ -201,6 +205,58 @@ throw GiwsException::JniMonitorException(getCurrentEnv(), "CallGraphicController
 }
 // Method(s)
 
+void CallGraphicController::disableDrawing (JavaVM * jvm_, char const* id){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voiddisableDrawingjstringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "disableDrawing", "(Ljava/lang/String;)V" ) ;
+if (voiddisableDrawingjstringjava_lang_StringID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "disableDrawing");
+}
+
+jstring id_ = curEnv->NewStringUTF( id );
+if (id != NULL && id_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+                         curEnv->CallStaticVoidMethod(cls, voiddisableDrawingjstringjava_lang_StringID ,id_);
+                        curEnv->DeleteLocalRef(id_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+void CallGraphicController::enableDrawing (JavaVM * jvm_, char const* id){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = curEnv->FindClass( className().c_str() );
+
+jmethodID voidenableDrawingjstringjava_lang_StringID = curEnv->GetStaticMethodID(cls, "enableDrawing", "(Ljava/lang/String;)V" ) ;
+if (voidenableDrawingjstringjava_lang_StringID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "enableDrawing");
+}
+
+jstring id_ = curEnv->NewStringUTF( id );
+if (id != NULL && id_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidenableDrawingjstringjava_lang_StringID ,id_);
+                        curEnv->DeleteLocalRef(id_);
+curEnv->DeleteLocalRef(cls);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
 void CallGraphicController::deleteGraphicObject (JavaVM * jvm_, char const* id){
 
 JNIEnv * curEnv = NULL;
index c8fcb86..aca9c11 100644 (file)
@@ -1,5 +1,5 @@
 /* Generated by GIWS (version 2.0.0) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/graphic_objects.giws.xml 
+giws -e -r -f graphic_objects.giws.xml 
 */
 /*
 
@@ -82,6 +82,8 @@ private:
 JavaVM * jvm;
 
 protected:
+jmethodID voiddisableDrawingjstringjava_lang_StringID; // cache method id
+jmethodID voidenableDrawingjstringjava_lang_StringID; // cache method id
 jmethodID voiddeleteGraphicObjectjstringjava_lang_StringID; // cache method id
 jmethodID jstringcloneGraphicObjectjstringjava_lang_StringID; // cache method id
 jmethodID jstringaskGraphicObjectjstringjava_lang_StringID; // cache method id
@@ -167,6 +169,10 @@ void synchronize();
 void endSynchronize();
 
 // Methods
+static void disableDrawing(JavaVM * jvm_, char const* id);
+
+static void enableDrawing(JavaVM * jvm_, char const* id);
+
 static void deleteGraphicObject(JavaVM * jvm_, char const* id);
 
 static char* cloneGraphicObject(JavaVM * jvm_, char const* id);
index 20c0d13..88cc906 100644 (file)
@@ -1,6 +1,12 @@
 <?xml version="1.0"?>
 <package name="org.scilab.modules.graphic_objects">
   <object name="CallGraphicController">
+    <method name="disableDrawing" returnType="void" modifier="static">
+      <parameter name="id" type="String"/>
+    </method>
+    <method name="enableDrawing" returnType="void" modifier="static">
+      <parameter name="id" type="String"/>
+    </method>
     <method name="deleteGraphicObject" returnType="void" modifier="static">
       <parameter name="id" type="String"/>
     </method>
index 406c638..420245b 100644 (file)
@@ -40,6 +40,7 @@ libscigraphics_la_CFLAGS = -I$(top_srcdir)/libs/doublylinkedlist/includes/ \
        -I$(top_srcdir)/modules/graphic_objects/includes/
 
 
+
 GRAPHICS_C_SOURCES = src/c/GetCommandArg.c \
 src/c/loadTextRenderingAPI.c \
 src/c/getHandleProperty/get_figure_position_property.c \
index 7c00ab8..8308dff 100644 (file)
@@ -68,7 +68,7 @@ function colorbar(varargin)
   
   //defer the drawing to avoid binking
   id=f.immediate_drawing=='on';
-  if id then f.immediate_drawing=='off',end
+  if id then f.immediate_drawing='off',end
    // get current axes and properties
   a=gca(); 
   fg_color=a.foreground
index e04fe2e..a7b867b 100644 (file)
@@ -93,7 +93,10 @@ int sci_delete(char *fname, unsigned long fname_len)
 
                 for (i = 0; i < iFigureNumber; ++i)
                 {
-                    deleteGraphicObject(getFigureFromIndex(piFigureIds[i]));
+                    char * UID = getFigureFromIndex(piFigureIds[i]);
+                    startFigureDataWriting(UID);
+                    deleteGraphicObject(UID);
+                    endFigureDataWriting(UID);
                 }
                 FREE(piFigureIds);
                 LhsVar(1) = 0;
@@ -151,12 +154,14 @@ int sci_delete(char *fname, unsigned long fname_len)
             Scierror(999, _("A Label object cannot be deleted.\n"));
             return 0;
         }
+        startFigureDataWriting(pobjUID);
         deleteGraphicObject(pobjUID);
+        endFigureDataWriting(pobjUID);
 
         /*
-         ** All figure must have at least one axe child.
-         ** If the last one is removed, add a new default one.
-         */
+        ** All figure must have at least one axe child.
+        ** If the last one is removed, add a new default one.
+        */
         if ((strcmp(pstObjType, __GO_AXES__) == 0) && (strcmp(pstParentType, __GO_FIGURE__) == 0))
         {
             int iChild = 0;
index 9b2b1d8..3ed532a 100644 (file)
@@ -29,6 +29,7 @@
 #include "getGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
 #include "CurrentSubwin.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 static int check_xy(char *fname, char dir, int mn, int xpos, int xm, int xn,
@@ -205,7 +206,9 @@ int sci_drawaxis(char *fname, unsigned long fname_len)
         nb_tics_labels = opts[8].m * opts[8].n;
     }
 
+    startCurrentFigureDataWriting();
     Objdrawaxis(dir, tics, x, &nx, y, &ny, val, sub_int, format, fontsize, textcolor, ticscolor, 'n', seg_flag, nb_tics_labels);
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index 4d6648a..f637d10 100644 (file)
@@ -25,6 +25,7 @@
 #include "DefaultCommandArg.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_fec(char *fname,unsigned long fname_len)
@@ -56,8 +57,8 @@ int sci_fec(char *fname,unsigned long fname_len)
 
     if (Rhs <= 0)
     {
-               sci_demo(fname, fname_len);
-               return 0;
+        sci_demo(fname, fname_len);
+        return 0;
     }
 
     CheckRhs(4,12);
@@ -122,7 +123,9 @@ int sci_fec(char *fname,unsigned long fname_len)
     }
     mn1 = m1 * n1;
 
+    startCurrentFigureDataWriting();
     Objfec (stk(l1),stk(l2),stk(l3),stk(l4),&mn1,&m3,strf,legend,rect,nax,zminmax,colminmax,colOut,withMesh,flagNax);
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index afab7e0..bfe4b8f 100644 (file)
@@ -24,6 +24,7 @@
 #include "sciCall.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_grayplot( char *fname, unsigned long fname_len )
@@ -111,7 +112,9 @@ int sci_grayplot( char *fname, unsigned long fname_len )
         }
     }
 
+    startCurrentFigureDataWriting();
     Objgrayplot (stk(l1), stk(l2), stk(l3), &m3, &n3, strf, rect, nax, flagNax);
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index 1cd4f5e..f21a674 100644 (file)
@@ -2,11 +2,11 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2006 - INRIA - Fabrice Leray
  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #include "stack-c.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_matplot(char *fname,unsigned long fname_len)
 {
-  int m1, n1, l1;
-  int frame_def=8;
-  int *frame=&frame_def;
-  int axes_def=1;
-  int *axes=&axes_def;
-  static rhs_opts opts[]= { {-1,"axesflag","?",0,0,0},
-  {-1,"frameflag","?",0,0,0},
-  {-1,"nax","?",0,0,0},
-  {-1,"rect","?",0,0,0},
-  {-1,"strf","?",0,0,0},
-  {-1,NULL,NULL,0,0}};
-
-  char   * strf    = NULL  ;
-  double * rect    = NULL  ;
-  int    * nax     = NULL  ;
-  BOOL     flagNax = FALSE ;
-
-  if ( Rhs <= 0 )
-  {
-    sci_demo(fname, fname_len);
-    return 0;
-  }
-  CheckRhs(1,5);
+    int m1, n1, l1;
+    int frame_def=8;
+    int *frame=&frame_def;
+    int axes_def=1;
+    int *axes=&axes_def;
+    static rhs_opts opts[]= { {-1,"axesflag","?",0,0,0},
+                              {-1,"frameflag","?",0,0,0},
+                              {-1,"nax","?",0,0,0},
+                              {-1,"rect","?",0,0,0},
+                              {-1,"strf","?",0,0,0},
+                              {-1,NULL,NULL,0,0}};
 
-  if ( get_optionals(fname,opts) == 0 ) 
-  {
-         PutLhsVar();
-         return 0 ; 
-  }
-  if ( FirstOpt() < 2)
-  {
-    Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),
-      fname,1,2);
-    return(0);
-  }
-  GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
-  if (m1 * n1 == 0) 
-  {  
-         LhsVar(1) = 0;
-         PutLhsVar();
-         return 0;
-  }
+    char   * strf    = NULL  ;
+    double * rect    = NULL  ;
+    int    * nax     = NULL  ;
+    BOOL     flagNax = FALSE ;
 
-  GetStrf(fname,2,opts,&strf);
-  GetRect(fname,3,opts,&rect);
-  GetNax(4,opts,&nax,&flagNax);
-
-  getOrCreateDefaultSubwin();
-
-  if ( isDefStrf( strf ) ) {
-    char strfl[4];
-   
-    strcpy(strfl,DEFSTRFN) ;
-   
-    strf = strfl;
-    if ( !isDefRect( rect ) )
+    if ( Rhs <= 0 )
     {
-      strfl[1]='7';
+        sci_demo(fname, fname_len);
+        return 0;
     }
+    CheckRhs(1,5);
 
-    GetOptionalIntArg(fname,5,"frameflag",&frame,1,opts);
-    if(frame != &frame_def)
+    if ( get_optionals(fname,opts) == 0 )
+    {
+        PutLhsVar();
+        return 0 ;
+    }
+    if ( FirstOpt() < 2)
     {
-      strfl[1] = (char)(*frame+48);
+        Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),
+                 fname,1,2);
+        return(0);
     }
-    GetOptionalIntArg(fname,5,"axesflag",&axes,1,opts);
-    if(axes != &axes_def)
+    GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
+    if (m1 * n1 == 0)
     {
-      strfl[2] = (char)(*axes+48);
+        LhsVar(1) = 0;
+        PutLhsVar();
+        return 0;
     }
-  }
 
-  Objmatplot( stk(l1), &m1, &n1, strf, rect, nax, flagNax ) ;
+    GetStrf(fname,2,opts,&strf);
+    GetRect(fname,3,opts,&rect);
+    GetNax(4,opts,&nax,&flagNax);
 
-  /* NG end */
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    getOrCreateDefaultSubwin();
+
+    if ( isDefStrf( strf ) ) {
+        char strfl[4];
+
+        strcpy(strfl,DEFSTRFN) ;
+
+        strf = strfl;
+        if ( !isDefRect( rect ) )
+        {
+            strfl[1]='7';
+        }
+
+        GetOptionalIntArg(fname,5,"frameflag",&frame,1,opts);
+        if(frame != &frame_def)
+        {
+            strfl[1] = (char)(*frame+48);
+        }
+        GetOptionalIntArg(fname,5,"axesflag",&axes,1,opts);
+        if(axes != &axes_def)
+        {
+            strfl[2] = (char)(*axes+48);
+        }
+    }
+
+    startCurrentFigureDataWriting();
+    Objmatplot( stk(l1), &m1, &n1, strf, rect, nax, flagNax );
+    endCurrentFigureDataWriting();
+
+    /* NG end */
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index 4bb9d97..990d3ea 100644 (file)
@@ -3,11 +3,11 @@
  * Copyright (C) 2006 - INRIA - Fabrice Leray
  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
  * Copyright (C) 2012 - DIGITEO - Manuel Juliachs
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
@@ -20,6 +20,7 @@
 #include "gw_graphics.h"
 #include "BuildObjects.h"
 #include "sciCall.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_matplot1( char * fname, unsigned long fname_len )
@@ -45,10 +46,12 @@ int sci_matplot1( char * fname, unsigned long fname_len )
     getOrCreateDefaultSubwin();
 
     /* NG beg */
+    startCurrentFigureDataWriting();
     Objmatplot1 (stk(l1), &m1, &n1,stk(l2));
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
     return 0;
-} 
+}
 /*--------------------------------------------------------------------------*/
index d2f4afe..20fd912 100644 (file)
@@ -26,6 +26,7 @@
 #include "Scierror.h"
 #include "HandleManagement.h"
 #include "getPropertyAssignedValue.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_move( char * fname, unsigned long fname_len )
@@ -74,7 +75,9 @@ int sci_move( char * fname, unsigned long fname_len )
     }
     moveVector = getDoubleMatrixFromStack(l2);
 
+    startCurrentFigureDataWriting();
     Objmove(pobjUID, moveVector, nbDim, alone);
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index d88f336..0be7052 100644 (file)
@@ -42,6 +42,7 @@ int sci_newaxes( char * fname,unsigned long fname_len )
 
     psubwinUID = getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     if ((psubwinUID = ConstructSubWin (getCurrentFigure())) != NULL)
     {
         setCurrentObject(psubwinUID);
@@ -59,6 +60,8 @@ int sci_newaxes( char * fname,unsigned long fname_len )
     {
         Scierror(999,_("%s: No more memory.\n"),fname);
     }
+    endCurrentFigureDataWriting();
+
     return 0;
 }
 /*--------------------------------------------------------------------------*/
index 0a36ec3..1a1cb49 100644 (file)
@@ -2,11 +2,11 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2006 - INRIA - Fabrice Leray
  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #include "stack-c.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 /*------------------------------------------------------------------------*/
 int sci_param3d( char * fname, unsigned long fname_len )
 {
-  int izcol, isfac;
-  static double  ebox_def[6]= { 0,1,0,1,0,1};
-  double *ebox = ebox_def ;
-  static int iflag_def[3]= {1,2,4};
-  int iflag[3], *ifl, ix1, one=1;
-  double  alpha_def=35.0 , theta_def=45.0 ;
-  double *alpha=&alpha_def, *theta=&theta_def;
-  int m1, n1, l1, m2, n2, l2, m3, n3, l3;
-  int m3n = 0, n3n = 0; /* F.Leray 19.03.04*/
+    int izcol, isfac;
+    static double  ebox_def[6]= { 0,1,0,1,0,1};
+    double *ebox = ebox_def ;
+    static int iflag_def[3]= {1,2,4};
+    int iflag[3], *ifl, ix1, one=1;
+    double  alpha_def=35.0 , theta_def=45.0 ;
+    double *alpha=&alpha_def, *theta=&theta_def;
+    int m1, n1, l1, m2, n2, l2, m3, n3, l3;
+    int m3n = 0, n3n = 0; /* F.Leray 19.03.04*/
 
-  static rhs_opts opts[]= { {-1,"alpha","?",0,0,0},
-                            {-1,"ebox","?",0,0,0},
-                            {-1,"flag","?",0,0,0},
-                            {-1,"leg","?",0,0,0},
-                            {-1,"theta","?",0,0,0},
-                            {-1,NULL,NULL,0,0}     };
+    static rhs_opts opts[]= { {-1,"alpha","?",0,0,0},
+                              {-1,"ebox","?",0,0,0},
+                              {-1,"flag","?",0,0,0},
+                              {-1,"leg","?",0,0,0},
+                              {-1,"theta","?",0,0,0},
+                              {-1,NULL,NULL,0,0}     };
 
-  char * labels = NULL ;
+    char * labels = NULL ;
 
-  if (Rhs <= 0)
-  {
-    sci_demo(fname, fname_len);
-    return 0;
-  }
+    if (Rhs <= 0)
+    {
+        sci_demo(fname, fname_len);
+        return 0;
+    }
 
-  CheckRhs(3,8);
+    CheckRhs(3,8);
 
-  if ( get_optionals(fname,opts) == 0) 
-  {
-         PutLhsVar();
-         return 0;
-  }
-  if ( FirstOpt() < 4) 
-  {
-    Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"), fname,1, 4);
-    return(0);
-  }
+    if ( get_optionals(fname,opts) == 0)
+    {
+        PutLhsVar();
+        return 0;
+    }
+    if ( FirstOpt() < 4)
+    {
+        Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"), fname,1, 4);
+        return(0);
+    }
 
-  GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
-  if (m1 * n1 == 0) 
-  { 
-         LhsVar(1) = 0; 
-         PutLhsVar();
-         return 0;
-  } 
-  GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
-  GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &m3, &n3, &l3);
-  CheckSameDims(1,2,m1,n1,m2,n2);
-  CheckSameDims(2,3,m2,n2,m3,n3);
+    GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
+    if (m1 * n1 == 0)
+    {
+        LhsVar(1) = 0;
+        PutLhsVar();
+        return 0;
+    }
+    GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+    GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &m3, &n3, &l3);
+    CheckSameDims(1,2,m1,n1,m2,n2);
+    CheckSameDims(2,3,m2,n2,m3,n3);
 
-  GetOptionalDoubleArg(fname,4,"theta",&theta,1,opts);
-  GetOptionalDoubleArg(fname,5,"alpha",&alpha,1,opts);
-  GetLabels(fname,6,opts,&labels);
+    GetOptionalDoubleArg(fname,4,"theta",&theta,1,opts);
+    GetOptionalDoubleArg(fname,5,"alpha",&alpha,1,opts);
+    GetLabels(fname,6,opts,&labels);
 
-  iflag_def[1]=8;
-  ifl=&(iflag_def[1]);
-  GetOptionalIntArg(fname,7,"flag",&ifl,2,opts);
-  iflag[0]=iflag_def[0];iflag[1]=ifl[0];iflag[2]=ifl[1];
-  GetOptionalDoubleArg(fname,8,"ebox",&ebox,6,opts);
+    iflag_def[1]=8;
+    ifl=&(iflag_def[1]);
+    GetOptionalIntArg(fname,7,"flag",&ifl,2,opts);
+    iflag[0]=iflag_def[0];iflag[1]=ifl[0];iflag[2]=ifl[1];
+    GetOptionalDoubleArg(fname,8,"ebox",&ebox,6,opts);
 
-  getOrCreateDefaultSubwin();
+    getOrCreateDefaultSubwin();
 
-  ix1 = m1 * n1;
+    ix1 = m1 * n1;
 
-  /* NG beg */
-  isfac=-1;
-  izcol=0;
-  
-  Objplot3d (fname,&isfac,&izcol,stk(l1),stk(l2),stk(l3),(double *) NULL,&ix1,&one,theta,alpha,labels,iflag,ebox,&m1,&n1,&m2,&n2,&m3,&n3,&m3n,&n3n);/*Adding F.Leray 12.03.04 */
-  
+    /* NG beg */
+    isfac=-1;
+    izcol=0;
 
-  /* NG end */
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    startCurrentFigureDataWriting();
+    Objplot3d (fname,&isfac,&izcol,stk(l1),stk(l2),stk(l3),(double *) NULL,&ix1,&one,theta,alpha,labels,iflag,ebox,&m1,&n1,&m2,&n2,&m3,&n3,&m3n,&n3n);/*Adding F.Leray 12.03.04 */
+    endCurrentFigureDataWriting();
+
+    /* NG end */
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*------------------------------------------------------------------------*/
index d783095..a2758f3 100644 (file)
@@ -2,11 +2,11 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2006 - INRIA - Fabrice Leray
  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #include "stack-c.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_param3d1( char *fname, unsigned long fname_len )
 {
-  int izcol, isfac;
-  double *zcol=NULL;
-  static double  ebox_def [6]= { 0,1,0,1,0,1};
-  double *ebox = ebox_def ;
-  static int iflag_def[3]={1,2,4};
-  int iflag[3] , *ifl;
-  double  alpha_def=35.0 , theta_def=45.0 ;
-  double *alpha=&alpha_def, *theta=&theta_def;
-  int m1, n1, l1, m2, n2, l2, m3, n3, l3;
-  int m3n = 0, n3n = 0, l3n, m3l, n3l, l3l;
-  static rhs_opts opts[]= { {-1,"alpha","?",0,0,0},
-                            {-1,"ebox","?",0,0,0},
-                            {-1,"flag","?",0,0,0},
-                            {-1,"leg","?",0,0,0},
-                            {-1,"theta","?",0,0,0},
-                            {-1,NULL,NULL,0,0}     };
-
-  char * labels = NULL ;
-
-  if (Rhs <= 0)
-  {
-    sci_demo(fname, fname_len);
-    return 0;
-  }
-
-  CheckRhs(3,8);
-
-  if ( get_optionals(fname,opts) == 0) 
-  {
-         PutLhsVar();
-         return 0;
-  }
-
-  if ( FirstOpt() < 4) 
-  {
-    Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),fname,1,4);
-    return(0);
-  }
-
-  GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);/* x */
-  if (m1 == 1 && n1 > 1) {m1 = n1;n1 = 1;}
-
-  GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);/* y */
-  if (m2 == 1 && n2 > 1) {m2 = n2;n2 = 1;}
-
-  if (m1 * n1 == 0) 
-  { 
-         LhsVar(1) = 0;
-         PutLhsVar();
-         return 0;
-  }
-  CheckSameDims(1,2,m1,n1,m2,n2); 
-
-  switch ( VarType(3) ) 
-  {
-  case 1 : 
-    izcol = 0;
-    GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &m3, &n3, &l3); /* z */
-    break;
-  case 15 : 
-    izcol = 1;
-    /* z = list(z,colors) */
-    GetRhsVar(3,LIST_DATATYPE,&m3l,&n3l,&l3l);
-    if ( m3l != 2 ) 
+    int izcol, isfac;
+    double *zcol=NULL;
+    static double  ebox_def [6]= { 0,1,0,1,0,1};
+    double *ebox = ebox_def ;
+    static int iflag_def[3]={1,2,4};
+    int iflag[3] , *ifl;
+    double  alpha_def=35.0 , theta_def=45.0 ;
+    double *alpha=&alpha_def, *theta=&theta_def;
+    int m1, n1, l1, m2, n2, l2, m3, n3, l3;
+    int m3n = 0, n3n = 0, l3n, m3l, n3l, l3l;
+    static rhs_opts opts[]= { {-1,"alpha","?",0,0,0},
+                              {-1,"ebox","?",0,0,0},
+                              {-1,"flag","?",0,0,0},
+                              {-1,"leg","?",0,0,0},
+                              {-1,"theta","?",0,0,0},
+                              {-1,NULL,NULL,0,0}     };
+
+    char * labels = NULL ;
+
+    if (Rhs <= 0)
     {
-      Scierror(999,_("%s: Wrong size for input argument #%d: List of size %d expected.\n"),
-        fname,2,m3l,2);
-      return 0;
+        sci_demo(fname, fname_len);
+        return 0;
     }
-    GetListRhsVar(3,1,MATRIX_OF_DOUBLE_DATATYPE,&m3,&n3,&l3); /* z*/ 
-    GetListRhsVar(3,2,MATRIX_OF_DOUBLE_DATATYPE,&m3n,&n3n,&l3n); /* colors */
-    zcol  = stk(l3n);
-    if (m3n * n3n != n3) 
+
+    CheckRhs(3,8);
+
+    if ( get_optionals(fname,opts) == 0)
     {
-      Scierror(999,_("%s: Wrong size for input argument #%d: %d expected.\n"),fname,3,n3);
-      return 0;
+        PutLhsVar();
+        return 0;
     }
-    break ;
-  default : 
-    OverLoad(3);
-    return 0;
-  }
-  if (m3 == 1 && n3 > 1) {m3 = n3;n3 = 1;}
-  CheckSameDims(1,3,m1,n1,m3,n3); 
 
-  GetOptionalDoubleArg(fname,4,"theta",&theta,1,opts);
-  GetOptionalDoubleArg(fname,5,"alpha",&alpha,1,opts);
-  GetLabels(fname,6,opts,&labels);
-  iflag_def[1]=8;
-  ifl=&(iflag_def[1]);
-  GetOptionalIntArg(fname,7,"flag",&ifl,2,opts);
-  iflag[0]=iflag_def[0];iflag[1]=ifl[0];iflag[2]=ifl[1];
+    if ( FirstOpt() < 4)
+    {
+        Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),fname,1,4);
+        return(0);
+    }
+
+    GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);/* x */
+    if (m1 == 1 && n1 > 1) {m1 = n1;n1 = 1;}
+
+    GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);/* y */
+    if (m2 == 1 && n2 > 1) {m2 = n2;n2 = 1;}
 
-  GetOptionalDoubleArg(fname,8,"ebox",&ebox,6,opts);
+    if (m1 * n1 == 0)
+    {
+        LhsVar(1) = 0;
+        PutLhsVar();
+        return 0;
+    }
+    CheckSameDims(1,2,m1,n1,m2,n2);
+
+    switch ( VarType(3) )
+    {
+    case 1 :
+        izcol = 0;
+        GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &m3, &n3, &l3); /* z */
+        break;
+    case 15 :
+        izcol = 1;
+        /* z = list(z,colors) */
+        GetRhsVar(3,LIST_DATATYPE,&m3l,&n3l,&l3l);
+        if ( m3l != 2 )
+        {
+            Scierror(999,_("%s: Wrong size for input argument #%d: List of size %d expected.\n"),
+                     fname,2,m3l,2);
+            return 0;
+        }
+        GetListRhsVar(3,1,MATRIX_OF_DOUBLE_DATATYPE,&m3,&n3,&l3); /* z*/
+        GetListRhsVar(3,2,MATRIX_OF_DOUBLE_DATATYPE,&m3n,&n3n,&l3n); /* colors */
+        zcol  = stk(l3n);
+        if (m3n * n3n != n3)
+        {
+            Scierror(999,_("%s: Wrong size for input argument #%d: %d expected.\n"),fname,3,n3);
+            return 0;
+        }
+        break ;
+    default :
+        OverLoad(3);
+        return 0;
+    }
+    if (m3 == 1 && n3 > 1) {m3 = n3;n3 = 1;}
+    CheckSameDims(1,3,m1,n1,m3,n3);
 
-  if (m1 == 1 && n1 > 1) { m1 = n1;    n1 = 1; }
+    GetOptionalDoubleArg(fname,4,"theta",&theta,1,opts);
+    GetOptionalDoubleArg(fname,5,"alpha",&alpha,1,opts);
+    GetLabels(fname,6,opts,&labels);
+    iflag_def[1]=8;
+    ifl=&(iflag_def[1]);
+    GetOptionalIntArg(fname,7,"flag",&ifl,2,opts);
+    iflag[0]=iflag_def[0];iflag[1]=ifl[0];iflag[2]=ifl[1];
 
-  getOrCreateDefaultSubwin();
+    GetOptionalDoubleArg(fname,8,"ebox",&ebox,6,opts);
 
-  /* NG beg */
-  isfac=-1;
+    if (m1 == 1 && n1 > 1) { m1 = n1;    n1 = 1; }
 
-  Objplot3d (fname,&isfac,&izcol,stk(l1),stk(l2),stk(l3),zcol,&m1,&n1,theta,alpha,labels,iflag,ebox,&m1,&n1,&m2,&n2,&m3,&n3,&m3n,&n3n); /*Adding F.Leray 12.03.04*/
-  
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    getOrCreateDefaultSubwin();
+
+    /* NG beg */
+    isfac=-1;
+
+    startCurrentFigureDataWriting();
+    Objplot3d (fname,&isfac,&izcol,stk(l1),stk(l2),stk(l3),zcol,&m1,&n1,theta,alpha,labels,iflag,ebox,&m1,&n1,&m2,&n2,&m3,&n3,&m3n,&n3n); /*Adding F.Leray 12.03.04*/
+    endCurrentFigureDataWriting();
+
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index e0dbca9..89a3640 100644 (file)
@@ -26,6 +26,7 @@
 #include "localization.h"
 
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 
 /*------------------------------------------------------------------------*/
 int sci_plot2d( char * fname, unsigned long fname_len )
@@ -291,7 +292,9 @@ int sci_plot2d( char * fname, unsigned long fname_len )
 
   // open a figure if none already exists
   getOrCreateDefaultSubwin();
+  startCurrentFigureDataWriting();
   Objplot2d (1,logFlags,stk(l1), stk(l2), &n1, &m1, style, strf,legend, rect,nax,flagNax);
+  endCurrentFigureDataWriting();
 
   LhsVar(1) = 0;
   PutLhsVar();
index 99dc781..dc1fdb6 100644 (file)
@@ -2,11 +2,11 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2006 - INRIA - Fabrice Leray
  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #include "sciCall.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_plot2d1_1 (char *fname,unsigned long fname_len)
 {
-  return sci_plot2d1_G("plot2d1",1,fname_len);/* NG */
+    return sci_plot2d1_G("plot2d1",1,fname_len);/* NG */
 }
 /*--------------------------------------------------------------------------*/
 int sci_plot2d1_2 (char *fname,unsigned long fname_len)
 {
-  return sci_plot2d1_G("plot2d2",2,fname_len); /* NG */
+    return sci_plot2d1_G("plot2d2",2,fname_len); /* NG */
 }
 /*--------------------------------------------------------------------------*/
 int sci_plot2d1_3 (char *fname,unsigned long fname_len)
 {
-  return sci_plot2d1_G("plot2d3",3,fname_len);/* NG */
+    return sci_plot2d1_G("plot2d3",3,fname_len);/* NG */
 }
 /*--------------------------------------------------------------------------*/
 int sci_plot2d1_4 (char *fname,unsigned long fname_len)
 {
-  return sci_plot2d1_G("plot2d4",4,fname_len);/* NG */
+    return sci_plot2d1_G("plot2d4",4,fname_len);/* NG */
 }
 /*--------------------------------------------------------------------------*/
 int sci_plot2d1_G( char * fname, int ptype, unsigned long fname_len )
 {
-  int frame_def=8;
-  int *frame=&frame_def;
-  int axes_def=1;
-  int *axes=&axes_def;
-  int iskip,test;
-  int m1 = 0,n1 = 0,l1 = 0, m2 = 0, n2 = 0, l2 = 0, lt, i, j ;
-
-  static rhs_opts opts[]= { {-1,"axesflag","?",0,0,0},
-                            {-1,"frameflag","?",0,0,0},
-                            {-1,"leg","?",0,0,0},
-                            {-1,"logflag","?",0,0,0},
-                            {-1,"nax","?",0,0,0},
-                            {-1,"rect","?",0,0,0},
-                            {-1,"strf","?",0,0,0},
-                            {-1,"style","?",0,0,0},
-                            {-1,NULL,NULL,0,0}       };
-
-  int    * style    = NULL  ;
-  double * rect     = NULL  ;
-  int    * nax      = NULL  ;
-  BOOL     flagNax  = FALSE ;
-  char   * strf     = NULL  ;
-  char   * legend   = NULL  ;
-  char   * logFlags = NULL  ;
-
-  if (Rhs <= 0) {
-    /* lauch the default routines depending on the name of the calling funtion */
-    sci_demo(fname, fname_len);
-    return 0;
-  }
-  CheckRhs(1,9); /* to allow plot2dxx(y) */
-
-
-  iskip=0;
-  if ( get_optionals(fname,opts) == 0) 
-  {
-         PutLhsVar();
-         return 0;
-  }
-
-  if (GetType(1)==sci_strings) {
-    /* logflags */
-    GetLogflags(fname,1,opts,&logFlags);
-    iskip=1;
-  }
-
-  /* added to support plot2dxx([logflags],y) */
-  if ( Rhs == 1 + iskip )
-  {
-    if ( FirstOpt() <= Rhs)
-    {
-      Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),fname,1, 3+iskip);
-      return(0);
+    int frame_def=8;
+    int *frame=&frame_def;
+    int axes_def=1;
+    int *axes=&axes_def;
+    int iskip,test;
+    int m1 = 0,n1 = 0,l1 = 0, m2 = 0, n2 = 0, l2 = 0, lt, i, j ;
+
+    static rhs_opts opts[]= { {-1,"axesflag","?",0,0,0},
+                              {-1,"frameflag","?",0,0,0},
+                              {-1,"leg","?",0,0,0},
+                              {-1,"logflag","?",0,0,0},
+                              {-1,"nax","?",0,0,0},
+                              {-1,"rect","?",0,0,0},
+                              {-1,"strf","?",0,0,0},
+                              {-1,"style","?",0,0,0},
+                              {-1,NULL,NULL,0,0}       };
+
+    int    * style    = NULL  ;
+    double * rect     = NULL  ;
+    int    * nax      = NULL  ;
+    BOOL     flagNax  = FALSE ;
+    char   * strf     = NULL  ;
+    char   * legend   = NULL  ;
+    char   * logFlags = NULL  ;
+
+    if (Rhs <= 0) {
+        /* lauch the default routines depending on the name of the calling funtion */
+        sci_demo(fname, fname_len);
+        return 0;
     }
+    CheckRhs(1,9); /* to allow plot2dxx(y) */
 
-    GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
-    CreateVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &l1);
-    if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
-    m1 = m2;  n1 = n2;
-    for (i = 0; i < m2 ; ++i) 
-      for (j = 0 ; j < n2 ;  ++j)
-        *stk( l1 + i + m2*j) = (double) i+1;
-  }
 
-
-  if (Rhs >= 2+iskip)
-  {
-    if ( FirstOpt() < 3+iskip) 
+    iskip=0;
+    if ( get_optionals(fname,opts) == 0)
     {
-      Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),
-        fname,1, 3+iskip);
-      return(0);
+        PutLhsVar();
+        return 0;
     }
 
+    if (GetType(1)==sci_strings) {
+        /* logflags */
+        GetLogflags(fname,1,opts,&logFlags);
+        iskip=1;
+    }
 
-    /* x */
-    GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
-    if (iskip==1) 
+    /* added to support plot2dxx([logflags],y) */
+    if ( Rhs == 1 + iskip )
     {
-      if (logFlags[0]=='e')
-      {
-        m1 = 0 ;
-        n1 = 0 ;
-      }
+        if ( FirstOpt() <= Rhs)
+        {
+            Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),fname,1, 3+iskip);
+            return(0);
+        }
+
+        GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+        CreateVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &l1);
+        if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
+        m1 = m2;  n1 = n2;
+        for (i = 0; i < m2 ; ++i)
+            for (j = 0 ; j < n2 ;  ++j)
+                *stk( l1 + i + m2*j) = (double) i+1;
     }
 
-    /* y */
-    GetRhsVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
-    /* if (m2 * n2 == 0) { m1 = 0; n1 = 0;}  */
-
-    test = (m1*n1 == 0) /* x = [] */
-      /* x,y vectors of same length */  
-      || ((m1 == 1 || n1 == 1) && (m2 == 1 || n2 ==1) && (m1*n1 == m2*n2))
-      || ((m1 == m2) && (n1 == n2)) /* size(x) == size(y) */
-      /* x vector size(y)==[size(x),.] */
-      || ((m1 == 1 && n1 == m2) || (n1 == 1 && m1 == m2)); 
-
-    CheckDimProp(1+iskip,2+iskip,!test);
-
-    if (m1*n1 == 0) 
-    { /* default x=1:n */
-      CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
-      if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
-      for (i = 0; i < m2 ; ++i)
-      {
-        for (j = 0 ; j < n2 ;  ++j)
+
+    if (Rhs >= 2+iskip)
+    {
+        if ( FirstOpt() < 3+iskip)
         {
-          *stk( lt + i + m2*j) = (double) i+1;
+            Scierror(999,_("%s: Misplaced optional argument: #%d must be at position %d.\n"),
+                     fname,1, 3+iskip);
+            return(0);
         }
-      }
-      m1 = m2;
-      n1 = n2;
-      l1 = lt;
-    }
-    else if ((m1 == 1 || n1 == 1) && (m2 != 1 && n2 != 1) ) {
-      /* a single x vector for mutiple columns for y */
-      CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
-      for (i = 0; i < m2 ; ++i)
-      {
-        for (j = 0 ; j < n2 ;  ++j)
+
+
+        /* x */
+        GetRhsVar(1+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
+        if (iskip==1)
         {
-          *stk( lt + i + m2*j) = *stk(l1 +i);
+            if (logFlags[0]=='e')
+            {
+                m1 = 0 ;
+                n1 = 0 ;
+            }
+        }
+
+        /* y */
+        GetRhsVar(2+iskip,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+        /* if (m2 * n2 == 0) { m1 = 0; n1 = 0;}  */
+
+        test = (m1*n1 == 0) /* x = [] */
+            /* x,y vectors of same length */
+            || ((m1 == 1 || n1 == 1) && (m2 == 1 || n2 ==1) && (m1*n1 == m2*n2))
+            || ((m1 == m2) && (n1 == n2)) /* size(x) == size(y) */
+            /* x vector size(y)==[size(x),.] */
+            || ((m1 == 1 && n1 == m2) || (n1 == 1 && m1 == m2));
+
+        CheckDimProp(1+iskip,2+iskip,!test);
+
+        if (m1*n1 == 0)
+        { /* default x=1:n */
+            CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
+            if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
+            for (i = 0; i < m2 ; ++i)
+            {
+                for (j = 0 ; j < n2 ;  ++j)
+                {
+                    *stk( lt + i + m2*j) = (double) i+1;
+                }
+            }
+            m1 = m2;
+            n1 = n2;
+            l1 = lt;
+        }
+        else if ((m1 == 1 || n1 == 1) && (m2 != 1 && n2 != 1) ) {
+            /* a single x vector for mutiple columns for y */
+            CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m2, &n2, &lt);
+            for (i = 0; i < m2 ; ++i)
+            {
+                for (j = 0 ; j < n2 ;  ++j)
+                {
+                    *stk( lt + i + m2*j) = *stk(l1 +i);
+                }
+            }
+            m1 = m2;
+            n1 = n2;
+            l1 = lt;
+        }
+        else if ((m1 == 1 && n1 == 1) && (n2 != 1) ) {
+            /* a single y row vector  for a single x */
+            CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n2, &lt);
+            for (j = 0 ; j < n2 ;  ++j)
+            {
+                *stk( lt + j ) = *stk(l1);
+            }
+            n1 = n2;
+            l1 = lt;
+        }
+        else {
+            if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
+            if (m1 == 1 && n1 > 1) { m1 = n1; n1 = 1;}
         }
-      }
-      m1 = m2;
-      n1 = n2;
-      l1 = lt;
-    }
-    else if ((m1 == 1 && n1 == 1) && (n2 != 1) ) {
-      /* a single y row vector  for a single x */
-      CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,  &m1, &n2, &lt);
-      for (j = 0 ; j < n2 ;  ++j)
-      {
-        *stk( lt + j ) = *stk(l1);
-      }
-      n1 = n2;
-      l1 = lt;
-    }
-    else {
-      if (m2 == 1 && n2 > 1) { m2 = n2; n2 = 1;}
-      if (m1 == 1 && n1 > 1) { m1 = n1; n1 = 1;}
     }
-  }
 
-  sciGetStyle(fname,3+iskip,n1,opts,&style);
-  GetStrf(fname,4+iskip,opts,&strf);
-  GetLegend(fname,5+iskip,opts,&legend);
-  GetRect(fname,6+iskip,opts,&rect);
-  GetNax(7+iskip,opts,&nax,&flagNax);
-  if (iskip==0) GetLogflags(fname,8,opts,&logFlags);
+    sciGetStyle(fname,3+iskip,n1,opts,&style);
+    GetStrf(fname,4+iskip,opts,&strf);
+    GetLegend(fname,5+iskip,opts,&legend);
+    GetRect(fname,6+iskip,opts,&rect);
+    GetNax(7+iskip,opts,&nax,&flagNax);
+    if (iskip==0) GetLogflags(fname,8,opts,&logFlags);
 
-  if ( isDefStrf( strf ) ) {
-    char strfl[4];
-    strcpy(strfl,DEFSTRFN);
+    if ( isDefStrf( strf ) ) {
+        char strfl[4];
+        strcpy(strfl,DEFSTRFN);
 
-    strf = strfl;
-    if ( !isDefRect( rect ) )
-    {
-      strfl[1]='7';
-    }
-    if ( !isDefLegend( legend ) )
-    {
-      strfl[0]='1';
-    }
-    GetOptionalIntArg(fname,9,"frameflag",&frame,1,opts);
-    if(frame != &frame_def)
-    {
-      strfl[1] = (char)(*frame+48);
-    }
-    GetOptionalIntArg(fname,9,"axesflag",&axes,1,opts);
-    if(axes != &axes_def)
-    {
-      strfl[2] = (char)(*axes+48);
+        strf = strfl;
+        if ( !isDefRect( rect ) )
+        {
+            strfl[1]='7';
+        }
+        if ( !isDefLegend( legend ) )
+        {
+            strfl[0]='1';
+        }
+        GetOptionalIntArg(fname,9,"frameflag",&frame,1,opts);
+        if(frame != &frame_def)
+        {
+            strfl[1] = (char)(*frame+48);
+        }
+        GetOptionalIntArg(fname,9,"axesflag",&axes,1,opts);
+        if(axes != &axes_def)
+        {
+            strfl[2] = (char)(*axes+48);
+        }
     }
-  }
 
-  if(ptype == 0) { ptype = 1 ; }
+    if(ptype == 0) { ptype = 1 ; }
 
-  Objplot2d (ptype,logFlags,stk(l1), stk(l2), &n1, &m1, style, strf,legend,rect, nax, flagNax);
+    startCurrentFigureDataWriting();
+    Objplot2d (ptype,logFlags,stk(l1), stk(l2), &n1, &m1, style, strf,legend,rect, nax, flagNax);
+    endCurrentFigureDataWriting();
 
-
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index e87184a..ed70d87 100644 (file)
 #include "sciCall.h"
 #include "localization.h"
 #include "Scierror.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_plot3d( char * fname, unsigned long fname_len )
 {
-  static double  ebox_def [6]= { 0,1,0,1,0,1};
-  double *ebox = ebox_def ;
-  static int iflag_def[3]={2,2,4};
-  int *iflag = iflag_def;
-  double  alpha_def=35.0 , theta_def=45.0 ;
-  double *alpha=&alpha_def, *theta=&theta_def;
-  int m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0, m3 = 0, n3 = 0, l3 = 0;
-  int m3n = 0, n3n = 0, l3n = 0, m3l = 0, n3l = 0, l3l = 0;
-
-  int izcol,  isfac;
-  double *zcol=NULL;
-
-  static rhs_opts opts[]= { {-1,"alpha","?",0,0,0},
-  {-1,"ebox","?",0,0,0},
-  {-1,"flag","?",0,0,0},
-  {-1,"leg","?",0,0,0},
-  {-1,"theta","?",0,0,0},
-  {-1,NULL,NULL,0,0}};
-
-  char * legend = NULL ;
-
-  /*
-  ** This overload the function to call demo script
-  ** the demo script is called %_<fname>
-  */
-  if (Rhs <= 0)
-  {
-   sci_demo(fname, fname_len);
-   return 0;
-  }
-
-  CheckRhs(3,8);
-
-  if ( get_optionals(fname,opts) == 0)
-  {
-         PutLhsVar();
-         return 0;
-  }
-
-  if ( FirstOpt() < 4)
-  {
-    Scierror(999, _("%s: Misplaced optional argument: #%d must be at position %d.\n"), fname,1, 4);
-    return -1;
-  }
-
-  GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
-  GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
-  if (m1 * n1 == 0)
-  {
-         LhsVar(1) = 0;
-         PutLhsVar();
-         return 0;
-  }
-
-  if (Rhs >= 3) {
-    /*     third argument can be a matrix z or a list list(z,zcol) */
-    switch ( VarType(3) )
+    static double  ebox_def [6]= { 0,1,0,1,0,1};
+    double *ebox = ebox_def ;
+    static int iflag_def[3]={2,2,4};
+    int *iflag = iflag_def;
+    double  alpha_def=35.0 , theta_def=45.0 ;
+    double *alpha=&alpha_def, *theta=&theta_def;
+    int m1 = 0, n1 = 0, l1 = 0, m2 = 0, n2 = 0, l2 = 0, m3 = 0, n3 = 0, l3 = 0;
+    int m3n = 0, n3n = 0, l3n = 0, m3l = 0, n3l = 0, l3l = 0;
+
+    int izcol,  isfac;
+    double *zcol=NULL;
+
+    static rhs_opts opts[]= { {-1,"alpha","?",0,0,0},
+                              {-1,"ebox","?",0,0,0},
+                              {-1,"flag","?",0,0,0},
+                              {-1,"leg","?",0,0,0},
+                              {-1,"theta","?",0,0,0},
+                              {-1,NULL,NULL,0,0}};
+
+    char * legend = NULL ;
+
+    /*
+    ** This overload the function to call demo script
+    ** the demo script is called %_<fname>
+    */
+    if (Rhs <= 0)
     {
-    case sci_matrix :
-      GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &m3, &n3, &l3);
-      izcol = 0;
-      break;
-    case sci_list :
-      izcol = 1;
-      /* z = list(z,colors) */
-      GetRhsVar(3,LIST_DATATYPE,&m3l,&n3l,&l3l);
-      if ( m3l != 2 )
-      {
-        Scierror(999,_("%s: Wrong size for input argument #%d: List of size %d expected.\n"),
-          fname, 3, 2);
+        sci_demo(fname, fname_len);
         return 0;
-      }
-      GetListRhsVar(3,1,MATRIX_OF_DOUBLE_DATATYPE,&m3,&n3,&l3);
-      GetListRhsVar(3,2,MATRIX_OF_DOUBLE_DATATYPE,&m3n,&n3n,&l3n);
-      zcol  = stk(l3n);
-      if (m3n * n3n != n3 &&  m3n*n3n != m3*n3)
-      {
-        Scierror(999,_("%s: Wrong size for input argument #%d: %d or %d expected.\n"),fname,3, n3,m3*n3);
-        return 0;
-      }
-      /*
-      *   Added by E Segre 4/5/4000. In the case where zcol is a
-      *   matrix of the same size as z, we set izcol to 2. This
-      *   value is later transmitted to the C2F(fac3dg) routine,
-      *   which has been modified to do the interpolated shading
-      *    (see the file SCI/modules/graphics/src/c/Plo3d.c
-      */
-      if (   m3n*n3n == m3*n3 ) { izcol=2  ; }
-      break ;
-    default :
-      OverLoad(3);
-      return 0;
-    }
-  }
-  iflag_def[1]=8;
-
-  GetOptionalDoubleArg(fname,4,"theta",&theta,1,opts);
-  GetOptionalDoubleArg(fname,5,"alpha",&alpha,1,opts);
-  GetLabels(fname,6,opts,&legend);
-  GetOptionalIntArg(fname,7,"flag",&iflag,3,opts);
-  GetOptionalDoubleArg(fname,8,"ebox",&ebox,6,opts);
-
-  if (m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1) {
-    if (! (m1 == m2 && m2 == m3 && n1 == n2 && n2 == n3)) {
-      Scierror(999,_("%s: Wrong value for input arguments #%d, #%d and #%d: Incompatible length.\n"),fname, 1, 2, 3);
-      return 0;
-    }
-  } else {
-    if (m2 * n2 != n3) {
-      Scierror(999,_("%s: Wrong value for input arguments #%d and #%d: Incompatible length.\n"),fname, 2, 3);
-      return 0;
     }
-    if (m1 * n1 != m3) {
-      Scierror(999,_("%s: Wrong value for input arguments #%d and #%d: Incompatible length.\n"),fname, 1, 3);
-      return 0;
+
+    CheckRhs(3,8);
+
+    if ( get_optionals(fname,opts) == 0)
+    {
+        PutLhsVar();
+        return 0;
     }
-    if ( m1*n1 <= 1 || m2*n2 <= 1 )
+
+    if ( FirstOpt() < 4)
     {
-               Scierror(999,_("%s: Wrong size for input arguments #%d and #%d: %s expected.\n"),fname, 2, 3, ">= 2");
-      return 0;
+        Scierror(999, _("%s: Misplaced optional argument: #%d must be at position %d.\n"), fname,1, 4);
+        return -1;
     }
-  }
 
-  if (m1 * n1 == 0 || m2 * n2 == 0 || m3 * n3 == 0) {
-               LhsVar(1)=0;
-               PutLhsVar();
-               return 0;
-       }
+    GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE, &m1, &n1, &l1);
+    GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE, &m2, &n2, &l2);
+    if (m1 * n1 == 0)
+    {
+        LhsVar(1) = 0;
+        PutLhsVar();
+        return 0;
+    }
 
-  getOrCreateDefaultSubwin();
+    if (Rhs >= 3) {
+        /*     third argument can be a matrix z or a list list(z,zcol) */
+        switch ( VarType(3) )
+        {
+        case sci_matrix :
+            GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE, &m3, &n3, &l3);
+            izcol = 0;
+            break;
+        case sci_list :
+            izcol = 1;
+            /* z = list(z,colors) */
+            GetRhsVar(3,LIST_DATATYPE,&m3l,&n3l,&l3l);
+            if ( m3l != 2 )
+            {
+                Scierror(999,_("%s: Wrong size for input argument #%d: List of size %d expected.\n"),
+                         fname, 3, 2);
+                return 0;
+            }
+            GetListRhsVar(3,1,MATRIX_OF_DOUBLE_DATATYPE,&m3,&n3,&l3);
+            GetListRhsVar(3,2,MATRIX_OF_DOUBLE_DATATYPE,&m3n,&n3n,&l3n);
+            zcol  = stk(l3n);
+            if (m3n * n3n != n3 &&  m3n*n3n != m3*n3)
+            {
+                Scierror(999,_("%s: Wrong size for input argument #%d: %d or %d expected.\n"),fname,3, n3,m3*n3);
+                return 0;
+            }
+            /*
+             *   Added by E Segre 4/5/4000. In the case where zcol is a
+             *   matrix of the same size as z, we set izcol to 2. This
+             *   value is later transmitted to the C2F(fac3dg) routine,
+             *   which has been modified to do the interpolated shading
+             *    (see the file SCI/modules/graphics/src/c/Plo3d.c
+             */
+            if (   m3n*n3n == m3*n3 ) { izcol=2  ; }
+            break ;
+        default :
+            OverLoad(3);
+            return 0;
+        }
+    }
+    iflag_def[1]=8;
+
+    GetOptionalDoubleArg(fname,4,"theta",&theta,1,opts);
+    GetOptionalDoubleArg(fname,5,"alpha",&alpha,1,opts);
+    GetLabels(fname,6,opts,&legend);
+    GetOptionalIntArg(fname,7,"flag",&iflag,3,opts);
+    GetOptionalDoubleArg(fname,8,"ebox",&ebox,6,opts);
+
+    if (m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1) {
+        if (! (m1 == m2 && m2 == m3 && n1 == n2 && n2 == n3)) {
+            Scierror(999,_("%s: Wrong value for input arguments #%d, #%d and #%d: Incompatible length.\n"),fname, 1, 2, 3);
+            return 0;
+        }
+    } else {
+        if (m2 * n2 != n3) {
+            Scierror(999,_("%s: Wrong value for input arguments #%d and #%d: Incompatible length.\n"),fname, 2, 3);
+            return 0;
+        }
+        if (m1 * n1 != m3) {
+            Scierror(999,_("%s: Wrong value for input arguments #%d and #%d: Incompatible length.\n"),fname, 1, 3);
+            return 0;
+        }
+        if ( m1*n1 <= 1 || m2*n2 <= 1 )
+        {
+            Scierror(999,_("%s: Wrong size for input arguments #%d and #%d: %s expected.\n"),fname, 2, 3, ">= 2");
+            return 0;
+        }
+    }
 
-  /******************** 24/015/2002 ********************/
-  if (m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1) /* NG beg */
-  {
-    isfac=1;
-  }
-  else
-  {
-    isfac=0;
-  }
+    if (m1 * n1 == 0 || m2 * n2 == 0 || m3 * n3 == 0) {
+        LhsVar(1)=0;
+        PutLhsVar();
+        return 0;
+    }
 
+    getOrCreateDefaultSubwin();
 
-  Objplot3d (fname,&isfac,&izcol,stk(l1),stk(l2),stk(l3),zcol,&m3,&n3,theta,alpha,legend,iflag,ebox,&m1,&n1,&m2,&n2,&m3,&n3,&m3n,&n3n);/*Adding F.Leray 12.03.04 and 19.03.04*/
+    /******************** 24/015/2002 ********************/
+    if (m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1) /* NG beg */
+    {
+        isfac=1;
+    }
+    else
+    {
+        isfac=0;
+    }
 
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    startCurrentFigureDataWriting();
+    Objplot3d (fname,&isfac,&izcol,stk(l1),stk(l2),stk(l3),zcol,&m3,&n3,theta,alpha,legend,iflag,ebox,&m1,&n1,&m2,&n2,&m3,&n3,&m3n,&n3n);/*Adding F.Leray 12.03.04 and 19.03.04*/
+    endCurrentFigureDataWriting();
 
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index 4ed34f8..da45c30 100644 (file)
 /*--------------------------------------------------------------------------*/
 int sci_show_pixmap(char *fname, unsigned long fname_len )
 {
-  /* call show_pixmap */
+    /* call show_pixmap */
 
-  CheckRhs(0,0);
-  CheckLhs(0,1);
+    CheckRhs(0,0);
+    CheckLhs(0,1);
 
-  /* call show_pixmap function */
-  showPixmap(getCurrentFigure());
+    /* call show_pixmap function */
+    showPixmap(getCurrentFigure());
 
-  LhsVar(1) = 0;
-  PutLhsVar();
-  return 0;
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index 12ed7c4..657654b 100644 (file)
 /*--------------------------------------------------------------------------*/
 int sci_unzoom(char *fname,unsigned long fname_len)
 {
-  /* number of object to unzoom */
-  int nbObjects = 0;
+    /* number of object to unzoom */
+    int nbObjects = 0;
 
-  /* ids of object to unzoom */
-  char** objectsId = NULL;
+    /* ids of object to unzoom */
+    char** objectsId = NULL;
 
-  char* objectUID;
+    char* objectUID;
 
-  /* object type */
-  char *pstType;
+    /* object type */
+    char *pstType;
 
-  CheckRhs(0,1) ;
-  CheckLhs(0,1) ;
-  if ( Rhs == 0 )
-  {
-    objectUID = getCurrentFigure();
-    if (objectUID != NULL)
+    CheckRhs(0,1) ;
+    CheckLhs(0,1) ;
+    if ( Rhs == 0 )
     {
-      sciUnzoomFigure(objectUID);
+        objectUID = getCurrentFigure();
+        if (objectUID != NULL)
+        {
+            sciUnzoomFigure(objectUID);
+        }
     }
-  }
-  else
-  {
-    int m,n,i;
-    size_t stackPointer = 0;
-    GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &m, &n, &stackPointer);
-
-    nbObjects = m * n;
-    objectsId = MALLOC(nbObjects * sizeof(char*));
-    if (objectsId == NULL)
+    else
     {
-      Scierror(999, _("%s: No more memory.\n"),fname);
-      return -1;
-    }
+        int m,n,i;
+        size_t stackPointer = 0;
+        GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &m, &n, &stackPointer);
 
-    /* first pass, check that all the handles are subwindows or figures */
-    /* and copy them into an array of objects */
-    for (i = 0; i < nbObjects; i++ )
-    {
-      objectUID = getObjectFromHandle(getHandleFromStack(stackPointer + i));
-      getGraphicObjectProperty(objectUID, __GO_TYPE__, jni_string, (void **) &pstType);
-      if ((strcmp(pstType, __GO_FIGURE__) != 0) && (strcmp(pstType, __GO_AXES__) != 0))
-      {
-        FREE(objectsId);
-        Scierror(999, _("%s: Wrong type for input argument: Vector of Axes and Figure handles expected.\n"),fname);
-        return -1;
-      }
-      objectsId[i] = objectUID;
-    }
+        nbObjects = m * n;
+        objectsId = MALLOC(nbObjects * sizeof(char*));
+        if (objectsId == NULL)
+        {
+            Scierror(999, _("%s: No more memory.\n"),fname);
+            return -1;
+        }
+
+        /* first pass, check that all the handles are subwindows or figures */
+        /* and copy them into an array of objects */
+        startCurrentFigureDataWriting();
+        for (i = 0; i < nbObjects; i++ )
+        {
+            objectUID = getObjectFromHandle(getHandleFromStack(stackPointer + i));
+            getGraphicObjectProperty(objectUID, __GO_TYPE__, jni_string, (void **) &pstType);
+            if ((strcmp(pstType, __GO_FIGURE__) != 0) && (strcmp(pstType, __GO_AXES__) != 0))
+            {
+                FREE(objectsId);
+                Scierror(999, _("%s: Wrong type for input argument: Vector of Axes and Figure handles expected.\n"),fname);
+                endCurrentFigureDataWriting();
+                return -1;
+            }
+            objectsId[i] = objectUID;
+        }
 
-    /* second pass un zoom the objects */
-    sciUnzoomArray(objectsId, nbObjects);
+        /* second pass un zoom the objects */
+        sciUnzoomArray(objectsId, nbObjects);
+        endCurrentFigureDataWriting();
 
-    FREE(objectsId);
-  }
+        FREE(objectsId);
+    }
 
 
-  LhsVar(1)=0;
-  PutLhsVar();
-  return 0;
+    LhsVar(1)=0;
+    PutLhsVar();
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index 256559a..6139300 100644 (file)
@@ -26,6 +26,7 @@
 #include "getGraphicObjectProperty.h"
 #include "CurrentSubwin.h"
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_xarc(char *fname,unsigned long fname_len)
@@ -51,6 +52,7 @@ int sci_xarc(char *fname,unsigned long fname_len)
     angle2 = DEG2RAD(*istk(l6) / 64.0);
 
     psubwinUID = getOrCreateDefaultSubwin();
+    startCurrentFigureDataWriting();
 
     getGraphicObjectProperty(psubwinUID, __GO_LINE_COLOR__, jni_int, &piCurColor);
 
@@ -63,6 +65,8 @@ int sci_xarc(char *fname,unsigned long fname_len)
         Objarc (&angle1,&angle2,stk(l1),stk(l2),stk(l3),stk(l4),NULL,&curcolor,TRUE,FALSE,&hdl);
     }
 
+    endCurrentFigureDataWriting();
+
     LhsVar(1)=0;
     PutLhsVar();
     return 0;
index a042d25..991b869 100644 (file)
@@ -24,6 +24,7 @@
 #include "Scierror.h"
 
 #include "CurrentObject.h"
+#include "CurrentFigure.h"
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
@@ -86,6 +87,7 @@ int sci_xarcs(char *fname, unsigned long fname_len)
         }
     }
 
+    startCurrentFigureDataWriting();
     for (i = 0; i < n1; ++i)
     {
         angle1 = DEG2RAD(*stk(l1 + (6 * i) + 4) / 64.0);
@@ -96,6 +98,7 @@ int sci_xarcs(char *fname, unsigned long fname_len)
 
     /* construct Compound and make it current object */
     setCurrentObject(ConstructCompoundSeq(n1));
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index c52999f..92894ce 100644 (file)
@@ -23,6 +23,7 @@
 #include "Scierror.h"
 #include "HandleManagement.h"
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_xarrows(char *fname,unsigned long fname_len)
 {
@@ -41,7 +42,7 @@ int sci_xarrows(char *fname,unsigned long fname_len)
     {
         LhsVar(1)=0;
         PutLhsVar();
-       return 0;
+        return 0;
     }
 
     if (Rhs >= 3)
@@ -78,7 +79,9 @@ int sci_xarrows(char *fname,unsigned long fname_len)
 
     getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     Objsegs(style,flag,mn2,stk(l1),stk(l2),NULL,arsize);
+    endCurrentFigureDataWriting();
 
     LhsVar(1)=0;
     PutLhsVar();
index 860d873..58ee9dd 100644 (file)
@@ -36,31 +36,35 @@ int sci_xdel(char *fname,unsigned long fname_len)
     CheckRhs(-1,1);
     if (Rhs >= 1) {
         int i;
-               double * windowNumbers;
+        double * windowNumbers;
         GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&l1);
 
-               /* First check that all the window numbers are valid */
-               windowNumbers = getDoubleMatrixFromStack(l1);
-               for (i = 0; i < m1 * n1; i++)
-               {
-                       if (!sciIsExistingFigure((int) windowNumbers[i]))
-                       {
-                               Scierror(999, "%s: Figure with figure_id %d does not exist.\n",fname, (int) windowNumbers[i]);
-                               return -1;
-                       }
-               }
+        /* First check that all the window numbers are valid */
+        windowNumbers = getDoubleMatrixFromStack(l1);
+        for (i = 0; i < m1 * n1; i++)
+        {
+            if (!sciIsExistingFigure((int) windowNumbers[i]))
+            {
+                Scierror(999, "%s: Figure with figure_id %d does not exist.\n",fname, (int) windowNumbers[i]);
+                return -1;
+            }
+        }
 
+        startCurrentFigureDataWriting();
         for (i = 0; i < m1*n1 ; i++)
         {
             sciDeleteWindow( (int) windowNumbers[i] ) ;
         }
+        endCurrentFigureDataWriting();
     }
     else
     {
         pstCurrentFigure = getCurrentFigure();
         if (pstCurrentFigure != NULL)
         {
+            startCurrentFigureDataWriting();
             deleteGraphicObject(pstCurrentFigure);
+            endCurrentFigureDataWriting();
         }
     }
     LhsVar(1)=0;
index d8a2fe5..8256c32 100644 (file)
@@ -24,6 +24,7 @@
 #include "BuildObjects.h"
 
 #include "CurrentObject.h"
+#include "CurrentFigure.h"
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
@@ -73,6 +74,7 @@ int sci_xfarcs(char *fname, unsigned long fname_len)
 
     getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     for (i = 0; i < n1; ++i)
     {
         angle1 = DEG2RAD(*stk(l1 + (6 * i) + 4) / 64.0);
@@ -83,6 +85,7 @@ int sci_xfarcs(char *fname, unsigned long fname_len)
 
     /** Construct Compound and make it current object **/
     setCurrentObject(ConstructCompoundSeq(n1));
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index 96b4934..d1fd6ac 100644 (file)
@@ -21,6 +21,7 @@
 #include "stack-c.h"
 #include "sciCall.h"
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
@@ -60,7 +61,9 @@ int sci_xfpoly(char *fname,unsigned long fname_len)
         getGraphicObjectProperty(psubwinUID, __GO_LINE_COLOR__, jni_int, (void**)&piForeground);
     }
 
+    startCurrentFigureDataWriting();
     Objfpoly(stk(l1), stk(l2), mn1, &iForeground, &hdl, 0);
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index 6a9078e..3bd2d7a 100644 (file)
@@ -26,6 +26,7 @@
 #include "localization.h"
 
 #include "CurrentObject.h"
+#include "CurrentFigure.h"
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
@@ -96,6 +97,7 @@ int sci_xfpolys(char *fname, unsigned long fname_len)
 
     pstSubWinUID = getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     for (i = 0; i < n1; ++i)
     {
         if (m3 == 1 || n3 == 1) /* color vector specified */
@@ -118,6 +120,7 @@ int sci_xfpolys(char *fname, unsigned long fname_len)
 
     /** Construct Compound and make it current object**/
     setCurrentObject(ConstructCompoundSeq(n1));
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index d039d09..7788e53 100644 (file)
@@ -24,6 +24,7 @@
 #include "Scierror.h"
 #include "localization.h"
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
@@ -46,9 +47,11 @@ int sci_xgrid(char *fname, unsigned long fname_len)
 
     pstObjUID = getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     setGraphicObjectProperty(pstObjUID, __GO_X_AXIS_GRID_COLOR__, &style, jni_int, 1);
     setGraphicObjectProperty(pstObjUID, __GO_Y_AXIS_GRID_COLOR__, &style, jni_int, 1);
     setGraphicObjectProperty(pstObjUID, __GO_Z_AXIS_GRID_COLOR__, &style, jni_int, 1);
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index db6053b..cecf89d 100644 (file)
@@ -32,6 +32,7 @@
 #include "graphicObjectProperties.h"
 #include "CurrentObject.h"
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_xpoly( char * fname, unsigned long fname_len )
@@ -89,6 +90,7 @@ int sci_xpoly( char * fname, unsigned long fname_len )
     /* NG beg */
 
     psubwinUID = getOrCreateDefaultSubwin();
+    startCurrentFigureDataWriting();
 
     Objpoly (stk(l1),stk(l2),mn2,close,mark,&hdl);
 
@@ -126,6 +128,8 @@ int sci_xpoly( char * fname, unsigned long fname_len )
     setGraphicObjectProperty(pobjUID, __GO_MARK_MODE__, &markMode, jni_bool, 1);
     setGraphicObjectProperty(pobjUID, __GO_LINE_MODE__, &lineMode, jni_bool, 1);
 
+    endCurrentFigureDataWriting();
+
     /* NG end */
     LhsVar(1)=0;
     PutLhsVar();
index 51b3093..a491055 100644 (file)
@@ -23,6 +23,7 @@
 #include "BuildObjects.h"
 
 #include "CurrentObject.h"
+#include "CurrentFigure.h"
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
@@ -53,6 +54,7 @@ int sci_xpolys(char *fname, unsigned long fname_len)
 
     getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     if (Rhs == 3)
     {
         GetRhsVar(3, MATRIX_OF_INTEGER_DATATYPE, &m3, &n3, &l3);
@@ -74,6 +76,7 @@ int sci_xpolys(char *fname, unsigned long fname_len)
 
     /** Construct Compound and make it current object**/
     setCurrentObject(ConstructCompoundSeq(n1));
+    endCurrentFigureDataWriting();
 
     LhsVar(1) = 0;
     PutLhsVar();
index f833c5e..6c265e4 100644 (file)
@@ -29,6 +29,7 @@
 #include "getGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
 #include "BuildObjects.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_xrect( char *fname, unsigned long fname_len )
@@ -51,7 +52,7 @@ int sci_xrect( char *fname, unsigned long fname_len )
         CheckLength(1,m1*n1,4);
 
         getGraphicObjectProperty(psubwinUID, __GO_LINE_COLOR__, jni_int, &piForeground);
-
+        startCurrentFigureDataWriting();
         if (strcmp(fname,"xrect")==0)
         {
             Objrect (stk(l1),stk(l1+1),stk(l1+2),stk(l1+3),
@@ -62,6 +63,7 @@ int sci_xrect( char *fname, unsigned long fname_len )
             Objrect (stk(l1),stk(l1+1),stk(l1+2),stk(l1+3),
                      NULL,&foreground,TRUE,FALSE,&hdl);
         }
+        endCurrentFigureDataWriting();
 
         if ( hdl < 0 )
         {
@@ -77,6 +79,7 @@ int sci_xrect( char *fname, unsigned long fname_len )
         GetRhsVar(3,MATRIX_OF_DOUBLE_DATATYPE,&m3,&n3,&l3); CheckScalar(3,m3,n3);
         GetRhsVar(4,MATRIX_OF_DOUBLE_DATATYPE,&m4,&n4,&l4); CheckScalar(4,m4,n4);
 
+        startCurrentFigureDataWriting();
         if (strcmp(fname,"xrect")==0)
         {
             Objrect (stk(l1),stk(l2),stk(l3),stk(l4),
@@ -87,6 +90,7 @@ int sci_xrect( char *fname, unsigned long fname_len )
             Objrect (stk(l1),stk(l2),stk(l3),stk(l4),
                      NULL,&foreground,TRUE,FALSE,&hdl);
         }
+        endCurrentFigureDataWriting();
 
         if ( hdl < 0 )
         {
index 74a9856..da4d55a 100644 (file)
@@ -33,6 +33,7 @@
 #include "getGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
 #include "CurrentObject.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_xrects( char *fname, unsigned long fname_len )
 {
@@ -73,6 +74,7 @@ int sci_xrects( char *fname, unsigned long fname_len )
 
     psubwinUID = getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     // Create compound.
     pstCompoundUID = createGraphicObject(__GO_COMPOUND__);
     /* Sets the parent-child relationship for the Compound */
@@ -88,7 +90,7 @@ int sci_xrects( char *fname, unsigned long fname_len )
             getGraphicObjectProperty(psubwinUID, __GO_LINE_COLOR__, jni_int, &piForeground);
 
             Objrect(stk(l1+(4*i)),stk(l1+(4*i)+1),stk(l1+(4*i)+2),stk(l1+(4*i)+3),
-                     &foreground,NULL,FALSE,TRUE,&hdl);
+                    &foreground,NULL,FALSE,TRUE,&hdl);
         }
         else
         {
@@ -97,13 +99,13 @@ int sci_xrects( char *fname, unsigned long fname_len )
                 /** fil(i) < 0 rectangle i is drawn using the line style (or color) **/
                 int tmp = - (*istk(l2+i));
                 Objrect(stk(l1+(4*i)),stk(l1+(4*i)+1),stk(l1+(4*i)+2),stk(l1+(4*i)+3),
-                         &tmp,NULL,FALSE,TRUE,&hdl);
+                        &tmp,NULL,FALSE,TRUE,&hdl);
             }
             else
             {
                 /** fil(i) > 0   rectangle i is filled using the pattern (or color) **/
                 Objrect(stk(l1+(4*i)),stk(l1+(4*i)+1),stk(l1+(4*i)+2),stk(l1+(4*i)+3),
-                         NULL,istk(l2+i),TRUE,FALSE,&hdl);
+                        NULL,istk(l2+i),TRUE,FALSE,&hdl);
             }
         }
         // Add newly created object to Compound
@@ -112,6 +114,7 @@ int sci_xrects( char *fname, unsigned long fname_len )
 
     /** make Compound current object **/
     setCurrentObject(pstCompoundUID);
+    endCurrentFigureDataWriting();
 
     LhsVar(1)=0;
     PutLhsVar();
index 81070c2..c448de8 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "getGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_xsegs(char *fname,unsigned long fname_len)
 {
@@ -106,7 +107,9 @@ int sci_xsegs(char *fname,unsigned long fname_len)
         colorFlag = (mc*nc == 1) ? 0 : 1;
     }
 
+    startCurrentFigureDataWriting();
     Objsegs (style,colorFlag,mx*nx,stk(lx),stk(ly),zptr,arsize);
+    endCurrentFigureDataWriting();
 
     LhsVar(1)=0;
     PutLhsVar();
index 74e8c09..61aa826 100644 (file)
@@ -1,16 +1,16 @@
 /*
-* Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-* Copyright (C) 2006 - INRIA - Fabrice Leray
-* Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
-* Copyright (C) 2012 - Scilab Enterprises - Bruno JOFRET
-*
-* This file must be used under the terms of the CeCILL.
-* This source file is licensed as described in the file COPYING, which
-* you should have received as part of this distribution.  The terms
-* are also available at
-* http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
-*
-*/
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2006 - INRIA - Fabrice Leray
+ * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
+ * Copyright (C) 2012 - Scilab Enterprises - Bruno JOFRET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
 
 /*------------------------------------------------------------------------*/
 /* file: sci_xset.c                                                       */
@@ -127,8 +127,10 @@ int sci_xset( char *fname, unsigned long fname_len )
             return -1;
         }
         subwinUID = getOrCreateDefaultSubwin();
+        startCurrentFigureDataWriting();
         setGraphicObjectProperty(subwinUID, __GO_CLIP_BOX__, xx, jni_double_vector, 4);
         setGraphicObjectProperty(subwinUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
+        endCurrentFigureDataWriting();
     }
     else if ( strcmp(cstk(l1),"colormap") == 0)
     {
@@ -143,8 +145,10 @@ int sci_xset( char *fname, unsigned long fname_len )
         int markSizeUnit = 1; /* force switch to tabulated mode : old syntax / 0 : point, 1 : tabulated */
         char *subwinUID = getOrCreateDefaultSubwin();
 
+        startCurrentFigureDataWriting();
         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1);
         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
+        endCurrentFigureDataWriting();
     }
     else if ( strcmp(cstk(l1),"mark") == 0)
     {
@@ -159,9 +163,11 @@ int sci_xset( char *fname, unsigned long fname_len )
         }
 
         subwinUID = getOrCreateDefaultSubwin();
+        startCurrentFigureDataWriting();
         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1); /* force switch to tabulated mode : old syntax */
         setGraphicObjectProperty(subwinUID, __GO_MARK_STYLE__, &markStyle, jni_int, 1);
         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
+        endCurrentFigureDataWriting();
     }
     else if ( strcmp(cstk(l1),"font size") == 0) {
         double fontSize = xx[0];
@@ -201,8 +207,10 @@ int sci_xset( char *fname, unsigned long fname_len )
             return -1;
         }
 
+        startCurrentFigureDataWriting();
         setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_FONT_SIZE__, &fontSize, jni_double, 1);
         setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_FONT_STYLE__, &fontStyle, jni_int, 1);
+        endCurrentFigureDataWriting();
     }
     else if ( strcmp(cstk(l1),"window") == 0 || strcmp(cstk(l1),"figure") == 0 )
     {
@@ -239,10 +247,11 @@ int sci_xset( char *fname, unsigned long fname_len )
     else if ( strcmp(cstk(l1),"mark") == 0)
     {
         int markMode = 1;
-
-        setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_MARK_MODE__, &markMode, jni_bool, 1);
-
-        sciSetMarkStyle(getOrCreateDefaultSubwin(), x[0]);
+        subwinUID = getOrCreateDefaultSubwin();
+        startCurrentFigureDataWriting();
+        setGraphicObjectProperty(subwinUID, __GO_MARK_MODE__, &markMode, jni_bool, 1);
+        sciSetMarkStyle(subwinUID, x[0]);
+        endCurrentFigureDataWriting();
     }
     else if ( strcmp(cstk(l1),"colormap") == 0)
     {
@@ -262,7 +271,7 @@ int sci_xset( char *fname, unsigned long fname_len )
     }
     else if ( strcmp(cstk(l1),"wpos") == 0)
     {
-       int figurePosition[2];
+        int figurePosition[2];
         if (Rhs != 2)
         {
             Scierror(999, _("%s: Wrong number of input argument %d expected.\n"),fname, 2);
@@ -270,9 +279,9 @@ int sci_xset( char *fname, unsigned long fname_len )
         }
         getOrCreateDefaultSubwin();
 
-       figurePosition[0] = x[0];
-       figurePosition[1] = x[1];
-       setGraphicObjectProperty(getCurrentFigure(), __GO_POSITION__, figurePosition, jni_int_vector, 2);
+        figurePosition[0] = x[0];
+        figurePosition[1] = x[1];
+        setGraphicObjectProperty(getCurrentFigure(), __GO_POSITION__, figurePosition, jni_int_vector, 2);
     }
     else if ( strcmp(cstk(l1),"wpdim") == 0 || strcmp(cstk(l1),"wdim") == 0)
     {
@@ -284,9 +293,9 @@ int sci_xset( char *fname, unsigned long fname_len )
         }
         getOrCreateDefaultSubwin();
 
-       figureSize[0] = x[0];
-       figureSize[1] = x[1];
-       setGraphicObjectProperty(getCurrentFigure(), __GO_SIZE__, figureSize, jni_int_vector, 2);
+        figureSize[0] = x[0];
+        figureSize[1] = x[1];
+        setGraphicObjectProperty(getCurrentFigure(), __GO_SIZE__, figureSize, jni_int_vector, 2);
     } /*Ajout A.Djalel le 10/11/03 */
     else if ( strcmp(cstk(l1),"pixmap") == 0)
     {
index 1a6e45c..46ed8d2 100644 (file)
@@ -27,6 +27,7 @@
 #include "BuildObjects.h"
 
 #include "CurrentSubwin.h"
+#include "CurrentFigure.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_xstring(char *fname, unsigned long fname_len)
@@ -114,6 +115,7 @@ int sci_xstring(char *fname, unsigned long fname_len)
 
     getOrCreateDefaultSubwin();
 
+    startCurrentFigureDataWriting();
     if (nbElement == 1)
     {
         Objstring(sendStr, sendm3, sendn3, x, y, &angle, rect, TRUE, NULL, &hdlstr, FALSE, NULL, NULL, isboxed
@@ -148,6 +150,7 @@ int sci_xstring(char *fname, unsigned long fname_len)
          */
         ConstructCompoundSeq(nbElement);
     }
+    endCurrentFigureDataWriting();
 
     /* we must free Str memory */
 
index 3de0094..da7a9b4 100644 (file)
@@ -3,11 +3,11 @@
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2006 - INRIA - Fabrice Leray
  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
- * 
+ *
  * This file must be used under the terms of the CeCILL.
  * This source file is licensed as described in the file COPYING, which
  * you should have received as part of this distribution.  The terms
- * are also available at    
+ * are also available at
  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
  *
  */
 #include "sciCall.h"
 #include "freeArrayOfString.h"
 #include "localization.h"
+#include "CurrentFigure.h"
 /*--------------------------------------------------------------------------*/
 int sci_xstringb(char *fname,unsigned long fname_len)
 {
-  int m1,n1,l1,m2,n2,l2,m3,n3,m4,n4,l4,m5,n5,l5,m6,n6,l6;
-  BOOL autoSize = TRUE ;
-  double x,y,w,hx;
-  char **Str;
-  double rect[4],angle=0;
-  long hdlstr;
-  double userSize[2] ;
+    int m1,n1,l1,m2,n2,l2,m3,n3,m4,n4,l4,m5,n5,l5,m6,n6,l6;
+    BOOL autoSize = TRUE ;
+    double x,y,w,hx;
+    char **Str;
+    double rect[4],angle=0;
+    long hdlstr;
+    double userSize[2] ;
 
-  if ( Rhs <= 0 )
-  {
-    /* demo */
-    sci_demo(fname, fname_len);
-    return 0 ;
-  }
+    if ( Rhs <= 0 )
+    {
+        /* demo */
+        sci_demo(fname, fname_len);
+        return 0 ;
+    }
 
-  CheckRhs(5,6);
+    CheckRhs(5,6);
 
-  GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&l1); CheckScalar(1,m1,n1);  x = *stk(l1);
-  GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE,&m2,&n2,&l2); CheckScalar(2,m2,n2);  y = *stk(l2);
-  GetRhsVar(3,MATRIX_OF_STRING_DATATYPE,&m3,&n3,&Str);
-  if ( m3*n3 == 0 )
-       {
-               LhsVar(1)=0;
-               PutLhsVar();
-               return 0;
-       } 
+    GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&l1); CheckScalar(1,m1,n1);  x = *stk(l1);
+    GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE,&m2,&n2,&l2); CheckScalar(2,m2,n2);  y = *stk(l2);
+    GetRhsVar(3,MATRIX_OF_STRING_DATATYPE,&m3,&n3,&Str);
+    if ( m3*n3 == 0 )
+    {
+        LhsVar(1)=0;
+        PutLhsVar();
+        return 0;
+    }
 
-  GetRhsVar(4,MATRIX_OF_DOUBLE_DATATYPE,&m4,&n4,&l4); CheckScalar(4,m4,n4);  w = *stk(l4);
-  GetRhsVar(5,MATRIX_OF_DOUBLE_DATATYPE,&m5,&n5,&l5); CheckScalar(5,m5,n5);  hx = *stk(l5);
+    GetRhsVar(4,MATRIX_OF_DOUBLE_DATATYPE,&m4,&n4,&l4); CheckScalar(4,m4,n4);  w = *stk(l4);
+    GetRhsVar(5,MATRIX_OF_DOUBLE_DATATYPE,&m5,&n5,&l5); CheckScalar(5,m5,n5);  hx = *stk(l5);
 
-  if (Rhs == 6)
-  {
-    GetRhsVar(6,STRING_DATATYPE,&m6,&n6,&l6);
-    if ( m6*n6 !=0 && strcmp(cstk(l6),"fill") == 0 )
-    {
-      autoSize = FALSE ;
-    } 
-    else
+    if (Rhs == 6)
     {
-      Scierror(999,_("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 6, "fill");
-      return 0;
+        GetRhsVar(6,STRING_DATATYPE,&m6,&n6,&l6);
+        if ( m6*n6 !=0 && strcmp(cstk(l6),"fill") == 0 )
+        {
+            autoSize = FALSE ;
+        }
+        else
+        {
+            Scierror(999,_("%s: Wrong value for input argument #%d: '%s' expected.\n"), fname, 6, "fill");
+            return 0;
+        }
     }
-  }
-
-  userSize[0] = w ;
-  userSize[1] = hx ;
-  Objstring (Str,m3,n3,x,y,&angle,rect,autoSize,userSize,&hdlstr,TRUE,NULL,NULL,FALSE,TRUE,FALSE,ALIGN_CENTER);
 
-       freeArrayOfString(Str,m3*n3);
+    userSize[0] = w ;
+    userSize[1] = hx ;
+    startCurrentFigureDataWriting();
+    Objstring (Str,m3,n3,x,y,&angle,rect,autoSize,userSize,&hdlstr,TRUE,NULL,NULL,FALSE,TRUE,FALSE,ALIGN_CENTER);
+    endCurrentFigureDataWriting();
 
-  LhsVar(1)=0;
-       PutLhsVar();
+    freeArrayOfString(Str,m3*n3);
 
-  return 0;
+    LhsVar(1)=0;
+    PutLhsVar();
 
+    return 0;
 }
 /*--------------------------------------------------------------------------*/
index d4c2463..034ed0a 100644 (file)
@@ -44,7 +44,7 @@ int sci_xtitle( char * fname, unsigned long fname_len )
     BOOL isBoxSpecified = FALSE;
     char * psubwinUID = NULL;
     static rhs_opts opts[] = { {-1,"boxed","i" ,0,0,0},
-    {-1,NULL   ,NULL,0,0,0} };
+                               {-1,NULL   ,NULL,0,0,0} };
 
     if (Rhs <= 0)
     {
@@ -111,29 +111,31 @@ int sci_xtitle( char * fname, unsigned long fname_len )
 
         switch(narg)
         {
-            case 1:
-                getGraphicObjectProperty(psubwinUID, __GO_TITLE__, jni_string, &modifiedLabel);
-                break;
-            case 2:
-                getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, &modifiedLabel);
+        case 1:
+            getGraphicObjectProperty(psubwinUID, __GO_TITLE__, jni_string, &modifiedLabel);
+            break;
+        case 2:
+            getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LABEL__, jni_string, &modifiedLabel);
+            break;
+        case 3:
+            getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, &modifiedLabel);
+            break;
+        case 4:
+            getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, &modifiedLabel);
+            break;
+        default:
             break;
-            case 3:
-                getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LABEL__, jni_string, &modifiedLabel);
-                break;
-            case 4:
-                getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LABEL__, jni_string, &modifiedLabel);
-                break;
-            default:
-                break;
         }
 
 #if 0
         startFigureDataWriting(pFigure);
 #endif
 
+        startCurrentFigureDataWriting();
         sciSetText(modifiedLabel, Str, m, n);
 
         setGraphicObjectProperty(modifiedLabel, __GO_FILL_MODE__, &box, jni_bool, 1);
+        endCurrentFigureDataWriting();
 
 #if 0
         endFigureDataWriting(pFigure);
index 34aaad9..0bc653c 100644 (file)
@@ -37,6 +37,7 @@
 #include "graphicObjectProperties.h"
 #include "CurrentSubwin.h"
 #include "CurrentObject.h"
+#include "CurrentFigure.h"
 
 /*-----------------------------------------------------------------
  *  int C2F(champ)(x,y,fx,fy,n1,n2,strflag,brect,arfact,lstr)
@@ -56,7 +57,7 @@
  -------------------------------------------------------------------*/
 
 void champg(char *name, int colored, double *x, double *y, double *fx, double *fy, int *n1,
-           int *n2, char *strflag, double *brect, double *arfact, int lstr)
+            int *n2, char *strflag, double *brect, double *arfact, int lstr)
 {
     char* psubwinUID = NULL;
     char* newSegsUID = NULL;
@@ -106,6 +107,8 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
     /* then modify subwindow if needed */
     checkRedrawing();
 
+    startCurrentFigureDataWriting();
+
     /* Force clipping to CLIPGRF (1) */
     clipState = 1;
     setGraphicObjectProperty(psubwinUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
@@ -116,7 +119,7 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
     }
 
     newSegsUID = ConstructSegs(psubwinUID,type,x,y, NULL,*n1,*n2,0,fx,fy,flag,
-                            style,arsize1,colored,typeofchamp);
+                               style,arsize1,colored,typeofchamp);
 
     if (newSegsUID == NULL)
     {
@@ -125,7 +128,7 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
         {
             FREE(style);
         }
-
+        endCurrentFigureDataWriting();
         return;
     }
 
@@ -141,9 +144,9 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
     clipState = 1;
     setGraphicObjectProperty(newSegsUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
 
-  /* Deactivated since it tells the renderer module that the object has changed */
+    /* Deactivated since it tells the renderer module that the object has changed */
 #if 0
-  forceRedraw(newSegs); /* update drawer */
+    forceRedraw(newSegs); /* update drawer */
 #endif
 
     /* Get segs bounding box */
@@ -184,34 +187,34 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
         switch (strflag[1])
         {
         case '0':
-          /* do not change data bounds */
-          break;
+            /* do not change data bounds */
+            break;
         case '1' : case '3' : case '5' : case '7':
-          /* Force data bounds=brect */
-          re_index_brect(brect,drect);
-          break;
+            /* Force data bounds=brect */
+            re_index_brect(brect,drect);
+            break;
         case '2' : case '4' : case '6' : case '8': case '9':
 
-          getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LOG_FLAG__, jni_bool, &piTmp);
-          logFlags[0] = iTmp;
-          getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LOG_FLAG__, jni_bool, &piTmp);
-          logFlags[1] = iTmp;
-          getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LOG_FLAG__, jni_bool, &piTmp);
-          logFlags[2] = iTmp;
-
-          /* Conversion required by compute_data_bounds2 */
-          textLogFlags[0] = getTextLogFlag(logFlags[0]);
-          textLogFlags[1] = getTextLogFlag(logFlags[1]);
-          textLogFlags[2] = getTextLogFlag(logFlags[2]);
-
-          /* Force data bounds to the x and y bounds */
-          compute_data_bounds2(0,'g',textLogFlags,xx,yy,nn1,nn2,drect);
-          break;
+            getGraphicObjectProperty(psubwinUID, __GO_X_AXIS_LOG_FLAG__, jni_bool, &piTmp);
+            logFlags[0] = iTmp;
+            getGraphicObjectProperty(psubwinUID, __GO_Y_AXIS_LOG_FLAG__, jni_bool, &piTmp);
+            logFlags[1] = iTmp;
+            getGraphicObjectProperty(psubwinUID, __GO_Z_AXIS_LOG_FLAG__, jni_bool, &piTmp);
+            logFlags[2] = iTmp;
+
+            /* Conversion required by compute_data_bounds2 */
+            textLogFlags[0] = getTextLogFlag(logFlags[0]);
+            textLogFlags[1] = getTextLogFlag(logFlags[1]);
+            textLogFlags[2] = getTextLogFlag(logFlags[2]);
+
+            /* Force data bounds to the x and y bounds */
+            compute_data_bounds2(0,'g',textLogFlags,xx,yy,nn1,nn2,drect);
+            break;
         }
 
         /* merge data bounds and drect */
         if (!firstPlot &&
-          (strflag[1] == '7' || strflag[1] == '8'|| strflag[1] == '9'))
+            (strflag[1] == '7' || strflag[1] == '8'|| strflag[1] == '9'))
         {
             double* dataBounds;
 
@@ -241,10 +244,10 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
     firstPlot = 0;
     setGraphicObjectProperty(psubwinUID, __GO_FIRST_PLOT__, &firstPlot, jni_bool, 1);
 
-  /*
-   * Deactivated since it tells the renderer module that the object has changed
-   * To be implemented
-   */
+    /*
+     * Deactivated since it tells the renderer module that the object has changed
+     * To be implemented
+     */
 #if 0
     if( bounds_changed || axes_properties_changed )
     {
@@ -252,25 +255,26 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
     }
 #endif
 
-  /*
-   * Deactivated since it involves drawing via the renderer module
-   */
+    /*
+     * Deactivated since it involves drawing via the renderer module
+     */
 #if 0
     sciDrawObj(sciGetCurrentFigure());
 #endif
 
+    endCurrentFigureDataWriting();
 }
 
 int C2F(champ)(double *x, double *y, double *fx, double *fy, int *n1, int *n2, char *strflag, double *brect, double *arfact, int lstr)
 {
-  champg("champ",0,x,y,fx,fy,n1,n2,strflag,brect,arfact,lstr);
-  return(0);
+    champg("champ",0,x,y,fx,fy,n1,n2,strflag,brect,arfact,lstr);
+    return(0);
 }
 
 int C2F(champ1)(double *x, double *y, double *fx, double *fy, int *n1, int *n2, char *strflag, double *brect, double *arfact, int lstr)
 {
-  champg("champ1",1,x,y,fx,fy,n1,n2,strflag,brect,arfact,lstr);
-  return(0);
+    champg("champ1",1,x,y,fx,fy,n1,n2,strflag,brect,arfact,lstr);
+    return(0);
 }
 /*----------------------------------------------------------------------------------*/
 
index 6294edc..9e27e0b 100644 (file)
@@ -167,6 +167,17 @@ void showPixmap(char *pFigureUID)
     sciDrawObj(pFigure);
   }
 #endif
+  static int iTrue = (int)TRUE;
+  static int iFalse = (int)FALSE;
+  int iPixmapFlag = 0;
+  int *piPixmapFlag = &iPixmapFlag;
+
+  getGraphicObjectProperty(pFigureUID, __GO_PIXMAP__, jni_bool, &piPixmapFlag);
+  if (iPixmapFlag)
+  {
+      setGraphicObjectProperty(pFigureUID, __GO_PIXMAP__, &iFalse, jni_bool, 1);
+      setGraphicObjectProperty(pFigureUID, __GO_PIXMAP__, &iTrue, jni_bool, 1);
+  }
 }
 /*---------------------------------------------------------------------------------*/
 void clearPixmap(sciPointObj * pFigure)
index b2e61e8..ecfd9ad 100644 (file)
@@ -42,7 +42,6 @@
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
-#include "CurrentFigure.h"
 #include "CurrentSubwin.h"
 #include "CurrentObject.h"
 
@@ -95,7 +94,6 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
             BOOL flagNax, int lstr1, int lstr2)
 {
     char *psubwinUID = NULL;
-    char *curFigureUID = NULL;
     int closeflag = 0;
     int jj = 0;
     long long *tabofhandles = NULL;
@@ -137,8 +135,8 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
 
 #if 0
     endGraphicDataWriting();
-    startFigureDataWriting(curFigure);
 #endif
+
     /*
      * Check if the auto_clear property is on and then erase everything
      * To be implemented
@@ -469,6 +467,7 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
 #if 0
     sciDrawObj(curFigure);
 #endif
+
     return (0);
 }
 
index d30e323..6767c4e 100644 (file)
@@ -29,6 +29,8 @@ import org.scilab.modules.gui.utils.Size;
 import org.scilab.modules.renderer.JoGLView.DrawerVisitor;
 
 import javax.media.opengl.GL;
+import javax.media.opengl.GLCapabilities;
+import javax.media.opengl.GLProfile;
 import javax.media.opengl.awt.GLCanvas;
 import javax.media.opengl.awt.GLJPanel;
 import javax.swing.JPanel;
@@ -123,8 +125,10 @@ public class SwingScilabCanvas extends JPanel implements SimpleCanvas {
                     }
                 });
         } else {
-            GLCanvas glCanvas = new GLCanvas();
-            drawableComponent = glCanvas;
+           GLCapabilities caps = new GLCapabilities(GLProfile.getDefault());
+           caps.setDoubleBuffered(true);
+            GLCanvas glCanvas = new GLCanvas(caps);
+           drawableComponent = glCanvas;
             glCanvas.setEnabled(true);
             add(glCanvas, PanelLayout.GL_CANVAS);
 
index b6c5fdc..fa1cb84 100644 (file)
@@ -746,6 +746,12 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
     @Override
     public void updateObject(String id, String property) {
         try {
+            if (property.isEmpty()) {
+                // just a redraw
+                redraw();
+                return;
+            }
+
             if (needUpdate(id, property)) {
                 GraphicController.getController().setProperty(id, GraphicObjectProperties.__GO_VALID__, true);
                 if (GraphicObjectProperties.__GO_COLORMAP__.equals(property) && figure.getIdentifier().equals(id)) {
@@ -766,7 +772,7 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
                     legendDrawer.update(id, property);
                     fecDrawer.update(id, property);
                 }
-                canvas.redraw();
+                redraw();
             }
         } catch (OutOfMemoryException e) {
             invalidate(GraphicController.getController().getObjectFromId(id), e);
@@ -775,6 +781,16 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
         }
     }
 
+
+    /**
+     * Redraw the canvas if necessary
+     */
+    private void redraw() {
+        if (figure.canDraw()) {
+            canvas.redraw();
+        }
+    }
+
     /**
      * Check if the given changed property make the figure out of date.
      * @param id the object updated
@@ -835,7 +851,7 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
             visitorMap.remove(id);
         }
 
-        canvas.redraw();
+        redraw();
     }
 
     /**
@@ -912,12 +928,12 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
         byte[] blackColor = {0x00, 0x00, 0x00, (byte) 0xFF};
 
         @Override
-        public Dimension getTextureSize() {
+            public Dimension getTextureSize() {
             return new Dimension(colorMap.getSize() + 2, 1);
         }
 
         @Override
-        public ByteBuffer getData() {
+            public ByteBuffer getData() {
             Double[] data = colorMap.getData();
             ByteBuffer buffer = ByteBuffer.allocate(4 * ((data.length / 3) + 2));
 
@@ -936,7 +952,7 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
         }
 
         @Override
-        public ByteBuffer getSubData(int x, int y, int width, int height) {
+            public ByteBuffer getSubData(int x, int y, int width, int height) {
             /*
              * For the moment, we presuppose that x and y are 0 and that
              * width is equal to the colormap's total size (with height == 1).
@@ -946,7 +962,7 @@ public class DrawerVisitor implements Visitor, Drawer, GraphicView {
         }
 
         @Override
-        public boolean isValid() {
+            public boolean isValid() {
             return true;
         }
 
index 757b887..f12bbbe 100644 (file)
@@ -167,11 +167,11 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
                        );
             }
 
-            @Override
-            public TextureDrawer.OriginPosition getOriginPosition() {
-                return TextureDrawer.OriginPosition.UPPER_LEFT;
-            }
-        });
+                @Override
+                public TextureDrawer.OriginPosition getOriginPosition() {
+                    return TextureDrawer.OriginPosition.UPPER_LEFT;
+                }
+            });
 
         return texture;
     }
@@ -193,21 +193,21 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
         Texture texture = textureManager.createTexture();
         texture.setDrawer(new TextureDrawer() {
 
-            @Override
-            public void draw(TextureDrawingTools drawingTools) {
-                drawingTools.draw(textEntity, 0, 0);
-            }
+                @Override
+                public void draw(TextureDrawingTools drawingTools) {
+                    drawingTools.draw(textEntity, 0, 0);
+                }
 
-            @Override
-            public Dimension getTextureSize() {
-                return textEntity.getSize();
-            }
+                @Override
+                public Dimension getTextureSize() {
+                    return textEntity.getSize();
+                }
 
-            @Override
-            public TextureDrawer.OriginPosition getOriginPosition() {
-                return TextureDrawer.OriginPosition.UPPER_LEFT;
-            }
-        });
+                @Override
+                public TextureDrawer.OriginPosition getOriginPosition() {
+                    return TextureDrawer.OriginPosition.UPPER_LEFT;
+                }
+            });
 
         return texture;
     }
@@ -218,18 +218,20 @@ class AxesRulerSpriteFactory implements RulerSpriteFactory {
      * @return the user defined {@see FormattedText} ticks label corresponding to the given value.
      */
     private FormattedText getTextAtValue(double value) {
-        Double[] locations = axisProperty.getTicksLocations();
-        int index = -1;
-        for (int i = 0 ; i < locations.length ; i++) {
-            if (locations[i] == value) {
-                index = i;
-                break;
+        synchronized(axisProperty) {
+            Double[] locations = axisProperty.getTicksLocations();
+            int index = -1;
+            for (int i = 0 ; i < locations.length ; i++) {
+                if (locations[i] == value) {
+                    index = i;
+                    break;
+                }
+            }
+            if (index == -1 || index >= axisProperty.getTicksLabels().size()) {
+                return null;
+            } else {
+                return axisProperty.getTicksLabels().get(index);
             }
-        }
-        if (index == -1 || index >= axisProperty.getTicksLabels().size()) {
-            return null;
-        } else {
-            return axisProperty.getTicksLabels().get(index);
         }
     }
 }