move buildobject functions to java 57/13457/7
Antoine ELIAS [Sun, 19 Jan 2014 15:37:45 +0000 (16:37 +0100)]
Change-Id: Ic9567b358b8c62ab6d157587fd7aaa2240526405

48 files changed:
scilab/modules/graphic_objects/Makefile.am
scilab/modules/graphic_objects/Makefile.in
scilab/modules/graphic_objects/includes/createGraphicObject.h
scilab/modules/graphic_objects/src/c/graphic_objects.vcxproj
scilab/modules/graphic_objects/src/c/graphic_objects.vcxproj.filters
scilab/modules/graphic_objects/src/cpp/createGraphicObject.cpp
scilab/modules/graphic_objects/src/cpp/createObjectData.cpp
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/builder/Builder.java [new file with mode: 0644]
scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/lighting/Light.java
scilab/modules/graphic_objects/src/jni/Builder.cpp [new file with mode: 0644]
scilab/modules/graphic_objects/src/jni/Builder.hxx [new file with mode: 0644]
scilab/modules/graphic_objects/src/jni/CallGraphicController.cpp
scilab/modules/graphic_objects/src/jni/CallGraphicController.hxx
scilab/modules/graphic_objects/src/jni/GraphicObjectBuilder.cpp
scilab/modules/graphic_objects/src/jni/GraphicObjectBuilder.hxx
scilab/modules/graphic_objects/src/jni/builder.giws.xml [new file with mode: 0644]
scilab/modules/graphics/Makefile.am
scilab/modules/graphics/Makefile.in
scilab/modules/graphics/graphics.vcxproj
scilab/modules/graphics/graphics.vcxproj.filters
scilab/modules/graphics/includes/BuildObjects.h
scilab/modules/graphics/includes/CloneObjects.h
scilab/modules/graphics/sci_gateway/c/sci_Legend.c
scilab/modules/graphics/sci_gateway/c/sci_delete.c
scilab/modules/graphics/sci_gateway/c/sci_glue.c
scilab/modules/graphics/sci_gateway/c/sci_light.c
scilab/modules/graphics/sci_gateway/c/sci_newaxes.c
scilab/modules/graphics/sci_gateway/c/sci_show_window.c
scilab/modules/graphics/sci_gateway/c/sci_xarcs.c
scilab/modules/graphics/sci_gateway/c/sci_xfarcs.c
scilab/modules/graphics/sci_gateway/c/sci_xname.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_zoom_rect.c
scilab/modules/graphics/src/c/BuildObjects.c
scilab/modules/graphics/src/c/Champ.c
scilab/modules/graphics/src/c/CloneObjects.c
scilab/modules/graphics/src/c/FeC.c
scilab/modules/graphics/src/c/Light.c [deleted file]
scilab/modules/graphics/src/c/Plo2dn.c
scilab/modules/graphics/src/c/StringBox.c
scilab/modules/graphics/src/c/getHandleProperty/get_current_axes_property.c
scilab/modules/graphics/src/c/getHandleProperty/get_current_figure_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_current_figure_property.c
scilab/modules/graphics/src/c/sciCall.c
scilab/modules/gui/sci_gateway/c/sci_uicontrol.c
scilab/modules/gui/sci_gateway/c/sci_uimenu.c
scilab/modules/gui/src/cpp/InitUIMenu.cpp

index 4bb2f38..c550e5e 100644 (file)
@@ -30,7 +30,8 @@ BUILT_SOURCES =       includes/graphicObjectsProperties.h
 #src/java/org/scilab/modules/graphic_objects/graphicObject/GraphicObjectProperties.java
 
 GRAPHIC_OBJECTS_JNI_SOURCES = src/jni/CallGraphicController.cpp \
-                              src/jni/GraphicObjectBuilder.cpp
+                              src/jni/GraphicObjectBuilder.cpp \
+                              src/jni/Builder.cpp                              
 
 GRAPHIC_OBJECTS_C_SOURCES = src/jni/DataLoader_wrap.c \
                                                        src/jni/ScilabNativeView_wrap.c \
@@ -78,7 +79,8 @@ GRAPHIC_OBJECTS_CXX_SOURCES =         src/cpp/createGraphicObject.cpp \
                                                                src/cpp/Texture.cpp \
                                                                src/cpp/NormalGenerator.cpp
 
-GIWS_WRAPPERS = src/jni/graphic_objects.giws.xml
+GIWS_WRAPPERS = src/jni/graphic_objects.giws.xml \
+                src/jni/builder.giws.xml
 
 if GIWS
 BUILT_SOURCES += giws
index 5f4ceca..f84954a 100644 (file)
@@ -189,7 +189,8 @@ am__objects_2 = src/jni/libscigraphic_objects_la-DataLoader_wrap.lo \
        src/jni/libscigraphic_objects_la-ObjectData_wrap.lo
 am__objects_3 =  \
        src/jni/libscigraphic_objects_la-CallGraphicController.lo \
-       src/jni/libscigraphic_objects_la-GraphicObjectBuilder.lo
+       src/jni/libscigraphic_objects_la-GraphicObjectBuilder.lo \
+       src/jni/libscigraphic_objects_la-Builder.lo
 am__objects_4 =  \
        src/cpp/libscigraphic_objects_la-createGraphicObject.lo \
        src/cpp/libscigraphic_objects_la-getGraphicObjectProperty.lo \
@@ -683,7 +684,8 @@ BUILT_SOURCES = includes/graphicObjectsProperties.h $(am__append_2) \
 #This file is also generated, but can not be listed to prevent GCJ call.
 #src/java/org/scilab/modules/graphic_objects/graphicObject/GraphicObjectProperties.java
 GRAPHIC_OBJECTS_JNI_SOURCES = src/jni/CallGraphicController.cpp \
-                              src/jni/GraphicObjectBuilder.cpp
+                              src/jni/GraphicObjectBuilder.cpp \
+                              src/jni/Builder.cpp                              
 
 GRAPHIC_OBJECTS_C_SOURCES = src/jni/DataLoader_wrap.c \
                                                        src/jni/ScilabNativeView_wrap.c \
@@ -731,7 +733,9 @@ GRAPHIC_OBJECTS_CXX_SOURCES = src/cpp/createGraphicObject.cpp \
                                                                src/cpp/Texture.cpp \
                                                                src/cpp/NormalGenerator.cpp
 
-GIWS_WRAPPERS = src/jni/graphic_objects.giws.xml
+GIWS_WRAPPERS = src/jni/graphic_objects.giws.xml \
+                src/jni/builder.giws.xml
+
 libscigraphic_objects_la_CPPFLAGS = $(JAVA_JNI_INCLUDE) \
                        -I$(srcdir)/includes/ \
                        -I$(srcdir)/src/cpp/ \
@@ -877,6 +881,8 @@ src/jni/libscigraphic_objects_la-CallGraphicController.lo:  \
        src/jni/$(am__dirstamp) src/jni/$(DEPDIR)/$(am__dirstamp)
 src/jni/libscigraphic_objects_la-GraphicObjectBuilder.lo:  \
        src/jni/$(am__dirstamp) src/jni/$(DEPDIR)/$(am__dirstamp)
+src/jni/libscigraphic_objects_la-Builder.lo: src/jni/$(am__dirstamp) \
+       src/jni/$(DEPDIR)/$(am__dirstamp)
 src/cpp/$(am__dirstamp):
        @$(MKDIR_P) src/cpp
        @: > src/cpp/$(am__dirstamp)
@@ -1016,6 +1022,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libscigraphic_objects_la-getGraphicObjectProperty.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libscigraphic_objects_la-pickSurface.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/$(DEPDIR)/libscigraphic_objects_la-setGraphicObjectProperty.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/jni/$(DEPDIR)/libscigraphic_objects_la-Builder.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/jni/$(DEPDIR)/libscigraphic_objects_la-CallGraphicController.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/jni/$(DEPDIR)/libscigraphic_objects_la-DataLoader_wrap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/jni/$(DEPDIR)/libscigraphic_objects_la-GraphicObjectBuilder.Plo@am__quote@
@@ -1129,6 +1136,13 @@ src/jni/libscigraphic_objects_la-GraphicObjectBuilder.lo: src/jni/GraphicObjectB
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphic_objects_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/jni/libscigraphic_objects_la-GraphicObjectBuilder.lo `test -f 'src/jni/GraphicObjectBuilder.cpp' || echo '$(srcdir)/'`src/jni/GraphicObjectBuilder.cpp
 
+src/jni/libscigraphic_objects_la-Builder.lo: src/jni/Builder.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphic_objects_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/jni/libscigraphic_objects_la-Builder.lo -MD -MP -MF src/jni/$(DEPDIR)/libscigraphic_objects_la-Builder.Tpo -c -o src/jni/libscigraphic_objects_la-Builder.lo `test -f 'src/jni/Builder.cpp' || echo '$(srcdir)/'`src/jni/Builder.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/jni/$(DEPDIR)/libscigraphic_objects_la-Builder.Tpo src/jni/$(DEPDIR)/libscigraphic_objects_la-Builder.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/jni/Builder.cpp' object='src/jni/libscigraphic_objects_la-Builder.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphic_objects_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/jni/libscigraphic_objects_la-Builder.lo `test -f 'src/jni/Builder.cpp' || echo '$(srcdir)/'`src/jni/Builder.cpp
+
 src/cpp/libscigraphic_objects_la-createGraphicObject.lo: src/cpp/createGraphicObject.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphic_objects_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/libscigraphic_objects_la-createGraphicObject.lo -MD -MP -MF src/cpp/$(DEPDIR)/libscigraphic_objects_la-createGraphicObject.Tpo -c -o src/cpp/libscigraphic_objects_la-createGraphicObject.lo `test -f 'src/cpp/createGraphicObject.cpp' || echo '$(srcdir)/'`src/cpp/createGraphicObject.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/$(DEPDIR)/libscigraphic_objects_la-createGraphicObject.Tpo src/cpp/$(DEPDIR)/libscigraphic_objects_la-createGraphicObject.Plo
index bf827ed..eda5468 100644 (file)
@@ -14,6 +14,7 @@
 #define __CREATEGRAPHICOBJECT_H__
 
 #include "dynlib_graphic_objects.h"
+#include "BOOL.h"
 
 /*
 ** Ask Controller to create a graphic object
@@ -39,6 +40,34 @@ GRAPHIC_OBJECTS_IMPEXP int createDataObject(int iId, int _iType);
 */
 GRAPHIC_OBJECTS_IMPEXP void buildFigureMenuBar(int iFigureId);
 
-GRAPHIC_OBJECTS_IMPEXP int constructRectangles(int iParentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline);
+GRAPHIC_OBJECTS_IMPEXP int cloneGraphicContext(int iSourceIdentifier, int iDestIdentifier);
+GRAPHIC_OBJECTS_IMPEXP int cloneFontContext(int iSourceIdentifier, int iDestIdentifier);
+
+GRAPHIC_OBJECTS_IMPEXP BOOL isAxesRedrawing(int iSubWin);
+GRAPHIC_OBJECTS_IMPEXP void cloneMenus(int iModel, int iNewParent);
+GRAPHIC_OBJECTS_IMPEXP int cloneAxesModel(int iParent);
+
+GRAPHIC_OBJECTS_IMPEXP int createHiddenLabel(int iParent);
+GRAPHIC_OBJECTS_IMPEXP int createLabel(int iParent, int type);
+GRAPHIC_OBJECTS_IMPEXP int createNewFigureWithAxes();
+GRAPHIC_OBJECTS_IMPEXP int createSubWin(int iParent);
+GRAPHIC_OBJECTS_IMPEXP int createText(int iParentsubwinUID, char** text, int nbRow, int nbCol, double x, double y, BOOL autoSize, double* userSize, int  centerPos, int *foreground, int *background, BOOL isboxed, BOOL isline, BOOL isfilled, int align);
+GRAPHIC_OBJECTS_IMPEXP int createRect(int iParentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline);
+GRAPHIC_OBJECTS_IMPEXP int createArc(int parent, double x, double y, double h, double w, double start, double end, int* foreground, int* background, BOOL filled, BOOL line);
+GRAPHIC_OBJECTS_IMPEXP int createAxis(int parent, int dir, int tics, double* vx, int nx, double* vy, int ny, int subint, char* format, int fontSize, int textColor, int ticsColor, BOOL seg);
+GRAPHIC_OBJECTS_IMPEXP int createCompound(int parent, int* children, int childrenCount);
+GRAPHIC_OBJECTS_IMPEXP int createCompoundSeq(int parent, int childrenCount);
+GRAPHIC_OBJECTS_IMPEXP int createFec(int parent, double* zminmax, int zminmaxsize, int* colminmax, int colminmaxSize, int* colout, int coloutSize, BOOL with_mesh);
+GRAPHIC_OBJECTS_IMPEXP int createGrayplot(int parent, int type, double* pvecx, int pvecxSize, int n1, int n2);
+GRAPHIC_OBJECTS_IMPEXP int createPolyline(int parent, BOOL closed, int plot, int *foreground, int* background, int backgroundSize,
+        int* mark_style, int* mark_foreground, int* mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterp);
+GRAPHIC_OBJECTS_IMPEXP int createLegend(int parent, char** text, int iTextSize, int* handles, int iHandlesSize);
+GRAPHIC_OBJECTS_IMPEXP int createSegs(int parent, double* vx, int vxSize, double* vy, int vySize, double* vz, int vzSize, int* style, int styleSize, double arsize);
+GRAPHIC_OBJECTS_IMPEXP int createChamp(int parent, double* vx, int vxSize, double* vy, int vySize, double* vfx, int vfxSize, double* vfy, int vfySize, double arsize, BOOL typeofchamp);
+GRAPHIC_OBJECTS_IMPEXP int createSurface(int parent, int typeof3d, int colorFlag, int colorMode);
+GRAPHIC_OBJECTS_IMPEXP int createLight(int parent, int type, BOOL visible, double* pos, double* dir, double* ambient, double* diffuse, double* specular);
+
+GRAPHIC_OBJECTS_IMPEXP void initSubWinTo3d(int subwin, char* legend, int* flag, double alpha, double theta,
+        double* ebox, double* x, int xSize, double* y, int ySize, double* z, int zSize);
 
 #endif /* !__CREATEGRAPHICOBJECT_H__ */
index d72836e..cb33659 100644 (file)
     <ClCompile Include="..\cpp\ScilabView.cpp" />
     <ClCompile Include="..\cpp\Texture.cpp" />
     <ClCompile Include="..\cpp\Triangulator.cpp" />
+    <ClCompile Include="..\jni\Builder.cpp" />
     <ClCompile Include="..\jni\CallGraphicController.cpp" />
     <ClCompile Include="..\cpp\ColorComputer.cpp" />
     <ClCompile Include="..\cpp\createGraphicObject.cpp" />
     <ClInclude Include="..\..\includes\setGraphicObjectProperty.h" />
     <ClInclude Include="..\..\includes\Texture.hxx" />
     <ClInclude Include="..\..\includes\Triangulator.hxx" />
+    <ClInclude Include="..\jni\Builder.hxx" />
     <ClInclude Include="..\jni\CallGraphicController.hxx" />
     <ClInclude Include="..\..\includes\createGraphicObject.h" />
     <ClInclude Include="..\..\includes\Data3D.hxx" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
index d5430b0..1e1c1f4 100644 (file)
     <ClCompile Include="..\cpp\Texture.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="..\jni\Builder.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="..\jni\CallGraphicController.hxx">
     <ClInclude Include="..\..\includes\Texture.hxx">
       <Filter>Header Files</Filter>
     </ClInclude>
-    <ClInclude Include="..\..\includes\DataLoader.hxx">
+    <ClInclude Include="..\jni\Builder.hxx">
       <Filter>Header Files</Filter>
     </ClInclude>
   </ItemGroup>
index e83fe5c..3793997 100644 (file)
@@ -17,9 +17,10 @@ extern "C"
 }
 
 #include "CallGraphicController.hxx"
-#include "GraphicObjectBuilder.hxx"
+#include "Builder.hxx"
 #include "DataController.hxx"
 
+using namespace org_scilab_modules_graphic_objects_builder;
 using namespace org_scilab_modules_graphic_objects;
 
 int createGraphicObject(int _iType)
@@ -42,15 +43,149 @@ void buildFigureMenuBar(int _sFigureId)
     CallGraphicController::buildFigureMenuBar(getScilabJavaVM(), _sFigureId);
 }
 
-int constructRectangles(int iParentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline)
+int createRect(int iParentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline)
 {
-    try
-    {
-        return GraphicObjectBuilder::constructRectangles(getScilabJavaVM(), iParentsubwinUID, x, y, height, width, foreground, background, isfilled, isline);
-    }
-    catch (std::exception & e)
-    {
-        printf("exception: %s\n", e.what());
-        return 0;
-    }
+    return Builder::createRect(getScilabJavaVM(), iParentsubwinUID, x, y, height, width, foreground, background, isfilled, isline);
+}
+
+int cloneGraphicContext(int sourceIdentifier, int destIdentifier)
+{
+    return Builder::cloneGraphicContext(getScilabJavaVM(), sourceIdentifier, destIdentifier);
+}
+
+int cloneFontContext(int sourceIdentifier, int destIdentifier)
+{
+    return Builder::cloneFontContext(getScilabJavaVM(), sourceIdentifier, destIdentifier);
+}
+
+int createHiddenLabel(int parent)
+{
+    return Builder::createHiddenLabel(getScilabJavaVM(), parent);
+}
+
+BOOL isAxesRedrawing(int subWin)
+{
+    return booltoBOOL(Builder::isAxesRedrawing(getScilabJavaVM(), subWin));
+}
+
+int createLabel(int parent, int type)
+{
+    return Builder::createLabel(getScilabJavaVM(), parent, type);
+}
+
+int createNewFigureWithAxes()
+{
+    return Builder::createNewFigureWithAxes(getScilabJavaVM());
+}
+
+void cloneMenus(int model, int newParent)
+{
+    Builder::cloneMenus(getScilabJavaVM(), model, newParent);
+}
+
+int cloneAxesModel(int parent)
+{
+    return Builder::cloneAxesModel(getScilabJavaVM(), parent);
+}
+
+int createSubWin(int parent)
+{
+    return Builder::createSubWin(getScilabJavaVM(), parent);
+}
+
+int createText(int iParentsubwinUID, char** text, int nbRow, int nbCol, double x, double y, BOOL autoSize, double* userSize, int  centerPos, int *foreground, int *background, BOOL isboxed, BOOL isline, BOOL isfilled, int align)
+{
+    return Builder::createText(getScilabJavaVM(), iParentsubwinUID, text, nbRow * nbCol, nbRow, nbCol, x, y, autoSize == TRUE,
+                               userSize, userSize == NULL ? 0 : 2,
+                               centerPos,
+                               foreground != NULL ? *foreground : 0, foreground != NULL,
+                               background != NULL ? *background : 0, background != NULL,
+                               isboxed == TRUE, isline == TRUE, isfilled == TRUE, align);
+}
+
+int createArc(int parent, double x, double y, double h, double w, double start, double end, int* foreground, int* background, BOOL filled, BOOL line)
+{
+    return Builder::createArc(getScilabJavaVM(), parent, x, y, h, w, start, end,
+                              foreground != NULL ? *foreground : 0, foreground != NULL,
+                              background != NULL ? *background : 0, background != NULL,
+                              filled == TRUE, line == TRUE);
+}
+
+int createAxis(int parent, int dir, int tics, double* vx, int nx, double* vy, int ny, int subint, char* format, int fontSize, int textColor, int ticsColor, BOOL seg)
+{
+    return Builder::createAxis(getScilabJavaVM(), parent, dir, tics, vx, nx, vy, ny, subint, format, fontSize, textColor, ticsColor, seg == TRUE);
+}
+
+int createCompound(int parent, int* children, int childrenCount)
+{
+    return Builder::createCompound(getScilabJavaVM(), parent, children, childrenCount);
+}
+
+int createCompoundSeq(int parent, int childrenCount)
+{
+    return Builder::createCompoundSeq(getScilabJavaVM(), parent, childrenCount);
+}
+
+int createFec(int parent, double* zminmax, int zminmaxsize, int* colminmax, int colminmaxSize, int* colout, int coloutSize, BOOL with_mesh)
+{
+    return Builder::createFec(getScilabJavaVM(), parent, zminmax, zminmaxsize, colminmax, colminmaxSize, colout, coloutSize, with_mesh == TRUE);
+}
+
+int createGrayplot(int parent, int type, double* pvecx, int pvecxSize, int n1, int n2)
+{
+    return Builder::createGrayplot(getScilabJavaVM(), parent, type, pvecx, pvecxSize, n1, n2);
+}
+
+int createPolyline(int parent, BOOL closed, int plot, int* foreground, int* background, int backgroundSize,
+                   int* mark_style, int* mark_foreground, int* mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterp)
+{
+    bool isForeground       = foreground != NULL;
+    bool isMarkStyle        = mark_style != NULL;
+    bool isMarkForeground   = mark_foreground != NULL;
+    bool isMarkBackground   = mark_background != NULL;
+
+    return Builder::createPolyline(getScilabJavaVM(), parent, closed == TRUE, plot,
+                                   isForeground ? *foreground : 0, isForeground,
+                                   background, backgroundSize,
+                                   isMarkStyle ? *mark_style : 0, isMarkStyle,
+                                   isMarkForeground ? *mark_foreground : 0, isMarkForeground,
+                                   isMarkBackground ? *mark_background : 0, isMarkBackground,
+                                   isline == TRUE, isfilled == TRUE, ismark == TRUE, isinterp == TRUE);
+}
+
+int createLegend(int parent, char** text, int iTextSize, int* handles, int iHandlesSize)
+{
+    return Builder::createLegend(getScilabJavaVM(), parent, text, iTextSize, handles, iHandlesSize);
+}
+
+int createSegs(int parent, double* vx, int vxSize, double* vy, int vySize, double* vz, int vzSize, int* style, int styleSize, double arsize)
+{
+    return Builder::createSegs(getScilabJavaVM(), parent, vx, vxSize, vy, vySize, vz, vzSize, vzSize != 0, style, styleSize, arsize);
+}
+
+int createChamp(int parent, double* vx, int vxSize, double* vy, int vySize, double* vfx, int vfxSize, double* vfy, int vfySize, double arsize, BOOL typeofchamp)
+{
+    return Builder::createChamp(getScilabJavaVM(), parent, vx, vxSize, vy, vySize, vfx, vfxSize, vfy, vfySize, arsize, typeofchamp == TRUE);
+}
+
+int createSurface(int parent, int typeof3d, int colorFlag, int colorMode)
+{
+    return Builder::createSurface(getScilabJavaVM(), parent, typeof3d, colorFlag, colorMode);
+}
+
+void initSubWinTo3d(int subwin, char* legend, int* flag, double alpha, double theta,
+                    double* ebox, double* x, int xSize, double* y, int ySize, double* z, int zSize)
+{
+    Builder::initSubWinTo3d(getScilabJavaVM(), subwin, legend, legend != NULL, flag, 3, alpha, theta,
+                            ebox, 6, x, xSize, y, ySize, z, zSize);
+}
+
+int createLight(int parent, int type, BOOL visible, double* pos, double* dir, double* ambient, double* diffuse, double* specular)
+{
+    return Builder::createLight(getScilabJavaVM(), parent, type, visible == TRUE,
+                                pos, pos == NULL ? 0 : 3,
+                                dir, dir == NULL ? 0 : 3,
+                                ambient, ambient == NULL ? 0 : 3,
+                                diffuse, diffuse == NULL ? 0 : 3,
+                                specular, specular == NULL ? 0 : 3);
 }
index ae17373..c200dd2 100644 (file)
@@ -67,7 +67,7 @@ int createObject3dData(int obj, int newObj, int type)
         getGraphicObjectProperty(obj, __GO_DATA_MODEL_NUM_GONS__, jni_int, (void**) &png);
         getGraphicObjectProperty(obj, __GO_DATA_MODEL_NUM_VERTICES_PER_GON__, jni_int, (void**) &pnvg);
         getGraphicObjectProperty(obj, __GO_DATA_MODEL_NUM_COLORS__, jni_int, (void**)&pNumColors);
-        getGraphicObjectProperty(obj, __GO_DATA_MODEL_COLORS__, jni_double_vector, (void**)&pNumColors);
+        getGraphicObjectProperty(obj, __GO_DATA_MODEL_COLORS__, jni_double_vector, (void**)&Colors);
 
         numElementsArray[0] = numElementsArray[1] = numElementsArray[2] = ng * nvg;
 
diff --git a/scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/builder/Builder.java b/scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/builder/Builder.java
new file mode 100644 (file)
index 0000000..b461529
--- /dev/null
@@ -0,0 +1,1142 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
+ * Copyright (C) 2013 - Scilab Enterprises - Antoine ELIAS
+ *
+ * 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.1-en.txt
+ *
+ */
+
+package org.scilab.modules.graphic_objects.builder;
+
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import org.scilab.modules.graphic_objects.ScilabNativeView;
+import org.scilab.modules.graphic_objects.arc.Arc;
+import org.scilab.modules.graphic_objects.axes.Axes;
+import org.scilab.modules.graphic_objects.axis.Axis;
+import org.scilab.modules.graphic_objects.fec.Fec;
+import org.scilab.modules.graphic_objects.figure.Figure;
+import org.scilab.modules.graphic_objects.graphicController.GraphicController;
+import org.scilab.modules.graphic_objects.graphicModel.GraphicModel;
+import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
+import org.scilab.modules.graphic_objects.graphicObject.GraphicObject.Type;
+import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
+import org.scilab.modules.graphic_objects.imageplot.Imageplot;
+import org.scilab.modules.graphic_objects.label.Label;
+import org.scilab.modules.graphic_objects.legend.Legend;
+import org.scilab.modules.graphic_objects.lighting.Light;
+import org.scilab.modules.graphic_objects.lighting.Light.LightType;
+import org.scilab.modules.graphic_objects.polyline.Polyline;
+import org.scilab.modules.graphic_objects.rectangle.Rectangle;
+import org.scilab.modules.graphic_objects.surface.Surface;
+import org.scilab.modules.graphic_objects.textObject.Font;
+import org.scilab.modules.graphic_objects.textObject.Text;
+import org.scilab.modules.graphic_objects.vectfield.Champ;
+import org.scilab.modules.graphic_objects.vectfield.Segs;
+
+public final class Builder {
+    public final static int createRect(int parentSubwin, double x, double y,
+                                       double height, double width, int foreground,
+                                       int background, int isfilled, int isline) {
+        GraphicController controller = GraphicController.getController();
+        Axes axes = (Axes)controller.getObjectFromId(parentSubwin);
+
+        if (height < 0 || width < 0) {
+            return 0;
+        }
+
+        Integer iRect = controller.askObject(Type.RECTANGLE);
+
+        /*
+         * Sets the rectangle's parent in order to initialize the former's Contoured properties
+         * with the latter's values (cloneGraphicContext call below)
+         */
+
+        Rectangle rect = (Rectangle) controller.getObjectFromId(iRect);
+        rect.setUpperLeftPoint(new Double[] {x, y, 0.0});
+        rect.setHeight(height);
+        rect.setWidth(width);
+
+        rect.setVisible(axes.getVisible());
+
+        /* Clip state and region */
+        /* To be checked for consistency */
+
+        rect.setClipBox(axes.getClipBox());
+        rect.setClipBoxSet(axes.getClipBoxSet());
+        rect.setClipState(axes.getClipState());
+        rect.setMarkMode(axes.getMarkMode());
+
+        /*
+         * Initializes the contour properties (background, foreground, etc)
+         * to the default values (those of the parent Axes).
+         */
+        cloneGraphicContext(parentSubwin, iRect);
+
+        /* Contour settings */
+        rect.setLineMode(isline == 1);
+        rect.setFillMode(isfilled == 1);
+
+        if (foreground != -1) {
+            rect.setLineColor(foreground);
+        }
+
+        if (background != -1) {
+            rect.setBackground(background);
+        }
+
+        controller.objectCreated(iRect);
+
+        /*
+         * Sets the Axes as the rectangle's parent and adds the rectangle to
+         * its parent's list of children.
+         */
+        //setGraphicObjectRelationship(pparentsubwinUID, pobjUID);
+
+        return iRect;
+    }
+
+    public static int cloneGraphicContext(int sourceIdentifier, int destIdentifier) {
+        GraphicController controller = GraphicController.getController();
+        Boolean lineMode = false;
+        Integer foreground = 0;
+        Integer lineStyle = 0;
+        Integer background = 0;
+        Integer markForeground = 0;
+        Integer markBackground = 0;
+        Integer markStyle = 0;
+        Integer markSize = 0;
+        Integer markSizeUnit = 0;
+        Double lineThickness = 0.;
+
+        /*
+         * All these properties are passed by value thus do not care to release them
+         * and do not call releaseGraphicObjectProperty on purpose.
+         */
+
+        lineMode = (Boolean) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_LINE_MODE__);
+        foreground = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_LINE_COLOR__);
+        lineThickness = (Double) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_LINE_THICKNESS__);
+        lineStyle = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_LINE_STYLE__);
+
+        background = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_BACKGROUND__);
+
+        markForeground = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_MARK_FOREGROUND__);
+
+        markBackground = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_MARK_BACKGROUND__);
+
+        markStyle = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_MARK_STYLE__);
+
+        markSize = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_MARK_SIZE__);
+
+        markSizeUnit = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_MARK_SIZE_UNIT__);
+
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_LINE_MODE__, lineMode);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_LINE_COLOR__, foreground);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_LINE_THICKNESS__, lineThickness);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_LINE_STYLE__, lineStyle);
+
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_BACKGROUND__, background);
+
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_MARK_FOREGROUND__, markForeground);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_MARK_BACKGROUND__, markBackground);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_MARK_STYLE__, markStyle);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_MARK_SIZE__, markSize);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_MARK_SIZE_UNIT__, markSizeUnit);
+
+        return 0;
+    }
+
+    public static int cloneFontContext(int sourceIdentifier, int destIdentifier) {
+        GraphicController controller = GraphicController.getController();
+
+        Integer fontColor = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_FONT_COLOR__);
+        Integer fontStyle = (Integer) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_FONT_STYLE__);
+        Double fontSize = (Double) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_FONT_SIZE__);
+        Boolean fontFractional = (Boolean) controller.getProperty(sourceIdentifier, GraphicObjectProperties.__GO_FONT_FRACTIONAL__);
+
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_FONT_COLOR__, fontColor);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_FONT_STYLE__, fontStyle);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_FONT_SIZE__, fontSize);
+        controller.setProperty(destIdentifier, GraphicObjectProperties.__GO_FONT_FRACTIONAL__, fontFractional);
+
+        return 0;
+    }
+
+    public static int createHiddenLabel(int parent) {
+
+        GraphicController controller = GraphicController.getController();
+
+        Integer iLabel = controller.askObject(Type.LABEL);
+        Label label = (Label) controller.getObjectFromId(iLabel);
+
+        //Hide Label as they are non explicit children
+        label.setHidden(true);
+        label.setAutoPosition(true);
+        label.setAutoRotation(true);
+
+        cloneGraphicContext(parent, iLabel);
+        cloneFontContext(parent, iLabel);
+        controller.objectCreated(iLabel);
+
+        // Sets the label's parent
+        controller.setGraphicObjectRelationship(parent, iLabel);
+
+        return iLabel;
+    }
+
+    public static void initSubWinBounds(int subWin) {
+        GraphicController controller = GraphicController.getController();
+
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_X_AXIS_LOG_FLAG__, false);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_Y_AXIS_LOG_FLAG__, false);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_Z_AXIS_LOG_FLAG__, false);
+    }
+
+    public static void reinitSubWin(int subWin) {
+        GraphicController controller = GraphicController.getController();
+        Integer label = 0;
+
+        for (Integer childId : (Integer[]) controller.getProperty(subWin, GraphicObjectProperties.__GO_CHILDREN__)) {
+            GraphicModel.getModel().deleteObject(childId);
+        }
+
+        label = createHiddenLabel(subWin);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_TITLE__, label);
+
+        label = createHiddenLabel(subWin);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_X_AXIS_LABEL__, label);
+
+        label = createHiddenLabel(subWin);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__, label);
+
+        label = createHiddenLabel(subWin);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__, label);
+
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_X_AXIS_LOCATION__, 0);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_Y_AXIS_LOCATION__, 4);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_VISIBLE__, true);
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_FIRST_PLOT__, true);
+
+        Integer axesModel = GraphicModel.getAxesModel().getIdentifier();
+        Axes axes = (Axes) controller.getObjectFromId(axesModel);
+
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_VIEW__, axes.getView());
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_ROTATION_ANGLES__, axes.getRotationAngles());
+        controller.setProperty(subWin, GraphicObjectProperties.__GO_ROTATION_ANGLES_3D__, axes.getRotationAngles3d());
+    }
+
+    public static boolean isAxesRedrawing(int subWin) {
+        GraphicController controller = GraphicController.getController();
+        Axes axes = (Axes)controller.getObjectFromId(subWin);
+
+        if (axes.getAutoClear()) {
+            reinitSubWin(subWin);
+            return true;
+        }
+        return false;
+    }
+
+    public static int createLabel(int parent, int type) {
+        GraphicController controller = GraphicController.getController();
+        Double[] position = new Double[3];
+        position[0] = 1.0;
+        position[1] = 1.0;
+        position[2] = 1.0;
+
+        //check parent type
+        Integer parentType = (Integer) controller.getProperty(parent, GraphicObjectProperties.__GO_TYPE__);
+        if (parentType != GraphicObjectProperties.__GO_AXES__) {
+            return 1;
+        }
+
+        //get axes model
+        Integer axesModel = GraphicModel.getAxesModel().getIdentifier();
+
+        //get type label from axes model
+        Integer labelSource = (Integer) controller.getProperty(axesModel, type);
+
+        //clone label
+        Integer newLabel = controller.cloneObject(labelSource);
+        controller.setProperty(newLabel, GraphicObjectProperties.__GO_POSITION__, position);
+        // Auto position must be reset as setting the position has set it to false
+        Boolean autoPosition = (Boolean ) controller.getProperty(labelSource, GraphicObjectProperties.__GO_AUTO_POSITION__);
+        controller.setProperty(newLabel, GraphicObjectProperties.__GO_AUTO_POSITION__, autoPosition);
+
+        // Set relation between newLabel and parent
+        controller.setProperty(parent, type, newLabel);
+        controller.setGraphicObjectRelationship(parent, newLabel);
+        return 0;
+    }
+
+    public final static int createFigureFromModel() {
+        GraphicController controller = GraphicController.getController();
+        return controller.cloneObject(GraphicModel.getFigureModel().getIdentifier());
+    }
+
+    public final static int cloneAxesModel(int parent) {
+        GraphicController controller = GraphicController.getController();
+
+        Integer newAxes = controller.cloneObject(GraphicModel.getAxesModel().getIdentifier());
+        createLabel(newAxes, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
+        createLabel(newAxes, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
+        createLabel(newAxes, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
+        createLabel(newAxes, GraphicObjectProperties.__GO_TITLE__);
+
+        controller.setGraphicObjectRelationship(parent, newAxes);
+        controller.setProperty(parent, GraphicObjectProperties.__GO_SELECTED_CHILD__, newAxes);
+
+        ScilabNativeView.ScilabNativeView__setCurrentSubWin(newAxes);
+        ScilabNativeView.ScilabNativeView__setCurrentObject(newAxes);
+        return newAxes;
+    }
+
+    public final static void cloneMenus(int iModel, int iParent) {
+        GraphicController controller = GraphicController.getController();
+        GraphicObject model = controller.getObjectFromId(iModel);
+
+        Integer[] children = model.getChildren();
+
+        for (int i = children.length - 1 ; i >= 0 ; i--) {
+            GraphicObject child = controller.getObjectFromId(children[i]);
+            if (child.getType() == GraphicObjectProperties.__GO_UIMENU__) {
+                Integer newMenu = controller.cloneObject(children[i]);
+                controller.setGraphicObjectRelationship(iParent, newMenu);
+
+                cloneMenus(children[i], newMenu);
+            }
+        }
+    }
+
+    public final static int createNewFigureWithAxes() {
+        GraphicController controller = GraphicController.getController();
+        Integer figModel  = GraphicModel.getFigureModel().getIdentifier();
+
+        //clone default figure
+        Integer newFigure = createFigureFromModel();
+
+        //Clone the default menus
+        cloneMenus(figModel, newFigure);
+
+        //set ID to 0
+        controller.setProperty(newFigure, GraphicObjectProperties.__GO_ID__, 0);
+
+        //clone default axes
+        cloneAxesModel(newFigure);
+        ScilabNativeView.ScilabNativeView__setCurrentFigure(newFigure);
+
+        //Force axes size after window creation
+        Integer[] figureSize = (Integer[]) controller.getProperty(figModel, GraphicObjectProperties.__GO_SIZE__);
+        controller.setProperty(newFigure, GraphicObjectProperties.__GO_SIZE__, figureSize);
+        Integer[] axesSize = (Integer[]) controller.getProperty(figModel, GraphicObjectProperties.__GO_AXES_SIZE__);
+        controller.setProperty(newFigure, GraphicObjectProperties.__GO_AXES_SIZE__, axesSize);
+
+        controller.setProperty(newFigure, GraphicObjectProperties.__GO_VALID__, true);
+
+
+        return newFigure;
+    }
+
+    public final static int createSubWin(int parentFigure) {
+        GraphicController controller = GraphicController.getController();
+        GraphicObject parent = controller.getObjectFromId(parentFigure);
+        if (parent.getType() != GraphicObjectProperties.__GO_FIGURE__) {
+            return 0;
+        }
+
+        return cloneAxesModel(parentFigure);
+    }
+
+    public final static int createText(int iParentsubwinUID, String[] str, int nbRow, int nbCol,
+                                       double x, double y, boolean autoSize, double[] userSize, int centerPos,
+                                       int foreground, boolean isForeground, int background, boolean isBackground,
+                                       boolean isBoxed, boolean isLine,
+                                       boolean isFilled, int align) {
+
+        GraphicController controller = GraphicController.getController();
+        int iText = controller.askObject(Type.TEXT);
+
+        Axes axes = (Axes) controller.getObjectFromId(iParentsubwinUID);
+        Text text = (Text) controller.getObjectFromId(iText);
+
+        //clip
+        text.setClipBox(axes.getClipBox());
+        text.setClipBoxSet(axes.getClipBoxSet());
+        text.setClipState(axes.getClipState());
+
+        //text
+        Integer[] dimensions = new Integer[2];
+        dimensions[0] = nbRow;
+        dimensions[1] = nbCol;
+        text.setTextArrayDimensions(dimensions);
+        text.setTextStrings(str);
+
+        //position
+        Double[] position = new Double[3];
+        position[0] = x;
+        position[1] = y;
+        position[2] = 0.0;
+        text.setPosition(position);
+
+        //test box
+        Double[] setUserSize = new Double[2];
+        text.setTextBoxMode(centerPos);
+        text.setAutoDimensioning(autoSize);
+
+        if (autoSize == false || centerPos != 0) {
+            setUserSize[0] = userSize[0];
+            setUserSize[1] = userSize[1];
+        } else {
+            setUserSize[0] = 0.0;
+            setUserSize[1] = 0.0;
+        }
+        text.setTextBox(setUserSize);
+
+        int alignment = align - 1;
+        if (alignment < 0 || alignment > 2) {
+            alignment = 0;
+        }
+
+        text.setAlignment(alignment);
+
+        cloneGraphicContext(iParentsubwinUID, iText);
+        cloneFontContext(iParentsubwinUID, iText);
+
+        text.setBox(isBoxed);
+        text.setLineMode(isLine);
+        text.setFillMode(isFilled);
+
+        if (isForeground) {
+            text.setLineColor(foreground);
+        }
+
+        if (isBackground) {
+            text.setBackground(background);
+        }
+
+        text.setVisible(axes.getVisible());
+        controller.objectCreated(iText);
+        return iText;
+    }
+
+    public final static int createArc(int parent, double x, double y, double h, double w,
+                                      double startAngle, double endAngle,
+                                      int foreground, boolean isForeground, int background, boolean isBackground,
+                                      boolean filled, boolean line) {
+
+        GraphicController controller = GraphicController.getController();
+        int iArc = controller.askObject(Type.ARC);
+
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+        Arc arc = (Arc) controller.getObjectFromId(iArc);
+
+        //set visible false during construction
+        arc.setVisible(false);
+
+        Double[] upperLeftPoint = new Double[3];
+        upperLeftPoint[0] = x;
+        upperLeftPoint[1] = y;
+        upperLeftPoint[2] = 0.0;
+
+        arc.setUpperLeftPoint(upperLeftPoint);
+        arc.setHeight(h);
+        arc.setWidth(w);
+        arc.setStartAngle(startAngle);
+        arc.setEndAngle(endAngle);
+        arc.setArcDrawingMethod(axes.getArcDrawingMethod());
+
+        //clip
+        arc.setClipBox(axes.getClipBox());
+        arc.setClipBoxSet(axes.getClipBoxSet());
+        arc.setClipState(axes.getClipState());
+
+        cloneGraphicContext(parent, iArc);
+
+        arc.setLineMode(line);
+        arc.setFillMode(filled);
+
+        if (isForeground) {
+            arc.setLineColor(foreground);
+        }
+
+        if (isBackground) {
+            arc.setBackground(background);
+        }
+
+        arc.setVisible(axes.getVisible());
+        controller.objectCreated(iArc);
+        controller.setGraphicObjectRelationship(parent, iArc);
+        return iArc;
+    }
+
+    public final static int createAxis(int parent, int dir, int tics, double[] vx, double[] vy, int subint, String format,
+                                       int fontSize, int textColor, int ticsColor, boolean seg) {
+
+        GraphicController controller = GraphicController.getController();
+        int iAxis = controller.askObject(Type.AXIS);
+
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+        Axis axis = (Axis) controller.getObjectFromId(iAxis);
+
+        //clip box
+        axis.setClipBox(axes.getClipBox());
+        axis.setClipBoxSet(false);
+
+        axis.setTicksDirection(dir);
+        axis.setTicksStyle(tics);
+
+        axis.setXTicksCoords(toDouble(vx));
+        axis.setYTicksCoords(toDouble(vy));
+
+        if (format != null && format.equals("") == false) {
+            axis.setFormatn(format);
+        }
+
+        axis.setSubticks(subint);
+        axis.setTicksSegment(seg);
+        cloneGraphicContext(parent, iAxis);
+        cloneFontContext(parent, iAxis);
+
+        Font font = axis.getFont();
+        font.setSize(new Double(fontSize));
+        font.setColor(textColor);
+        axis.setTicksColor(ticsColor);
+
+        controller.objectCreated(iAxis);
+        controller.setGraphicObjectRelationship(parent, iAxis);
+        return iAxis;
+    }
+
+    public static int createCompound(int parent, int[] children) {
+        GraphicController controller = GraphicController.getController();
+        int iCompound = controller.askObject(Type.COMPOUND);
+        controller.objectCreated(iCompound);
+
+        GraphicObject obj = controller.getObjectFromId(parent);
+        for (int i = 0 ; i < children.length ; i++) {
+            controller.setGraphicObjectRelationship(iCompound, children[i]);
+        }
+
+        controller.setGraphicObjectRelationship(parent, iCompound);
+        controller.setProperty(iCompound, GraphicObjectProperties.__GO_VISIBLE__, obj.getVisible());
+        return iCompound;
+    }
+
+    public static int createCompoundSeq(int parent, int childrenCount) {
+        GraphicController controller = GraphicController.getController();
+        int iCompound = controller.askObject(Type.COMPOUND);
+        controller.objectCreated(iCompound);
+        GraphicObject axes = controller.getObjectFromId(parent);
+
+        Integer[] children = axes.getChildren();
+
+        /*
+         * Remove the last "number" created objects (located at the children list's head)
+         * and add them to the compound in the same order
+         */
+        for (int i = 0 ; i < childrenCount ; i++) {
+            /*
+             * Set the parent-child relationship between the Compound and each aggregated object.
+             * Children are added to the Compound from the least recent to the most recent, to
+             * preserve their former ordering.
+             */
+            controller.setGraphicObjectRelationship(iCompound, children[childrenCount - i - 1]);
+        }
+
+        controller.setGraphicObjectRelationship(parent, iCompound);
+
+        /*
+         * visibility is obtained from the parent Figure, whereas it is retrieved from the
+         * parent Axes in ConstructCompound.
+         * To be made consistent.
+         */
+        Figure fig = (Figure)controller.getObjectFromId(axes.getParentFigure());
+        controller.setProperty(iCompound, GraphicObjectProperties.__GO_VISIBLE__, fig.getVisible());
+        return iCompound;
+    }
+
+    public static int createFec(int parent, double[] zminmax, int[] colminmax, int[] colout, boolean with_mesh) {
+
+        GraphicController controller = GraphicController.getController();
+        int iFec = controller.askObject(Type.FEC);
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+        Fec fec = (Fec) controller.getObjectFromId(iFec);
+
+
+        fec.setZBounds(toDouble(zminmax));
+        fec.setColorRange(toInteger(colminmax));
+        fec.setOutsideColor(toInteger(colout));
+
+        fec.setVisible(axes.getVisible());
+
+        //clip box
+        fec.setClipBox(axes.getClipBox());
+        fec.setClipBoxSet(axes.getClipBoxSet());
+        fec.setClipState(axes.getClipState());
+
+        cloneGraphicContext(parent, iFec);
+
+        fec.setLineMode(with_mesh);
+
+        controller.objectCreated(iFec);
+        return iFec;
+    }
+
+    public static int createGrayplot(int parent, int type, double[] pvecx, int n1, int n2) {
+
+        int[] objectTypes = new int[] {GraphicObjectProperties.__GO_GRAYPLOT__, GraphicObjectProperties.__GO_MATPLOT__, GraphicObjectProperties.__GO_MATPLOT__};
+
+        GraphicController controller = GraphicController.getController();
+        int iPlot = controller.askObject(GraphicObject.getTypeFromName(objectTypes[type]));
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+        Imageplot plot = (Imageplot) controller.getObjectFromId(iPlot);
+
+        if (type == 2) { //Matplot1
+            Double[] data = new Double[pvecx.length];
+            for (int i = 0 ; i < pvecx.length ; i++) {
+                data[i] = pvecx[i];
+            }
+            plot.setTranslate(data);
+
+            Double[] scale = new Double[2];
+            scale[0] = (pvecx[2] - pvecx[0]) / (n2 - 1.0);
+            scale[1] = (pvecx[3] - pvecx[1]) / (n1 - 1.0);
+            plot.setScale(scale);
+        }
+
+        plot.setVisible(axes.getVisible());
+
+        //clip box
+        plot.setClipBox(axes.getClipBox());
+        plot.setClipBoxSet(axes.getClipBoxSet());
+        plot.setClipState(axes.getClipState());
+
+        cloneGraphicContext(parent, iPlot);
+        controller.objectCreated(iPlot);
+        return iPlot;
+    }
+
+
+    public static int createPolyline(int parent, boolean closed, int plot,
+                                     int foreground, boolean isForeground, int[] background, int mark_style, boolean isMarkStyle,
+                                     int mark_foreground, boolean isMarkForeground,
+                                     int mark_background, boolean isMarkBackground,
+                                     boolean isline, boolean isfilled, boolean ismark, boolean isinterp) {
+
+        GraphicController controller = GraphicController.getController();
+        int iPoly = controller.askObject(Type.POLYLINE);
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+        Polyline poly = (Polyline) controller.getObjectFromId(iPoly);
+
+        poly.setVisible(false);
+
+        //clip box
+        poly.setClipBox(axes.getClipBox());
+        poly.setClipBoxSet(axes.getClipBoxSet());
+        poly.setClipState(axes.getClipState());
+
+        poly.setClosed(closed);
+        poly.setPolylineStyle(plot);
+
+        cloneGraphicContext(parent, iPoly);
+
+        poly.setMarkMode(ismark);
+        poly.setLineMode(isline);
+        poly.setFillMode(isfilled);
+        poly.setInterpColorMode(isinterp);
+
+        if (isForeground) {
+            poly.setLineColor(foreground);
+        }
+
+        if (background.length != 0) {
+            if (isinterp) {
+                /* 3 or 4 values to store */
+                Integer[] color = new Integer[background.length];
+                for (int i = 0 ; i < background.length ; i++) {
+                    color[i] = background[i];
+                }
+
+                poly.setInterpColorVector(color);
+            } else {
+                poly.setBackground(background[0]);
+            }
+        }
+
+        if (isMarkStyle) {
+            poly.setMarkStyle(mark_style);
+        }
+
+        if (isMarkForeground) {
+            poly.setMarkForeground(mark_foreground);
+        }
+
+        if (isMarkBackground) {
+            poly.setMarkBackground(mark_background);
+        }
+
+        poly.setVisible(true);
+        controller.objectCreated(iPoly);
+        return iPoly;
+    }
+
+    public static int createLegend(int parent, String[] text, int[] handles) {
+        GraphicController controller = GraphicController.getController();
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+
+        if (axes.getHasLegendChild()) {
+            controller.deleteObject(axes.getLegendChild());
+        }
+
+
+        int iLeg = controller.askObject(Type.LEGEND);
+        Legend leg = (Legend)controller.getObjectFromId(iLeg);
+
+        leg.setParent(parent);
+        leg.setVisible(axes.getVisible());
+
+        int count = handles.length;
+        Integer[] textDims = new Integer[2];
+        textDims[0] = count;
+        textDims[1] = 1;
+
+        leg.setTextArrayDimensions(textDims);
+        leg.setTextStrings(text);
+
+        /*
+         * Links are ordered from most recent to least recent,
+         * as their referred-to Polylines in the latter's parent Compound object.
+         */
+
+        ArrayList<Integer> links = new ArrayList<Integer>();
+        for (int i = count - 1 ; i >= 0 ; i--) {
+            links.add(count - i - 1, handles[i]);
+        }
+
+        leg.setLinks(links);
+
+        leg.setClipBoxSet(false);
+        leg.setClipState(0); //OFF
+        leg.setClipBox(axes.getClipBox());
+
+        cloneGraphicContext(parent,  iLeg);
+        cloneFontContext(parent, iLeg);
+
+        leg.setFillMode(true);
+
+        controller.objectCreated(iLeg);
+        controller.setGraphicObjectRelationship(parent, iLeg);
+        return iLeg;
+    }
+
+    public static int createSegs(int parent, double[] vx, double[] vy, double[] vz, boolean isVZ,
+                                 int[] style, double arsize) {
+        GraphicController controller = GraphicController.getController();
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+        int iSegs = controller.askObject(Type.SEGS);
+        Segs segs = (Segs)controller.getObjectFromId(iSegs);
+
+        segs.setVisible(axes.getVisible());
+
+        //clip box
+        segs.setClipBox(axes.getClipBox());
+        segs.setClipBoxSet(axes.getClipBoxSet());
+        segs.setClipState(axes.getClipState());
+
+        /* Segs: Nbr1/2 arrows, Nbr1 is the number of endpoints */
+        int numberArrows = vx.length / 2;
+
+        segs.setNumberArrows(numberArrows);
+        segs.setArrowSize(arsize);
+
+        Double[] arrowCoords = new Double[3 * numberArrows];
+        for (int i = 0 ; i < numberArrows ; i++) {
+            arrowCoords[3 * i] = vx[2 * i];
+            arrowCoords[3 * i + 1] = vy[2 * i];
+            if (isVZ) {
+                arrowCoords[3 * i + 2] = vz[2 * i];
+            } else {
+                arrowCoords[3 * i + 2] = 0.0;
+            }
+        }
+
+        segs.setBase(arrowCoords);
+
+        for (int i = 0 ; i < numberArrows ; i++) {
+            arrowCoords[3 * i] = vx[2 * i + 1];
+            arrowCoords[3 * i + 1] = vy[2 * i + 1];
+            if (isVZ) {
+                arrowCoords[3 * i + 2] = vz[2 * i + 1];
+            } else {
+                arrowCoords[3 * i + 2] = 0.0;
+            }
+        }
+
+        segs.setDirection(arrowCoords);
+        segs.setColors(toInteger(style));
+
+        cloneGraphicContext(parent, iSegs);
+        controller.objectCreated(iSegs);
+        controller.setGraphicObjectRelationship(parent, iSegs);
+        return iSegs;
+    }
+
+    public static int createChamp(int parent, double[] vx, double[] vy,
+                                  double[] vfx, double[] vfy, double arsize, boolean typeofchamp) {
+
+        GraphicController controller = GraphicController.getController();
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+
+        int iChamp = controller.askObject(Type.CHAMP);
+        Champ champ = (Champ)controller.getObjectFromId(iChamp);
+
+        champ.setVisible(axes.getVisible());
+
+        //clip box
+        champ.setClipBox(axes.getClipBox());
+        champ.setClipBoxSet(axes.getClipBoxSet());
+        champ.setClipState(axes.getClipState());
+
+        int numberArrows = vx.length * vy.length;
+        champ.setNumberArrows(numberArrows);
+
+        Integer[] dimensions = new Integer[] {vx.length, vy.length};
+        champ.setDimensions(dimensions);
+
+        champ.setArrowSize(arsize);
+
+        Double[] arrowCoords = new Double[3 * numberArrows];
+
+        //convert vx Double
+        Double[] temp = new Double[vx.length];
+        for (int i =  0 ; i < vx.length ; i++) {
+            temp[i] = vx[i];
+        }
+        champ.setBaseX(temp);
+
+        //convert vy Double
+        temp = new Double[vy.length];
+        for (int i =  0 ; i < vy.length ; i++) {
+            temp[i] = vy[i];
+        }
+        champ.setBaseY(temp);
+
+        for (int i = 0 ; i < numberArrows ; i++) {
+            arrowCoords[3 * i] = vfx[i];
+            arrowCoords[3 * i + 1] = vfy[i];
+            arrowCoords[3 * i + 2] = 0.0;
+        }
+
+        champ.setDirection(arrowCoords);
+        champ.setColored(typeofchamp);
+
+        cloneGraphicContext(parent, iChamp);
+
+        controller.objectCreated(iChamp);
+        controller.setGraphicObjectRelationship(parent, iChamp);
+
+        return iChamp;
+    }
+
+    public static int createSurface(int parent, int typeof3d, int colorFlag, int colorMode) {
+        GraphicController controller = GraphicController.getController();
+        Axes axes = (Axes) controller.getObjectFromId(parent);
+
+        int iSurf = controller.askObject(GraphicObject.getTypeFromName(typeof3d));
+        Surface surf = (Surface) controller.getObjectFromId(iSurf);
+
+        surf.setVisible(axes.getVisible());
+
+        //clip box
+        surf.setClipBox(axes.getClipBox());
+        surf.setClipBoxSet(axes.getClipBoxSet());
+        surf.setClipState(axes.getClipState());
+
+        surf.setColorFlag(colorFlag);
+        surf.setColorMode(colorMode);
+
+        surf.setHiddenColor(axes.getHiddenColor());
+
+        surf.setSurfaceMode(true);
+        cloneGraphicContext(parent, iSurf);
+        controller.objectCreated(iSurf);
+        controller.setGraphicObjectRelationship(parent, iSurf);
+
+        return iSurf;
+    }
+
+    public static void initSubWinTo3d(int iSubwin, String legend, boolean isLegend,
+                                      int[] flag, double alpha, double theta,
+                                      double[] ebox, double[] x, double[] y, double[] z) {
+        GraphicController controller = GraphicController.getController();
+
+        // Force 3d view
+        controller.setProperty(iSubwin, GraphicObjectProperties.__GO_VIEW__, 1);
+
+        if (isLegend) {
+            StringTokenizer strTok =  new StringTokenizer(legend, "@");
+            int iToken = strTok.countTokens();
+            if (iToken > 0) {
+                //X
+                String str[] = new String[] {strTok.nextToken()};
+                Integer label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
+                Integer[] dims = new Integer[] {1, 1};
+                controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__, dims);
+                controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_STRINGS__, str);
+            }
+
+            if (iToken > 1) {
+                //Y
+                String str[] = new String[] {strTok.nextToken()};
+                Integer label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
+                Integer[] dims = new Integer[] {1, 1};
+                controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__, dims);
+                controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_STRINGS__, str);
+            }
+
+            if (iToken > 2) {
+                //Z
+                String str[] = new String[] {strTok.nextToken()};
+                Integer label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
+                Integer[] dims = new Integer[] {1, 1};
+                controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__, dims);
+                controller.setProperty(label, GraphicObjectProperties.__GO_TEXT_STRINGS__, str);
+            }
+        }
+
+        // Force psubwin->logflags to linear
+        controller.setProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LOG_FLAG__, false);
+        controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LOG_FLAG__, false);
+        controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LOG_FLAG__, false);
+
+        Boolean firstPlot = (Boolean) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_FIRST_PLOT__);
+
+        if (firstPlot && (flag[2] == 0 || flag[2] == 1)) {
+            /* Nothing to do */
+        } else {
+            if (flag[2] == 0 || flag[2] == 1) {
+                if (firstPlot) {
+                    controller.setProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_VISIBLE__, false);
+                    controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_VISIBLE__, false);
+                    controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_VISIBLE__, false);
+
+                    // 0: OFF
+                    controller.setProperty(iSubwin, GraphicObjectProperties.__GO_BOX_TYPE__, 0);
+
+                    Integer label = 0;
+                    label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
+                    controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, false);
+                    label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
+                    controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, false);
+                    label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
+                    controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, false);
+                }
+            } else if (flag[2] == 2) {
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_VISIBLE__, false);
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_VISIBLE__, false);
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_VISIBLE__, false);
+
+                //2: HIDDEN_AXES
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_BOX_TYPE__, 2);
+
+                Integer label = 0;
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, false);
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, false);
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, false);
+
+            } else if (flag[2] == 3) {
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_VISIBLE__, false);
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_VISIBLE__, false);
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_VISIBLE__, false);
+
+                //1: ON
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_BOX_TYPE__, 1);
+
+                Integer label = 0;
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, true);
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, true);
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, true);
+
+            } else if (flag[2] == 4) {
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_VISIBLE__, true);
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_VISIBLE__, true);
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_VISIBLE__, true);
+
+                //1: ON
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_BOX_TYPE__, 1);
+
+                Integer label = 0;
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_X_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, true);
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Y_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, true);
+                label = (Integer) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_Z_AXIS_LABEL__);
+                controller.setProperty(label, GraphicObjectProperties.__GO_VISIBLE__, true);
+            }
+        }
+
+        Double[] rotationAngles = new Double[] {alpha, theta};
+        controller.setProperty(iSubwin, GraphicObjectProperties.__GO_ROTATION_ANGLES__, rotationAngles);
+
+        Double[] dataBounds = (Double[]) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_DATA_BOUNDS__);
+        Boolean autoScale = (Boolean) controller.getProperty(iSubwin, GraphicObjectProperties.__GO_AUTO_SCALE__);
+
+        Double rect[] = new Double[] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0};
+        if (autoScale) {
+            // compute and merge new specified bounds with data bounds
+            switch (flag[1]) {
+                case 0 :
+                    break;
+                case 1 :
+                case 3 :
+                case 5 :
+                case 7 :
+                    rect[0] = ebox[0]; // xmin
+                    rect[1] = ebox[1]; // xmax
+                    rect[2] = ebox[2]; // ymin
+                    rect[3] = ebox[3]; // ymax
+                    rect[4] = ebox[4]; // zmin
+                    rect[5] = ebox[5]; // zmax
+                    break;
+                case 2 :
+                case 4 :
+                case 6 :
+                case 8 :
+                    double[] res = getDrect(x, rect[0], rect[1], dataBounds[0], dataBounds[1]);
+                    rect[0] = res[0];
+                    rect[1] = res[1];
+
+                    res = getDrect(y, rect[2], rect[3], dataBounds[2], dataBounds[3]);
+                    rect[2] = res[0];
+                    rect[3] = res[1];
+
+                    res = getDrect(z, rect[4], rect[5], dataBounds[4], dataBounds[5]);
+                    rect[4] = res[0];
+                    rect[5] = res[1];
+                    break;
+            }
+
+            if (firstPlot == false) {
+                rect[0] = Math.min(dataBounds[0], rect[0]); // xmin
+                rect[1] = Math.max(dataBounds[1], rect[1]); // xmax
+                rect[2] = Math.min(dataBounds[2], rect[2]); // ymin
+                rect[3] = Math.max(dataBounds[3], rect[3]); // ymax
+                rect[4] = Math.min(dataBounds[4], rect[4]); // zmin
+                rect[5] = Math.max(dataBounds[5], rect[5]); // zmax
+            }
+
+            if (flag[1] != 0) {
+                controller.setProperty(iSubwin, GraphicObjectProperties.__GO_DATA_BOUNDS__, rect);
+            }
+        }
+
+        if (flag[1] != 0) {
+            boolean isoview = (flag[1] == 3 || flag[1] == 4 || flag[1] == 5 || flag[1] == 6);
+            controller.setProperty(iSubwin, GraphicObjectProperties.__GO_ISOVIEW__, isoview);
+        }
+    }
+
+    private static double[] getDrect(double[] x, double min, double max, double defaultMin, double defaultMax) {
+        double refMax = Double.NEGATIVE_INFINITY;
+        double refMin = Double.POSITIVE_INFINITY;
+        boolean isInfinite = true;
+
+        for (int i = 0 ; i < x.length ; i++) {
+            Double tmp = x[i];
+            if (tmp.isInfinite() == false) {
+                refMin = Math.min(refMin, tmp);
+                refMax = Math.max(refMax, tmp);
+                isInfinite = false;
+            }
+        }
+
+        if (isInfinite) {
+            refMin = defaultMin;
+            refMax = defaultMax;
+        }
+
+        return new double[] {refMin, refMax};
+    }
+
+    private static boolean  isValidType(int type) {
+        return type >= 0 && type <= 1;
+    }
+
+    private static boolean isValidColor(double[] color) {
+        return (color[0] >= 0.0 && color[0] <= 1.0)
+               && (color[1] >= 0.0 && color[1] <= 1.0)
+               && (color[2] >= 0.0 && color[2] <= 1.0);
+    }
+
+    public static int createLight(int parent, int type, boolean visible, double[] pos,
+                                  double[] dir, double[] ambient, double[] diffuse, double[] specular) {
+        GraphicController controller = GraphicController.getController();
+
+        int iLight = controller.askObject(Type.LIGHT);
+        Light light = (Light) controller.getObjectFromId(iLight);
+
+        light.setVisible(visible);
+        if (isValidType(type)) {
+            light.setLightType(LightType.intToEnum(type));
+        }
+
+        if (pos.length == 3) {
+            light.setPosition(toDouble(pos));
+        }
+
+        if (dir.length == 3) {
+            light.setDirection(toDouble(dir));
+        }
+        if (ambient.length == 3) {
+            if (isValidColor(ambient)) {
+                light.setAmbientColor(toDouble(ambient));
+            }
+        }
+        if (diffuse.length == 3) {
+            if (isValidColor(diffuse)) {
+                light.setDiffuseColor(toDouble(diffuse));
+            }
+        }
+        if (specular.length == 3) {
+            if (isValidColor(specular)) {
+                light.setSpecularColor(toDouble(specular));
+            }
+        }
+
+        controller.objectCreated(iLight);
+        // Set light's parent
+        controller.setGraphicObjectRelationship(parent, iLight);
+        return iLight;
+    }
+
+    private static Double[] toDouble(double[] var) {
+        Double[] ret = new Double[var.length];
+        for (int i = 0 ; i < var.length ; i++) {
+            ret[i] = var[i];
+        }
+
+        return ret;
+    }
+
+    private static Integer[] toInteger(int[] var) {
+        Integer[] ret = new Integer[var.length];
+        for (int i = 0 ; i < var.length ; i++) {
+            ret[i] = var[i];
+        }
+
+        return ret;
+    }
+}
+
index 693536f..a0042ba 100644 (file)
@@ -14,6 +14,8 @@ package org.scilab.modules.graphic_objects.lighting;
 
 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
 import org.scilab.modules.graphic_objects.graphicObject.Visitor;
+import org.scilab.modules.graphic_objects.legend.Legend.LegendLocation;
+
 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.*;
 
 /**
@@ -24,7 +26,20 @@ public class Light extends GraphicObject {
 
     public enum LightProperty {POSITION, DIRECTION, TYPE};
 
-    public enum LightType {DIRECTIONAL, POINT};
+    public enum LightType {DIRECTIONAL, POINT;
+
+    public static LightType intToEnum(Integer intValue) {
+        switch (intValue) {
+            case 0:
+                return DIRECTIONAL;
+            case 1:
+                return POINT;
+            default:
+                return null;
+        }
+    }
+                          };
+
 
     /** light position */
     Double[] position;
diff --git a/scilab/modules/graphic_objects/src/jni/Builder.cpp b/scilab/modules/graphic_objects/src/jni/Builder.cpp
new file mode 100644 (file)
index 0000000..018204c
--- /dev/null
@@ -0,0 +1,1169 @@
+#include "Builder.hxx"
+/* Generated by GIWS (version 2.0.2) with command:
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file builder.giws.xml
+*/
+/*
+
+This is generated code.
+
+This software is a computer program whose purpose is to hide the complexity
+of accessing Java objects/methods from C++ code.
+
+This software is governed by the CeCILL-B license under French law and
+abiding by the rules of distribution of free software.  You can  use,
+modify and/ or redistribute the software under the terms of the CeCILL-B
+license as circulated by CEA, CNRS and INRIA at the following URL
+"http://www.cecill.info".
+
+As a counterpart to the access to the source code and  rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty  and the software's author,  the holder of the
+economic rights,  and the successive licensors  have only  limited
+liability.
+
+In this respect, the user's attention is drawn to the risks associated
+with loading,  using,  modifying and/or developing or reproducing the
+software by the user in light of its specific status of free software,
+that may mean  that it is complicated to manipulate,  and  that  also
+therefore means  that it is reserved for developers  and  experienced
+professionals having in-depth computer knowledge. Users are therefore
+encouraged to load and test the software's suitability as regards their
+requirements in conditions enabling the security of their systems and/or
+data to be ensured and,  more generally, to use and operate it in the
+same conditions as regards security.
+
+The fact that you are presently reading this means that you have had
+knowledge of the CeCILL-B license and that you accept its terms.
+*/
+
+namespace org_scilab_modules_graphic_objects_builder {
+
+                // Static declarations (if any)
+                
+// Returns the current env
+
+JNIEnv * Builder::getCurrentEnv() {
+JNIEnv * curEnv = NULL;
+jint res=this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+if (res != JNI_OK) {
+throw GiwsException::JniException(getCurrentEnv());
+}
+return curEnv;
+}
+// Destructor
+
+Builder::~Builder() {
+JNIEnv * curEnv = NULL;
+this->jvm->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+curEnv->DeleteGlobalRef(this->instance);
+curEnv->DeleteGlobalRef(this->instanceClass);
+curEnv->DeleteGlobalRef(this->stringArrayClass);}
+// Constructors
+Builder::Builder(JavaVM * jvm_) {
+jmethodID constructObject = NULL ;
+jobject localInstance ;
+jclass localClass ;
+
+const std::string construct="<init>";
+const std::string param="()V";
+jvm=jvm_;
+
+JNIEnv * curEnv = getCurrentEnv();
+
+localClass = curEnv->FindClass( this->className().c_str() ) ;
+if (localClass == NULL) {
+  throw GiwsException::JniClassNotFoundException(curEnv, this->className());
+}
+
+this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
+
+/* localClass is not needed anymore */
+curEnv->DeleteLocalRef(localClass);
+
+if (this->instanceClass == NULL) {
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+
+
+constructObject = curEnv->GetMethodID( this->instanceClass, construct.c_str() , param.c_str() ) ;
+if(constructObject == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+
+localInstance = curEnv->NewObject( this->instanceClass, constructObject ) ;
+if(localInstance == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+this->instance = curEnv->NewGlobalRef(localInstance) ;
+if(this->instance == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+}
+/* localInstance not needed anymore */
+curEnv->DeleteLocalRef(localInstance);
+
+                /* Methods ID set to NULL */
+jintcreateRectjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjintintjintintjintintID=NULL;
+jintcloneGraphicContextjintintjintintID=NULL;
+jintcloneFontContextjintintjintintID=NULL;
+jintcreateHiddenLabeljintintID=NULL;
+jbooleanisAxesRedrawingjintintID=NULL;
+jintcreateLabeljintintjintintID=NULL;
+jintcreateNewFigureWithAxesID=NULL;
+voidcloneMenusjintintjintintID=NULL;
+jintcloneAxesModeljintintID=NULL;
+jintcreateSubWinjintintID=NULL;
+jintcreateTextjintintjobjectArray_java_lang_Stringjava_lang_StringjintintjintintjdoubledoublejdoubledoublejbooleanbooleanjdoubleArray_doubledoublejintintjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjintintID=NULL;
+jintcreateArcjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanID=NULL;
+jintcreateAxisjintintjintintjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejintintjstringjava_lang_StringjintintjintintjintintjbooleanbooleanID=NULL;
+jintcreateCompoundjintintjintArray_intintID=NULL;
+jintcreateCompoundSeqjintintjintintID=NULL;
+jintcreateFecjintintjdoubleArray_doubledoublejintArray_intintjintArray_intintjbooleanbooleanID=NULL;
+jintcreateGrayplotjintintjintintjdoubleArray_doubledoublejintintjintintID=NULL;
+jintcreatePolylinejintintjbooleanbooleanjintintjintintjbooleanbooleanjintArray_intintjintintjbooleanbooleanjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanID=NULL;
+jintcreateLegendjintintjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintID=NULL;
+jintcreateSegsjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjintArray_intintjdoubledoubleID=NULL;
+jintcreateChampjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubledoublejbooleanbooleanID=NULL;
+jintcreateSurfacejintintjintintjintintjintintID=NULL;
+voidinitSubWinTo3djintintjstringjava_lang_StringjbooleanbooleanjintArray_intintjdoubledoublejdoubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID=NULL;
+jintcreateLightjintintjintintjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID=NULL;
+
+
+}
+
+Builder::Builder(JavaVM * jvm_, jobject JObj) {
+        jvm=jvm_;
+
+        JNIEnv * curEnv = getCurrentEnv();
+
+jclass localClass = curEnv->GetObjectClass(JObj);
+        this->instanceClass = static_cast<jclass>(curEnv->NewGlobalRef(localClass));
+        curEnv->DeleteLocalRef(localClass);
+
+        if (this->instanceClass == NULL) {
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+        }
+
+        this->instance = curEnv->NewGlobalRef(JObj) ;
+        if(this->instance == NULL){
+throw GiwsException::JniObjectCreationException(curEnv, this->className());
+        }
+        /* Methods ID set to NULL */
+        jintcreateRectjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjintintjintintjintintID=NULL;
+jintcloneGraphicContextjintintjintintID=NULL;
+jintcloneFontContextjintintjintintID=NULL;
+jintcreateHiddenLabeljintintID=NULL;
+jbooleanisAxesRedrawingjintintID=NULL;
+jintcreateLabeljintintjintintID=NULL;
+jintcreateNewFigureWithAxesID=NULL;
+voidcloneMenusjintintjintintID=NULL;
+jintcloneAxesModeljintintID=NULL;
+jintcreateSubWinjintintID=NULL;
+jintcreateTextjintintjobjectArray_java_lang_Stringjava_lang_StringjintintjintintjdoubledoublejdoubledoublejbooleanbooleanjdoubleArray_doubledoublejintintjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjintintID=NULL;
+jintcreateArcjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanID=NULL;
+jintcreateAxisjintintjintintjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejintintjstringjava_lang_StringjintintjintintjintintjbooleanbooleanID=NULL;
+jintcreateCompoundjintintjintArray_intintID=NULL;
+jintcreateCompoundSeqjintintjintintID=NULL;
+jintcreateFecjintintjdoubleArray_doubledoublejintArray_intintjintArray_intintjbooleanbooleanID=NULL;
+jintcreateGrayplotjintintjintintjdoubleArray_doubledoublejintintjintintID=NULL;
+jintcreatePolylinejintintjbooleanbooleanjintintjintintjbooleanbooleanjintArray_intintjintintjbooleanbooleanjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanID=NULL;
+jintcreateLegendjintintjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintID=NULL;
+jintcreateSegsjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjintArray_intintjdoubledoubleID=NULL;
+jintcreateChampjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubledoublejbooleanbooleanID=NULL;
+jintcreateSurfacejintintjintintjintintjintintID=NULL;
+voidinitSubWinTo3djintintjstringjava_lang_StringjbooleanbooleanjintArray_intintjdoubledoublejdoubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID=NULL;
+jintcreateLightjintintjintintjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID=NULL;
+
+
+}
+
+// Generic methods
+
+void Builder::synchronize() {
+if (getCurrentEnv()->MonitorEnter(instance) != JNI_OK) {
+throw GiwsException::JniMonitorException(getCurrentEnv(), "Builder");
+}
+}
+
+void Builder::endSynchronize() {
+if ( getCurrentEnv()->MonitorExit(instance) != JNI_OK) {
+throw GiwsException::JniMonitorException(getCurrentEnv(), "Builder");
+}
+}
+// Method(s)
+
+int Builder::createRect (JavaVM * jvm_, int pparentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateRectjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjintintjintintjintintID = curEnv->GetStaticMethodID(cls, "createRect", "(IDDDDIIII)I" ) ;
+if (jintcreateRectjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjintintjintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createRect");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateRectjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjintintjintintjintintID ,pparentsubwinUID, x, y, height, width, foreground, background, isfilled, isline));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::cloneGraphicContext (JavaVM * jvm_, int sourceIdentifier, int destIdentifier){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcloneGraphicContextjintintjintintID = curEnv->GetStaticMethodID(cls, "cloneGraphicContext", "(II)I" ) ;
+if (jintcloneGraphicContextjintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "cloneGraphicContext");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcloneGraphicContextjintintjintintID ,sourceIdentifier, destIdentifier));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::cloneFontContext (JavaVM * jvm_, int sourceIdentifier, int destIdentifier){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcloneFontContextjintintjintintID = curEnv->GetStaticMethodID(cls, "cloneFontContext", "(II)I" ) ;
+if (jintcloneFontContextjintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "cloneFontContext");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcloneFontContextjintintjintintID ,sourceIdentifier, destIdentifier));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createHiddenLabel (JavaVM * jvm_, int parent){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateHiddenLabeljintintID = curEnv->GetStaticMethodID(cls, "createHiddenLabel", "(I)I" ) ;
+if (jintcreateHiddenLabeljintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createHiddenLabel");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateHiddenLabeljintintID ,parent));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+bool Builder::isAxesRedrawing (JavaVM * jvm_, int subWin){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jbooleanisAxesRedrawingjintintID = curEnv->GetStaticMethodID(cls, "isAxesRedrawing", "(I)Z" ) ;
+if (jbooleanisAxesRedrawingjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "isAxesRedrawing");
+}
+
+                        jboolean res =  static_cast<jboolean>( curEnv->CallStaticBooleanMethod(cls, jbooleanisAxesRedrawingjintintID ,subWin));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return (res == JNI_TRUE);
+
+}
+
+int Builder::createLabel (JavaVM * jvm_, int parent, int type){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateLabeljintintjintintID = curEnv->GetStaticMethodID(cls, "createLabel", "(II)I" ) ;
+if (jintcreateLabeljintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createLabel");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateLabeljintintjintintID ,parent, type));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createNewFigureWithAxes (JavaVM * jvm_){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateNewFigureWithAxesID = curEnv->GetStaticMethodID(cls, "createNewFigureWithAxes", "()I" ) ;
+if (jintcreateNewFigureWithAxesID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createNewFigureWithAxes");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateNewFigureWithAxesID ));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+void Builder::cloneMenus (JavaVM * jvm_, int model, int newParent){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID voidcloneMenusjintintjintintID = curEnv->GetStaticMethodID(cls, "cloneMenus", "(II)V" ) ;
+if (voidcloneMenusjintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "cloneMenus");
+}
+
+                         curEnv->CallStaticVoidMethod(cls, voidcloneMenusjintintjintintID ,model, newParent);
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+int Builder::cloneAxesModel (JavaVM * jvm_, int parent){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcloneAxesModeljintintID = curEnv->GetStaticMethodID(cls, "cloneAxesModel", "(I)I" ) ;
+if (jintcloneAxesModeljintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "cloneAxesModel");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcloneAxesModeljintintID ,parent));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createSubWin (JavaVM * jvm_, int parent){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateSubWinjintintID = curEnv->GetStaticMethodID(cls, "createSubWin", "(I)I" ) ;
+if (jintcreateSubWinjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createSubWin");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateSubWinjintintID ,parent));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createText (JavaVM * jvm_, int parent, char const* const* text, int textSize, int rows, int cols, double x, double y, bool autoSize, double const* userSize, int userSizeSize, int centerPos, int foreground, bool isForeground, int background, bool isBackground, bool boxed, bool line, bool filled, int align){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateTextjintintjobjectArray_java_lang_Stringjava_lang_StringjintintjintintjdoubledoublejdoubledoublejbooleanbooleanjdoubleArray_doubledoublejintintjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjintintID = curEnv->GetStaticMethodID(cls, "createText", "(I[Ljava/lang/String;IIDDZ[DIIZIZZZZI)I" ) ;
+if (jintcreateTextjintintjobjectArray_java_lang_Stringjava_lang_StringjintintjintintjdoubledoublejdoubledoublejbooleanbooleanjdoubleArray_doubledoublejintintjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createText");
+}
+jclass stringArrayClass = curEnv->FindClass("java/lang/String");
+
+// create java array of strings.
+jobjectArray text_ = curEnv->NewObjectArray( textSize, stringArrayClass, NULL);
+if (text_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+// convert each char * to java strings and fill the java array.
+for ( int i = 0; i < textSize; i++)
+{
+jstring TempString = curEnv->NewStringUTF( text[i] );
+if (TempString == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetObjectArrayElement( text_, i, TempString);
+
+// avoid keeping reference on too many strings
+curEnv->DeleteLocalRef(TempString);
+}
+jboolean autoSize_ = (static_cast<bool>(autoSize) ? JNI_TRUE : JNI_FALSE);
+
+jdoubleArray userSize_ = curEnv->NewDoubleArray( userSizeSize ) ;
+
+if (userSize_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( userSize_, 0, userSizeSize, (jdouble*)(userSize) ) ;
+
+
+jboolean isForeground_ = (static_cast<bool>(isForeground) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isBackground_ = (static_cast<bool>(isBackground) ? JNI_TRUE : JNI_FALSE);
+
+jboolean boxed_ = (static_cast<bool>(boxed) ? JNI_TRUE : JNI_FALSE);
+
+jboolean line_ = (static_cast<bool>(line) ? JNI_TRUE : JNI_FALSE);
+
+jboolean filled_ = (static_cast<bool>(filled) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateTextjintintjobjectArray_java_lang_Stringjava_lang_StringjintintjintintjdoubledoublejdoubledoublejbooleanbooleanjdoubleArray_doubledoublejintintjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjintintID ,parent, text_, rows, cols, x, y, autoSize_, userSize_, centerPos, foreground, isForeground_, background, isBackground_, boxed_, line_, filled_, align));
+                        curEnv->DeleteLocalRef(stringArrayClass);
+curEnv->DeleteLocalRef(text_);
+curEnv->DeleteLocalRef(userSize_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createArc (JavaVM * jvm_, int parent, double x, double y, double h, double w, double start, double end, int foreground, bool isForeground, int background, bool isBackground, bool filled, bool line){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateArcjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createArc", "(IDDDDDDIZIZZZ)I" ) ;
+if (jintcreateArcjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createArc");
+}
+
+jboolean isForeground_ = (static_cast<bool>(isForeground) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isBackground_ = (static_cast<bool>(isBackground) ? JNI_TRUE : JNI_FALSE);
+
+jboolean filled_ = (static_cast<bool>(filled) ? JNI_TRUE : JNI_FALSE);
+
+jboolean line_ = (static_cast<bool>(line) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateArcjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanID ,parent, x, y, h, w, start, end, foreground, isForeground_, background, isBackground_, filled_, line_));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createAxis (JavaVM * jvm_, int parent, int dir, int tics, double const* vx, int vxSize, double const* vy, int vySize, int subint, char const* format, int fontSize, int textColor, int ticsColor, bool seg){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateAxisjintintjintintjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejintintjstringjava_lang_StringjintintjintintjintintjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createAxis", "(III[D[DILjava/lang/String;IIIZ)I" ) ;
+if (jintcreateAxisjintintjintintjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejintintjstringjava_lang_StringjintintjintintjintintjbooleanbooleanID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createAxis");
+}
+
+jdoubleArray vx_ = curEnv->NewDoubleArray( vxSize ) ;
+
+if (vx_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vx_, 0, vxSize, (jdouble*)(vx) ) ;
+
+
+jdoubleArray vy_ = curEnv->NewDoubleArray( vySize ) ;
+
+if (vy_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vy_, 0, vySize, (jdouble*)(vy) ) ;
+
+
+jstring format_ = curEnv->NewStringUTF( format );
+if (format != NULL && format_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jboolean seg_ = (static_cast<bool>(seg) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateAxisjintintjintintjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejintintjstringjava_lang_StringjintintjintintjintintjbooleanbooleanID ,parent, dir, tics, vx_, vy_, subint, format_, fontSize, textColor, ticsColor, seg_));
+                        curEnv->DeleteLocalRef(vx_);
+curEnv->DeleteLocalRef(vy_);
+curEnv->DeleteLocalRef(format_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createCompound (JavaVM * jvm_, int parent, int const* children, int childrenSize){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateCompoundjintintjintArray_intintID = curEnv->GetStaticMethodID(cls, "createCompound", "(I[I)I" ) ;
+if (jintcreateCompoundjintintjintArray_intintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createCompound");
+}
+
+jintArray children_ = curEnv->NewIntArray( childrenSize ) ;
+
+if (children_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( children_, 0, childrenSize, (jint*)(children) ) ;
+
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateCompoundjintintjintArray_intintID ,parent, children_));
+                        curEnv->DeleteLocalRef(children_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createCompoundSeq (JavaVM * jvm_, int parent, int childrenCount){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateCompoundSeqjintintjintintID = curEnv->GetStaticMethodID(cls, "createCompoundSeq", "(II)I" ) ;
+if (jintcreateCompoundSeqjintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createCompoundSeq");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateCompoundSeqjintintjintintID ,parent, childrenCount));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createFec (JavaVM * jvm_, int parent, double const* zminmax, int zminmaxSize, int const* colminmax, int colminmaxSize, int const* colout, int coloutSize, bool with_mesh){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateFecjintintjdoubleArray_doubledoublejintArray_intintjintArray_intintjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createFec", "(I[D[I[IZ)I" ) ;
+if (jintcreateFecjintintjdoubleArray_doubledoublejintArray_intintjintArray_intintjbooleanbooleanID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createFec");
+}
+
+jdoubleArray zminmax_ = curEnv->NewDoubleArray( zminmaxSize ) ;
+
+if (zminmax_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( zminmax_, 0, zminmaxSize, (jdouble*)(zminmax) ) ;
+
+
+jintArray colminmax_ = curEnv->NewIntArray( colminmaxSize ) ;
+
+if (colminmax_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( colminmax_, 0, colminmaxSize, (jint*)(colminmax) ) ;
+
+
+jintArray colout_ = curEnv->NewIntArray( coloutSize ) ;
+
+if (colout_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( colout_, 0, coloutSize, (jint*)(colout) ) ;
+
+
+jboolean with_mesh_ = (static_cast<bool>(with_mesh) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateFecjintintjdoubleArray_doubledoublejintArray_intintjintArray_intintjbooleanbooleanID ,parent, zminmax_, colminmax_, colout_, with_mesh_));
+                        curEnv->DeleteLocalRef(zminmax_);
+curEnv->DeleteLocalRef(colminmax_);
+curEnv->DeleteLocalRef(colout_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createGrayplot (JavaVM * jvm_, int parent, int type, double const* pvecx, int pvecxSize, int n1, int n2){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateGrayplotjintintjintintjdoubleArray_doubledoublejintintjintintID = curEnv->GetStaticMethodID(cls, "createGrayplot", "(II[DII)I" ) ;
+if (jintcreateGrayplotjintintjintintjdoubleArray_doubledoublejintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createGrayplot");
+}
+
+jdoubleArray pvecx_ = curEnv->NewDoubleArray( pvecxSize ) ;
+
+if (pvecx_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( pvecx_, 0, pvecxSize, (jdouble*)(pvecx) ) ;
+
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateGrayplotjintintjintintjdoubleArray_doubledoublejintintjintintID ,parent, type, pvecx_, n1, n2));
+                        curEnv->DeleteLocalRef(pvecx_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createPolyline (JavaVM * jvm_, int parent, bool closed, int plot, int foreground, bool isForeground, int const* background, int backgroundSize, int mark_style, bool isMarkStyle, int mark_foreground, bool isMarkForeground, int mark_background, bool isMarkBackground, bool isline, bool isfilled, bool ismark, bool isinterp){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreatePolylinejintintjbooleanbooleanjintintjintintjbooleanbooleanjintArray_intintjintintjbooleanbooleanjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createPolyline", "(IZIIZ[IIZIZIZZZZZ)I" ) ;
+if (jintcreatePolylinejintintjbooleanbooleanjintintjintintjbooleanbooleanjintArray_intintjintintjbooleanbooleanjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createPolyline");
+}
+
+jboolean closed_ = (static_cast<bool>(closed) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isForeground_ = (static_cast<bool>(isForeground) ? JNI_TRUE : JNI_FALSE);
+
+jintArray background_ = curEnv->NewIntArray( backgroundSize ) ;
+
+if (background_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( background_, 0, backgroundSize, (jint*)(background) ) ;
+
+
+jboolean isMarkStyle_ = (static_cast<bool>(isMarkStyle) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isMarkForeground_ = (static_cast<bool>(isMarkForeground) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isMarkBackground_ = (static_cast<bool>(isMarkBackground) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isline_ = (static_cast<bool>(isline) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isfilled_ = (static_cast<bool>(isfilled) ? JNI_TRUE : JNI_FALSE);
+
+jboolean ismark_ = (static_cast<bool>(ismark) ? JNI_TRUE : JNI_FALSE);
+
+jboolean isinterp_ = (static_cast<bool>(isinterp) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreatePolylinejintintjbooleanbooleanjintintjintintjbooleanbooleanjintArray_intintjintintjbooleanbooleanjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanID ,parent, closed_, plot, foreground, isForeground_, background_, mark_style, isMarkStyle_, mark_foreground, isMarkForeground_, mark_background, isMarkBackground_, isline_, isfilled_, ismark_, isinterp_));
+                        curEnv->DeleteLocalRef(background_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createLegend (JavaVM * jvm_, int parent, char const* const* text, int textSize, int const* handles, int handlesSize){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateLegendjintintjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintID = curEnv->GetStaticMethodID(cls, "createLegend", "(I[Ljava/lang/String;[I)I" ) ;
+if (jintcreateLegendjintintjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createLegend");
+}
+jclass stringArrayClass = curEnv->FindClass("java/lang/String");
+
+// create java array of strings.
+jobjectArray text_ = curEnv->NewObjectArray( textSize, stringArrayClass, NULL);
+if (text_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+// convert each char * to java strings and fill the java array.
+for ( int i = 0; i < textSize; i++)
+{
+jstring TempString = curEnv->NewStringUTF( text[i] );
+if (TempString == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetObjectArrayElement( text_, i, TempString);
+
+// avoid keeping reference on too many strings
+curEnv->DeleteLocalRef(TempString);
+}
+jintArray handles_ = curEnv->NewIntArray( handlesSize ) ;
+
+if (handles_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( handles_, 0, handlesSize, (jint*)(handles) ) ;
+
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateLegendjintintjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintID ,parent, text_, handles_));
+                        curEnv->DeleteLocalRef(stringArrayClass);
+curEnv->DeleteLocalRef(text_);
+curEnv->DeleteLocalRef(handles_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createSegs (JavaVM * jvm_, int parent, double const* vx, int vxSize, double const* vy, int vySize, double const* vz, int vzSize, bool isVZ, int const* style, int styleSize, double arsize){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateSegsjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjintArray_intintjdoubledoubleID = curEnv->GetStaticMethodID(cls, "createSegs", "(I[D[D[DZ[ID)I" ) ;
+if (jintcreateSegsjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjintArray_intintjdoubledoubleID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createSegs");
+}
+
+jdoubleArray vx_ = curEnv->NewDoubleArray( vxSize ) ;
+
+if (vx_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vx_, 0, vxSize, (jdouble*)(vx) ) ;
+
+
+jdoubleArray vy_ = curEnv->NewDoubleArray( vySize ) ;
+
+if (vy_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vy_, 0, vySize, (jdouble*)(vy) ) ;
+
+
+jdoubleArray vz_ = curEnv->NewDoubleArray( vzSize ) ;
+
+if (vz_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vz_, 0, vzSize, (jdouble*)(vz) ) ;
+
+
+jboolean isVZ_ = (static_cast<bool>(isVZ) ? JNI_TRUE : JNI_FALSE);
+
+jintArray style_ = curEnv->NewIntArray( styleSize ) ;
+
+if (style_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( style_, 0, styleSize, (jint*)(style) ) ;
+
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateSegsjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjintArray_intintjdoubledoubleID ,parent, vx_, vy_, vz_, isVZ_, style_, arsize));
+                        curEnv->DeleteLocalRef(vx_);
+curEnv->DeleteLocalRef(vy_);
+curEnv->DeleteLocalRef(vz_);
+curEnv->DeleteLocalRef(style_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createChamp (JavaVM * jvm_, int parent, double const* vx, int vxSize, double const* vy, int vySize, double const* vfx, int vfxSize, double const* vfy, int vfySize, double arsize, bool typeofchamp){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateChampjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubledoublejbooleanbooleanID = curEnv->GetStaticMethodID(cls, "createChamp", "(I[D[D[D[DDZ)I" ) ;
+if (jintcreateChampjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubledoublejbooleanbooleanID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createChamp");
+}
+
+jdoubleArray vx_ = curEnv->NewDoubleArray( vxSize ) ;
+
+if (vx_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vx_, 0, vxSize, (jdouble*)(vx) ) ;
+
+
+jdoubleArray vy_ = curEnv->NewDoubleArray( vySize ) ;
+
+if (vy_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vy_, 0, vySize, (jdouble*)(vy) ) ;
+
+
+jdoubleArray vfx_ = curEnv->NewDoubleArray( vfxSize ) ;
+
+if (vfx_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vfx_, 0, vfxSize, (jdouble*)(vfx) ) ;
+
+
+jdoubleArray vfy_ = curEnv->NewDoubleArray( vfySize ) ;
+
+if (vfy_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( vfy_, 0, vfySize, (jdouble*)(vfy) ) ;
+
+
+jboolean typeofchamp_ = (static_cast<bool>(typeofchamp) ? JNI_TRUE : JNI_FALSE);
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateChampjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubledoublejbooleanbooleanID ,parent, vx_, vy_, vfx_, vfy_, arsize, typeofchamp_));
+                        curEnv->DeleteLocalRef(vx_);
+curEnv->DeleteLocalRef(vy_);
+curEnv->DeleteLocalRef(vfx_);
+curEnv->DeleteLocalRef(vfy_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+int Builder::createSurface (JavaVM * jvm_, int parent, int typeof3d, int colorFlag, int colorMode){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateSurfacejintintjintintjintintjintintID = curEnv->GetStaticMethodID(cls, "createSurface", "(IIII)I" ) ;
+if (jintcreateSurfacejintintjintintjintintjintintID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createSurface");
+}
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateSurfacejintintjintintjintintjintintID ,parent, typeof3d, colorFlag, colorMode));
+                        if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+void Builder::initSubWinTo3d (JavaVM * jvm_, int parent, char const* legend, bool isLegend, int const* flag, int flagSize, double alpha, double theta, double const* ebox, int eboxSize, double const* x, int xSize, double const* y, int ySize, double const* z, int zSize){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID voidinitSubWinTo3djintintjstringjava_lang_StringjbooleanbooleanjintArray_intintjdoubledoublejdoubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID = curEnv->GetStaticMethodID(cls, "initSubWinTo3d", "(ILjava/lang/String;Z[IDD[D[D[D[D)V" ) ;
+if (voidinitSubWinTo3djintintjstringjava_lang_StringjbooleanbooleanjintArray_intintjdoubledoublejdoubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "initSubWinTo3d");
+}
+
+jstring legend_ = curEnv->NewStringUTF( legend );
+if (legend != NULL && legend_ == NULL)
+{
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+
+jboolean isLegend_ = (static_cast<bool>(isLegend) ? JNI_TRUE : JNI_FALSE);
+
+jintArray flag_ = curEnv->NewIntArray( flagSize ) ;
+
+if (flag_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetIntArrayRegion( flag_, 0, flagSize, (jint*)(flag) ) ;
+
+
+jdoubleArray ebox_ = curEnv->NewDoubleArray( eboxSize ) ;
+
+if (ebox_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( ebox_, 0, eboxSize, (jdouble*)(ebox) ) ;
+
+
+jdoubleArray x_ = curEnv->NewDoubleArray( xSize ) ;
+
+if (x_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( x_, 0, xSize, (jdouble*)(x) ) ;
+
+
+jdoubleArray y_ = curEnv->NewDoubleArray( ySize ) ;
+
+if (y_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( y_, 0, ySize, (jdouble*)(y) ) ;
+
+
+jdoubleArray z_ = curEnv->NewDoubleArray( zSize ) ;
+
+if (z_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( z_, 0, zSize, (jdouble*)(z) ) ;
+
+
+                         curEnv->CallStaticVoidMethod(cls, voidinitSubWinTo3djintintjstringjava_lang_StringjbooleanbooleanjintArray_intintjdoubledoublejdoubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID ,parent, legend_, isLegend_, flag_, alpha, theta, ebox_, x_, y_, z_);
+                        curEnv->DeleteLocalRef(legend_);
+curEnv->DeleteLocalRef(flag_);
+curEnv->DeleteLocalRef(ebox_);
+curEnv->DeleteLocalRef(x_);
+curEnv->DeleteLocalRef(y_);
+curEnv->DeleteLocalRef(z_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+}
+
+int Builder::createLight (JavaVM * jvm_, int parent, int type, bool visible, double const* pos, int posSize, double const* dir, int dirSize, double const* ambient, int ambientSize, double const* diffuse, int diffuseSize, double const* specular, int specularSize){
+
+JNIEnv * curEnv = NULL;
+jvm_->AttachCurrentThread(reinterpret_cast<void **>(&curEnv), NULL);
+jclass cls = initClass(curEnv);
+if ( cls == NULL) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+
+static jmethodID jintcreateLightjintintjintintjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID = curEnv->GetStaticMethodID(cls, "createLight", "(IIZ[D[D[D[D[D)I" ) ;
+if (jintcreateLightjintintjintintjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID == NULL) {
+throw GiwsException::JniMethodNotFoundException(curEnv, "createLight");
+}
+
+jboolean visible_ = (static_cast<bool>(visible) ? JNI_TRUE : JNI_FALSE);
+
+jdoubleArray pos_ = curEnv->NewDoubleArray( posSize ) ;
+
+if (pos_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( pos_, 0, posSize, (jdouble*)(pos) ) ;
+
+
+jdoubleArray dir_ = curEnv->NewDoubleArray( dirSize ) ;
+
+if (dir_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( dir_, 0, dirSize, (jdouble*)(dir) ) ;
+
+
+jdoubleArray ambient_ = curEnv->NewDoubleArray( ambientSize ) ;
+
+if (ambient_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( ambient_, 0, ambientSize, (jdouble*)(ambient) ) ;
+
+
+jdoubleArray diffuse_ = curEnv->NewDoubleArray( diffuseSize ) ;
+
+if (diffuse_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( diffuse_, 0, diffuseSize, (jdouble*)(diffuse) ) ;
+
+
+jdoubleArray specular_ = curEnv->NewDoubleArray( specularSize ) ;
+
+if (specular_ == NULL)
+{
+// check that allocation succeed
+throw GiwsException::JniBadAllocException(curEnv);
+}
+
+curEnv->SetDoubleArrayRegion( specular_, 0, specularSize, (jdouble*)(specular) ) ;
+
+
+                        jint res =  static_cast<jint>( curEnv->CallStaticIntMethod(cls, jintcreateLightjintintjintintjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID ,parent, type, visible_, pos_, dir_, ambient_, diffuse_, specular_));
+                        curEnv->DeleteLocalRef(pos_);
+curEnv->DeleteLocalRef(dir_);
+curEnv->DeleteLocalRef(ambient_);
+curEnv->DeleteLocalRef(diffuse_);
+curEnv->DeleteLocalRef(specular_);
+if (curEnv->ExceptionCheck()) {
+throw GiwsException::JniCallMethodException(curEnv);
+}
+return res;
+
+}
+
+}
diff --git a/scilab/modules/graphic_objects/src/jni/Builder.hxx b/scilab/modules/graphic_objects/src/jni/Builder.hxx
new file mode 100644 (file)
index 0000000..d79af02
--- /dev/null
@@ -0,0 +1,248 @@
+/* Generated by GIWS (version 2.0.2) with command:
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file builder.giws.xml
+*/
+/*
+
+This is generated code.
+
+This software is a computer program whose purpose is to hide the complexity
+of accessing Java objects/methods from C++ code.
+
+This software is governed by the CeCILL-B license under French law and
+abiding by the rules of distribution of free software.  You can  use,
+modify and/ or redistribute the software under the terms of the CeCILL-B
+license as circulated by CEA, CNRS and INRIA at the following URL
+"http://www.cecill.info".
+
+As a counterpart to the access to the source code and  rights to copy,
+modify and redistribute granted by the license, users are provided only
+with a limited warranty  and the software's author,  the holder of the
+economic rights,  and the successive licensors  have only  limited
+liability.
+
+In this respect, the user's attention is drawn to the risks associated
+with loading,  using,  modifying and/or developing or reproducing the
+software by the user in light of its specific status of free software,
+that may mean  that it is complicated to manipulate,  and  that  also
+therefore means  that it is reserved for developers  and  experienced
+professionals having in-depth computer knowledge. Users are therefore
+encouraged to load and test the software's suitability as regards their
+requirements in conditions enabling the security of their systems and/or
+data to be ensured and,  more generally, to use and operate it in the
+same conditions as regards security.
+
+The fact that you are presently reading this means that you have had
+knowledge of the CeCILL-B license and that you accept its terms.
+*/
+
+
+#ifndef __ORG_SCILAB_MODULES_GRAPHIC_OBJECTS_BUILDER_BUILDER__
+#define __ORG_SCILAB_MODULES_GRAPHIC_OBJECTS_BUILDER_BUILDER__
+#include <iostream>
+#include <string>
+#include <string.h>
+#include <stdlib.h>
+#include <jni.h>
+
+#include "GiwsException.hxx"
+
+        #if defined(_MSC_VER) /* Defined anyway with Visual */
+            #include <Windows.h>
+        #else
+            typedef signed char byte;
+        #endif
+
+
+#ifndef GIWSEXPORT
+# if defined(_MSC_VER) || defined(__WIN32__) || defined(__CYGWIN__)
+#   if defined(STATIC_LINKED)
+#     define GIWSEXPORT
+#   else
+#     define GIWSEXPORT __declspec(dllexport)
+#   endif
+# else
+#   if __GNUC__ >= 4
+#     define GIWSEXPORT __attribute__ ((visibility ("default")))
+#   else
+#     define GIWSEXPORT
+#   endif
+# endif
+#endif
+
+namespace org_scilab_modules_graphic_objects_builder {
+class GIWSEXPORT Builder {
+
+private:
+JavaVM * jvm;
+
+protected:
+jmethodID jintcreateRectjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjintintjintintjintintID; // cache method id
+jmethodID jintcloneGraphicContextjintintjintintID; // cache method id
+jmethodID jintcloneFontContextjintintjintintID; // cache method id
+jmethodID jintcreateHiddenLabeljintintID; // cache method id
+jmethodID jbooleanisAxesRedrawingjintintID; // cache method id
+jmethodID jintcreateLabeljintintjintintID; // cache method id
+jmethodID jintcreateNewFigureWithAxesID; // cache method id
+jmethodID voidcloneMenusjintintjintintID; // cache method id
+jmethodID jintcloneAxesModeljintintID; // cache method id
+jmethodID jintcreateSubWinjintintID; // cache method id
+jmethodID jintcreateTextjintintjobjectArray_java_lang_Stringjava_lang_StringjintintjintintjdoubledoublejdoubledoublejbooleanbooleanjdoubleArray_doubledoublejintintjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjintintID; // cache method id
+jclass stringArrayClass;
+jmethodID jintcreateArcjintintjdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejdoubledoublejintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanID; // cache method id
+jmethodID jintcreateAxisjintintjintintjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejintintjstringjava_lang_StringjintintjintintjintintjbooleanbooleanID; // cache method id
+jmethodID jintcreateCompoundjintintjintArray_intintID; // cache method id
+jmethodID jintcreateCompoundSeqjintintjintintID; // cache method id
+jmethodID jintcreateFecjintintjdoubleArray_doubledoublejintArray_intintjintArray_intintjbooleanbooleanID; // cache method id
+jmethodID jintcreateGrayplotjintintjintintjdoubleArray_doubledoublejintintjintintID; // cache method id
+jmethodID jintcreatePolylinejintintjbooleanbooleanjintintjintintjbooleanbooleanjintArray_intintjintintjbooleanbooleanjintintjbooleanbooleanjintintjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanjbooleanbooleanID; // cache method id
+jmethodID jintcreateLegendjintintjobjectArray_java_lang_Stringjava_lang_StringjintArray_intintID; // cache method id
+jmethodID jintcreateSegsjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejbooleanbooleanjintArray_intintjdoubledoubleID; // cache method id
+jmethodID jintcreateChampjintintjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubledoublejbooleanbooleanID; // cache method id
+jmethodID jintcreateSurfacejintintjintintjintintjintintID; // cache method id
+jmethodID voidinitSubWinTo3djintintjstringjava_lang_StringjbooleanbooleanjintArray_intintjdoubledoublejdoubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID; // cache method id
+jmethodID jintcreateLightjintintjintintjbooleanbooleanjdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoublejdoubleArray_doubledoubleID; // cache method id
+
+
+
+jobject instance;
+jclass instanceClass; // cache class
+
+                       
+// Caching (if any)
+
+
+/**
+* Get the environment matching to the current thread.
+*/
+virtual JNIEnv * getCurrentEnv();
+
+public:
+// Constructor
+/**
+* Create a wrapping of the object from a JNIEnv.
+* It will call the default constructor
+* @param JEnv_ the Java Env
+*/
+Builder(JavaVM * jvm_);
+
+/**
+* Create a wrapping of an already existing object from a JNIEnv.
+* The object must have already been instantiated
+* @param JEnv_ the Java Env
+* @param JObj the object
+*/
+Builder(JavaVM * jvm_, jobject JObj);
+
+
+/** 
+* This is a fake constructor to avoid the constructor
+* chaining when dealing with extended giws classes 
+*/
+#ifdef FAKEGIWSDATATYPE
+Builder(fakeGiwsDataType::fakeGiwsDataType /* unused */) {}
+#endif
+
+// Destructor
+~Builder();
+
+// Generic method
+// Synchronization methods
+/**
+* Enter monitor associated with the object.
+* Equivalent of creating a "synchronized(obj)" scope in Java.
+*/
+void synchronize();
+
+/**
+* Exit monitor associated with the object.
+* Equivalent of ending a "synchronized(obj)" scope.
+*/
+void endSynchronize();
+
+// Methods
+static int createRect(JavaVM * jvm_, int pparentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline);
+
+static int cloneGraphicContext(JavaVM * jvm_, int sourceIdentifier, int destIdentifier);
+
+static int cloneFontContext(JavaVM * jvm_, int sourceIdentifier, int destIdentifier);
+
+static int createHiddenLabel(JavaVM * jvm_, int parent);
+
+static bool isAxesRedrawing(JavaVM * jvm_, int subWin);
+
+static int createLabel(JavaVM * jvm_, int parent, int type);
+
+static int createNewFigureWithAxes(JavaVM * jvm_);
+
+static void cloneMenus(JavaVM * jvm_, int model, int newParent);
+
+static int cloneAxesModel(JavaVM * jvm_, int parent);
+
+static int createSubWin(JavaVM * jvm_, int parent);
+
+static int createText(JavaVM * jvm_, int parent, char const* const* text, int textSize, int rows, int cols, double x, double y, bool autoSize, double const* userSize, int userSizeSize, int centerPos, int foreground, bool isForeground, int background, bool isBackground, bool boxed, bool line, bool filled, int align);
+
+static int createArc(JavaVM * jvm_, int parent, double x, double y, double h, double w, double start, double end, int foreground, bool isForeground, int background, bool isBackground, bool filled, bool line);
+
+static int createAxis(JavaVM * jvm_, int parent, int dir, int tics, double const* vx, int vxSize, double const* vy, int vySize, int subint, char const* format, int fontSize, int textColor, int ticsColor, bool seg);
+
+static int createCompound(JavaVM * jvm_, int parent, int const* children, int childrenSize);
+
+static int createCompoundSeq(JavaVM * jvm_, int parent, int childrenCount);
+
+static int createFec(JavaVM * jvm_, int parent, double const* zminmax, int zminmaxSize, int const* colminmax, int colminmaxSize, int const* colout, int coloutSize, bool with_mesh);
+
+static int createGrayplot(JavaVM * jvm_, int parent, int type, double const* pvecx, int pvecxSize, int n1, int n2);
+
+static int createPolyline(JavaVM * jvm_, int parent, bool closed, int plot, int foreground, bool isForeground, int const* background, int backgroundSize, int mark_style, bool isMarkStyle, int mark_foreground, bool isMarkForeground, int mark_background, bool isMarkBackground, bool isline, bool isfilled, bool ismark, bool isinterp);
+
+static int createLegend(JavaVM * jvm_, int parent, char const* const* text, int textSize, int const* handles, int handlesSize);
+
+static int createSegs(JavaVM * jvm_, int parent, double const* vx, int vxSize, double const* vy, int vySize, double const* vz, int vzSize, bool isVZ, int const* style, int styleSize, double arsize);
+
+static int createChamp(JavaVM * jvm_, int parent, double const* vx, int vxSize, double const* vy, int vySize, double const* vfx, int vfxSize, double const* vfy, int vfySize, double arsize, bool typeofchamp);
+
+static int createSurface(JavaVM * jvm_, int parent, int typeof3d, int colorFlag, int colorMode);
+
+static void initSubWinTo3d(JavaVM * jvm_, int parent, char const* legend, bool isLegend, int const* flag, int flagSize, double alpha, double theta, double const* ebox, int eboxSize, double const* x, int xSize, double const* y, int ySize, double const* z, int zSize);
+
+static int createLight(JavaVM * jvm_, int parent, int type, bool visible, double const* pos, int posSize, double const* dir, int dirSize, double const* ambient, int ambientSize, double const* diffuse, int diffuseSize, double const* specular, int specularSize);
+
+
+                        /**
+                        * Get class name to use for static methods
+                        * @return class name to use for static methods
+                        */
+                        
+                static const std::string className()
+                {
+                return "org/scilab/modules/graphic_objects/builder/Builder";
+                }
+                
+
+                        /**
+                        * Get class to use for static methods
+                        * @return class to use for static methods
+                        */
+                        
+                static jclass initClass(JNIEnv * curEnv)
+                {
+                    static jclass cls = 0;
+
+                    if (cls == 0)
+                    {
+                        jclass _cls = curEnv->FindClass(className().c_str());
+                        if (_cls)
+                        {
+                            cls = static_cast<jclass>(curEnv->NewGlobalRef(_cls));
+                        }
+                    }
+
+                    return cls;
+                 }
+                
+};
+
+
+}
+#endif
index 2938999..b45a4dc 100644 (file)
@@ -1,6 +1,6 @@
 #include "CallGraphicController.hxx"
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/graphic_objects.giws.xml
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file graphic_objects.giws.xml
 */
 /*
 
index d79a521..7cdf324 100644 (file)
@@ -1,5 +1,5 @@
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/graphic_objects.giws.xml
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file graphic_objects.giws.xml
 */
 /*
 
index b04428d..0b61343 100644 (file)
@@ -1,6 +1,6 @@
 #include "GraphicObjectBuilder.hxx"
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/graphic_objects.giws.xml
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file graphic_objects.giws.xml
 */
 /*
 
index 477ac68..861d658 100644 (file)
@@ -1,5 +1,5 @@
 /* Generated by GIWS (version 2.0.2) with command:
-giws --disable-return-size-array --output-dir src/jni/ --throws-exception-on-error --description-file src/jni/graphic_objects.giws.xml
+giws --disable-return-size-array --output-dir . --throws-exception-on-error --description-file graphic_objects.giws.xml
 */
 /*
 
diff --git a/scilab/modules/graphic_objects/src/jni/builder.giws.xml b/scilab/modules/graphic_objects/src/jni/builder.giws.xml
new file mode 100644 (file)
index 0000000..8466d23
--- /dev/null
@@ -0,0 +1,183 @@
+<?xml version="1.0"?>
+<package name="org.scilab.modules.graphic_objects.builder">
+    <object name="Builder">
+        <method name="createRect" returnType="int" modifier="static">
+            <parameter name="pparentsubwinUID" type="int"/>
+            <parameter name="x" type="double"/>
+            <parameter name="y" type="double"/>
+            <parameter name="height" type="double"/>
+            <parameter name="width" type="double"/>
+            <parameter name="foreground" type="int"/>
+            <parameter name="background" type="int"/>
+            <parameter name="isfilled" type="int"/>
+            <parameter name="isline" type="int"/>
+        </method>
+        <method name="cloneGraphicContext" returnType="int" modifier="static">
+            <parameter name="sourceIdentifier" type="int"/>
+            <parameter name="destIdentifier" type="int"/>
+        </method>
+        <method name="cloneFontContext" returnType="int" modifier="static">
+            <parameter name="sourceIdentifier" type="int"/>
+            <parameter name="destIdentifier" type="int"/>
+        </method>
+        <method name="createHiddenLabel" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+        </method>
+        <method name="isAxesRedrawing" returnType="boolean" modifier="static">
+            <parameter name="subWin" type="int"/>
+        </method>
+        <method name="createLabel" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="type" type="int"/>
+        </method>
+        <method name="createNewFigureWithAxes" returnType="int" modifier="static" />
+        <method name="cloneMenus" returnType="void" modifier="static">
+            <parameter name="model" type="int"/>
+            <parameter name="newParent" type="int"/>
+        </method>
+        <method name="cloneAxesModel" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+        </method>
+        <method name="createSubWin" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+        </method>
+        <method name="createText" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="text" type="String[]"/>
+            <parameter name="rows" type="int"/>
+            <parameter name="cols" type="int"/>
+            <parameter name="x" type="double"/>
+            <parameter name="y" type="double"/>
+            <parameter name="autoSize" type="boolean"/>
+            <parameter name="userSize" type="double[]"/>
+            <parameter name="centerPos" type="int"/>
+            <parameter name="foreground" type="int"/>
+            <parameter name="isForeground" type="boolean"/>
+            <parameter name="background" type="int"/>
+            <parameter name="isBackground" type="boolean"/>
+            <parameter name="boxed" type="boolean"/>
+            <parameter name="line" type="boolean"/>
+            <parameter name="filled" type="boolean"/>
+            <parameter name="align" type="int"/>
+        </method>
+        <method name="createArc" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="x" type="double"/>
+            <parameter name="y" type="double"/>
+            <parameter name="h" type="double"/>
+            <parameter name="w" type="double"/>
+            <parameter name="start" type="double"/>
+            <parameter name="end" type="double"/>
+            <parameter name="foreground" type="int"/>
+            <parameter name="isForeground" type="boolean"/>
+            <parameter name="background" type="int"/>
+            <parameter name="isBackground" type="boolean"/>
+            <parameter name="filled" type="boolean"/>
+            <parameter name="line" type="boolean"/>
+        </method>
+        <method name="createAxis" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="dir" type="int"/>
+            <parameter name="tics" type="int"/>
+            <parameter name="vx" type="double[]"/>
+            <parameter name="vy" type="double[]"/>
+            <parameter name="subint" type="int"/>
+            <parameter name="format" type="String"/>
+            <parameter name="fontSize" type="int"/>
+            <parameter name="textColor" type="int"/>
+            <parameter name="ticsColor" type="int"/>
+            <parameter name="seg" type="boolean"/>
+        </method>
+        <method name="createCompound" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="children" type="int[]"/>
+        </method>
+        <method name="createCompoundSeq" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="childrenCount" type="int"/>
+        </method>
+        <method name="createFec" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="zminmax" type="double[]"/>
+            <parameter name="colminmax" type="int[]"/>
+            <parameter name="colout" type="int[]"/>
+            <parameter name="with_mesh" type="boolean"/>
+        </method>
+        <method name="createGrayplot" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="type" type="int"/>
+            <parameter name="pvecx" type="double[]"/>
+            <parameter name="n1" type="int"/>
+            <parameter name="n2" type="int"/>
+        </method>
+        <method name="createPolyline" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="closed" type="boolean"/>
+            <parameter name="plot" type="int"/>
+            <parameter name="foreground" type="int"/>
+            <parameter name="isForeground" type="boolean"/>
+            <parameter name="background" type="int[]"/>
+            <parameter name="mark_style" type="int"/>
+            <parameter name="isMarkStyle" type="boolean"/>
+            <parameter name="mark_foreground" type="int"/>
+            <parameter name="isMarkForeground" type="boolean"/>
+            <parameter name="mark_background" type="int"/>
+            <parameter name="isMarkBackground" type="boolean"/>
+            <parameter name="isline" type="boolean"/>
+            <parameter name="isfilled" type="boolean"/>
+            <parameter name="ismark" type="boolean"/>
+            <parameter name="isinterp" type="boolean"/>
+        </method>
+        <method name="createLegend" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="text" type="String[]"/>
+            <parameter name="handles" type="int[]"/>
+        </method>
+        <method name="createSegs" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="vx" type="double[]"/>
+            <parameter name="vy" type="double[]"/>
+            <parameter name="vz" type="double[]"/>
+            <parameter name="isVZ" type="boolean"/>
+            <parameter name="style" type="int[]"/>
+            <parameter name="arsize" type="double"/>
+        </method>
+        <method name="createChamp" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="vx" type="double[]"/>
+            <parameter name="vy" type="double[]"/>
+            <parameter name="vfx" type="double[]"/>
+            <parameter name="vfy" type="double[]"/>
+            <parameter name="arsize" type="double"/>
+            <parameter name="typeofchamp" type="boolean"/>
+        </method>
+        <method name="createSurface" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="typeof3d" type="int"/>
+            <parameter name="colorFlag" type="int"/>
+            <parameter name="colorMode" type="int"/>
+        </method>
+        <method name="initSubWinTo3d" returnType="void" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="legend" type="String"/>
+            <parameter name="isLegend" type="boolean"/>
+            <parameter name="flag" type="int[]"/>
+            <parameter name="alpha" type="double"/>
+            <parameter name="theta" type="double"/>
+            <parameter name="ebox" type="double[]"/>
+            <parameter name="x" type="double[]"/>
+            <parameter name="y" type="double[]"/>
+            <parameter name="z" type="double[]"/>
+        </method>
+        <method name="createLight" returnType="int" modifier="static">
+            <parameter name="parent" type="int"/>
+            <parameter name="type" type="int"/>
+            <parameter name="visible" type="boolean"/>
+            <parameter name="pos" type="double[]"/>
+            <parameter name="dir" type="double[]"/>
+            <parameter name="ambient" type="double[]"/>
+            <parameter name="diffuse" type="double[]"/>
+            <parameter name="specular" type="double[]"/>
+        </method>
+    </object>
+</package>
index adaaa34..a2003f4 100644 (file)
@@ -347,9 +347,7 @@ src/c/getHandleProperty/set_specular_color_property.c \
 src/c/getHandleProperty/set_use_color_material_property.c \
 src/c/getHandleProperty/set_material_shininess_property.c \
 src/c/getHandleProperty/set_light_type_property.c \
-src/c/getHandleProperty/set_direction_property.c \
-src/c/Light.c
-
+src/c/getHandleProperty/set_direction_property.c
 
 GATEWAY_C_SOURCES = sci_gateway/c/sci_swap_handles.c \
 sci_gateway/c/sci_grayplot.c \
index 9eba104..48fd2a1 100644 (file)
@@ -494,8 +494,7 @@ am__objects_1 = src/c/libscigraphics_algo_la-GetCommandArg.lo \
        src/c/getHandleProperty/libscigraphics_algo_la-set_use_color_material_property.lo \
        src/c/getHandleProperty/libscigraphics_algo_la-set_material_shininess_property.lo \
        src/c/getHandleProperty/libscigraphics_algo_la-set_light_type_property.lo \
-       src/c/getHandleProperty/libscigraphics_algo_la-set_direction_property.lo \
-       src/c/libscigraphics_algo_la-Light.lo
+       src/c/getHandleProperty/libscigraphics_algo_la-set_direction_property.lo
 am_libscigraphics_algo_la_OBJECTS = $(am__objects_1)
 libscigraphics_algo_la_OBJECTS = $(am_libscigraphics_algo_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
@@ -1247,8 +1246,7 @@ src/c/getHandleProperty/set_specular_color_property.c \
 src/c/getHandleProperty/set_use_color_material_property.c \
 src/c/getHandleProperty/set_material_shininess_property.c \
 src/c/getHandleProperty/set_light_type_property.c \
-src/c/getHandleProperty/set_direction_property.c \
-src/c/Light.c
+src/c/getHandleProperty/set_direction_property.c
 
 GATEWAY_C_SOURCES = sci_gateway/c/sci_swap_handles.c \
 sci_gateway/c/sci_grayplot.c \
@@ -2505,8 +2503,6 @@ src/c/getHandleProperty/libscigraphics_algo_la-set_light_type_property.lo:  \
 src/c/getHandleProperty/libscigraphics_algo_la-set_direction_property.lo:  \
        src/c/getHandleProperty/$(am__dirstamp) \
        src/c/getHandleProperty/$(DEPDIR)/$(am__dirstamp)
-src/c/libscigraphics_algo_la-Light.lo: src/c/$(am__dirstamp) \
-       src/c/$(DEPDIR)/$(am__dirstamp)
 
 libscigraphics-algo.la: $(libscigraphics_algo_la_OBJECTS) $(libscigraphics_algo_la_DEPENDENCIES) $(EXTRA_libscigraphics_algo_la_DEPENDENCIES) 
        $(AM_V_CCLD)$(LINK) $(am_libscigraphics_algo_la_rpath) $(libscigraphics_algo_la_OBJECTS) $(libscigraphics_algo_la_LIBADD) $(LIBS)
@@ -2810,7 +2806,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-Gray.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-InitObjects.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-Interaction.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-Light.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-Plo2dEch.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-Plo2dn.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigraphics_algo_la-SetProperty.Plo@am__quote@
@@ -5405,13 +5400,6 @@ src/c/getHandleProperty/libscigraphics_algo_la-set_direction_property.lo: src/c/
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphics_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/c/getHandleProperty/libscigraphics_algo_la-set_direction_property.lo `test -f 'src/c/getHandleProperty/set_direction_property.c' || echo '$(srcdir)/'`src/c/getHandleProperty/set_direction_property.c
 
-src/c/libscigraphics_algo_la-Light.lo: src/c/Light.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphics_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/c/libscigraphics_algo_la-Light.lo -MD -MP -MF src/c/$(DEPDIR)/libscigraphics_algo_la-Light.Tpo -c -o src/c/libscigraphics_algo_la-Light.lo `test -f 'src/c/Light.c' || echo '$(srcdir)/'`src/c/Light.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/c/$(DEPDIR)/libscigraphics_algo_la-Light.Tpo src/c/$(DEPDIR)/libscigraphics_algo_la-Light.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/c/Light.c' object='src/c/libscigraphics_algo_la-Light.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphics_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/c/libscigraphics_algo_la-Light.lo `test -f 'src/c/Light.c' || echo '$(srcdir)/'`src/c/Light.c
-
 src/nographics/libscigraphics_disable_la-nographics.lo: src/nographics/nographics.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigraphics_disable_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/nographics/libscigraphics_disable_la-nographics.lo -MD -MP -MF src/nographics/$(DEPDIR)/libscigraphics_disable_la-nographics.Tpo -c -o src/nographics/libscigraphics_disable_la-nographics.lo `test -f 'src/nographics/nographics.c' || echo '$(srcdir)/'`src/nographics/nographics.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/nographics/$(DEPDIR)/libscigraphics_disable_la-nographics.Tpo src/nographics/$(DEPDIR)/libscigraphics_disable_la-nographics.Plo
index 24f5554..326a54d 100644 (file)
@@ -378,7 +378,6 @@ lib /DEF:"$(ProjectDir)elementary_functions_f_Import.def" /SUBSYSTEM:WINDOWS /MA
     <ClCompile Include="sci_gateway\c\gw_graphics.c" />
     <ClCompile Include="src\c\InitObjects.c" />
     <ClCompile Include="src\c\Interaction.c" />
-    <ClCompile Include="src\c\Light.c" />
     <ClCompile Include="src\c\loadTextRenderingAPI.c" />
     <ClCompile Include="src\c\math_graphics.c">
       <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MinSpace</Optimization>
@@ -693,4 +692,4 @@ lib /DEF:"$(ProjectDir)elementary_functions_f_Import.def" /SUBSYSTEM:WINDOWS /MA
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>
\ No newline at end of file
index 55b277c..892a647 100644 (file)
     <ClCompile Include="src\c\getHandleProperty\set_material_shininess_property.c">
       <Filter>Source Files</Filter>
     </ClCompile>
-    <ClCompile Include="src\c\Light.c">
-      <Filter>Source Files</Filter>
-    </ClCompile>
     <ClCompile Include="src\c\getHandleProperty\set_image_type_property.c">
       <Filter>Source Files</Filter>
     </ClCompile>
       <Filter>Resource Files</Filter>
     </ResourceCompile>
   </ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
index 58f2e93..5b4ce39 100644 (file)
@@ -59,64 +59,16 @@ sciTypeOf3D;
  * If a current figure exists : return it
  * Otherwise create a new one.
  */
-GRAPHICS_IMPEXP int createNewFigureWithAxes(void);
-
-GRAPHICS_IMPEXP void cloneAxesModel(int iFigureUID);
-
-GRAPHICS_IMPEXP void cloneMenus(int iModelUID, int iCloneUID);
-
 GRAPHICS_IMPEXP int getOrCreateDefaultSubwin(void);
-
-GRAPHICS_IMPEXP int ConstructSubWin(int iParentfigure); /* BUILD */
-
-GRAPHICS_IMPEXP int allocateText(int iParentsubwinUID,
-                                 char **text,
-                                 int nbRow,
-                                 int nbCol,
-                                 double x,
-                                 double y,
-                                 BOOL autoSize,
-                                 double userSize[2],
-                                 int  centerPos,
-                                 int *foreground, int *background, BOOL isboxed, BOOL isline, BOOL isfilled, sciTextAlignment align);
-
 GRAPHICS_IMPEXP int ConstructText(int iParentsubwinUID, char **text, int nbRow, int nbCol, double x,
                                   double y, BOOL autoSize, double userSize[2], BOOL centerPos, int *foreground, int *background,
                                   BOOL isboxed, BOOL isline, BOOL isfilled, sciTextAlignment align);
-
-GRAPHICS_IMPEXP int ConstructLegend(int iParentsubwinUID, char *text[], long long tabofhandles[], int nblegends);   /* BUILD */
-
+GRAPHICS_IMPEXP int ConstructLegend(int iParentsubwinUID, char *text[], int* tabofhandles, int nblegends);   /* BUILD */
 GRAPHICS_IMPEXP int ConstructPolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double *pvecz, int closed, int n1, int plot, int *foreground, int *background, int *mark_style, int *mark_foreground, int *mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterpshaded);    /* BUILD */
-
-GRAPHICS_IMPEXP int ConstructArc(int iParentsubwinUID, double x, double y,
-                                 double height, double width, double alphabegin, double alphaend,
-                                 int *foreground, int *background, BOOL isfilled, BOOL isline);
-
-GRAPHICS_IMPEXP int ConstructRectangle(int iParentsubwinUID, double x, double y,
-                                       double height, double width, int *foreground, int *background, int isfilled, int isline);
-
 GRAPHICS_IMPEXP int ConstructSurface(int iParentsubwinUID, sciTypeOf3D typeof3d, double *pvecx, double *pvecy, double *pvecz, double *zcol, int izcol, int dimzx, int dimzy, int *flag, double *ebox, int flagcolor, int *isfac, int *m1, int *n1, int *m2, int *n2, int *m3, int *n3, int *m3n, int *n3n); /* BUILD */
-
 GRAPHICS_IMPEXP int ConstructGrayplot(int iParentsubwinUID, double *vx, double *vy, double *vz, int nx, int ny, int type);  /* BUILD */
-
 GRAPHICS_IMPEXP int ConstructImplot(int iParentsubwinUID, double * rect, unsigned char *vz, int nx, int ny, int plottype);  /* BUILD */
-
-GRAPHICS_IMPEXP int ConstructAxis(int iParentsubwinUID, char dir, char tics, double *vx, int nx, double *vy, int ny, char *str[], int subint, char *format, int fontsize, int textcolor, int ticscolor, char logscale, int seg, int nb_tics_labels);    /* BUILD */
-
 GRAPHICS_IMPEXP int ConstructFec(int iParentsubwinUID, double *pvecx, double *pvecy, double *pnoeud, double *pfun, int Nnode, int Ntr, double *zminmax, int *colminmax, int *colout, BOOL with_mesh);   /* BUILD */
-
-GRAPHICS_IMPEXP int ConstructSegs(int iParentsubwinUID, int type, double *vx, double *vy, double *vz, int Nbr1, int Nbr2, int Nbr3, double *vfx, double *vfy, int flag, int *style, double arsize, int colored, int typeofchamp);   /* BUILD */
-
-GRAPHICS_IMPEXP int ConstructCompound(long *tabpointobj, int number); /* BUILD */
-GRAPHICS_IMPEXP int ConstructCompoundSeq(int number); /* BUILD */
-
-GRAPHICS_IMPEXP void ConstructLabel(int iParentsubwinUID, char const* text, int type); /* BUILD */
-
-/**
- * Create a polyline but does not add it to Scilab hierarchy
- */
-GRAPHICS_IMPEXP int allocatePolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double *pvecz,
-                                     int closed, int n1, int plot, int *foreground, int *background,
-                                     int *mark_style, int *mark_foreground, int *mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterpshaded);
+GRAPHICS_IMPEXP int ConstructLight(char* fname, int iSubwin, int type, BOOL visible, double * position, double * direction, double * ambient_color, double * diffuse_color, double * specular_color);
 
 #endif /* __SCI_BUILD__ */
index de550f7..d82b9a5 100644 (file)
 
 /*--------------------------------------------------------------------------*/
 /**
- * copy the ContouredObject properties of a source object to a destination object
- * The previous (non-MVC) implementation always returned 0, even if it was specified
- * that it could return -1 in the return comment.
- * @param sourceIdentifier the source object's MVC identifier
- * @param destIdentifier the destination object's MVC identifier
- * @return always 0, the copy is considered to be always correct
- */
-GRAPHICS_IMPEXP int cloneGraphicContext(int iSource, int iDest);
-/*--------------------------------------------------------------------------*/
-/**
- * copy the fontContext of an object to another.
- * @param sourceIdentifier the source object's MVC identifier
- * @param destIdentifier the destination object's MVC identifier
- * @return always 0, the copy is considered to be always correct
- */
-GRAPHICS_IMPEXP int cloneFontContext(int iSource, int iDest);
-/*--------------------------------------------------------------------------*/
-/**
  * Clones a polyline
  * @param sourceIdentifier the source polyline's identifier
  * @return the identifier of the cloned polyline.
index 99e42ad..71ee715 100644 (file)
@@ -54,7 +54,7 @@ int sci_Legend(char * fname, unsigned long fname_len)
     long handlesvalue = 0;
     int i = 0;
     int iObjUID = 0;
-    long long *tabofhandles = NULL;
+    int* tabofhandles = NULL;
     int iFigureUID = 0;
     int* piFigureUID = &iFigureUID;
     int iSubwinUID;
@@ -145,7 +145,7 @@ int sci_Legend(char * fname, unsigned long fname_len)
         location = propertyNameToLegendPlace(DEF_LEGEND_LOCATION);
     }
 
-    tabofhandles = (long long *)MALLOC(n * sizeof(long long));
+    tabofhandles = (int*)MALLOC(n * sizeof(int));
     if (tabofhandles == NULL)
     {
         freeAllocatedMatrixOfString(m2, n2, Str);
@@ -201,7 +201,7 @@ int sci_Legend(char * fname, unsigned long fname_len)
             return 1;
         }
 
-        tabofhandles[i] = handlesvalue;
+        tabofhandles[i] = iObjUID;
     }
 
     /* Create the legend */
index 863b3f2..e15d029 100644 (file)
@@ -43,6 +43,7 @@
 #include "getConsoleIdentifier.h"
 #include "CurrentSubwin.h"
 #include "sciprint.h"
+#include "createGraphicObject.h"
 
 #ifdef _MSC_VER
 #include "strdup_windows.h"
index 30f47dd..2a1c119 100644 (file)
@@ -30,6 +30,7 @@
 #include "Scierror.h"
 #include "HandleManagement.h"
 
+#include "createGraphicObject.h"
 #include "getGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
 #include "CurrentObject.h"
@@ -45,7 +46,7 @@ int sci_glue(char * fname, unsigned long fname_len)
     long long* outindex = NULL;
 
     int numrow = 0, numcol = 0, n = 0, cx1 = 1;
-    long *handelsvalue = NULL;
+    int *pObj = NULL;
     int i = 0;
 
     int iCompoundUID = 0;
@@ -109,14 +110,14 @@ int sci_glue(char * fname, unsigned long fname_len)
     }
 
     /* we must change the pobj to the Compound type */
-    handelsvalue = MALLOC(n * sizeof(long));
+    pObj = (int*)MALLOC(n * sizeof(int));
     for (i = 0 ; i < n ; i++)
     {
-        handelsvalue[i] = (unsigned long) l1[i];
-        iObjUID = getObjectFromHandle(handelsvalue[i]);
+        iObjUID = getObjectFromHandle((long)l1[i]);
+        pObj[i] = iObjUID;
         if (iObjUID == 0)
         {
-            FREE(handelsvalue);
+            FREE(pObj);
             Scierror(999, _("%s: The handle is not or no more valid.\n"), fname);
             return 0;
         }
@@ -130,7 +131,7 @@ int sci_glue(char * fname, unsigned long fname_len)
 
         if (iParentUID != iCurrentParentUID)
         {
-            FREE(handelsvalue);
+            FREE(pObj);
             Scierror(999, _("%s: Objects must have the same parent.\n"), fname);
             return 0;
         }
@@ -152,7 +153,7 @@ int sci_glue(char * fname, unsigned long fname_len)
     //    return 0;
     //}
 
-    iCompoundUID = ConstructCompound(handelsvalue, n);
+    iCompoundUID = createCompound(iParentUID, pObj, n);
     setCurrentObject(iCompoundUID);
 
     numrow = 1;
@@ -169,7 +170,7 @@ int sci_glue(char * fname, unsigned long fname_len)
     outindex[0] = getHandle(iCompoundUID);
     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 3;
     ReturnArguments(pvApiCtx);
-    FREE(handelsvalue);
+    FREE(pObj);
 
     return 0;
 }
index edd37a2..3cf96b4 100644 (file)
@@ -15,7 +15,7 @@
 #include "Scierror.h"
 #include "localization.h"
 #include "HandleManagement.h"
-#include "Light.h"
+#include "BuildObjects.h"
 #include "stricmp.h"
 
 
@@ -34,10 +34,9 @@ int sci_light(char *fname, unsigned long fname_len)
     int* piAddr        = NULL;
     int length = 0;
     char * pStr = NULL;
-    long long light_handle;
-    long long axesHandle;
-    BOOL result;
-
+    int light = 0;
+    int axes = 0;
+    long long axesHandle = 0;
 
     static rhs_opts opts[] =
     {
@@ -54,7 +53,7 @@ int sci_light(char *fname, unsigned long fname_len)
 
     if (nbInputArgument(pvApiCtx) == 0)
     {
-        result = createLight(fname, -1, -1, TRUE, NULL, NULL, NULL, NULL, NULL, &light_handle);
+        light = ConstructLight(fname, 0, -1, TRUE, NULL, NULL, NULL, NULL, NULL);
     }
     else
     {
@@ -82,6 +81,8 @@ int sci_light(char *fname, unsigned long fname_len)
                 Scierror(999, _("%s: Wrong type for input argument #%d: A graphic handle expected.\n"), fname, 1);
                 return 0;
             }
+
+            axes = getObjectFromHandle((long)axesHandle);
         }
 
         if (getOptionals(pvApiCtx, fname, opts) == 0)
@@ -94,6 +95,11 @@ int sci_light(char *fname, unsigned long fname_len)
         {
             if (getAllocatedSingleString(pvApiCtx, opts[6].piAddr, &pStr))
             {
+                if (pStr)
+                {
+                    freeAllocatedSingleString(pStr);
+                }
+
                 Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 7);
                 return 0;
             }
@@ -114,6 +120,11 @@ int sci_light(char *fname, unsigned long fname_len)
         {
             if (getAllocatedSingleString(pvApiCtx, opts[5].piAddr, &pStr))
             {
+                if (pStr)
+                {
+                    freeAllocatedSingleString(pStr);
+                }
+
                 Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 6);
                 return 0;
             }
@@ -155,17 +166,18 @@ int sci_light(char *fname, unsigned long fname_len)
             sciErr = getMatrixOfDouble(pvApiCtx, opts[4].piAddr, &opts[4].iCols, &opts[4].iRows, &specular_color);
         }
 
-        result = createLight(fname, axesHandle, type, visible, position, direction, ambient_color, diffuse_color, specular_color, &light_handle);
+        light = ConstructLight(fname, axes, type, visible, position, direction, ambient_color, diffuse_color, specular_color);
 
     }
 
-    if (result == FALSE)
+    //error occurs in ConstructLight
+    if (light == 0)
     {
-        //error msg come from createLight
+        //error is manage in ConstructLight
         return 0;
     }
 
-    if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, light_handle))
+    if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, getHandle(light)))
     {
         Scierror(999, _("%s: Memory allocation error.\n"), fname);
         return 0;
@@ -174,5 +186,4 @@ int sci_light(char *fname, unsigned long fname_len)
     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
     ReturnArguments(pvApiCtx);
     return 0;
-
 }
index 97ffaf8..7cdd9b5 100644 (file)
@@ -30,6 +30,7 @@
 #include "CurrentFigure.h"
 #include "CurrentSubwin.h"
 #include "CurrentObject.h"
+#include "createGraphicObject.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_newaxes(char * fname, unsigned long fname_len)
@@ -44,7 +45,7 @@ int sci_newaxes(char * fname, unsigned long fname_len)
 
     getOrCreateDefaultSubwin();
 
-    if ((iSubwinUID = ConstructSubWin (getCurrentFigure())) != 0)
+    if ((iSubwinUID = createSubWin (getCurrentFigure())) != 0)
     {
         if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, getHandle(iSubwinUID)))
         {
index 14faecd..80c9846 100644 (file)
@@ -29,6 +29,7 @@
 #include "Interaction.h"
 #include "FigureList.h"
 #include "CurrentFigure.h"
+#include "createGraphicObject.h"
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
index 5f24f9d..daca03a 100644 (file)
@@ -26,6 +26,7 @@
 #include "CurrentObject.h"
 
 #include "graphicObjectProperties.h"
+#include "createGraphicObject.h"
 #include "getGraphicObjectProperty.h"
 
 /*--------------------------------------------------------------------------*/
@@ -147,7 +148,7 @@ int sci_xarcs(char *fname, unsigned long fname_len)
 
     /* construct Compound and make it current object */
     {
-        int o = ConstructCompoundSeq(n1);
+        int o = createCompoundSeq(iCurrentSubWinUID, n1);
         setCurrentObject(o);
     }
 
index 10eb3b4..a468104 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
+#include "createGraphicObject.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_xfarcs(char *fname, unsigned long fname_len)
@@ -42,6 +43,7 @@ int sci_xfarcs(char *fname, unsigned long fname_len)
     int m2 = 0, n2 = 0;
 
     long hdl = 0;
+    int iCurrentSubWin = 0;
 
     int i = 0;
 
@@ -121,7 +123,7 @@ int sci_xfarcs(char *fname, unsigned long fname_len)
         }
     }
 
-    getOrCreateDefaultSubwin();
+    iCurrentSubWin = getOrCreateDefaultSubwin();
 
     for (i = 0; i < n1; ++i)
     {
@@ -133,7 +135,7 @@ int sci_xfarcs(char *fname, unsigned long fname_len)
 
     /** Construct Compound and make it current object **/
     {
-        int o = ConstructCompoundSeq(n1);
+        int o = createCompoundSeq(iCurrentSubWin, n1);
         setCurrentObject(o);
     }
 
index a43bb86..9ce834f 100644 (file)
@@ -25,6 +25,7 @@
 #include "BuildObjects.h"
 #include "CurrentFigure.h"
 
+#include "createGraphicObject.h"
 #include "graphicObjectProperties.h"
 #include "setGraphicObjectProperty.h"
 
index 5419ba2..5ebec5c 100644 (file)
@@ -30,6 +30,7 @@
 #include "Scierror.h"
 #include "HandleManagement.h"
 
+#include "createGraphicObject.h"
 #include "CurrentObject.h"
 #include "BuildObjects.h"
 #include "graphicObjectProperties.h"
index 8068789..cf0b432 100644 (file)
@@ -30,6 +30,7 @@
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
+#include "createGraphicObject.h"
 
 /*--------------------------------------------------------------------------*/
 int sci_xstring(char *fname, unsigned long fname_len)
@@ -55,6 +56,7 @@ int sci_xstring(char *fname, unsigned long fname_len)
     long hdlstr = 0;
     int nbElement = 0, i = 0;
     BOOL isboxed = FALSE;
+    int iCurrentSubWin = 0;
 
     CheckInputArgument(pvApiCtx, 3, 5);
 
@@ -202,7 +204,7 @@ int sci_xstring(char *fname, unsigned long fname_len)
         isboxed = (*l5 != 0);
     }
 
-    getOrCreateDefaultSubwin();
+    iCurrentSubWin = getOrCreateDefaultSubwin();
 
     if (nbElement == 1)
     {
@@ -245,7 +247,7 @@ int sci_xstring(char *fname, unsigned long fname_len)
          * To be modified
          */
         {
-            int o = ConstructCompoundSeq(nbElement);
+            int o = createCompoundSeq(iCurrentSubWin, nbElement);
         }
     }
 
index adca1c1..3ea9324 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "graphicObjectProperties.h"
 #include "getGraphicObjectProperty.h"
+#include "createGraphicObject.h"
 
 /*--------------------------------------------------------------------------*/
 static int getZoomedObject(const char * fname);
index a2fd197..add7ca9 100644 (file)
@@ -50,7 +50,6 @@
 
 #include "Format.h"             // computeDefaultTicsLabels
 
-#include "createGraphicObject.h"
 #include "deleteGraphicObject.h"
 #include "returnType.h"
 #include "getGraphicObjectProperty.h"
 #include "CurrentObject.h"
 #include "FigureModel.h"
 #include "AxesModel.h"
+#include "createGraphicObject.h"
 
-/**
- * If a current figure exists : return it
- * Otherwise create a new one.
- *
- * This method also alocate an axe object.
- *
- * After this call: the current figure the current axes and the current subwin
- * are set to the appropriate values.
- *
- * @return a reference to the current figure.
- */
-GRAPHICS_IMPEXP int createNewFigureWithAxes()
-{
-    int iID = 0;
-    int iFigureUID = NULL;
-    int* piSize = NULL;
-    int bTrue = (int)TRUE;
-
-    iFigureUID = cloneGraphicObject(getFigureModel());
-
-    /*
-     * Clone the default menus
-     */
-    cloneMenus(getFigureModel(), iFigureUID);
-
-    setGraphicObjectProperty(iFigureUID, __GO_ID__, &iID, jni_int, 1);
-
-    /*
-     * Clone the default axes
-     */
-    cloneAxesModel(iFigureUID);
-    setCurrentFigure(iFigureUID);
-    /*
-     * Force axes size after window creation (Java)
-     */
-    getGraphicObjectProperty(getFigureModel(), __GO_SIZE__, jni_int_vector, (void **)&piSize);
-    setGraphicObjectProperty(iFigureUID, __GO_SIZE__, piSize, jni_int_vector, 2);
-    getGraphicObjectProperty(getFigureModel(), __GO_AXES_SIZE__, jni_int_vector, (void **)&piSize);
-    setGraphicObjectProperty(iFigureUID, __GO_AXES_SIZE__, piSize, jni_int_vector, 2);
-
-
-    setGraphicObjectProperty(iFigureUID, __GO_VALID__, &bTrue, jni_bool, 1);
-    // return the reference to the current figure
-    return getCurrentFigure();
-}
-
-/**
- * Clone a new Axes object using the Axes model which is then
- * attached to the newly created Figure.
- *
- * After this call: tthe current axes and the current subwin are set to the
- * appropriate values.
- */
-GRAPHICS_IMPEXP void cloneAxesModel(int iFigureUID)
-{
-    int iAxesUID = cloneGraphicObject(getAxesModel());
-
-    /* Clone the Axes model's labels and attach them to the newly created Axes */
-    ConstructLabel(iAxesUID, "", 1);
-    ConstructLabel(iAxesUID, "", 2);
-    ConstructLabel(iAxesUID, "", 3);
-    ConstructLabel(iAxesUID, "", 4);
-
-    /* Sets the parent-child relationship within the MVC */
-    setGraphicObjectRelationship(iFigureUID, iAxesUID);
-
-    /* Sets the newly created Axes as the Figure's current selected child */
-    setGraphicObjectProperty(iFigureUID, __GO_SELECTED_CHILD__, &iAxesUID, jni_int, 1);
-
-    // Set new axes as default too.
-    setCurrentObject(iAxesUID);
-    setCurrentSubWin(iAxesUID);
-}
-
-GRAPHICS_IMPEXP void cloneMenus(int iModelUID, int iCloneUID)
-{
-    int iNbChildren = 0;
-    int *piNbChildren = &iNbChildren;
-    int iChild = 0;
-    int iChildUID = 0;
-    int* pChildren = NULL;
-    int iChildType = -1;
-    int *piChildType = &iChildType;
-
-    getGraphicObjectProperty(iModelUID, __GO_CHILDREN_COUNT__, jni_int, (void **)&piNbChildren);
-    getGraphicObjectProperty(iModelUID, __GO_CHILDREN__, jni_int_vector, (void **)&pChildren);
-    for (iChild = iNbChildren - 1; iChild >= 0; iChild--)
-    {
-        getGraphicObjectProperty(pChildren[iChild], __GO_TYPE__, jni_int, (void **)&piChildType);
-        if (iChildType == __GO_UIMENU__)
-        {
-            iChildUID = cloneGraphicObject(pChildren[iChild]);
-
-            setGraphicObjectRelationship(iCloneUID, iChildUID);
-            cloneMenus(pChildren[iChild], iChildUID);
-        }
-    }
-    releaseGraphicObjectProperty(__GO_CHILDREN__, pChildren, jni_int_vector, iNbChildren);
-}
 
 /**
  * If a current subwin exists: return it
@@ -180,165 +81,6 @@ GRAPHICS_IMPEXP int getOrCreateDefaultSubwin(void)
     return iSubWinUID;
 }
 
-/*-----------------------------------------------------------------------------*/
-
-/**ConstructSubWin
- * This function creates the Subwindow (the Axes) and the elementary structures.
- * The update of color properties (foreground, background, etc.)
- * according to the assigned parent Figure's colormap is not implemented yet.
- * To be implemented.
- *
- * @return a reference to the current object (will be invalidated on current object modification)
- */
-int ConstructSubWin(int iParentfigureUID)
-{
-    int parentType = -1;
-    int *piParentType = &parentType;
-    int iCloneUID = 0;
-    int iAxesmdlUID = getAxesModel();
-
-    getGraphicObjectProperty(iParentfigureUID, __GO_TYPE__, jni_int, (void**) &piParentType);
-
-    if (parentType != __GO_FIGURE__)
-    {
-        Scierror(999, _("The parent has to be a FIGURE\n"));
-        return 0;
-    }
-
-    iCloneUID = cloneGraphicObject(iAxesmdlUID);
-
-    /* Clone the Axes model's labels and attach them to the newly created Axes */
-    ConstructLabel(iCloneUID, "", 1);
-    ConstructLabel(iCloneUID, "", 2);
-    ConstructLabel(iCloneUID, "", 3);
-    ConstructLabel(iCloneUID, "", 4);
-
-    setGraphicObjectRelationship(iParentfigureUID, iCloneUID);
-
-    setCurrentObject(iCloneUID);
-    sciSetSelectedSubWin(iCloneUID);
-    setCurrentSubWin(iCloneUID);
-
-    return getCurrentObject();
-}
-
-/**
- * Creates a new text object. However the object is not added in the handle list.
- * Its graphic and font contexts are initialized.
- * This function is to be used with objects including a text object.
- */
-int allocateText(int iParentsubwinUID,
-                 char ** text,
-                 int nbRow,
-                 int nbCol,
-                 double x,
-                 double y,
-                 BOOL autoSize,
-                 double userSize[2],
-                 int centerPos, int *foreground, int *background, BOOL isboxed, BOOL isline, BOOL isfilled, sciTextAlignment align)
-{
-    int iObj = 0;
-    int textDimensions[2];
-    int visible = 0;
-    int *piVisible = &visible;
-    int clipRegionSet;
-    int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
-
-    double *clipRegion = NULL;
-    double position[3];
-    double setUserSize[2];
-
-    iObj = createGraphicObject(__GO_TEXT__);
-
-    /* Required to initialize the default contour properties */
-    setGraphicObjectProperty(iObj, __GO_PARENT__, &iParentsubwinUID, jni_int, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, piVisible, jni_bool, 1);
-
-    /* Clipping: to be checked for consistency */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, piClipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, piClipState, jni_int, 1);
-
-    /* Check if we should load LaTex / MathML Java libraries */
-    loadTextRenderingAPI(text, nbRow, nbCol);
-
-    /* Allocates the String array */
-    textDimensions[0] = nbRow;
-    textDimensions[1] = nbCol;
-
-    setGraphicObjectProperty(iObj, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2);
-
-    setGraphicObjectProperty(iObj, __GO_TEXT_STRINGS__, text, jni_string_vector, nbRow * nbCol);
-
-    position[0] = x;
-    position[1] = y;
-    position[2] = 0.0;
-
-    setGraphicObjectProperty(iObj, __GO_POSITION__, position, jni_double_vector, 3);
-
-    setGraphicObjectProperty(iObj, __GO_TEXT_BOX_MODE__, &centerPos, jni_int, 1);
-    setGraphicObjectProperty(iObj, __GO_AUTO_DIMENSIONING__, &autoSize, jni_bool, 1);
-
-    /* userSize must be specified if the size is given by the user */
-    /* or the user specified a rectangle */
-    if (!autoSize || centerPos)
-    {
-        setUserSize[0] = userSize[0];
-        setUserSize[1] = userSize[1];
-    }
-    else
-    {
-        setUserSize[0] = 0.0;
-        setUserSize[1] = 0.0;
-    }
-
-    setGraphicObjectProperty(iObj, __GO_TEXT_BOX__, setUserSize, jni_double_vector, 2);
-
-    /* Required to get the correct MVC value from the sciTextAlignment enum */
-    align = (sciTextAlignment)(align - 1);
-
-    /* Set alignment to left if its value is incorrect */
-    if (align < 0 || align > 2)
-    {
-        align = (sciTextAlignment)0;
-    }
-
-    setGraphicObjectProperty(iObj, __GO_ALIGNMENT__, &align, jni_int, 1);
-
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    cloneFontContext(iParentsubwinUID, iObj);
-
-    setGraphicObjectProperty(iObj, __GO_BOX__, &isboxed, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_LINE_MODE__, &isline, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_FILL_MODE__, &isfilled, jni_bool, 1);
-
-    if (foreground != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_LINE_COLOR__, foreground, jni_int, 1);
-    }
-
-    if (background != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_BACKGROUND__, foreground, jni_int, 1);
-    }
-
-    /* Parent reset to the null object */
-    setParentObject(iObj, 0);
-
-    return iObj;
-}
-
 /**ConstructText
  * This function creates the parents window (manager) and the elementaries structures
  * @param  char *pparentsubwinUID : parent subwin UID
@@ -363,8 +105,8 @@ int ConstructText(int iParentsubwinUID, char **text, int nbRow, int nbCol, doubl
         return 0;
     }
 
-    iObj = allocateText(iParentsubwinUID, text, nbRow, nbCol, x, y,
-                        autoSize, userSize, centerPos, foreground, background, isboxed, isline, isfilled, align);
+    iObj = createText(iParentsubwinUID, text, nbRow, nbCol, x, y,
+                      autoSize, (double*)userSize, centerPos, foreground, background, isboxed, isline, isfilled, align);
 
     setGraphicObjectRelationship(iParentsubwinUID, iObj);
     setCurrentObject(iObj);
@@ -379,156 +121,47 @@ int ConstructText(int iParentsubwinUID, char **text, int nbRow, int nbCol, doubl
  * @param int nblegends : the number of legend items
  * @return : object UID if ok , NULL if not
  */
-int ConstructLegend(int iParentsubwinUID, char **text, long long tabofhandles[], int nblegends)
+int ConstructLegend(int iParentsubwinUID, char **text, int* tabofhandles, int nblegends)
 {
     int iObj = 0;
-
-    int i = 0;
-    int iLegendPresent = 0;
-    int *piLegendPresent = &iLegendPresent;
-    int iVisible = 0;
-    int *piVisible = &iVisible;
-    int textDimensions[2];
-    int fillMode = 0;
-    int legendLocation = 0;
-
-    int clipRegionSet = 0;
-    int clipState = 0;
-
-    double *clipRegion = NULL;
-    double position[2];
-
-    int* piLineIDS = NULL;
-    int parentType = -1;
-    int *piParentType = &parentType;
-
-    /* Check beforehand whether a Legend object is already present */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_HAS_LEGEND_CHILD__, jni_bool, (void **)&piLegendPresent);
-
-    if (iLegendPresent)
-    {
-        /* Delete it (one Legend object allowed at most) */
-        int iLegendChildID;
-        int* piLegend = &iLegendChildID;
-
-        getGraphicObjectProperty(iParentsubwinUID, __GO_LEGEND_CHILD__, jni_int, (void **)&piLegend);
-
-        deleteGraphicObject(iLegendChildID);
-    }
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piParentType);
-
-    if (parentType != __GO_AXES__)
-    {
-        Scierror(999, _("The parent has to be a SUBWIN\n"));
-        return 0;
-    }
-
-    iObj = createGraphicObject(__GO_LEGEND__);
-
-    /* Required to initialize the default contour and font properties */
-    setGraphicObjectProperty(iObj, __GO_PARENT__, &iParentsubwinUID, jni_int, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &iVisible, jni_bool, 1);
-
-    piLineIDS = (int*)MALLOC(nblegends * sizeof(int));
-    if (piLineIDS == NULL)
-    {
-        Scierror(999, _("%s: No more memory.\n"), "ConstructLegend");
-        deleteGraphicObject(iObj);
-        return 0;
-    }
-
-    textDimensions[0] = nblegends;
-    textDimensions[1] = 1;
-
-    setGraphicObjectProperty(iObj, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2);
-    setGraphicObjectProperty(iObj, __GO_TEXT_STRINGS__, text, jni_string_vector, nblegends);
-
-    for (i = 0; i < nblegends; i++)
-    {
-        int iObjUID = getObjectFromHandle((long)tabofhandles[i]);
-
-        /*
-         * Links are ordered from most recent to least recent,
-         * as their referred-to Polylines in the latter's parent Compound object.
-         */
-        piLineIDS[nblegends - i - 1] = iObjUID;
-    }
-
-    setGraphicObjectProperty(iObj, __GO_LINKS__, piLineIDS, jni_int_vector, nblegends);
-
-    /*
-     * Do not release tmpObjUIDs (eg lineIDS content) as getObjectFromHandle pass data by reference.
-     */
-    FREE(piLineIDS);
-
-    position[0] = 0.0;
-    position[1] = 0.0;
-    setGraphicObjectProperty(iObj, __GO_POSITION__, position, jni_double_vector, 2);
-
-    /* 9: LOWER_CAPTION */
-    legendLocation = 9;
-    setGraphicObjectProperty(iObj, __GO_LEGEND_LOCATION__, &legendLocation, jni_int, 1);
-
-    /* Clipping: to be checked for consistency */
-    clipRegionSet = 0;
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    /* 0: OFF */
-    clipState = 0;
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    /* NEW :  used to draw the line and marks of the curve F.Leray 21.01.05 */
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    cloneFontContext(iParentsubwinUID, iObj);
-
-    fillMode = TRUE;
-    setGraphicObjectProperty(iObj, __GO_FILL_MODE__, &fillMode, jni_bool, 1);
-
-    setParentObject(iObj, 0);
-
-    setGraphicObjectRelationship(iParentsubwinUID, iObj);
+    iObj = createLegend(iParentsubwinUID, text, nblegends, tabofhandles, nblegends);
     setCurrentObject(iObj);
 
-    return getCurrentObject();
+    return iObj;
 }
 
 /*---------------------------------------------------------------------------------*/
 /**
  * Create a polyline but does not add it to Scilab hierarchy
  */
-int allocatePolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double *pvecz,
-                     int closed, int n1, int plot, int *foreground, int *background,
-                     int *mark_style, int *mark_foreground, int *mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterpshaded)
+int ConstructPolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double *pvecz,
+                      int closed, int n1, int plot, int *foreground, int *background,
+                      int *mark_style, int *mark_foreground, int *mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterpshaded)
 {
     int iObj = 0;
     int i = 0;
     BOOL result = FALSE;
-    char *type = NULL;
     int iPolyline = 0;
-    double barWidth = 0.;
-    double arrowSizeFactor = 0.;
-    double *clipRegion = NULL;
     double *dataVector = NULL;
-    int clipState = 0;
-    int *piClipState = &clipState;
-    int lineClosed = 0;
     int numElementsArray[2];
-    int visible = 0;
-    int *piVisible = &visible;
     int zCoordinatesSet = 0;
-    int clipRegionSet = 0;
-    int *piClipRegionSet = &clipRegionSet;
+    int iBackgroundSize = 1;
+
+    if (background != NULL)
+    {
+        if (isinterpshaded == TRUE)
+        {
+            iBackgroundSize = n1;
+        }
+    }
+    else
+    {
+        iBackgroundSize = 0;
+    }
+
+    iObj = createPolyline(iParentsubwinUID, closed > 1 ? TRUE : FALSE, plot, foreground, background, iBackgroundSize,
+                          mark_style, mark_foreground, mark_background, isline, isfilled, ismark, isinterpshaded);
 
-    iObj = createGraphicObject(__GO_POLYLINE__);
     iPolyline = createDataObject(iObj, __GO_POLYLINE__);
 
     if (iPolyline == 0)
@@ -537,32 +170,6 @@ int allocatePolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double
         return 0;
     }
 
-    barWidth = 0.0;
-    setGraphicObjectProperty(iObj, __GO_BAR_WIDTH__, &barWidth, jni_double, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &visible, jni_bool, 1);
-
-    /* Clip state and region */
-    /* To be checked for consistency */
-
-    /*
-     * releaseGraphicObjectProperty for any property passed by reference only
-     */
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    arrowSizeFactor = 1.0;
-    setGraphicObjectProperty(iObj, __GO_ARROW_SIZE_FACTOR__, &arrowSizeFactor, jni_double, 1);
 
     /*
      * First element: number of gons (always 1 for a Polyline)
@@ -657,310 +264,32 @@ int allocatePolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double
         }
     }
 
-    if (closed > 0)
-    {
-        lineClosed = 1;
-    }
-    else
-    {
-        lineClosed = 0;
-    }
-
-    setGraphicObjectProperty(iObj, __GO_CLOSED__, &lineClosed, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_POLYLINE_STYLE__, &plot, jni_int, 1);
-
-    /*
-     * Initializes the contour properties (background, foreground, etc)
-     * to the default values (those of the parent Axes).
-     */
-    cloneGraphicContext(iParentsubwinUID, iObj);
+    return iObj;
+}
 
-    /* colors and marks setting */
-    setGraphicObjectProperty(iObj, __GO_MARK_MODE__, &ismark, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_LINE_MODE__, &isline, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_FILL_MODE__, &isfilled, jni_bool, 1);
+/**ConstructSurface
+ * This function creates Surface Structure
+ */
+int ConstructSurface(int iParentsubwinUID, sciTypeOf3D typeof3d,
+                     double *pvecx, double *pvecy, double *pvecz, double *zcol,
+                     int izcol, int dimzx, int dimzy,
+                     int *flag, double *ebox, int flagcolor, int *isfac, int *m1, int *n1, int *m2, int *n2, int *m3, int *n3, int *m3n, int *n3n)
+{
+    int iObj = 0;
+    int parentType = -1;
+    int *piParentType = &parentType;
+    int const surfaceTypes[2] = { __GO_PLOT3D__, __GO_FAC3D__ };
 
-    /* shading interpolation vector and mode */
-    setGraphicObjectProperty(iObj, __GO_INTERP_COLOR_MODE__, &isinterpshaded, jni_bool, 1);
+    double *clipRegion = NULL;
 
-    if (foreground != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_LINE_COLOR__, foreground, jni_int, 1);
-    }
+    int nx = 0, ny = 0, nz = 0, nc = 0;
+    int result = 0;
+    int hiddenColor = 0;
+    int *piHiddenColor = &hiddenColor;
+    int surfaceMode = 0;
 
-    if (background != NULL)
-    {
-        if (isinterpshaded == TRUE)
-        {
-            /* 3 or 4 values to store */
-
-            setGraphicObjectProperty(iObj, __GO_INTERP_COLOR_VECTOR__, background, jni_int_vector, n1);
-        }
-        else
-        {
-            setGraphicObjectProperty(iObj, __GO_BACKGROUND__, background, jni_int, 1);
-        }
-    }
-
-    if (mark_style != NULL)
-    {
-        /* This does use the MVC */
-        setGraphicObjectProperty(iObj, __GO_MARK_STYLE__, mark_style, jni_int, 1);
-    }
-
-    if (mark_foreground != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_MARK_FOREGROUND__, mark_foreground, jni_int, 1);
-    }
-
-    if (mark_background != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_MARK_BACKGROUND__, mark_background, jni_int, 1);
-    }
-
-    visible = 1;
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &visible, jni_bool, 1);
-
-    return iObj;
-}
-
-/*---------------------------------------------------------------------------------*/
-/**ConstructPolyline
- * This function creates  Polyline 2d structure
- */
-int ConstructPolyline(int iParentsubwinUID, double *pvecx, double *pvecy, double *pvecz,
-                      int closed, int n1, int plot, int *foreground, int *background,
-                      int *mark_style, int *mark_foreground, int *mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterpshaded)
-{
-    return allocatePolyline(iParentsubwinUID, pvecx, pvecy, pvecz, closed, n1, plot,
-                            foreground, background, mark_style, mark_foreground, mark_background,
-                            isline, isfilled, ismark, isinterpshaded);
-}
-
-/**ConstructArc
- * This function creates an Arc structure
- */
-int ConstructArc(int iParentsubwinUID, double x, double y,
-                 double height, double width, double alphabegin, double alphaend, int *foreground, int *background, BOOL isfilled, BOOL isline)
-{
-    int iObj = 0;
-    int type = -1;
-    int *piType = &type;
-    double upperLeftPoint[3];
-    double *clipRegion = NULL;
-    int visible = 0;
-    int *piVisible = &visible;
-    int arcDrawingMethod = 0;
-    int *piArcDrawingMethod = &arcDrawingMethod;
-    int clipRegionSet = 0;
-    int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piType);
-
-    if (type != __GO_AXES__)
-    {
-        Scierror(999, _("The parent has to be a SUBWIN\n"));
-        return 0;
-    }
-
-    iObj = createGraphicObject(__GO_ARC__);
-
-    /*
-     * Sets the arc's parent in order to initialize the former's Contoured properties
-     * with the latter's values (cloneGraphicContext call below)
-     */
-    setGraphicObjectProperty(iObj, __GO_PARENT__, &iParentsubwinUID, jni_int, 1);
-
-    upperLeftPoint[0] = x;
-    upperLeftPoint[1] = y;
-    upperLeftPoint[2] = 0.0;
-
-    setGraphicObjectProperty(iObj, __GO_UPPER_LEFT_POINT__, upperLeftPoint, jni_double_vector, 3);
-
-    setGraphicObjectProperty(iObj, __GO_HEIGHT__, &height, jni_double, 1);
-    setGraphicObjectProperty(iObj, __GO_WIDTH__, &width, jni_double, 1);
-
-    setGraphicObjectProperty(iObj, __GO_START_ANGLE__, &alphabegin, jni_double, 1);
-    setGraphicObjectProperty(iObj, __GO_END_ANGLE__, &alphaend, jni_double, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &visible, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_ARC_DRAWING_METHOD__, jni_int, (void **)&piArcDrawingMethod);
-
-    setGraphicObjectProperty(iObj, __GO_ARC_DRAWING_METHOD__, &arcDrawingMethod, jni_int, 1);
-
-    /*
-     * Clip state and region
-     * To be checked for consistency
-     */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    /*
-     * Initializes the contour properties (background, foreground, etc)
-     * to the parent Axes' values.
-     */
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    /* Contour settings */
-    setGraphicObjectProperty(iObj, __GO_LINE_MODE__, &isline, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_FILL_MODE__, &isfilled, jni_bool, 1);
-
-    if (foreground != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_LINE_COLOR__, foreground, jni_int, 1);
-    }
-
-    if (background != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_BACKGROUND__, background, jni_int, 1);
-    }
-
-    /* Parent reset to the null object */
-    setParentObject(iObj, 0);
-
-    /*
-     * Sets the Axes as the arc's parent and adds the arc to
-     * its parent's list of children.
-     */
-    setGraphicObjectRelationship(iParentsubwinUID, iObj);
-
-    return iObj;
-}
-
-/**ConstructRectangle
- * This function creates Rectangle structure and only this to destroy all sons use DelGraphicsSon
- */
-int ConstructRectangle(int iParentsubwinUID, double x, double y,
-                       double height, double width, int *foreground, int *background, int isfilled, int isline)
-{
-    int iObj = 0;
-    char *type = NULL;
-    double upperLeftPoint[3];
-    double *clipRegion = NULL;
-    int visible = 0;
-    int *piVisible = &visible;
-    int clipRegionSet = 0;
-    int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
-    int iMarkMode = 0;
-    int *piMarkMode = &iMarkMode;
-
-    if (height < 0.0 || width < 0.0)
-    {
-        Scierror(999, _("Width and height must be positive.\n"));
-        return 0;
-    }
-
-    iObj = createGraphicObject(__GO_RECTANGLE__);
-
-    /*
-     * Sets the rectangle's parent in order to initialize the former's Contoured properties
-     * with the latter's values (cloneGraphicContext call below)
-     */
-
-    upperLeftPoint[0] = x;
-    upperLeftPoint[1] = y;
-    upperLeftPoint[2] = 0.0;
-
-    setGraphicObjectProperty(iObj, __GO_UPPER_LEFT_POINT__, upperLeftPoint, jni_double_vector, 3);
-
-    setGraphicObjectProperty(iObj, __GO_HEIGHT__, &height, jni_double, 1);
-    setGraphicObjectProperty(iObj, __GO_WIDTH__, &width, jni_double, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &visible, jni_bool, 1);
-
-    /* Clip state and region */
-    /* To be checked for consistency */
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_MARK_MODE__, jni_bool, (void **)&piMarkMode);
-    setGraphicObjectProperty(iObj, __GO_MARK_MODE__, &iMarkMode, jni_bool, 1);
-
-    /*
-     * Initializes the contour properties (background, foreground, etc)
-     * to the default values (those of the parent Axes).
-     */
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    /* Contour settings */
-    setGraphicObjectProperty(iObj, __GO_LINE_MODE__, &isline, jni_bool, 1);
-    setGraphicObjectProperty(iObj, __GO_FILL_MODE__, &isfilled, jni_bool, 1);
-
-    if (foreground != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_LINE_COLOR__, foreground, jni_int, 1);
-    }
-
-    if (background != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_BACKGROUND__, background, jni_int, 1);
-    }
-
-    /* Parent reset to the null object */
-    //setGraphicObjectProperty(pobjUID, __GO_PARENT__, "", jni_string, 1);
-
-    /*
-     * Sets the Axes as the rectangle's parent and adds the rectangle to
-     * its parent's list of children.
-     */
-    //setGraphicObjectRelationship(pparentsubwinUID, pobjUID);
-
-    return iObj;
-}
-
-/**ConstructSurface
- * This function creates Surface Structure
- */
-int ConstructSurface(int iParentsubwinUID, sciTypeOf3D typeof3d,
-                     double *pvecx, double *pvecy, double *pvecz, double *zcol,
-                     int izcol, int dimzx, int dimzy,
-                     int *flag, double *ebox, int flagcolor, int *isfac, int *m1, int *n1, int *m2, int *n2, int *m3, int *n3, int *m3n, int *n3n)
-{
-    int iObj = 0;
-    int parentType = -1;
-    int *piParentType = &parentType;
-    int const surfaceTypes[2] = { __GO_PLOT3D__, __GO_FAC3D__ };
-
-    double *clipRegion = NULL;
-
-    int nx = 0, ny = 0, nz = 0, nc = 0;
-    int result = 0;
-    int clipRegionSet = 0;
-    int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
-    int visible = 0;
-    int *piVisible = &visible;
-    int cdataMapping = 0;
-    int hiddenColor = 0;
-    int *piHiddenColor = &hiddenColor;
-    int surfaceMode = 0;
-
-    /* To be modified: the MVC does not allow Plot3d objects with color data yet */
-    if (typeof3d == SCI_PLOT3D)
+    /* To be modified: the MVC does not allow Plot3d objects with color data yet */
+    if (typeof3d == SCI_PLOT3D)
     {
         nx = dimzx;
         ny = dimzy;
@@ -1016,37 +345,10 @@ int ConstructSurface(int iParentsubwinUID, sciTypeOf3D typeof3d,
         return 0;
     }
 
-    iObj = createGraphicObject(surfaceTypes[*isfac]);
+    //iObj = createGraphicObject(surfaceTypes[*isfac]);
+    iObj = createSurface(iParentsubwinUID, surfaceTypes[*isfac], flagcolor, *flag);
     createDataObject(iObj, surfaceTypes[*isfac]);
 
-    /* Clip state and region */
-    /* To be checked for consistency */
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    /* Visibility */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &visible, jni_bool, 1);
-
-    setGraphicObjectProperty(iObj, __GO_COLOR_FLAG__, &flagcolor, jni_int, 1);
-
-    /* Direct mode enabled as default */
-    cdataMapping = 1;
-
-    /* Only for Fac3D */
-    setGraphicObjectProperty(iObj, __GO_DATA_MAPPING__, &cdataMapping, jni_int, 1);
-
-    setGraphicObjectProperty(iObj, __GO_COLOR_MODE__, &flag[0], jni_int, 1);
-
     /* Plot3d case */
     if (!*isfac)
     {
@@ -1099,28 +401,6 @@ int ConstructSurface(int iParentsubwinUID, sciTypeOf3D typeof3d,
         setGraphicObjectProperty(iObj, __GO_DATA_MODEL_Z__, pvecz, jni_double_vector, nz);
     }
 
-    /*-------END Replaced by: --------*/
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_HIDDEN_COLOR__, jni_int, (void **)&piHiddenColor);
-    setGraphicObjectProperty(iObj, __GO_HIDDEN_COLOR__, &hiddenColor, jni_int, 1);
-
-    /*
-     * surfaceMode set to "on", was previously done by InitGraphicContext, by setting
-     * the graphic context's line_mode to on, which stood for the surface_mode.
-     */
-    surfaceMode = 1;
-
-    setGraphicObjectProperty(iObj, __GO_SURFACE_MODE__, &surfaceMode, jni_bool, 1);
-
-    /*
-     * Adding a new handle and setting the parent-child relationship is now
-     * done after data initialization in order to avoid additional
-     * clean-up.
-     */
-    // Here we init old 'graphicContext' by cloning it from parent.
-    cloneGraphicContext(iParentsubwinUID, iObj);
-    setGraphicObjectRelationship(iParentsubwinUID, iObj);
-
     return iObj;
 }
 
@@ -1146,26 +426,16 @@ int ConstructGrayplot(int iParentsubwinUID, double *pvecx, double *pvecy, double
     int dataMapping = 0;
     int gridSize[4];
 
-    int parentVisible = 0;
-    int *piParentVisible = &parentVisible;
-    double *clipRegion = NULL;
-    int clipRegionSet = 0;
-    int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
     int numElements = 0;
 
-    double pdblScale[2];
-
     getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piTypeParent);
-
     if (typeParent != __GO_AXES__)
     {
         Scierror(999, _("The parent has to be a SUBWIN\n"));
         return 0;
     }
 
-    iObj = createGraphicObject(objectTypes[type]);
+    iObj = createGrayplot(iParentsubwinUID, type, pvecx, 2, n1, n2);
     iGrayplotID = createDataObject(iObj, objectTypes[type]);
 
     if (iGrayplotID == 0)
@@ -1203,15 +473,6 @@ int ConstructGrayplot(int iParentsubwinUID, double *pvecx, double *pvecy, double
         gridSize[3] = 1;
     }
 
-    /* Only for Matplot1 objects */
-    if (type == 2)
-    {
-        setGraphicObjectProperty(iObj, __GO_MATPLOT_TRANSLATE__, pvecx, jni_double_vector, 2);
-        pdblScale[0] = (pvecx[2] - pvecx[0]) / (n2 - 1.0);
-        pdblScale[1] = (pvecx[3] - pvecx[1]) / (n1 - 1.0);
-        setGraphicObjectProperty(iObj, __GO_MATPLOT_SCALE__, pdblScale, jni_double_vector, 2);
-    }
-
     /* Allocates the coordinates arrays */
     result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_GRID_SIZE__, gridSize, jni_int_vector, 4);
 
@@ -1229,381 +490,75 @@ int ConstructGrayplot(int iParentsubwinUID, double *pvecx, double *pvecy, double
         setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_Y__, pvecy, jni_double_vector, n2);
     }
 
-    if (type == 0)
-    {
-        numElements = n1 * n2;
-    }
-    else
-    {
-        numElements = (n1 - 1) * (n2 - 1);
-    }
-
-    setGraphicObjectProperty(iObj, __GO_DATA_MODEL_Z__, pvecz, jni_double_vector, numElements);
-
-    /*
-     * Adding a new handle and setting the parent-child relationship is now
-     * done after data initialization in order to avoid additional
-     * clean-up.
-     */
-
-    setGraphicObjectRelationship(iParentsubwinUID, iObj);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piParentVisible);
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &parentVisible, jni_bool, 1);
-
-    /*
-     * Clip state and region
-     * To be checked for consistency
-     */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    /* Initializes the default Contour values */
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    return iObj;
-}
-
-/********************** 14/05/2002 *****
- **ConstructGrayplot
- * This function is used to build Grayplot and Matplot objects.
- * It would probably be better to put the code related to Matplot objects
- * in a separate build function, as it would avoid having to perform several tests
- * on the type parameter. This is done so because Matplot objects were previously
- * internally represented by sciGrayplot structures.
- */
-int ConstructImplot(int iParentsubwinUID, double *pvecx, unsigned char *pvecz, int n1, int n2, int plottype)
-{
-    int iObj = 0;
-
-    int typeParent = -1;
-    int *piTypeParent = &typeParent;
-
-    int iGrayplotID = 0;
-    int result = 0;
-    int dataMapping = 0;
-    int gridSize[4];
-
-    int parentVisible = 0;
-    int *piParentVisible = &parentVisible;
-    double *clipRegion = NULL;
-    int clipRegionSet = 0;
-    int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
-    int numElements = 0;
-    double pdblScale[2];
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piTypeParent);
-
-    if (typeParent != __GO_AXES__)
-    {
-        Scierror(999, _("The parent has to be a SUBWIN\n"));
-        return 0;
-    }
-
-    iObj = createGraphicObject(__GO_MATPLOT__);
-    iGrayplotID = createDataObject(iObj, __GO_MATPLOT__);
-
-    if (iGrayplotID == 0)
-    {
-        deleteGraphicObject(iObj);
-        return 0;
-    }
-
-    gridSize[0] = n2;
-    gridSize[1] = 1;
-    gridSize[2] = n1;
-    gridSize[3] = 1;
-
-    /* Allocates the coordinates arrays */
-    result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_GRID_SIZE__, gridSize, jni_int_vector, 4);
-    if (result == 0)
-    {
-        deleteGraphicObject(iObj);
-        deleteDataObject(iObj);
-        return 0;
-    }
-
-    /* Only for Matplot1 objects */
-    if (pvecx)
-    {
-        setGraphicObjectProperty(iObj, __GO_MATPLOT_TRANSLATE__, pvecx, jni_double_vector, 2);
-        pdblScale[0] = (pvecx[2] - pvecx[0]) / (n2 - 1.0);
-        pdblScale[1] = (pvecx[3] - pvecx[1]) / (n1 - 1.0);
-        setGraphicObjectProperty(iObj, __GO_MATPLOT_SCALE__, pdblScale, jni_double_vector, 2);
-    }
-
-    numElements = (n1 - 1) * (n2 - 1);
-    if (plottype != -1)
-    {
-        setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_MATPLOT_DATA_INFOS__, &plottype, jni_int, 1);
-    }
-
-    setGraphicObjectProperty(iObj, __GO_DATA_MODEL_MATPLOT_IMAGE_DATA__, pvecz, jni_double_vector, numElements);
-
-    /*
-     * Adding a new handle and setting the parent-child relationship is now
-     * done after data initialization in order to avoid additional
-     * clean-up.
-     */
-    setGraphicObjectRelationship(iParentsubwinUID, iObj);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piParentVisible);
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &parentVisible, jni_bool, 1);
-
-    /*
-     * Clip state and region
-     * To be checked for consistency
-     */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    /* Initializes the default Contour values */
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    return iObj;
-}
-
-/**ConstructAxis
- * This function creates an Axis object
- * @author Djalel ABDEMOUCHE
- * @see sciSetCurrentObj
- *
- */
-int ConstructAxis(int iParentsubwinUID, char dir, char tics, double *vx,
-                  int nx, double *vy, int ny, char **str, int subint, char *format,
-                  int fontsize, int textcolor, int ticscolor, char logscale, int seg, int nb_tics_labels)
-{
-    int parentType = -1;
-    int *piParentType = &parentType;
-    int iObj = 0;
-    int i = 0;
-    int clipRegionSet = 0;
-    int clipState = 0;
-    int ticksDirection = 0;
-    int ticksStyle = 0;
-    double *clipRegion = NULL;
-    double doubleFontSize = 0.;
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piParentType);
-
-    if (parentType != __GO_AXES__)
-    {
-        Scierror(999, _("The parent has to be a SUBWIN\n"));
-        return 0;
-    }
-
-    iObj = createGraphicObject(__GO_AXIS__);
-
-    /* Required to initialize the default contour properties */
-    setGraphicObjectProperty(iObj, __GO_PARENT__, &iParentsubwinUID, jni_int, 1);
-
-    /* Clipping: to be checked for consistency */
-    clipRegionSet = 0;
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    /* 0: OFF */
-    clipState = 0;
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    /* The ticks style and direction MVC properties are Integers */
-    if (dir == 'u')
-    {
-        ticksDirection = 0;
-    }
-    else if (dir == 'd')
-    {
-        ticksDirection = 1;
-    }
-    else if (dir == 'l')
-    {
-        ticksDirection = 2;
-    }
-    else if (dir == 'r')
-    {
-        ticksDirection = 3;
-    }
-    else
-    {
-        ticksDirection = 0;
-    }
-
-    if (tics == 'v')
-    {
-        ticksStyle = 0;
-    }
-    else if (tics == 'r')
-    {
-        ticksStyle = 1;
-    }
-    else if (tics == 'i')
-    {
-        ticksStyle = 2;
-    }
-    else
-    {
-        ticksStyle = 0;
-    }
-
-    setGraphicObjectProperty(iObj, __GO_TICKS_DIRECTION__, &ticksDirection, jni_int, 1);
-    setGraphicObjectProperty(iObj, __GO_TICKS_STYLE__, &ticksStyle, jni_int, 1);
-
-    setGraphicObjectProperty(iObj, __GO_X_TICKS_COORDS__, vx, jni_double_vector, nx);
-    setGraphicObjectProperty(iObj, __GO_Y_TICKS_COORDS__, vy, jni_double_vector, ny);
-
-    /* FORMATN must be set before Labels are computed. */
-    if (format != NULL)
-    {
-        setGraphicObjectProperty(iObj, __GO_FORMATN__, format, jni_string, 1);
-    }
-
-    /*
-     * Labels are computed automatically depending on the ticks coordinates.
-     * The computation is performed by a C function which has been adapted
-     * to the MVC (property get calls) and was previously done in the
-     * tics labels property get C function.
-     * It should be done (or called) directly in the Java part of the model
-     * for the sake of efficiency.
-     * To be modified
-     */
-    if (str == NULL)
+    if (type == 0)
     {
-        char **matData;
-        StringMatrix *tics_labels;
-
-        tics_labels = computeDefaultTicsLabels(iObj);
-
-        if (tics_labels == NULL)
-        {
-            deleteGraphicObject(iObj);
-            return 0;
-        }
-
-        matData = getStrMatData(tics_labels);
-
-        /*
-         * The labels vector size must be computed using the matrix's dimensions.
-         * To be modified when the labels computation is moved to the Model.
-         */
-        setGraphicObjectProperty(iObj, __GO_TICKS_LABELS__, matData, jni_string_vector, tics_labels->nbCol * tics_labels->nbRow);
-
-        deleteMatrix(tics_labels);
+        numElements = n1 * n2;
     }
     else
     {
-        /*
-         * Labels are set using the str argument; the previous code tested whether each element of the
-         * str array was null and set the corresponding Axis' element to NULL, though there was no
-         * apparent reason to do so. This is still checked, but now aborts building the Axis.
-         */
-
-        if (nb_tics_labels == -1)
-        {
-            Scierror(999, _("Impossible case when building axis\n"));
-            deleteGraphicObject(iObj);
-            return 0;
-        }
-
-        for (i = 0; i < nb_tics_labels; i++)
-        {
-            if (str[i] == NULL)
-            {
-                deleteGraphicObject(iObj);
-                return 0;
-            }
-        }
-
-        setGraphicObjectProperty(iObj, __GO_TICKS_LABELS__, str, jni_string_vector, nb_tics_labels);
+        numElements = (n1 - 1) * (n2 - 1);
     }
 
-    setGraphicObjectProperty(iObj, __GO_SUBTICKS__, &subint, jni_int, 1);
-    setGraphicObjectProperty(iObj, __GO_TICKS_SEGMENT__, &seg, jni_bool, 1);
-
-    /* Initializes the default Contour values */
-    cloneGraphicContext(iParentsubwinUID, iObj);
-
-    /* Initializes the default Font values */
-    cloneFontContext(iParentsubwinUID, iObj);
-
-    /* Parent reset to the null object */
-    setParentObject(iObj, 0);
+    setGraphicObjectProperty(iObj, __GO_DATA_MODEL_Z__, pvecz, jni_double_vector, numElements);
 
     setGraphicObjectRelationship(iParentsubwinUID, iObj);
-
-    doubleFontSize = (double)fontsize;
-
-    setGraphicObjectProperty(iObj, __GO_FONT_SIZE__, &doubleFontSize, jni_double, 1);
-    setGraphicObjectProperty(iObj, __GO_FONT_COLOR__, &textcolor, jni_int, 1);
-    setGraphicObjectProperty(iObj, __GO_TICKS_COLOR__, &ticscolor, jni_int, 1);
-
     return iObj;
 }
 
-/********************** 21/05/2002 *****
- **ConstructFec
- * This function creates Fec
- * @author Djalel.ABDEMOUCHE
- * @see sciSetCurrentObj
+/********************** 14/05/2002 *****
+ **ConstructGrayplot
+ * This function is used to build Grayplot and Matplot objects.
+ * It would probably be better to put the code related to Matplot objects
+ * in a separate build function, as it would avoid having to perform several tests
+ * on the type parameter. This is done so because Matplot objects were previously
+ * internally represented by sciGrayplot structures.
  */
-int ConstructFec(int iParentsubwinUID, double *pvecx, double *pvecy, double *pnoeud,
-                 double *pfun, int Nnode, int Ntr, double *zminmax, int *colminmax, int *colout, BOOL with_mesh)
+int ConstructImplot(int iParentsubwinUID, double *pvecx, unsigned char *pvecz, int n1, int n2, int plottype)
 {
     int iObj = 0;
-    int iFecId = 0;
-    int result = 0;
 
-    int parentType = -1;
-    int *piParentType = &parentType;
+    int typeParent = -1;
+    int *piTypeParent = &typeParent;
+
+    int iGrayplotID = 0;
+    int result = 0;
+    int dataMapping = 0;
+    int gridSize[4];
 
     int parentVisible = 0;
     int *piParentVisible = &parentVisible;
-
     double *clipRegion = NULL;
     int clipRegionSet = 0;
     int *piClipRegionSet = &clipRegionSet;
-    int iClipState = 0;
-    int *piClipState = &iClipState;
+    int clipState = 0;
+    int *piClipState = &clipState;
+    int numElements = 0;
+    double pdblScale[2];
 
-    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piParentType);
+    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piTypeParent);
 
-    /* test using sciGetEntityType replaced by a test on the type string */
-    if (parentType != __GO_AXES__)
+    if (typeParent != __GO_AXES__)
     {
         Scierror(999, _("The parent has to be a SUBWIN\n"));
         return 0;
     }
 
-    iObj = createGraphicObject(__GO_FEC__);
-    iFecId = createDataObject(iObj, __GO_FEC__);
+    iObj = createGraphicObject(__GO_MATPLOT__);
+    iGrayplotID = createDataObject(iObj, __GO_MATPLOT__);
 
-    if (iFecId == 0)
+    if (iGrayplotID == 0)
     {
         deleteGraphicObject(iObj);
         return 0;
     }
 
-    /* Allocates the coordinates array */
-    result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_NUM_VERTICES__, &Nnode, jni_int, 1);
+    gridSize[0] = n2;
+    gridSize[1] = 1;
+    gridSize[2] = n1;
+    gridSize[3] = 1;
 
+    /* Allocates the coordinates arrays */
+    result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_GRID_SIZE__, gridSize, jni_int_vector, 4);
     if (result == 0)
     {
         deleteGraphicObject(iObj);
@@ -1611,28 +566,22 @@ int ConstructFec(int iParentsubwinUID, double *pvecx, double *pvecy, double *pno
         return 0;
     }
 
-    /* Allocates the triangle indices and values array */
-    result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_NUM_INDICES__, &Ntr, jni_int, 1);
-
-    if (result == 0)
+    /* Only for Matplot1 objects */
+    if (pvecx)
     {
-        deleteGraphicObject(iObj);
-        deleteDataObject(iObj);
-        return 0;
+        setGraphicObjectProperty(iObj, __GO_MATPLOT_TRANSLATE__, pvecx, jni_double_vector, 2);
+        pdblScale[0] = (pvecx[2] - pvecx[0]) / (n2 - 1.0);
+        pdblScale[1] = (pvecx[3] - pvecx[1]) / (n1 - 1.0);
+        setGraphicObjectProperty(iObj, __GO_MATPLOT_SCALE__, pdblScale, jni_double_vector, 2);
     }
 
-    setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_X__, pvecx, jni_double_vector, Nnode);
-    setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_Y__, pvecy, jni_double_vector, Nnode);
-
-    /* Fec-specific property: triangle indices plus special values (triangle number and flag) */
-    setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_FEC_TRIANGLES__, pnoeud, jni_double_vector, Ntr);
-
-    /* Function values */
-    setGraphicObjectProperty(iObj, __GO_DATA_MODEL_VALUES__, pfun, jni_double_vector, Nnode);
+    numElements = (n1 - 1) * (n2 - 1);
+    if (plottype != -1)
+    {
+        setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_MATPLOT_DATA_INFOS__, &plottype, jni_int, 1);
+    }
 
-    setGraphicObjectProperty(iObj, __GO_Z_BOUNDS__, zminmax, jni_double_vector, 2);
-    setGraphicObjectProperty(iObj, __GO_COLOR_RANGE__, colminmax, jni_int_vector, 2);
-    setGraphicObjectProperty(iObj, __GO_OUTSIDE_COLOR__, colout, jni_int_vector, 2);
+    setGraphicObjectProperty(iObj, __GO_DATA_MODEL_MATPLOT_IMAGE_DATA__, pvecz, jni_double_vector, numElements);
 
     /*
      * Adding a new handle and setting the parent-child relationship is now
@@ -1656,192 +605,87 @@ int ConstructFec(int iParentsubwinUID, double *pvecx, double *pvecy, double *pno
     setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
 
     getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &iClipState, jni_int, 1);
+    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
 
     /* Initializes the default Contour values */
     cloneGraphicContext(iParentsubwinUID, iObj);
 
-    /* line mode is set using with_mesh */
-    setGraphicObjectProperty(iObj, __GO_LINE_MODE__, &with_mesh, jni_bool, 1);
-
     return iObj;
 }
 
-/**ConstructSegs
- * This function creates Segments
- * It is used to create and initialize the data of both the Champ and Segs MVC objects.
+/********************** 21/05/2002 *****
+ **ConstructFec
+ * This function creates Fec
  * @author Djalel.ABDEMOUCHE
- * @version 0.1
  * @see sciSetCurrentObj
  */
-int ConstructSegs(int iParentsubwinUID, int type,
-                  double *vx, double *vy, double *vz,
-                  int Nbr1, int Nbr2, int Nbr3, double *vfx, double *vfy, int flag, int *style, double arsize, int colored, int typeofchamp)
+int ConstructFec(int iParentsubwinUID, double *pvecx, double *pvecy, double *pnoeud,
+                 double *pfun, int Nnode, int Ntr, double *zminmax, int *colminmax, int *colout, BOOL with_mesh)
 {
     int iObj = 0;
+    int iFecId = 0;
+    int result = 0;
 
-    int visible = 0;
-    int *piVisible = &visible;
+    int parentType = -1;
+    int *piParentType = &parentType;
+
+    int parentVisible = 0;
+    int *piParentVisible = &parentVisible;
+
+    double *clipRegion = NULL;
     int clipRegionSet = 0;
     int *piClipRegionSet = &clipRegionSet;
-    int clipState = 0;
-    int *piClipState = &clipState;
-    int numberArrows = 0;
-    int dimensions[2];
-    int i = 0;
+    int iClipState = 0;
+    int *piClipState = &iClipState;
 
-    double *clipRegion = NULL;
-    double *arrowCoords = NULL;
+    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void **)&piParentType);
 
-    if (type == 0)
-    {
-        iObj = createGraphicObject(__GO_SEGS__);
-    }
-    else if (type == 1)
-    {
-        iObj = createGraphicObject(__GO_CHAMP__);
-    }
-    else
+    /* test using sciGetEntityType replaced by a test on the type string */
+    if (parentType != __GO_AXES__)
     {
+        Scierror(999, _("The parent has to be a SUBWIN\n"));
         return 0;
     }
 
-    getGraphicObjectProperty(iParentsubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piVisible);
-
-    setGraphicObjectProperty(iObj, __GO_VISIBLE__, &visible, jni_bool, 1);
-
-    /* this must be done prior to the call of Set Clipping property to know */
-    /* if the clip_state has been set */
-
-    /*
-     * Clip state and region
-     * To be checked for consistency
-     */
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX__, jni_double_vector, (void **)&clipRegion);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-    releaseGraphicObjectProperty(__GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_BOX_SET__, jni_bool, (void **)&piClipRegionSet);
-    setGraphicObjectProperty(iObj, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
-
-    getGraphicObjectProperty(iParentsubwinUID, __GO_CLIP_STATE__, jni_int, (void **)&piClipState);
-    setGraphicObjectProperty(iObj, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
-    if (type == 1)
-    {
-        numberArrows = Nbr1 * Nbr2;
-    }
-    else
-    {
-        /* Segs: Nbr1/2 arrows, Nbr1 is the number of endpoints */
-        numberArrows = Nbr1 / 2;
-    }
-
-    /* Triggers the creation of the Arrow objects part of Champ or Segs */
-    setGraphicObjectProperty(iObj, __GO_NUMBER_ARROWS__, &numberArrows, jni_int, 1);
+    iObj = createFec(iParentsubwinUID, zminmax, 2, colminmax, 2, colout, 2, with_mesh);
+    iFecId = createDataObject(iObj, __GO_FEC__);
 
-    /* Champ property only */
-    if (type == 1)
+    if (iFecId == 0)
     {
-        dimensions[0] = Nbr1;
-        dimensions[1] = Nbr2;
-
-        setGraphicObjectProperty(iObj, __GO_CHAMP_DIMENSIONS__, dimensions, jni_int_vector, 2);
+        deleteGraphicObject(iObj);
+        return 0;
     }
 
-    arrowCoords = (double *)MALLOC(3 * numberArrows * sizeof(double));
+    /* Allocates the coordinates array */
+    result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_NUM_VERTICES__, &Nnode, jni_int, 1);
 
-    if (arrowCoords == NULL)
+    if (result == 0)
     {
         deleteGraphicObject(iObj);
+        deleteDataObject(iObj);
         return 0;
     }
 
-    setGraphicObjectProperty(iObj, __GO_ARROW_SIZE__, &arsize, jni_double, 1);
-
-    /* Type 0 corresponds to a SEGS object */
-    if (type == 0)
-    {
-        for (i = 0; i < numberArrows; i++)
-        {
-            arrowCoords[3 * i] = vx[2 * i];
-            arrowCoords[3 * i + 1] = vy[2 * i];
-
-            if (vz != NULL)
-            {
-                arrowCoords[3 * i + 2] = vz[2 * i];
-            }
-            else
-            {
-                arrowCoords[3 * i + 2] = 0.0;
-            }
-        }
-
-        setGraphicObjectProperty(iObj, __GO_BASE__, arrowCoords, jni_double_vector, 3 * numberArrows);
-
-        for (i = 0; i < numberArrows; i++)
-        {
-            arrowCoords[3 * i] = vx[2 * i + 1];
-            arrowCoords[3 * i + 1] = vy[2 * i + 1];
-
-            if (vz != NULL)
-            {
-                arrowCoords[3 * i + 2] = vz[2 * i + 1];
-            }
-            else
-            {
-                arrowCoords[3 * i + 2] = 0.0;
-            }
-        }
-
-        setGraphicObjectProperty(iObj, __GO_DIRECTION__, arrowCoords, jni_double_vector, 3 * numberArrows);
-
-        if (flag == 1)
-        {
-            /* Style is an array of numberArrows elements */
-            setGraphicObjectProperty(iObj, __GO_SEGS_COLORS__, style, jni_int_vector, numberArrows);
-        }
-        else
-        {
-            /* Style is a scalar */
-            setGraphicObjectProperty(iObj, __GO_SEGS_COLORS__, style, jni_int_vector, 1);
-        }
+    /* Allocates the triangle indices and values array */
+    result = setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_NUM_INDICES__, &Ntr, jni_int, 1);
 
-    }
-    else
+    if (result == 0)
     {
-        /*
-         * Type 1 corresponds to a CHAMP object
-         * so building comes from champg
-         */
-        setGraphicObjectProperty(iObj, __GO_BASE_X__, vx, jni_double_vector, Nbr1);
-        setGraphicObjectProperty(iObj, __GO_BASE_Y__, vy, jni_double_vector, Nbr2);
-
-        for (i = 0; i < numberArrows; i++)
-        {
-            arrowCoords[3 * i] = vfx[i];
-            arrowCoords[3 * i + 1] = vfy[i];
-            arrowCoords[3 * i + 2] = 0.0;
-        }
-
-        setGraphicObjectProperty(iObj, __GO_DIRECTION__, arrowCoords, jni_double_vector, 3 * numberArrows);
-
-        /* typeofchamp corresponds to COLORED (0: false, 1: true) */
-        setGraphicObjectProperty(iObj, __GO_COLORED__, &typeofchamp, jni_bool, 1);
+        deleteGraphicObject(iObj);
+        deleteDataObject(iObj);
+        return 0;
     }
 
-    /* Required to initialize the default contour properties */
-    setGraphicObjectProperty(iObj, __GO_PARENT__, &iParentsubwinUID, jni_int, 1);
+    setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_X__, pvecx, jni_double_vector, Nnode);
+    setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_Y__, pvecy, jni_double_vector, Nnode);
 
-    /* Initializes the default Contour values */
-    cloneGraphicContext(iParentsubwinUID, iObj);
+    /* Fec-specific property: triangle indices plus special values (triangle number and flag) */
+    setGraphicObjectPropertyAndNoWarn(iObj, __GO_DATA_MODEL_FEC_TRIANGLES__, pnoeud, jni_double_vector, Ntr);
 
-    setParentObject(iObj, 0);
+    /* Function values */
+    setGraphicObjectProperty(iObj, __GO_DATA_MODEL_VALUES__, pfun, jni_double_vector, Nnode);
 
     setGraphicObjectRelationship(iParentsubwinUID, iObj);
-
-    FREE(arrowCoords);
-
     return iObj;
 }
 
@@ -1949,56 +793,34 @@ int ConstructCompoundSeq(int number)
     return iObj;
 }
 
-/**ConstructLabel
- * This function creates the Label structure used for x,y,z labels and for the Title.
- * On the contrary to the other Construct functions, it clones the Axes model's relevant
- * label instead of creating a new Label object and performing property sets using
- * the values of the Axes model's label, which is done instead by the clone call.
- * @param  char *pparentsubwinUID: the parent Axes' identifier.
- * @param  char text[] : initial text string, unused.
- * @param  int type to get info. on the type of label.
- */
-void ConstructLabel(int iParentsubwinUID, char const* text, int type)
+int ConstructLight(char* fname, int iSubwin, int type, BOOL visible, double * position, double * direction, double * ambient_color, double * diffuse_color, double * specular_color)
 {
-    int const labelProperties[] = { __GO_X_AXIS_LABEL__, __GO_Y_AXIS_LABEL__, __GO_Z_AXIS_LABEL__, __GO_TITLE__ };
-    int parentType = -1;
-    int *piParentType = &parentType;
-    int labelType = 0;
-    int iModelLabelUID = 0;
-    int* piModelLabelUID = &iModelLabelUID;
-    int iObj = 0;
-    int autoPosition = 0;
-    int *piAutoPosition = &autoPosition;
-    double position[3] = { 1.0, 1.0, 1.0 };
+    int iLight = 0;
+    int * piType = &type;
+    int hType = 0;
+    int * pihType = &hType;
+    int * piVisible = &visible;
 
-    getGraphicObjectProperty(iParentsubwinUID, __GO_TYPE__, jni_int, (void**)&piParentType);
-
-    if (parentType != __GO_AXES__)
+    if (iSubwin == 0)
     {
-        Scierror(999, _("The parent has to be a SUBWIN\n"));
-        return;
+        iSubwin = getOrCreateDefaultSubwin();
+        if (iSubwin == 0)
+        {
+            Scierror(999, _("%s: The handle is not or no more valid.\n"), fname);
+            return 0;
+        }
     }
-
-    if (type < 1 || type > 4)
+    else
     {
-        return;
+        //check handle type
+        getGraphicObjectProperty(iSubwin, __GO_TYPE__, jni_int, (void **)&pihType);
+        if (hType != __GO_AXES__)
+        {
+            Scierror(999, _("The parent has to be a SUBWIN\n"));
+            return 0;
+        }
     }
 
-    labelType = labelProperties[type - 1];
-
-    getGraphicObjectProperty(getAxesModel(), labelType, jni_int, (void **)&piModelLabelUID);
-
-    /* Creates a new Label object with the same properties as the Axes model's corresponding label */
-    iObj = cloneGraphicObject(iModelLabelUID);
-
-    /* Position set to {1, 1, 1} as a default to take into account logarithmic coordinates */
-    setGraphicObjectProperty(iObj, __GO_POSITION__, position, jni_double_vector, 3);
-
-    /* Auto position must be reset as setting the position has set it to false */
-    getGraphicObjectProperty(iModelLabelUID, __GO_AUTO_POSITION__, jni_bool, (void **)&piAutoPosition);
-    setGraphicObjectProperty(iObj, __GO_AUTO_POSITION__, &autoPosition, jni_bool, 1);
-
-    /* Attach the cloned label to its parent Axes and set the latter as the label's parent */
-    setGraphicObjectProperty(iParentsubwinUID, labelType, &iObj, jni_int, 1);
-    setGraphicObjectRelationship(iParentsubwinUID, iObj);
-}
+    iLight = createLight(iSubwin, type, visible, position, direction, ambient_color, diffuse_color, specular_color);
+    return iLight;
+}
\ No newline at end of file
index 20d3ce7..7ef1423 100644 (file)
@@ -32,6 +32,7 @@
 #include "Plot2d.h"
 #include "Scierror.h"
 
+#include "createGraphicObject.h"
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
@@ -115,8 +116,7 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
         style[i] = i;
     }
 
-    iNewSegsUID = ConstructSegs(iSubwinUID, type, x, y, NULL, *n1, *n2, 0, fx, fy, flag,
-                                style, arsize1, colored, typeofchamp);
+    iNewSegsUID = createChamp(iSubwinUID, x, *n1, y, *n2, fx, *n1 * *n2, fy, *n1 * *n2, arsize1, typeofchamp != 0);
 
     if (iNewSegsUID == 0)
     {
@@ -137,10 +137,6 @@ void champg(char *name, int colored, double *x, double *y, double *fx, double *f
         style = NULL;
     }
 
-    /* Force clipping to CLIPGRF (1) */
-    clipState = 1;
-    setGraphicObjectProperty(iNewSegsUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
-
     /* Get segs bounding box */
     getGraphicObjectProperty(iNewSegsUID, __GO_BOUNDING_BOX__, jni_double_vector, (void **)&boundingBox);
 
index 7c2368e..76b467b 100644 (file)
 #include "Scierror.h"
 #include "BasicAlgos.h"
 
-#include "createGraphicObject.h" /* cloneGraphicObject */
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
 
-/*--------------------------------------------------------------------------*/
-/*
- * Copies the ContouredObject properties from the source object to the destination object
- * This code ought to be moved into the Java Model, either in the relevant
- * constructor (ContouredObject) or into an initialization function.
- */
-int cloneGraphicContext(int iSource, int iDest)
-{
-    double dblTmp = 0.0;
-    double *pdblTmp = &dblTmp;
-    int iTmp = 0;
-    int *piTmp = &iTmp;
-
-    int lineMode = 0;
-    int foreground = 0;
-    int lineStyle = 0;
-    int background = 0;
-    int markForeground = 0;
-    int markBackground = 0;
-    int markStyle = 0;
-    int markSize = 0;
-    int markSizeUnit = 0;
-    double lineThickness = 0.;
-
-    /*
-     * All these properties are passed by value thus do not care to release them
-     * and do not call releaseGraphicObjectProperty on purpose.
-     */
-
-    getGraphicObjectProperty(iSource, __GO_LINE_MODE__, jni_bool, (void **)&piTmp);
-    lineMode = iTmp;
-    getGraphicObjectProperty(iSource, __GO_LINE_COLOR__, jni_int, (void **)&piTmp);
-    foreground = iTmp;
-    getGraphicObjectProperty(iSource, __GO_LINE_THICKNESS__, jni_double, (void **)&pdblTmp);
-    lineThickness = dblTmp;
-    getGraphicObjectProperty(iSource, __GO_LINE_STYLE__, jni_int, (void **)&piTmp);
-    lineStyle = iTmp;
-
-    /*
-     * Commented out since there is a confusion between Axes' FILLED property
-     * and the FILL_MODE ContouredObject property
-     * To be corrected
-     */
-#if 0
-    tmp = (int*) setGraphicObjectProperty(pobj->UID, __GO_FILL_MODE__, &fillMode, jni_bool, 1);
-    fillMode = *tmp;
-#endif
-
-    getGraphicObjectProperty(iSource, __GO_BACKGROUND__, jni_int, (void **)&piTmp);
-    background = iTmp;
-
-    getGraphicObjectProperty(iSource, __GO_MARK_FOREGROUND__, jni_int, (void **)&piTmp);
-    markForeground = iTmp;
-    getGraphicObjectProperty(iSource, __GO_MARK_BACKGROUND__, jni_int, (void **)&piTmp);
-    markBackground = iTmp;
-    getGraphicObjectProperty(iSource, __GO_MARK_STYLE__, jni_int, (void **)&piTmp);
-    markStyle = iTmp;
-    getGraphicObjectProperty(iSource, __GO_MARK_SIZE__, jni_int, (void **)&piTmp);
-    markSize = iTmp;
-    getGraphicObjectProperty(iSource, __GO_MARK_SIZE_UNIT__, jni_int, (void **)&piTmp);
-    markSizeUnit = iTmp;
-
-    setGraphicObjectProperty(iDest, __GO_LINE_MODE__, &lineMode, jni_bool, 1);
-    setGraphicObjectProperty(iDest, __GO_LINE_COLOR__, &foreground, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_LINE_THICKNESS__, &lineThickness, jni_double, 1);
-    setGraphicObjectProperty(iDest, __GO_LINE_STYLE__, &lineStyle, jni_int, 1);
-
-    /* Commented out due to the confusion between Axes' FILLED and the FILL_MODE Contoured property */
-#if 0
-    setGraphicObjectProperty(iDest, __GO_FILL_MODE__, &fillMode, jni_bool, 1);
-#endif
-
-    setGraphicObjectProperty(iDest, __GO_BACKGROUND__, &background, jni_int, 1);
-
-    setGraphicObjectProperty(iDest, __GO_MARK_FOREGROUND__, &markForeground, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_MARK_BACKGROUND__, &markBackground, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_MARK_STYLE__, &markStyle, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_MARK_SIZE__, &markSize, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1);
-
-    return 0;
-}
-/*--------------------------------------------------------------------------*/
-int cloneFontContext(int iSource, int iDest)
-{
-    double dblTmp = 0.0;
-    double *pdblTmp = &dblTmp;
-    double fontSize = 0.;
-    int fontColor = 0;
-    int fontStyle = 0;
-    int fontFractional = 0;
-    int iTmp = 0;
-    int *piTmp = &iTmp;
-
-    /*
-     * All these properties are passed by value thus do not care to release them
-     * and do not call releaseGraphicObjectProperty on purpose.
-     */
-
-    getGraphicObjectProperty(iSource, __GO_FONT_COLOR__, jni_int, (void **)&piTmp);
-    fontColor = iTmp;
-    getGraphicObjectProperty(iSource, __GO_FONT_STYLE__, jni_int, (void **)&piTmp);
-    fontStyle = iTmp;
-    getGraphicObjectProperty(iSource, __GO_FONT_SIZE__, jni_double, (void **)&pdblTmp);
-    fontSize = dblTmp;
-    getGraphicObjectProperty(iSource, __GO_FONT_FRACTIONAL__, jni_bool, (void **)&piTmp);
-    fontFractional = iTmp;
-
-    setGraphicObjectProperty(iDest, __GO_FONT_COLOR__, &fontColor, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_FONT_STYLE__, &fontStyle, jni_int, 1);
-    setGraphicObjectProperty(iDest, __GO_FONT_SIZE__, &fontSize, jni_double, 1);
-    setGraphicObjectProperty(iDest, __GO_FONT_FRACTIONAL__, &fontFractional, jni_bool, 1);
-
-    return 0;
-}
-
 int clonePolyline(int iSource)
 {
     int iClonedPolylineUID = 0;
@@ -226,9 +109,9 @@ int clonePolyline(int iSource)
     getGraphicObjectProperty(iSource, __GO_INTERP_COLOR_MODE__, jni_bool, (void **)&pTmp);
     interpShaded = tmp;
 
-    iClonedPolylineUID = allocatePolyline(iParentAxes, dataX, dataY, dataZ, closed, nPoints, polylineStyle,
-                                          &foreground, &background, &markStyle, &markForeground, &markBackground,
-                                          lineMode, fillMode, markMode, interpShaded);
+    iClonedPolylineUID = ConstructPolyline(iParentAxes, dataX, dataY, dataZ, closed, nPoints, polylineStyle,
+                                           &foreground, &background, &markStyle, &markForeground, &markBackground,
+                                           lineMode, fillMode, markMode, interpShaded);
 
     /* These properties must be additionally set as this is not done by allocatePolyline */
     setGraphicObjectProperty(iClonedPolylineUID, __GO_LINE_STYLE__, &lineStyle, jni_int, 1);
index cdd2c1f..f2f027d 100644 (file)
@@ -33,6 +33,7 @@
 #include "get_ticks_utils.h"
 #include "HandleManagement.h"
 
+#include "createGraphicObject.h"
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
@@ -85,7 +86,6 @@ int C2F(fec)(double *x, double *y, double *triangles, double *func, int *Nnode,
     int iFecUID = 0;
     int iParentCompoundUID = 0;
 
-    long hdltab[2];
     int cmpt = 0;
     double drect[6];
 
@@ -235,11 +235,7 @@ int C2F(fec)(double *x, double *y, double *triangles, double *func, int *Nnode,
     /* Set fec as current */
     setCurrentObject(iFecUID);
 
-    /* retrieve the created object : fec */
-    hdltab[cmpt] = getHandle(iFecUID);
-    cmpt++;
-
-    iParentCompoundUID = ConstructCompound (hdltab, cmpt);
+    iParentCompoundUID = createCompound(iSubwinUID, &iFecUID, 1);
     setCurrentObject(iParentCompoundUID);  /** construct Compound **/
     return 0;
 
diff --git a/scilab/modules/graphics/src/c/Light.c b/scilab/modules/graphics/src/c/Light.c
deleted file mode 100644 (file)
index 72f3faa..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*\r
- * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab\r
- * Copyright (C) 2013 - Pedro SOUZA\r
- *\r
- * This file must be used under the terms of the CeCILL.\r
- * This source file is licensed as described in the file COPYING, which\r
- * you should have received as part of this distribution.  The terms\r
- * are also available at\r
- * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt\r
- *\r
- */\r
-\r
-#include "createGraphicObject.h"\r
-#include "deleteGraphicObject.h"\r
-#include "returnType.h"\r
-#include "getGraphicObjectProperty.h"\r
-#include "setGraphicObjectProperty.h"\r
-#include "graphicObjectProperties.h"\r
-#include "HandleManagement.h"\r
-#include "CurrentSubwin.h"\r
-#include "Scierror.h"\r
-#include "localization.h"\r
-#include "BuildObjects.h"\r
-\r
-BOOL isValidType(int type)\r
-{\r
-    return type >= 0 && type <= 1;\r
-}\r
-\r
-BOOL isValidColor(double * color)\r
-{\r
-    if (color != NULL)\r
-    {\r
-        return (color[0] >= 0.0 && color[0] <= 1.0) &&\r
-               (color[1] >= 0.0 && color[1] <= 1.0) &&\r
-               (color[2] >= 0.0 && color[2] <= 1.0);\r
-    }\r
-    return FALSE;\r
-}\r
-\r
-BOOL createLight(char* fname, long long axes_handle, int type, BOOL visible, double * position, double * direction, double * ambient_color, double * diffuse_color, double * specular_color, long long * pLightHandle)\r
-{\r
-    int iAxes = 0;\r
-    int iLight = 0;\r
-    int * piType = &type;\r
-    int hType = 0;\r
-    int * pihType = &hType;\r
-    int * piVisible = &visible;\r
-\r
-    if (pLightHandle == NULL)\r
-    {\r
-        return FALSE;\r
-    }\r
-\r
-    iAxes = getObjectFromHandle((long)axes_handle);\r
-    if (iAxes == 0)\r
-    {\r
-        iAxes = getOrCreateDefaultSubwin();\r
-        if (iAxes == 0)\r
-        {\r
-            Scierror(999, _("%s: The handle is not or no more valid.\n"), fname);\r
-            return FALSE;\r
-        }\r
-    }\r
-\r
-    //check handle type\r
-    getGraphicObjectProperty(iAxes, __GO_TYPE__, jni_int, (void **)&pihType);\r
-    if (hType != __GO_AXES__)\r
-    {\r
-        Scierror(999, _("The parent has to be a SUBWIN\n"));\r
-        return FALSE;\r
-    }\r
-\r
-    iLight = createGraphicObject(__GO_LIGHT__);\r
-    if (iLight == 0)\r
-    {\r
-        return FALSE;\r
-    }\r
-\r
-    setGraphicObjectProperty(iLight, __GO_VISIBLE__, piVisible, jni_bool, 1);\r
-\r
-    if (isValidType(type))\r
-    {\r
-        setGraphicObjectProperty(iLight, __GO_LIGHT_TYPE__, piType, jni_int, 1);\r
-    }\r
-\r
-    if (position)\r
-    {\r
-        setGraphicObjectProperty(iLight, __GO_POSITION__, position, jni_double_vector, 3);\r
-    }\r
-\r
-    if (direction)\r
-    {\r
-        setGraphicObjectProperty(iLight, __GO_DIRECTION__, direction, jni_double_vector, 3);\r
-    }\r
-\r
-    if (isValidColor(ambient_color))\r
-    {\r
-        setGraphicObjectProperty(iLight, __GO_AMBIENTCOLOR__, ambient_color, jni_double_vector, 3);\r
-    }\r
-\r
-    if (isValidColor(diffuse_color))\r
-    {\r
-        setGraphicObjectProperty(iLight, __GO_DIFFUSECOLOR__, diffuse_color, jni_double_vector, 3);\r
-    }\r
-\r
-    if (isValidColor(specular_color))\r
-    {\r
-        setGraphicObjectProperty(iLight, __GO_SPECULARCOLOR__, specular_color, jni_double_vector, 3);\r
-    }\r
-\r
-    //return handle\r
-    *pLightHandle = getHandle(iLight);\r
-\r
-    //set light as child of axes\r
-    setGraphicObjectRelationship(iAxes, iLight);\r
-    return TRUE;\r
-}\r
index 6fca16d..5d21939 100644 (file)
@@ -41,6 +41,7 @@
 #include "HandleManagement.h"
 #include "freeArrayOfString.h"
 
+#include "createGraphicObject.h"
 #include "getGraphicObjectProperty.h"
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
@@ -100,9 +101,8 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
     int iCurFigureUID = 0;
     int closeflag = 0;
     int jj = 0;
-    long long *tabofhandles = NULL;
     long hdl = 0;
-    long *hdltab = NULL;
+    int *pObj = NULL;
     int cmpt = 0;
     int with_leg = 0;
     double drect[6];
@@ -395,21 +395,11 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
     /*---- Drawing the curves and the legends ----*/
     if (*n1 != 0)
     {
-        if ((hdltab = MALLOC((*n1 + 1) * sizeof(long))) == NULL)
+        if ((pObj = (int*)MALLOC((*n1 + 1) * sizeof(int))) == NULL)
         {
             Scierror(999, _("%s: No more memory.\n"), "plot2d");
             return -1;
         }
-        if (with_leg)
-        {
-            /* tabofhandles allocated for legends */
-            if ((tabofhandles = MALLOC((*n1) * sizeof(long long))) == NULL)
-            {
-                Scierror(999, _("%s: No more memory.\n"), "plot2d");
-                FREE(hdltab);
-                return -1;
-            }
-        }
 
         /*A.Djalel 3D axes */
         for (jj = 0; jj < *n1; jj++)
@@ -445,13 +435,7 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
             {
                 setCurrentObject(iObjUID);
 
-                hdl = getHandle(iObjUID);
-                if (with_leg)
-                {
-                    tabofhandles[cmpt] = hdl;
-                }
-
-                hdltab[cmpt] = hdl;
+                pObj[cmpt] = iObjUID;
                 cmpt++;
             }
 
@@ -466,13 +450,12 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
 
             if (scitokenize(legend, &Str, &nleg))
             {
-                FREE(tabofhandles);
-                FREE(hdltab);
+                FREE(pObj);
                 Scierror(999, _("%s: No more memory.\n"), "plot2d");
                 return 0;
             }
 
-            iLegUID = ConstructLegend(getCurrentSubWin(), Str, tabofhandles, Min(nleg, cmpt));
+            iLegUID = ConstructLegend(getCurrentSubWin(), Str, pObj, Min(nleg, cmpt));
 
             if (iLegUID != 0)
             {
@@ -490,8 +473,6 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
             }
 
             freeArrayOfString(Str, nleg);
-
-            FREE(tabofhandles);
         }
 
         /*---- construct Compound ----*/
@@ -499,13 +480,10 @@ int plot2dn(int ptype, char *logflags, double *x, double *y, int *n1, int *n2, i
         {
             int parentVisible = 0;
             int *piParentVisible = &parentVisible;
-            int iCompoundUID = ConstructCompound (hdltab, cmpt);
+            int iCompoundUID = createCompound(iSubwinUID, pObj, cmpt);
             setCurrentObject(iCompoundUID);
-            setGraphicObjectRelationship(iSubwinUID, iCompoundUID);
-            getGraphicObjectProperty(iSubwinUID, __GO_VISIBLE__, jni_bool, (void **)&piParentVisible);
-            setGraphicObjectProperty(iCompoundUID, __GO_VISIBLE__, &parentVisible, jni_bool, 1);
         }
-        FREE(hdltab);
+        FREE(pObj);
 
     }
     /* End of the curves and legend block */
index 8e85078..a44fad0 100644 (file)
@@ -33,6 +33,8 @@
 #include "setGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
 #include "deleteGraphicObject.h"
+#include "createGraphicObject.h"
+
 /*-------------------------------------------------------------------------------*/
 void getTextBoundingBox(char ** text, int nbRow, int nbCol,
                         double xPos, double yPos,
@@ -50,15 +52,15 @@ void getTextBoundingBox(char ** text, int nbRow, int nbCol,
     /* Update subwin scale if needed */
     updateSubwinScale(iParentSubwinUID);
 
-    iTextUID = allocateText(iParentSubwinUID,
-                            text, nbRow, nbCol,
-                            xPos, yPos,
-                            TRUE,
-                            NULL,
-                            0,
-                            &defaultColor, &defaultColor,
-                            FALSE, FALSE, FALSE,
-                            ALIGN_LEFT);
+    iTextUID = createText(iParentSubwinUID,
+                          text, nbRow, nbCol,
+                          xPos, yPos,
+                          TRUE,
+                          NULL,
+                          0,
+                          &defaultColor, &defaultColor,
+                          FALSE, FALSE, FALSE,
+                          ALIGN_LEFT);
 
     /* Make it invisible to be sure */
     visible = 0;
index 03f917e..ce09350 100644 (file)
@@ -26,6 +26,7 @@
 #include "localization.h"
 #include "MALLOC.h"
 
+#include "createGraphicObject.h"
 #include "BuildObjects.h"
 #include "HandleManagement.h"
 #include "CurrentFigure.h"
index 4ead0ed..ff938b7 100644 (file)
@@ -28,6 +28,7 @@
 #include "localization.h"
 #include "MALLOC.h"
 
+#include "createGraphicObject.h"
 #include "BuildObjects.h"
 #include "CurrentFigure.h"
 #include "HandleManagement.h"
index e6f71fd..05a0c06 100644 (file)
@@ -39,6 +39,7 @@
 #include "graphicObjectProperties.h"
 #include "FigureList.h"
 #include "CurrentSubwin.h"
+#include "createGraphicObject.h"
 
 
 /*------------------------------------------------------------------------*/
index 6d50f56..e554ead 100644 (file)
 #include "CurrentFigure.h"
 #include "CurrentSubwin.h"
 #include "CurrentObject.h"
+#include "Format.h"
+#include "deleteGraphicObject.h"
 
-/**
- * Put min and max of vector in dMin and dMax.
- * If no min and max can't be found (no finite data in dMin or dMax),
- * then use the default values
- */
-static void getDrect(const double vector[], int nbElements,
-                     double* dMin, double* dMax,
-                     double defaultMin, double defaultMax);
 /*------------------------------------------------
  * Objrect :
  * On recupere la figure courante, puis on recupere la sous fenetre qui y est selectionnee
@@ -82,10 +76,10 @@ void Objrect (double* x         ,
     /*newObjUID = ConstructRectangle(iSubwinUID , *x, *y, *height, *width,
       foreground, background, isfilled, isline);*/
 
-    iNewObjUID = constructRectangles(iSubwinUID, *x, *y, *height, *width,
-                                     foreground == NULL ? -1 : *foreground,
-                                     background == NULL ? -1 : *background,
-                                     (int)isfilled, (int)isline);
+    iNewObjUID = createRect(iSubwinUID, *x, *y, *height, *width,
+                            foreground == NULL ? -1 : *foreground,
+                            background == NULL ? -1 : *background,
+                            (int)isfilled, (int)isline);
 
     if (iNewObjUID == 0)
     {
@@ -120,8 +114,8 @@ void Objarc(double* angle1    ,
 
     iSubwinUID = getCurrentSubWin();
     checkRedrawing();
-    iObjUID = ConstructArc(iSubwinUID, *x, *y,
-                           *height, *width, *angle1, *angle2, foreground, background, isfilled, isline);
+    iObjUID = createArc(iSubwinUID, *x, *y,
+                        *height, *width, *angle1, *angle2, foreground, background, isfilled, isline);
     setCurrentObject(iObjUID);
 
     *hdl = getHandle(iObjUID);
@@ -256,9 +250,7 @@ void Objsegs (int * style,
     checkRedrawing();
     iSubwinUID = getCurrentSubWin();
 
-    iObjUID = ConstructSegs(iSubwinUID, type,
-                            x, y, z, n1, n1, (z == NULL ? 0 : n1), // x, y and z have the same size n1
-                            fx, fy, flag, style, arsize, colored, typeofchamp);
+    iObjUID = createSegs(iSubwinUID, x, n1, y, n1, z, (z == NULL ? 0 : n1), style, flag == 0 ? 1 : n1, arsize);
 
     if (iObjUID == NULL)
     {
@@ -443,269 +435,25 @@ void Objplot3d (char    * fname ,
 {
     sciTypeOf3D typeof3d;
     int flagcolor = 0;
-    long *hdltab = NULL;
+    int* pObj = NULL;
     int i = 0;
 
     int iSubwinUID = 0;
-    int iObjUID = 0;
 
-    double drect[6];
-    double rotationAngles[2];
-    double* dataBounds = NULL;
-    char * loc = NULL;
-    char * legx = NULL;
-    char * legy = NULL;
-    char * legz = NULL;
-    int iLabelId = 0;
-    int* piLabelId = &iLabelId;
-    /*   char * buff = NULL; */
-    int dimvectx = -1;
-    int dimvecty = -1;
-    int view = 0;
-    int linLogFlag;
     int firstPlot = 0;
-    int *piFirstPlot = &firstPlot;
 
-    int box = 0;
-    int axisVisible = 0;
-    int autoScale = 0;
-    int *piAutoScale = &autoScale;
-
-    int isoview = 0;
     int clipState = 0;
 
     int iNewSurfaceUID = 0;
 
 
-    /* Initialisation drect A.C pour debuggueur */
-    drect[0] = 0.0;
-    drect[1] = 0.0;
-    drect[2] = 0.0;
-    drect[3] = 0.0;
-    drect[4] = 0.0;
-    drect[5] = 0.0;
-
     /* =================================================
      * Force SubWindow properties according to arguments
      * ================================================= */
 
     iSubwinUID = getCurrentSubWin();
-
     checkRedrawing();
-
-    /* Force 3D view */
-    view = 1;
-    setGraphicObjectProperty(iSubwinUID, __GO_VIEW__, &view, jni_int, 1);
-
-    if (legend != NULL)
-    {
-        int textDimensions[2] = {1, 1};
-        /* F.Leray 25.04.05 replace the default labels by the user labels if specified */
-        loc = (char *) MALLOC((strlen(legend) + 1) * sizeof(char));
-        if (loc == NULL)
-        {
-            Scierror(999, _("%s: No more memory.\n"), "Objplot3d");
-        }
-
-        strcpy(loc, legend);
-
-        /*   legx=strtok_r(loc,"@",&buff); */
-        legx = strtok(loc, "@");
-
-        if (legx != NULL)
-        {
-            getGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-
-            setGraphicObjectProperty(iLabelId, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2);
-            setGraphicObjectProperty(iLabelId, __GO_TEXT_STRINGS__, &legx, jni_string_vector, textDimensions[0]*textDimensions[1]);
-        }
-
-        /*   legy=strtok_r((char *)0,"@",&buff); */
-        legy = strtok((char *)NULL, "@"); /* NULL to begin at the last read character */
-        if (legy != NULL)
-        {
-            getGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-
-            setGraphicObjectProperty(iLabelId, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2);
-            setGraphicObjectProperty(iLabelId, __GO_TEXT_STRINGS__, &legy, jni_string_vector, textDimensions[0]*textDimensions[1]);
-        }
-
-        /*   legz=strtok_r((char *)0,"@",&buff); */
-        legz = strtok((char *)NULL, "@");
-        if (legz != NULL)
-        {
-            getGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-
-            setGraphicObjectProperty(iLabelId, __GO_TEXT_ARRAY_DIMENSIONS__, textDimensions, jni_int_vector, 2);
-            setGraphicObjectProperty(iLabelId, __GO_TEXT_STRINGS__, &legz, jni_string_vector, textDimensions[0]*textDimensions[1]);
-        }
-    }
-
-    /* Force psubwin->logflags to linear */
-    linLogFlag = 0;
-
-    setGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1);
-    setGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1);
-    setGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LOG_FLAG__, &linLogFlag, jni_bool, 1);
-
-
-    getGraphicObjectProperty(iSubwinUID, __GO_FIRST_PLOT__, jni_bool, (void **)&piFirstPlot);
-
-    if (firstPlot == 0 && (iflag[2] == 0 || iflag[2] == 1))
-    {
-        /* Nothing to do: we leave as before */
-    }
-    else
-    {
-        int labelVisible;
-
-        if (iflag[2] == 0 || iflag[2] == 1)
-        {
-            if (firstPlot)
-            {
-                /* 0: OFF */
-                box = 0;
-
-                axisVisible = 0;
-                setGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-                setGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-                setGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-
-                setGraphicObjectProperty(iSubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1);
-
-                labelVisible = 0;
-                getGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-                setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-                getGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-                setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-                getGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-                setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            }
-            /*else no changes : the axes visible properties are driven by the previous plot */
-        }
-        else if (iflag[2] == 2)
-        {
-            /* 2: HIDDEN_AXES */
-            box = 2;
-
-            /* for 2d use only (when switching to 2d mode) */
-            setGraphicObjectProperty(iSubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1);
-
-            axisVisible = 0;
-            setGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-            setGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-            setGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-
-            labelVisible = 0;
-            getGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            getGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            getGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-        }
-        else if (iflag[2] == 3)
-        {
-            /* 1: ON */
-            box = 1;
-
-            /* for 2d use only (when switching to 2d mode) */
-            setGraphicObjectProperty(iSubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1);
-
-            axisVisible = 0;
-            setGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-            setGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-            setGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-
-            labelVisible = 1;
-            getGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            getGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            getGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-        }
-        else if (iflag[2] == 4)
-        {
-            /* 1: ON */
-            box = 1;
-            setGraphicObjectProperty(iSubwinUID, __GO_BOX_TYPE__, &box, jni_int, 1);
-
-            axisVisible = 1;
-            setGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-            setGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-            setGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
-
-            labelVisible = 1;
-            getGraphicObjectProperty(iSubwinUID, __GO_X_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            getGraphicObjectProperty(iSubwinUID, __GO_Y_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-            getGraphicObjectProperty(iSubwinUID, __GO_Z_AXIS_LABEL__, jni_int, (void **)&piLabelId);
-            setGraphicObjectProperty(iLabelId, __GO_VISIBLE__, &labelVisible, jni_bool, 1);
-        }
-    }
-
-    rotationAngles[0] = *alpha;
-    rotationAngles[1] = *theta;
-
-    setGraphicObjectProperty(iSubwinUID, __GO_ROTATION_ANGLES__, rotationAngles, jni_double_vector, 2);
-
-    getGraphicObjectProperty(iSubwinUID, __GO_DATA_BOUNDS__, jni_double_vector, (void **)&dataBounds);
-
-    getGraphicObjectProperty(iSubwinUID, __GO_AUTO_SCALE__, jni_bool, (void **)&piAutoScale);
-
-    if (autoScale)
-    {
-        /* compute and merge new specified bounds with data bounds */
-        switch (iflag[1])
-        {
-            case 0:  /* do not change data bounds */
-                break;
-            case 1 :
-            case 3 :
-            case 5 :
-            case 7 : /* Force data bounds=ebox */
-                drect[0] = ebox[0]; /*xmin*/
-                drect[2] = ebox[2]; /*ymin*/
-                drect[1] = ebox[1]; /*xmax*/
-                drect[3] = ebox[3]; /*ymax*/
-                drect[4] = ebox[4]; /*zmin*/
-                drect[5] = ebox[5]; /*zmax*/
-                break;
-            case 2 :
-            case 4 :
-            case 6 :
-            case 8:/* Force data bounds to the x and y bounds */
-                getDrect(x, (*m1) * (*n1), &drect[0], &drect[1], dataBounds[0], dataBounds[1]);
-                getDrect(y, (*m2) * (*n2), &drect[2], &drect[3], dataBounds[2], dataBounds[3]);
-                getDrect(z, (*m3) * (*n3), &drect[4], &drect[5], dataBounds[4], dataBounds[5]);
-                break;
-        }
-
-        /* merge data bounds and drect */
-        if (!firstPlot)
-        {
-            drect[0] = Min(dataBounds[0], drect[0]); /* xmin */
-            drect[1] = Max(dataBounds[1], drect[1]); /* xmax */
-            drect[2] = Min(dataBounds[2], drect[2]); /* ymin */
-            drect[3] = Max(dataBounds[3], drect[3]); /* ymax */
-            drect[4] = Min(dataBounds[4], drect[4]); /* zmin */
-            drect[5] = Max(dataBounds[5], drect[5]); /* zmax */
-        }
-
-        if (iflag[1] != 0)
-        {
-            setGraphicObjectProperty(iSubwinUID, __GO_DATA_BOUNDS__, drect, jni_double_vector, 6);
-        }
-    }
-
-    if (iflag[1] != 0)
-    {
-        isoview = (iflag[1] == 3 || iflag[1] == 4 || iflag[1] == 5 || iflag[1] == 6);
-
-        setGraphicObjectProperty(iSubwinUID, __GO_ISOVIEW__, &isoview, jni_bool, 1);
-    }
+    initSubWinTo3d(iSubwinUID, legend, iflag, *alpha, *theta, ebox, x, *m1 * *n1, y, *m2 * *n2, z, *m3 * *n3);
 
     /* =================================================
      * Analyze arguments to find entity type
@@ -763,6 +511,8 @@ void Objplot3d (char    * fname ,
     /*Distinction here between SCI_PARAM3D1 and others*/
     if (typeof3d != SCI_PARAM3D1)
     {
+        int dimvectx = -1;
+        int dimvecty = -1;
         if (*isfac == 1)
         {
             /* x is considered as a matrix */
@@ -842,7 +592,7 @@ void Objplot3d (char    * fname ,
         int iNewPolylineUID = 0;
         int iCurrentSubwinUID = 0;
 
-        if ((hdltab = (long*)MALLOC (*n * sizeof (long))) == NULL)
+        if ((pObj = (int*)MALLOC (*n * sizeof (int))) == NULL)
         {
             Scierror(999, "%s: No more memory.\n", fname);
             return;
@@ -852,12 +602,6 @@ void Objplot3d (char    * fname ,
 
         for (i = 0; i < *n; ++i)
         {
-            /* F.Leray Pb here: In fact we do not create a Surface but one or several 3D Polylines
-               Pb comes when wanting to access the fields "surface_color" or "flag" for example
-               in function sciSet (cf. matdes.c).
-               Question 1: Are these properties accessible from a SCI_PARAM3D1 ?
-               Question 2: Is "flag" obsolete and replaced by "color_mode"?*/
-
             if ((*n > 0) && (zcol != (double *)NULL))
             {
                 if ((int) zcol[i] > 0)
@@ -893,29 +637,27 @@ void Objplot3d (char    * fname ,
             if (iNewPolylineUID == 0)
             {
                 Scierror(999, _("%s: No more memory.\n"), fname);
-                FREE(hdltab);
+                FREE(pObj);
                 return;
             }
 
             setCurrentObject(iNewPolylineUID);
             setGraphicObjectRelationship(iCurrentSubwinUID, iNewPolylineUID);
 
-            iObjUID = getCurrentObject();
-
             /* Force clipping, 1: CLIPGRF */
             clipState = 1;
-            setGraphicObjectProperty(iObjUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
+            setGraphicObjectProperty(iNewPolylineUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
 
-            hdltab[i] = getHandle(iObjUID);
+            pObj[i] = iNewPolylineUID;
         }
 
         /** construct Compound and make it current object**/
         if (*n > 1)
         {
-            int o = ConstructCompound (hdltab, *n);
+            int o = createCompound (iCurrentSubwinUID, pObj, *n);
             setCurrentObject(o);
         }
-        FREE(hdltab);
+        FREE(pObj);
     }
 
     /* =================================================
@@ -926,10 +668,6 @@ void Objplot3d (char    * fname ,
 
     firstPlot = 0;
     setGraphicObjectProperty(iSubwinUID, __GO_FIRST_PLOT__, &firstPlot, jni_bool, 1);
-
-    FREE(loc);
-    loc = NULL;
-
 }
 /*-----------------------------------------------------------
  * Objaxis:
@@ -953,12 +691,45 @@ void Objdrawaxis (char     dir    ,
 {
     int iObjUID = 0;
     int iSubwinUID = 0;
+    int ticksDirection = 0;
+    int ticksStyle = 0;
 
     iSubwinUID = getCurrentSubWin();
 
     checkRedrawing();
 
-    iObjUID = ConstructAxis(iSubwinUID, dir, tics, x, *nx, y, *ny, val, subint, format, font, textcol, ticscol, flag, seg, nb_tics_labels);
+    switch (dir)
+    {
+        default :
+        case 'u' :
+            ticksDirection = 0;
+            break;
+        case 'd' :
+            ticksDirection = 1;
+            break;
+        case 'l' :
+            ticksDirection = 2;
+            break;
+        case 'r' :
+            ticksDirection = 3;
+            break;
+    }
+
+    switch (tics)
+    {
+        default:
+        case 'v':
+            ticksStyle = 0;
+            break;
+        case 'r':
+            ticksStyle = 1;
+            break;
+        case 'i':
+            ticksStyle = 2;
+            break;
+    }
+
+    iObjUID = createAxis(iSubwinUID, ticksDirection, ticksStyle, x, *nx, y, *ny, subint, format, font, textcol, ticscol, seg);
 
     if (iObjUID == NULL)
     {
@@ -966,6 +737,57 @@ void Objdrawaxis (char     dir    ,
         return;
     }
 
+    if (val == NULL)
+    {
+        char **matData;
+        StringMatrix *tics_labels;
+
+        tics_labels = computeDefaultTicsLabels(iObjUID);
+
+        if (tics_labels == NULL)
+        {
+            deleteGraphicObject(iObjUID);
+            return;
+        }
+
+        matData = getStrMatData(tics_labels);
+
+        /*
+        * The labels vector size must be computed using the matrix's dimensions.
+        * To be modified when the labels computation is moved to the Model.
+        */
+        setGraphicObjectProperty(iObjUID, __GO_TICKS_LABELS__, matData, jni_string_vector, tics_labels->nbCol * tics_labels->nbRow);
+
+        deleteMatrix(tics_labels);
+    }
+    else
+    {
+        int i = 0;
+        /*
+        * Labels are set using the str argument; the previous code tested whether each element of the
+        * str array was null and set the corresponding Axis' element to NULL, though there was no
+        * apparent reason to do so. This is still checked, but now aborts building the Axis.
+        */
+
+        if (nb_tics_labels == -1)
+        {
+            Scierror(999, _("Impossible case when building axis\n"));
+            deleteGraphicObject(iObjUID);
+            return;
+        }
+
+        for (i = 0; i < nb_tics_labels; i++)
+        {
+            if (val[i] == NULL)
+            {
+                deleteGraphicObject(iObjUID);
+                return;
+            }
+        }
+
+        setGraphicObjectProperty(iObjUID, __GO_TICKS_LABELS__, val, jni_string_vector, nb_tics_labels);
+    }
+
     setCurrentObject(iObjUID);
 }
 
@@ -1010,19 +832,3 @@ void Objfec (double    x[]        ,
              Zminmax, Colminmax, ColOut, WithMesh, flagNax, 4L, bsiz);
 }
 /*------------------------------------------------------------------------*/
-static void getDrect(const double vector[], int nbElements,
-                     double* dMin, double* dMax,
-                     double defaultMin, double defaultMax)
-{
-    if (containsOneFiniteElement(vector, nbElements))
-    {
-        *dMin = Mini(vector, nbElements);
-        *dMax = Maxi(vector, nbElements);
-    }
-    else
-    {
-        *dMin = defaultMin;
-        *dMax = defaultMax;
-    }
-}
-/*------------------------------------------------------------------------*/
index c732b65..feae36d 100644 (file)
@@ -33,6 +33,7 @@
 #include "CurrentFigure.h"
 #include "BuildObjects.h"
 #include "api_scilab.h"
+#include "createGraphicObject.h"
 
 /* DO NOT CHANGE ORDER !! */
 static const char* propertiesNames[] =
@@ -532,8 +533,8 @@ int sci_uicontrol(char *fname, unsigned long fname_len)
     }
 
     if (propertiesValuesIndices != NULL
-        && (propertiesValuesIndices[14] == NOT_FOUND &&
-            (propertiesValuesIndices[7] != NOT_FOUND || propertiesValuesIndices[8] != NOT_FOUND)))    /* SliderStep property not set */
+            && (propertiesValuesIndices[14] == NOT_FOUND &&
+                (propertiesValuesIndices[7] != NOT_FOUND || propertiesValuesIndices[8] != NOT_FOUND)))    /* SliderStep property not set */
     {
         /* Set SliderStep property to [1/100*(Max-Min) 1/10*(Max-Min)] */
         double maxValue = 0;
index 3c1715f..b8af850 100644 (file)
@@ -27,6 +27,7 @@
 #include "Scierror.h"
 #include "stricmp.h"
 #include "CreateUimenu.h"
+#include "createGraphicObject.h"
 #include "setGraphicObjectProperty.h"
 #include "getGraphicObjectProperty.h"
 #include "graphicObjectProperties.h"
index be85b4b..11bd0ce 100644 (file)
@@ -33,6 +33,7 @@ extern "C"
 #include "CurrentFigure.h"
 #include "BuildObjects.h"
 #include "scilabmode.h"
+#include "createGraphicObject.h"
 }
 
 using namespace org_scilab_modules_gui_bridge;