afbdf8dd9c8041a734278cb536037f406ea9faad
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_xarcs.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  * 
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at    
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 /*------------------------------------------------------------------------*/
15 /* file: sci_xarcs.h                                                       */
16 /* desc : interface for xarcs routine                                      */
17 /*------------------------------------------------------------------------*/
18 #include "stack-c.h"
19 #include "gw_graphics.h"
20 #include "BuildObjects.h"
21 #include "GetProperty.h"
22 #include "sciCall.h"
23 #include "CurrentObjectsManagement.h"
24 #include "GraphicSynchronizerInterface.h"
25 #include "localization.h"
26 #include "Scierror.h"
27 #include "DrawingBridge.h"
28
29 /*--------------------------------------------------------------------------*/
30 int sci_xarcs(char *fname,unsigned long fname_len)
31 {
32   int m1,n1,l1,m2,n2,l2;
33
34   /* NG beg */
35   long  hdl;
36   int i;
37   double angle1;
38   double angle2;
39   sciPointObj * pFigure = NULL;
40   /* NG end */
41   CheckRhs(1,2);
42
43   GetRhsVar(1,MATRIX_OF_DOUBLE_DATATYPE,&m1,&n1,&l1);
44   if ( strcmp(fname,"xarcs") == 0) {
45     if (m1 != 6) {
46       Scierror(999,_("%s: Wrong size for input argument #%d: %s expected.\n"),fname,1,"(6,n)");
47       return 0;
48     }
49   } else {
50     if (m1 != 4) {
51       Scierror(999,_("%s: Wrong size for input argument #%d: %s expected.\n"),fname,1,"(4,n)");
52       return 0;
53     }
54   }
55
56   pFigure = sciGetCurrentFigure();
57
58   if (Rhs == 2) 
59   {
60     GetRhsVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&l2);
61     CheckVector(2,m2,n2);
62     if (m2 * n2 != n1) {
63       Scierror(999,_("%s: Wrong size for arguments #%d and #%d.\n"),fname, 1, 2);
64       return 0;
65     }
66   }
67   else 
68   {
69     int i2;
70     m2=1,n2=n1; CreateVar(2,MATRIX_OF_INTEGER_DATATYPE,&m2,&n2,&l2);
71     startFigureDataReading(pFigure);
72     for (i2 = 0; i2 < n2; ++i2)
73     { 
74       *istk(l2 + i2) = sciGetForeground(sciGetCurrentSubWin() );
75     }
76     endFigureDataReading(pFigure);
77   }
78
79   /* NG beg */
80   startFigureDataWriting(sciGetCurrentFigure());
81   for (i = 0; i < n1; ++i)
82   { 
83     angle1 = DEG2RAD(*stk(l1+(6*i)+4) / 64.0);
84     angle2 = DEG2RAD(*stk(l1+(6*i)+5) / 64.0);
85     Objarc (&angle1,&angle2,stk(l1+(6*i)),stk(l1+(6*i)+1),
86       stk(l1+(6*i)+2),stk(l1+(6*i)+3),istk(l2+i),NULL,FALSE,TRUE,&hdl); 
87   }
88   /* construct Compound and make it current object */
89   sciSetCurrentObj(ConstructCompoundSeq(n1));
90   endFigureDataWriting(pFigure);
91
92   /* Draw the result */
93   startFigureDataReading(pFigure);
94   sciDrawObj(sciGetCurrentObj());
95   endFigureDataReading(pFigure);
96
97   /* NG end */
98   LhsVar(1)=0;
99         C2F(putlhsvar)();
100   return 0;
101
102 /*--------------------------------------------------------------------------*/