2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2001-2002 - INRIA - Mathieu Philipe
4 * Copyright (C) 2002-2004 - INRIA - Djalel Abdemouche
5 * Copyright (C) 2004-2006 - INRIA - Fabrice Leray
6 * Copyright (C) 2005 - INRIA - Jean-Baptiste Silvy
7 * Copyright (C) 2012 - DIGITEO - Manuel Juliachs
9 * This file must be used under the terms of the CeCILL.
10 * This source file is licensed as described in the file COPYING, which
11 * you should have received as part of this distribution. The terms
12 * are also available at
13 * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
17 /*------------------------------------------------------------------------
20 * This file contains all functions used to INTERACT with the graphic
21 * window (zoom by pressing button, callbacks...)
22 --------------------------------------------------------------------------*/
24 #include "Interaction.h"
25 #include "SetProperty.h"
26 #include "GetProperty.h"
28 #include "MALLOC.h" /* MALLOC */
29 #include "localization.h"
30 #include "JavaInteraction.h"
31 #include "axesScale.h"
32 #include "math_graphics.h"
33 #include "HandleManagement.h"
35 #include "graphicObjectProperties.h"
36 #include "setGraphicObjectProperty.h"
37 #include "getGraphicObjectProperty.h"
40 /*-------------------------------------------------------------------------------------*/
41 static int moveObj(char* pobjUID, double displacement[], int displacementSize);
42 /*-------------------------------------------------------------------------------------*/
45 * exec the callback associated with pthis
48 sciAddCallback (sciPointObj * pthis,char *code, int len, int mevent )
50 /* Destruction de l'ancienne callback si elle existait */
51 sciDelCallback (pthis);
53 switch (sciGetEntityType (pthis))
56 if ((pSUBWIN_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
58 Scierror(999, _("%s: No more memory.\n"),"sciAddCallback");
63 strncpy(pSUBWIN_FEATURE (pthis)->callback, code, len);
64 pSUBWIN_FEATURE (pthis)->callbacklen = len;
65 pSUBWIN_FEATURE (pthis)->callbackevent = mevent;
69 if ((pARC_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
71 Scierror(999, _("%s: No more memory.\n"),"sciAddCallback");
76 strncpy(pARC_FEATURE (pthis)->callback, code, len);
77 pARC_FEATURE (pthis)->callbacklen = len;
78 pARC_FEATURE (pthis)->callbackevent = mevent;
83 if ((pRECTANGLE_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
85 Scierror(999, _("%s: No more memory.\n"),"sciAddCallback");
90 strncpy(pRECTANGLE_FEATURE (pthis)->callback, code, len);
91 pRECTANGLE_FEATURE (pthis)->callbacklen = len;
92 pRECTANGLE_FEATURE (pthis)->callbackevent = mevent;
97 if ((pSEGS_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
99 Scierror(999, _("%s: No more memory.\n"),"sciAddCallback");
104 strncpy(pSEGS_FEATURE (pthis)->callback, code, len);
105 pPOLYLINE_FEATURE (pthis)->callbacklen = len;
106 pPOLYLINE_FEATURE (pthis)->callbackevent = mevent;
111 if ((pFEC_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
113 Scierror(999, _("%s: No more memory.\n"),"sciAddCallback");
118 strncpy(pFEC_FEATURE (pthis)->callback, code, len);
119 pPOLYLINE_FEATURE (pthis)->callbacklen = len;
120 pPOLYLINE_FEATURE (pthis)->callbackevent = mevent;
125 if ((pGRAYPLOT_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
127 Scierror(999, _("%s: No more memory.\n"),"sciAddCallback");
132 strncpy(pGRAYPLOT_FEATURE (pthis)->callback, code, len);
133 pPOLYLINE_FEATURE (pthis)->callbacklen = len;
134 pPOLYLINE_FEATURE (pthis)->callbackevent = mevent;
139 if ((pPOLYLINE_FEATURE (pthis)->callback = CALLOC (len+1, sizeof (char))) == NULL)
141 Scierror(9999, _("%s: No more memory.\n"),"sciAddCallback");
146 strncpy(pPOLYLINE_FEATURE (pthis)->callback, code, len);
147 pPOLYLINE_FEATURE (pthis)->callbacklen = len;
148 pPOLYLINE_FEATURE (pthis)->callbackevent = mevent;
161 case SCI_LABEL: /* F.Leray 28.05.04 */
164 Scierror(999, _("No Callback is associated with this Entity.\n"));
175 * returns the scilab callback code
177 char *sciGetCallback(sciPointObj * pthis)
179 switch (sciGetEntityType (pthis))
182 return (char *)(pSUBWIN_FEATURE(pthis)->callback);
185 return (char *)(pARC_FEATURE(pthis)->callback);
188 return (char *)(pSEGS_FEATURE(pthis)->callback);
191 return (char *)(pFEC_FEATURE(pthis)->callback);
194 return (char *)(pGRAYPLOT_FEATURE(pthis)->callback);
197 return (char *)(pPOLYLINE_FEATURE(pthis)->callback);
200 return (char *)(pRECTANGLE_FEATURE(pthis)->callback);
203 return (char *)(pTEXT_FEATURE(pthis)->callback);
206 return (char *)(pSURFACE_FEATURE(pthis)->callback);
209 return (char *)(pAXES_FEATURE(pthis)->callback);
212 return (char *)(pUIMENU_FEATURE(pthis)->callback);
215 return (char *)(pUICONTROL_FEATURE(pthis)->callback);
220 case SCI_LABEL: /* F.Leray 28.05.04 */
222 Scierror(999, _("No Callback is associated with this Entity.\n"));
229 /**sciGetCallbackMouseEvent
230 * @author Djalel Abdemouche
232 int sciGetCallbackMouseEvent(sciPointObj * pthis)
234 switch (sciGetEntityType (pthis))
237 return pSUBWIN_FEATURE(pthis)->callbackevent;
240 return pARC_FEATURE(pthis)->callbackevent;
243 return pSEGS_FEATURE(pthis)->callbackevent;
246 return pFEC_FEATURE(pthis)->callbackevent;
249 return pGRAYPLOT_FEATURE(pthis)->callbackevent;
252 return pPOLYLINE_FEATURE(pthis)->callbackevent;
255 return pRECTANGLE_FEATURE(pthis)->callbackevent;
258 return pTEXT_FEATURE(pthis)->callbackevent;
261 return pSURFACE_FEATURE(pthis)->callbackevent;
264 return pAXES_FEATURE(pthis)->callbackevent;
270 case SCI_LABEL: /* F.Leray 28.05.04 */
272 Scierror(999, _("No Callback is associated with this Entity.\n"));
279 /**sciSetCallbackMouseEvent
280 * @author Djalel Abdemouche
282 int sciSetCallbackMouseEvent(sciPointObj * pthis, int mevent)
284 switch (sciGetEntityType (pthis))
287 pSUBWIN_FEATURE(pthis)->callbackevent = mevent;
290 pARC_FEATURE(pthis)->callbackevent = mevent;
293 pSEGS_FEATURE(pthis)->callbackevent = mevent;
296 pFEC_FEATURE(pthis)->callbackevent = mevent;
299 pGRAYPLOT_FEATURE(pthis)->callbackevent = mevent;
302 pPOLYLINE_FEATURE(pthis)->callbackevent = mevent;
305 pRECTANGLE_FEATURE(pthis)->callbackevent = mevent;
308 pTEXT_FEATURE(pthis)->callbackevent = mevent;
311 pSURFACE_FEATURE(pthis)->callbackevent = mevent;
314 pAXES_FEATURE(pthis)->callbackevent = mevent;
320 case SCI_LABEL: /* F.Leray 28.05.04 */
322 Scierror (999, _("No Callback is associated with this Entity.\n"));
332 * returns the length of the scilab callback code
335 sciDelCallback (sciPointObj * pthis)
337 switch (sciGetEntityType (pthis))
340 pSUBWIN_FEATURE (pthis)->callbacklen = 0;
341 pSUBWIN_FEATURE (pthis)->callbackevent = 100;
342 FREE(pSUBWIN_FEATURE (pthis)->callback);
343 pSUBWIN_FEATURE (pthis)->callback = NULL;
346 pARC_FEATURE (pthis)->callbacklen = 0;
347 pARC_FEATURE (pthis)->callbackevent = 100;
348 FREE(pARC_FEATURE (pthis)->callback);
349 pARC_FEATURE (pthis)->callback = NULL;
352 pRECTANGLE_FEATURE (pthis)->callbacklen = 0;
353 pRECTANGLE_FEATURE (pthis)->callbackevent = 100;
354 FREE(pRECTANGLE_FEATURE (pthis)->callback);
355 pRECTANGLE_FEATURE (pthis)->callback = NULL;
358 pSEGS_FEATURE (pthis)->callbacklen = 0;
359 pSEGS_FEATURE (pthis)->callbackevent = 100;
360 FREE(pSEGS_FEATURE (pthis)->callback);
361 pSEGS_FEATURE (pthis)->callback = NULL;
364 pFEC_FEATURE (pthis)->callbacklen = 0;
365 pFEC_FEATURE (pthis)->callbackevent = 100;
366 FREE(pFEC_FEATURE (pthis)->callback);
367 pFEC_FEATURE (pthis)->callback = NULL;
370 pGRAYPLOT_FEATURE (pthis)->callbacklen = 0;
371 pGRAYPLOT_FEATURE (pthis)->callbackevent = 100;
372 FREE(pGRAYPLOT_FEATURE (pthis)->callback);
373 pGRAYPLOT_FEATURE (pthis)->callback = NULL;
376 pPOLYLINE_FEATURE (pthis)->callbacklen = 0;
377 pPOLYLINE_FEATURE (pthis)->callbackevent = 100;
378 FREE(pPOLYLINE_FEATURE (pthis)->callback);
379 pPOLYLINE_FEATURE (pthis)->callback = NULL;
388 case SCI_LABEL: /* F.Leray 28.05.04 */
390 Scierror(999, _("No Callback is associated with this Entity.\n"));
398 /************************************ End of callback Functions ************************************/
401 /*----------------------------------------------------------------------------------------*/
403 /* move a handle in the graphic window */
404 /*----------------------------------------------------------------------------------------*/
406 static int moveObj(char* pobjUID, double displacement[], int displacementSize)
409 double x = displacement[0];
410 double y = displacement[1];
411 double z = (displacementSize == 3? displacement[2] : 0.0);
420 double* dataX = NULL;
421 double* dataY = NULL;
422 double* dataZ = NULL;
427 int *piNumX = &iNumX;
428 int *piNumY = &iNumY;
429 int *piNumZ = &iNumZ;
431 int iChildrenCount = 0;
432 int *piChildrenCount = &iChildrenCount;
433 char **pstChildrenUID;
436 getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_string, &pstType);
438 // If a Figure, neither the object nor its children are moved.
439 if ((strcmp(pstType, __GO_FIGURE__) == 0))
441 Scierror(999, _("This object can not be moved.\n"));
445 // Iterate on children.
446 getGraphicObjectProperty(pobjUID, __GO_CHILDREN_COUNT__, jni_int, &piChildrenCount);
448 if (iChildrenCount != 0)
450 getGraphicObjectProperty(pobjUID, __GO_CHILDREN__, jni_string_vector, (void **) &pstChildrenUID);
451 for (i = 0 ; i < iChildrenCount ; ++i)
453 moveObj(pstChildrenUID[i], displacement, displacementSize);
458 if (strcmp(pstType, __GO_ARC__) == 0)
460 getGraphicObjectProperty(pobjUID, __GO_UPPER_LEFT_POINT__, jni_double_vector, &pdblData);
464 setGraphicObjectProperty(pobjUID, __GO_UPPER_LEFT_POINT__, pdblData, jni_double_vector, 3);
469 else if (strcmp(pstType, __GO_FAC3D__) == 0)
472 int* piNumVPG = &iNumVPG;
474 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_VERTICES_PER_GON__, jni_int, &piNumVPG);
475 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_GONS__, jni_int, &piNum);
477 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, jni_double_vector, &dataX);
478 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, jni_double_vector, &dataY);
479 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, jni_double_vector, &dataZ);
481 for (i = 0; i < iNumVPG*iNum; i++)
488 /* Model data has been updated by direct pointer access, trigger update within the renderer. */
489 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, dataZ, jni_double_vector, iNumVPG*iNum);
494 else if (strcmp(pstType, __GO_FEC__) == 0)
496 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_VERTICES__, jni_int, &piNum);
497 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_COORDINATES__, jni_double_vector, &pdblData);
499 for (i = 0; i < iNum; i++)
502 pdblData[3*i+1] += y;
503 pdblData[3*i+2] += z;
506 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_COORDINATES__, pdblData, jni_double_vector, 3*iNum);
511 else if (strcmp(pstType, __GO_GRAYPLOT__) == 0)
513 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_X__, jni_int, &piNumX);
514 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_Y__, jni_int, &piNumY);
516 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, jni_double_vector, &dataX);
517 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, jni_double_vector, &dataY);
519 for (i = 0; i < iNumX; i++)
524 for (i = 0; i < iNumY; i++)
529 if (displacementSize == 3)
532 double* pdZshift = &zShift;
534 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z_COORDINATES_SHIFT__, jni_int, &pdZshift);
536 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z_COORDINATES_SHIFT__, &zShift, jni_double, 1);
540 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, dataY, jni_double_vector, iNumY);
546 else if (strcmp(pstType, __GO_MATPLOT__) == 0)
549 double* pdZShift = &zShift;
550 //double* bounds = NULL;
554 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_MATPLOT_TYPE__, jni_int, &itype);
556 /* Only type 1 Matplot objects can be moved. */
559 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_X__, jni_int, &piNumX);
560 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_Y__, jni_int, &piNumY);
562 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, jni_double_vector, &dataX);
563 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, jni_double_vector, &dataY);
565 for (i = 0; i < iNumX; i++)
570 for (i = 0; i < iNumY; i++)
575 /* Bounds must be updated. */
576 //getGraphicObjectProperty(pobjUID, __GO_MATPLOT_BOUNDS__, jni_double_vector, &bounds);
583 if (displacementSize == 3)
585 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z_COORDINATES_SHIFT__, jni_int, &pdZShift);
587 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z_COORDINATES_SHIFT__, &zShift, jni_double, 1);
591 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, dataY, jni_double_vector, iNumY);
598 else if (strcmp(pstType, __GO_POLYLINE__) == 0)
600 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_VERTICES_PER_GON__, jni_int, &piNum);
602 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, jni_double_vector, &dataX);
603 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, jni_double_vector, &dataY);
605 for (i = 0; i < iNum; i++)
611 if (displacementSize == 3)
613 int zCoordinatesSet = 1;
615 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, jni_double_vector, &dataZ);
617 for (i = 0; i < iNum; i++)
622 /* The z coordinates flag must be set explicitely for now. */
623 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z_COORDINATES_SET__, &zCoordinatesSet, jni_int, 1);
625 /* Model data has been updated by direct pointer access, trigger update within the renderer. */
626 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, dataZ, jni_double_vector, iNum);
630 /* Trigger update, see above. */
631 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, dataY, jni_double_vector, iNum);
637 else if (strcmp(pstType, __GO_PLOT3D__) == 0)
639 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_X__, jni_int, &piNumX);
640 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_Y__, jni_int, &piNumY);
641 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_Z__, jni_int, &piNumZ);
643 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, jni_double_vector, &dataX);
644 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, jni_double_vector, &dataY);
645 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, jni_double_vector, &dataZ);
647 for (i = 0; i < iNumX; i++)
652 for (i = 0; i < iNumY; i++)
657 for (i = 0; i < iNumZ; i++)
663 * Perform only one set call to trigger geometry data update within the renderer module.
664 * Model data has been updated above by direct pointer access.
666 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, dataZ, jni_double_vector, iNumZ);
670 else if (strcmp(pstType, __GO_CHAMP__) == 0)
672 int *champDimensions = NULL;
674 getGraphicObjectProperty(pobjUID, __GO_CHAMP_DIMENSIONS__, jni_int_vector, &champDimensions);
676 getGraphicObjectProperty(pobjUID, __GO_BASE_X__, jni_double_vector, &pdblData);
677 getGraphicObjectProperty(pobjUID, __GO_BASE_Y__, jni_double_vector, &pdblDataY);
679 for (i = 0; i < champDimensions[0]; i++)
684 for (i = 0; i < champDimensions[1]; i++)
689 setGraphicObjectProperty(pobjUID, __GO_BASE_X__, pdblData, jni_double_vector, champDimensions[0]);
690 setGraphicObjectProperty(pobjUID, __GO_BASE_Y__, pdblDataY, jni_double_vector, champDimensions[1]);
692 if (displacementSize == 3)
694 getGraphicObjectProperty(pobjUID, __GO_BASE_Z__, jni_double_vector, &pdblDataZ);
696 for (i = 0; i < champDimensions[0]*champDimensions[1]; i++)
701 setGraphicObjectProperty(pobjUID, __GO_BASE_Z__, pdblDataZ, jni_double_vector, champDimensions[0]*champDimensions[1]);
706 else if (strcmp(pstType, __GO_LABEL__) == 0)
708 getGraphicObjectProperty(pobjUID, __GO_POSITION__, jni_double_vector, &pdblData);
712 setGraphicObjectProperty(pobjUID, __GO_POSITION__, pdblData, jni_double_vector, 3);
717 else if (strcmp(pstType, __GO_RECTANGLE__) == 0)
719 getGraphicObjectProperty(pobjUID, __GO_UPPER_LEFT_POINT__, jni_double_vector, &pdblData);
723 setGraphicObjectProperty(pobjUID, __GO_UPPER_LEFT_POINT__, pdblData, jni_double_vector, 3);
728 else if (strcmp(pstType, __GO_SEGS__) == 0)
730 double* pdblDirection;
732 getGraphicObjectProperty(pobjUID, __GO_NUMBER_ARROWS__, jni_int, &piNum);
733 getGraphicObjectProperty(pobjUID, __GO_BASE__, jni_double_vector, &pdblData);
734 getGraphicObjectProperty(pobjUID, __GO_DIRECTION__, jni_double_vector, &pdblDirection);
736 for (i = 0; i < iNum; i++)
739 pdblData[3*i+1] += y;
740 pdblData[3*i+2] += z;
743 for (i = 0; i < iNum; i++)
745 pdblDirection[3*i] += x;
746 pdblDirection[3*i+1] += y;
747 pdblDirection[3*i+2] += z;
750 setGraphicObjectProperty(pobjUID, __GO_BASE__, pdblData, jni_double_vector, 3*iNum);
751 setGraphicObjectProperty(pobjUID, __GO_DIRECTION__, pdblDirection, jni_double_vector, 3*iNum);
756 else if (strcmp(pstType, __GO_TEXT__) == 0)
758 getGraphicObjectProperty(pobjUID, __GO_POSITION__, jni_double_vector, &pdblData);
762 setGraphicObjectProperty(pobjUID, __GO_POSITION__, pdblData, jni_double_vector, 3);
767 if ((strcmp(pstType, __GO_AXES__) == 0) || (strcmp(pstType, __GO_COMPOUND__) == 0))
769 // Children already moved: Done.
774 Scierror(999, _("This object can not be moved.\n"));
777 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_X__, jni_int, &piNumX);
778 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_Y__, jni_int, &piNumY);
780 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, jni_double_vector, &dataX);
781 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, jni_double_vector, &dataY);
784 for (i = 0 ; i < iNumX ; ++i)
788 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_X__, dataX, jni_double_vector, iNumX);
791 for (i = 0 ; i < iNumY ; ++i)
795 setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Y__, dataY, jni_double_vector, iNumY);
798 if (displacementSize == 3)
800 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_Z__, jni_int, &piNumZ);
801 getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_Z__, jni_double_vector, &dataZ);
802 for (i = 0 ; i < iNumZ ; ++i)
812 switch (sciGetEntityType (pobj))
816 sciSons * psonstmp = sciGetSons(pobj);
817 while ((psonstmp != NULL) && (psonstmp->pointobj != NULL))
819 moveObj(psonstmp->pointobj, displacement, displacementSize);
820 psonstmp = psonstmp->pnext;
825 pARC_FEATURE(pobj)->x +=x;
826 pARC_FEATURE(pobj)->y += y;
827 if (displacementSize == 3) pARC_FEATURE(pobj)->z += z;
830 pRECTANGLE_FEATURE(pobj)->x += x;
831 pRECTANGLE_FEATURE(pobj)->y += y;
832 if (displacementSize == 3) pRECTANGLE_FEATURE(pobj)->z += z;
836 sciSons * psonstmp = sciGetSons(pobj);
837 while ((psonstmp != NULL) && (psonstmp->pointobj != NULL))
839 moveObj(psonstmp->pointobj, displacement, displacementSize);
840 psonstmp = psonstmp->pnext;
845 pTEXT_FEATURE(pobj)->x += x;
846 pTEXT_FEATURE(pobj)->y += y;
847 if (displacementSize == 3) pTEXT_FEATURE(pobj)->z += z;
850 n=pSEGS_FEATURE(pobj)->Nbr1;
852 pSEGS_FEATURE(pobj)->vx[i] += x;
853 pSEGS_FEATURE(pobj)->vy[i] += y;
855 if (displacementSize == 3)
857 if (pSEGS_FEATURE(pobj)->vz == (double *)NULL)
859 if ((pSEGS_FEATURE(pobj)->vz = MALLOC (n * sizeof (double)))==NULL)
865 pSEGS_FEATURE(pobj)->vz[i] = z;
871 pSEGS_FEATURE(pobj)->vz[i] += z;
876 n=pPOLYLINE_FEATURE(pobj)->n1;
879 pPOLYLINE_FEATURE(pobj)->pvx[i] += x;
880 pPOLYLINE_FEATURE(pobj)->pvy[i] += y;
882 if (displacementSize == 3)
884 if (pPOLYLINE_FEATURE(pobj)->pvz == (double *)NULL)
886 if ((pPOLYLINE_FEATURE(pobj)->pvz = MALLOC (n * sizeof (double)))==NULL)
892 pPOLYLINE_FEATURE(pobj)->pvz[i] = z;
899 pPOLYLINE_FEATURE(pobj)->pvz[i] += z;
905 for (i=0;i<pFEC_FEATURE(pobj)->Nnode;i++)
907 pFEC_FEATURE(pobj)->pvecx[i] += x;
908 pFEC_FEATURE(pobj)->pvecy[i] += y;
912 if (pGRAYPLOT_FEATURE(pobj)->type == 2)
914 /* Matplot 1, it is not possible to move a Matplot*/
915 pGRAYPLOT_FEATURE(pobj)->pvecx[0] += x;
916 pGRAYPLOT_FEATURE(pobj)->pvecx[2] += x;
917 pGRAYPLOT_FEATURE(pobj)->pvecx[1] += y;
918 pGRAYPLOT_FEATURE(pobj)->pvecx[3] += y;
920 else if (pGRAYPLOT_FEATURE(pobj)->type == 0)
923 for (i=0;i<pGRAYPLOT_FEATURE(pobj)->nx;i++)
925 pGRAYPLOT_FEATURE(pobj)->pvecx[i] += x;
927 for (i=0;i<pGRAYPLOT_FEATURE(pobj)->ny;i++)
929 pGRAYPLOT_FEATURE(pobj)->pvecy[i] += y;
934 Scierror(999, _("This object can not be moved.\n"));
940 switch(pSURFACE_FEATURE (pobj)->typeof3d)
943 n= pSURFACE_FEATURE (pobj)->dimzx* pSURFACE_FEATURE (pobj)->dimzy;
945 pSURFACE_FEATURE(pobj)->pvecx[i] += x;
946 pSURFACE_FEATURE(pobj)->pvecy[i] += y;
948 if (displacementSize == 3) {
949 if (pSURFACE_FEATURE(pobj)->pvecz == (double *)NULL) {
950 if ((pSURFACE_FEATURE(pobj)->pvecz = MALLOC (n * sizeof (double)))==NULL) return -1;
952 pSURFACE_FEATURE(pobj)->pvecz[i] = z;
956 pSURFACE_FEATURE(pobj)->pvecz[i] += z;
960 for (i=0;i<pSURFACE_FEATURE (pobj)->dimzx;i++)
961 pSURFACE_FEATURE(pobj)->pvecx[i] += x;
962 for (i=0;i<pSURFACE_FEATURE (pobj)->dimzy;i++)
963 pGRAYPLOT_FEATURE(pobj)->pvecy[i] += y;
964 if (displacementSize == 3) {
965 n=pSURFACE_FEATURE (pobj)->dimzx*pSURFACE_FEATURE (pobj)->dimzy;
966 if (pSURFACE_FEATURE(pobj)->pvecz == (double *)NULL) {
967 if ((pSURFACE_FEATURE(pobj)->pvecz = MALLOC (n * sizeof (double)))==NULL) return -1;
969 pSURFACE_FEATURE(pobj)->pvecz[i] = z;
973 pSURFACE_FEATURE(pobj)->pvecz[i] += z;
978 case SCI_PARAM3D1: /* Nothing to be done */
985 sciGetTextPos(pobj, pos) ;
986 sciSetTextPos(pobj, pos[0] + x, pos[1] + y, pos[2] + z) ;
987 pLABEL_FEATURE(pobj)->auto_position = FALSE;
995 Scierror(999, _("This object can not be moved.\n"));
1000 /* update the object */
1001 forceMove(pobjUID, x, y, z);
1006 int Objmove (char *pobjUID, double d[], int m,BOOL opt)
1008 int status = moveObj(pobjUID, d, m);
1017 /* should be sci draw single obj */
1018 sciDrawSingleObj(pobj);
1022 sciDrawObj(sciGetParentFigure(pobj));
1028 /*---------------------------------------------------------------------------------*/
1029 void pixelRubberBox(sciPointObj * pFigure, BOOL isClick,
1030 const int initialRect[4], int endRect[4], int * usedButton)
1032 javaRubberBox(pFigure, isClick, initialRect, endRect, usedButton);
1034 /*---------------------------------------------------------------------------------*/
1035 void rubberBox(sciPointObj * pSubwin, BOOL isClick,
1036 const double initialRect[4], double endRect[4], int * usedButton)
1038 int endPixelRect[4];
1039 double endFirstCorner[2];
1040 double endSecondCorner[2];
1042 /* get up to date coordinates */
1043 updateSubwinScale((char*)pSubwin);
1045 /* convert initial rect in */
1047 if (initialRect != NULL)
1049 int initialPixelRect[4];
1051 /* Convert initial rect in pixels */
1052 double firstCorner[2];
1053 double secondCorner[2];
1054 firstCorner[0] = initialRect[0];
1055 firstCorner[1] = initialRect[1]; /* upper left point */
1056 secondCorner[0] = initialRect[0] + initialRect[2];
1057 secondCorner[1] = initialRect[1] - initialRect[3];
1058 sciGet2dViewPixelCoordinates((char*)pSubwin, firstCorner, initialPixelRect);
1059 sciGet2dViewPixelCoordinates((char*)pSubwin, secondCorner, initialPixelRect + 2);
1061 pixelRubberBox(sciGetParentFigure(pSubwin), isClick, initialPixelRect, endPixelRect, usedButton);
1065 pixelRubberBox(sciGetParentFigure(pSubwin), isClick, NULL, endPixelRect, usedButton);
1068 /* here we get the two opposite points of the rectangle in pixels */
1069 /* convert them in user coordinates */
1070 sciGet2dViewCoordFromPixel((char*)pSubwin, endPixelRect, endFirstCorner);
1071 sciGet2dViewCoordFromPixel((char*)pSubwin, endPixelRect + 2, endSecondCorner);
1073 /* [x,y,w,h] array where (x,y) is the upper left point of the rectangle */
1074 endRect[0] = Min(endFirstCorner[0], endSecondCorner[0]);
1075 endRect[1] = Max(endFirstCorner[1], endSecondCorner[1]);
1076 endRect[2] = Abs(endFirstCorner[0] - endSecondCorner[0]);
1077 endRect[3] = Abs(endFirstCorner[1] - endSecondCorner[1]);
1080 /*---------------------------------------------------------------------------------*/
1081 void interactiveZoom(sciPointObj * pObj)
1083 if (sciGetEntityType(pObj) == SCI_FIGURE)
1085 interactiveJavaZoom(pObj);
1087 else if (sciGetEntityType(pObj) == SCI_SUBWIN)
1089 interactiveJavaSubwinZoom(pObj);
1092 /*---------------------------------------------------------------------------------*/
1093 void interactiveRotation(sciPointObj * pFigure)
1095 interactiveJavaRotation(pFigure);
1097 /*---------------------------------------------------------------------------------*/
1098 void interactiveSubwinRotation(sciPointObj * pSubwin)
1100 /* get coordinates of first mouse click */
1101 interactiveJavaSubwinRotation(pSubwin);
1103 /*---------------------------------------------------------------------------------*/
1104 void showWindow(char * pFigureUID)
1106 // @TODO: Call SwingView to raise window.