summaryrefslogtreecommitdiff
path: root/modules/graphics/macros/locate.sci
blob: abbfff78a066d25dedd2359c26b4ce428ebea07f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) INRIA
// 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

function [x,but]=locate(n,flag)
    //[x]=locate(n,flag)
    //fonction permettant d'obtenir les coordonnees  d'un ou plusieurs
    //points designes a l'aide de la souris sur un trace.
    //Les resultats ne sont significatifs que sur les axes lineaires.
    //x=locate(n) . Si n>0 retourne dans x(2,n) les coordonnees des  n
    //             points designes.
    //           . Si n<=0 retourne dans x les coordonnees des points
    //             designes jusqu'a l'indication de fin de saisie, ce
    //             dernier point n'etant pas retenu.
    //x=locate()  . equivault au cas n <= 0
    //si flag=1, on trace une croix sur chaque point saisi
    //
    //Sur les systemes ayant une souris a boutons, on designe un point
    //en cliquant sur un des boutons, la fin de saisie pour  n<=0  est
    //indiquee en cliquant sur le bouton de gauche.
    //!

    [lhs,rhs]=argn(0)
    but=[]
    show_window();
    if rhs<=1,flag=0;end
    if rhs==0;n=-1;end

    ax=gca()
    mark_style=ax.mark_style;mark_size=ax.mark_size;mark_size_unit=ax.mark_size_unit;
    ax.mark_style=2;ax.mark_size=0;ax.mark_size_unit = "tabulated"
    deff( "[]=clearmode(flag)",[
    "npt=size(x,2);"
    "if npt>0&flag==1 then"
    "  delete(ax.children(1:npt))"
    "end"
    "ax.mark_size_unit=mark_size_unit;"
    "ax.mark_style=mark_style;"
    "ax.mark_size=mark_size;"]);
    x=[];
    if n >= 0 then
        for i=1:n,
            while %t
                [ib,x1,y1]=xclick();
                if or(ib==[0:5 10 11 12]) then break,end
                if ib==-100 then return,end //the window has been closed
            end
            if flag==1,xpoly(x1,y1,"marks");end
            x=[x,[x1;y1]];
            but=[but,ib]
        end
    else
        while %t,
            while %t
                [ib,x1,y1]=xclick(),
                if or(ib==[0:5 10 11 12]) then break,end
                if ib==-100 then return,end //the window has been closed
            end
            if or(ib==[0 3 10]) then
                break //terminate the acquisition loop
            elseif flag==1 then xpoly(x1,y1,"marks"),end
            x=[x,[x1;y1]];
            but=[but,ib]
        end
    end
    clearmode(flag);
endfunction