summaryrefslogtreecommitdiff
path: root/texmf-dist/scripts/ketcindy/ketlib/ketpicscifiles6/Arrowhead.sci
blob: 9073ca6e1cbed155b7196964cabd422dbedab96c (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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//
// 08.06.01
// 09.12.25
// 12.01.07   kirikomi(Cut)
// 12.04.16 debugged
// 13.05.17 debugged
// 13.11.13 debugged
// 15.06.11 debugged
// 15.06.14 debugged
// 15.06.15 improved

function Arrowhead(varargin)
  global Wfile FID MilliIn YaSize
  global YaAngle YaPosition YaThick YaStyle;
  Nargs=length(varargin);
  P=varargin(1);
  Houkou=varargin(2);
  Ookisa=0.2*YaSize;
  Hiraki=YaAngle;
  Futosa=0.5*YaThick;
  Cut=0;
  Str=YaStyle;
  Flg=0;
  for I=3:Nargs
    Tmp=varargin(I);
    if type(Tmp)==10
      Equal=mtlb_findstr(Tmp,'='); // 12.01.07 from
      if length(Equal)>0
        Tmp2=strsplit(Tmp,Equal-1);
         if Tmp2(1)=="Cut" | Tmp2(1)=="cut"
           Tmp="Cut"+Tmp2(2);
           execstr(Tmp);
      end;
      else
        Str=Tmp;
      end; // 12.01.07 upto
    end;
    if type(Tmp)==1 & length(Tmp)==1
      if Flg==0
        Ookisa=Ookisa*Tmp;
      end
      if Flg==1
        if Tmp<5 
          Hiraki=Tmp*Hiraki
        else
          Hiraki=Tmp
        end
      end
      if Flg==2
        Futosa=Tmp
      end
      Flg=Flg+1;
    end
  end;
  Ookisa=1000/2.54/MilliIn*Ookisa;
  Theta=Hiraki*%pi/180;
  if size(Houkou,1)>1
    P=Doscaling(P);
    Houkou=Doscaling(Houkou);
    Tmp=Nearestpt(P,Houkou);
    A=Op(1,Tmp);
    I=floor(Op(2,Tmp));
    G=Circledata(P,Ookisa*cos(Theta),'N=10');
    Flg=0;  // 13.11.13
    for J=I:-1:1
      B=Ptcrv(J,Houkou);
      Tmp=IntersectcrvsPp(Listplot([A,B]),G);
      if Mixlength(Tmp)>0
        Flg=1;
        break
      end
      A=B
    end
    if Flg==0 // 13.11.13
      disp('Arrowhead may be too large (no intersect)');
      return
    end
    Houkou=P-Op(1,Op(1,Tmp));
    Houkou=Unscaling(Houkou);
    P=Unscaling(P);
  end;
  P=Doscaling(P);
  Houkou=Doscaling(Houkou);
  Ev=-1/Vecnagasa(Houkou)*Houkou;
  Nv=[-Ev(2),Ev(1)];
  if mtlb_findstr(Str,'c')~=[]
    P=P-0.5*Ookisa*cos(Theta)*Ev
  end;
  if mtlb_findstr(Str,'b')~=[]
    P=P-Ookisa*cos(Theta)*Ev
  end;
  A=P+Ookisa*cos(Theta)*Ev+Ookisa*sin(Theta)*Nv;
  B=P+Ookisa*cos(Theta)*Ev-Ookisa*sin(Theta)*Nv;
  if mtlb_findstr(Str,'l')~=[]
    Tmp=Listplot([A,P,B]);
    Tmp1=Unscaling(Tmp); // 13.05.17
    Drwline(Tmp1,Futosa);
  else
    C=P+(1-Cut)*((A+B)/2-P);  // 12.01.05
    Tmp=Listplot([A,P,B,C,A]);  // 12.01.05
    Tmp1=Unscaling(Tmp);
    Shade(Tmp1);
    Tmp=Listplot([A,P,B,C,A,P]);  // 15.6.20
    Tmp1=Unscaling(Tmp);
    Drwline(Tmp1,0.1);  // 15.06.11, 15.06.14
  end
endfunction