プログラム KIHONC で, いろいろな矢印や線分を描いてみましょう. U-座標系での矢印描画は, SGLAU ルーチンで行ないます. 引数は, (X1,Y1) が始点の座標, (X2,Y2) が終点の座標です. 線分の終点から 対称な2本の線分を付け加えて矢じり部分とします. 最初の例のように, デフォ ルトでは, 本体部分が長くなるのに比例して矢じり部分も大きくなります.
      PROGRAM KIHONC
      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL SGPWSN
      READ (*,*) IWS
      CALL SGOPN( IWS )
      CALL SGFRM
      CALL SGSWND( 0.0, 10.0, 0.0, 10.0 )
      CALL SGSVPT( 0.0,  1.0, 0.0,  1.0 )
      CALL SGSTRN( 1 )
      CALL SGSTRF
*-- デフォルト ----
      Y1 = 9.0
      DO 10 I=1,8
        X1 = I
        X2 = X1 + 0.1*I
        Y2 = Y1 + 0.1*I
        CALL SGLAU( X1, Y1, X2, Y2 )
   10 CONTINUE
*-- 線分のラインタイプ ----
      Y1 = 8.0
      Y2 = 8.6
      DO 20 I=1,4
        X1 = 2*I - 1
        X2 = X1 + 0.6
        CALL SGSLAT( I )
        CALL SGLAU( X1, Y1, X2, Y2 )
   20 CONTINUE
      CALL SGSLAT( 1 )
*-- 線分のラインインデクス ----
      Y1 = 7.0
      Y2 = 7.6
      DO 30 I=1,4
        X1 = 2*I
        X2 = X1 + 0.6
        CALL SGSLAI( I )
        CALL SGLAU( X1, Y1, X2, Y2 )
   30 CONTINUE
      CALL SGSLAI( 1 )
*-- 矢じり部分の長さ ----
      CALL SGLSET( 'LPROP', .FALSE. )
      CALL SGRSET( 'CONST', 0.03 )
      Y1 = 6.0
      DO 40 I=1,8
        X1 = I
        X2 = X1 + 0.1*I
        Y2 = Y1 + 0.1*I
        CALL SGLAU( X1, Y1, X2, Y2 )
   40 CONTINUE
      CALL SGLSET( 'LPROP', .TRUE. )
*-- 矢じり部分の角度 ----
      Y1 = 5.0
      Y2 = 5.6
      DO 50 I=1,8
        X1 = I
        X2 = X1 + 0.6
        CALL SGRSET( 'ANGLE', 10.0*I )
        CALL SGLAU( X1, Y1, X2, Y2 )
   50 CONTINUE
*-- 矢じり部分のぬりつぶし ----
      CALL SGLSET( 'LSOFTF', .TRUE. )
      CALL SGLSET( 'LATONE', .TRUE. )
      CALL SGISET( 'IATONE', 655 )
      Y1 = 4.0
      Y2 = 4.6
      DO 60 I=1,8
        X1 = I
        X2 = X1 + 0.6
        CALL SGRSET( 'ANGLE', 10.*I )
        CALL SGLAU( X1, Y1, X2, Y2 )
   60 CONTINUE
*-- ラインサブプリミティブ ----
*-- デフォルト ----
        CALL SGLNU( 0., 3., 10., 3. )
*-- 線分のラインインデクス ----
      Y1 = 0.5
      Y2 = 2.5
      DO 70 I=1,4
        X1 = 2*I - 1
        X2 = X1 + 2.0
        CALL SGSLNI( I )
        CALL SGLNU( X1, Y1, X2, Y2 )
   70 CONTINUE
      CALL SGCLS
      END
      
 
     
     
SGSLAT ルーチンでは矢印を描く線分のラインタイプを, SGSLAI       
ルーチンではそのラインインデクスを設定できます(2番めと3番め). また,ア      
ローサブプリミティブに関する内部変数を設定し直すことにより, 矢じり部分      
の形状を変えることもできます. 4番めの例では, 内部変数 'LPROP' を       
.FALSE. として矢じり部分の長さが一定値となるようにし, その長さを      
内部変数 'CONST' で陽に与えました. さらに, 矢じり部分の線分と本      
体部分の線分のなす角を変化させたり(5番め), 矢じり部分を定義する三角形      
の領域を塗りつぶしたり(6番め)することにより, 多種多様な矢印が可能です.      
      
      
      
最後に, U-座標系での線分描画は, SGLNU ルーチンで同様に行ないます. しかし, これはアローサブプリミティブの特殊な場合(矢じり部分がない場合) と考えられますので, 将来的には削除されるかも知れません.
      
      
| 
 |