ME10マクロのページです
(測定・計算)

2000.06.14 更新



リスト


macro.lzh#(マクロファィルです。)

     1.測定・2点と中心
   2.測定・要素の鋏角の再表示 2000.06.14
   3.測定・要素の鋏角のデータ表示 2000.06.14
   4.測定・要素の鋏角 2000.06.14
   5.測定・要素の傾斜角 2000.06.14
     6.測定・半径と中心
     7.測定・端位置の再表示
     8.測定・端位置のデータ表示
     9.測定・要素端位置
     10.測定・位置
    11.測定・要素長累計
     12.測定・要素長
     13.測定・距離


{測定・2点と中心
  1999.04.25
}
DEFINE Ma_measure_angle_point
  LOCAL Point01
  LOCAL Point02
  LOCAL Point03
  LOCAL Angle01
  LOCAL Angle02
  LOCAL Data01
  LOCAL Data02
  LOCAL Data03


  Ma_screen_erase_data                            {前データの消去}

  READ PNT '** 最初の点を指定してください。 **' Point01
  READ PNT '** 次の点を指定してください。 **' RUBBER_LINE Point01 Point02

  LOOP
    READ PNT '** 原点を指定してください。 終わる場合は、[ESC]キー を押して下さい。**' Point03
    LET Angle01 (ANG (Point03 - Point01))
    LET Angle02 (ANG (Point03 - Point02))
    LET Data01 (ABS (Angle01 - Angle02))
    IF (Data01 > 180)
    LET Data01 (360- Data01)
    END_IF


    LET Data02 (ABS (Point03 - Point01))
    LET Data03 (ABS (Point03 - Point02))

    MENU Colo1 Bcol3 '角度' '' 3 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
    MENU Colo1 Bcol3 '距 A' '' 4 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2
    MENU Colo1 Bcol3 '距 B' '' 5 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data03 '' 5 2
  END_LOOP


END_DEFINE



測定・要素の鋏角の再表示 2000.06.11
}
DEFINE Ma_measure_tip_angle_element_again
  LOCAL Angle_unit                                {ラディアンへの変換値}

  INQ_ENV 6
  LET Angle_unit (INQ 3)                          {ラディアンへの変換値}

  Ma_screen_erase_data                            {前データの消去}
  Ma_measure_angle_element_value Angle_unit

END_DEFINE



測定・要素の鋏角のデータ表示
  2000.06.11
}
DEFINE Ma_measure_angle_element_value
  PARAMETER Angle_unit                            {ラディアンへの変換値}

  LOCAL Angle01
  LOCAL Angle02


  IF (Gl_measure_pos = 0)                         {小侠角なら}
    LET Angle01 (GL_measure_angle / Angle_unit)
    LET Angle02 ((PI - GL_measure_angle) / Angle_unit)
    LET Gl_measure_pos 1
  ELSE_IF (Gl_measure_pos = 1)                    {大侠角なら}
    LET Angle01 ((2 * PI - GL_measure_angle) / Angle_unit)
    LET Angle02 ((PI + GL_measure_angle) / Angle_unit)
    LET Gl_measure_pos 0
  END_IF


  MENU Colo1 Bcol3 '角1' '' 3 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Angle01 '' 3 2
  MENU Colo1 Bcol3 '角2' '' 4 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Angle02 '' 4 2
  MENU Colo1 Bcol5 '小/大侠角切替' 'Ma_measure_tip_angle_element_again' 5 2

END_DEFINE



測定・要素の鋏角
  1999.04.18-2000.06.11
}
DEFINE Ma_measure_angle_element
  LOCAL Point_temp
  LOCAL Point01
  LOCAL Angle01
  LOCAL Angle02

  LOCAL Angle_unit                                {ラディアンへの変換値}


  INQ_ENV 6
  LET Angle_unit (INQ 3)                          {ラディアンへの変換値}

  LOOP
    READ PNT '** 基準となる、線、下書き線又は文字を指示して下さい。(反時計回りのデータです。) **' Point_temp
    INQ_ELEM Point_temp                           {要素情報の取得}
  EXIT_IF (((INQ 403) = LINE) OR ((INQ 403) = C_LINE) OR ((INQ 403) = TEXT))
  END_LOOP


  IF ((INQ 403) = TEXT)                           {文字なら}
    LET Point01 (INQ 101)
    LET Angle01 (INQ 8)
  ELSE
    LET Point01 Point_temp
    IF ((INQ 403) = LINE)                         {線なら}
      LET Angle01 (ANG ((INQ 102) - (INQ 101)))
      IF (Angle01 >= 180)
        LET Angle01 (Angle01 - 180)
      END_IF

    ELSE                                          {下書き線なら}
      LET Angle01 (INQ 3)
    END_IF

  END_IF


  LET Angle01 (Angle01 * Angle_unit)              {ラディアン表示}
  IF (Angle01 < 0)                                {−なら}
    LET Angle01 (2 * PI + Angle01)
  END_IF

  IF (Angle01 >= PI)                              {180°以上なら}
    LET Angle01 (Angle01 - PI)
  END_IF


  LOOP
    READ PNT '** 測定する、線、下書き線又は文字を指示して下さい。 **' RUBBER_LINE Point01 Point_temp
    INQ_ELEM Point_temp                           {要素情報の取得}
  EXIT_IF (((INQ 403) = LINE) OR ((INQ 403) = C_LINE) OR ((INQ 403) = TEXT))
  END_LOOP


  IF ((INQ 403) = TEXT)                           {文字なら}
    LET Angle02 (INQ 8)
  ELSE
    IF ((INQ 403) = LINE)                         {線なら}
      LET Angle02 (ANG ((INQ 102) - (INQ 101)))
      IF (Angle02 >= 180)
        LET Angle02 (Angle01 - 180)
      END_IF

    ELSE                                          {下書き線なら}
      LET Angle02 (INQ 3)
    END_IF

  END_IF


  LET Angle02 (Angle02 * Angle_unit)              {ラディアン表示}
  IF (Angle02 < 0)                                {−なら}
    LET Angle02 (2 * PI + Angle02)
  END_IF

  IF (Angle02 >= PI)                              {180°以上なら}
    LET Angle02 (Angle02 - PI)
  END_IF


  Ma_screen_erase_data                            {前データの消去}
  LET Gl_measure_pos 0

  IF (Angle02 >= Angle01)
    LET GL_measure_angle (Angle02 - Angle01)
  ELSE
    LET GL_measure_angle (Angle01 - Angle02)
  END_IF


  Ma_measure_angle_element_value Angle_unit

END_DEFINE



測定・要素の傾斜角
  1999.04.14-2000.06.11
}
DEFINE Ma_measure_slope
  LOCAL Angle_unit                                {ラディアンへの変換値}
  LOCAL Point_temp
  LOCAL Point01
  LOCAL Point02
  LOCAL Angle01
  LOCAL Angle02

  INQ_ENV 6
  LET Angle_unit (INQ 3)                          {ラディアンへの変換値}

  LOOP
    READ PNT '** 線、円弧、フィレット、下書き線又は文字を指示して下さい。 **' Point_temp
    INQ_ELEM Point_temp                           {要素情報の取得}
  EXIT_IF (((INQ 403) = LINE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET) OR ((INQ 403) = C_LINE) OR ((INQ 403) = TEXT))
  END_LOOP


  Ma_screen_erase_data                            {前データの消去}

  IF (((INQ 403) = LINE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET))
    IF ((INQ 403) = LINE)
      LET Point01 (INQ 101)                       {始点の取得}
      LET Point02 (INQ 102)                       {終点の取得}
    ELSE_IF (((INQ 403) = ARC) OR ((INQ 403) = FILLET))
      LET Point01 (INQ 102)                       {始点の取得}
      LET Point02 (INQ 103)                       {終点の取得}
    END_IF

    LET Angle01 (ANG (Point02 - Point01))

  ELSE_IF ((INQ 403) = C_LINE)
    LET Angle01 (INQ 3)                           {X 軸との角度の取得}

  ELSE_IF ((INQ 403) = TEXT)
    LET Angle01 (INQ 8)                           {角度の取得}

  END_IF


{ X軸基準}
  LET Angle01 (Angle01 * Angle_unit)              {ラディアンへ変換}
  IF (Angle01 <= (- (PI / 2)))
    LET Angle01 (Angle01 + PI)
  ELSE_IF (Angle01 > (PI / 2))
    LET Angle01 (Angle01 - PI)
  END_IF


{ 全周角度基準}
  IF (Angle01 >= 0)
    LET Angle02 (Angle01 + PI)
  ELSE
    LET Angle02 (Angle01 + PI)
  END_IF


  LET Angle01 (Angle01 / Angle_unit)              {単位を戻す}
  LET Angle02 (Angle02 / Angle_unit)

  MENU Colo1 Bcol3 '角1' '' 3 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Angle01 '' 3 2
  MENU Colo1 Bcol3 '角2' '' 4 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Angle02 '' 4 2

END_DEFINE



測定・半径と中心
  1999.04.11}

DEFINE Ma_measure_radius
  LOCAL Point_temp
  LOCAL Point01
  LOCAL Data01
  LOCAL Data02
  LOCAL Data03


  LOOP
    READ PNT '** 円、円弧又はフィレットを指示して下さい。 **' Point_temp
    INQ_ELEM Point_temp                           {要素情報の取得}
  EXIT_IF (((INQ 403) = CIRCLE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET) OR ((INQ 403) = C_CIRCLE))
  END_LOOP


  Ma_screen_erase_data                            {前データの消去}

  LET Point01 (INQ 101)                           {中心点位置の取得}

  LET Data01 (INQ 3)                              {半径}
  LET Data02 (ABS (X_OF Point01))
  LET Data03 (ABS (Y_OF Point01))

  MENU Colo1 Bcol3 '半径' '' 3 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
  MENU Colo1 Bcol3 '芯 X' '' 4 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2
  MENU Colo1 Bcol3 '芯 Y' '' 5 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data03 '' 5 2

END_DEFINE



測定・端位置の再表示
  1999.04.14}

DEFINE Ma_measure_tip_value_again
  Ma_screen_erase_data                            {前データの消去}
  Ma_measure_tip_value
END_DEFINE



測定・端位置のデータ表示
  1999.04.14}

DEFINE Ma_measure_tip_value
  LOCAL Point01
  LOCAL Data01
  LOCAL Data02


  IF (Gl_measure_pos = 0)                         {先端なら}
    LET Point01 Gl_measure_tip01
    LET Gl_measure_pos 1
  ELSE_IF (Gl_measure_pos = 1)                    {後端なら}
    LET Point01 Gl_measure_tip02
    LET Gl_measure_pos 0
  END_IF


  LET Data01 (X_OF Point01)
  LET Data02 (Y_OF Point01)

  MENU Colo1 Bcol3 ' X' '' 3 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
  MENU Colo1 Bcol3 ' Y' '' 4 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2
  MENU Colo1 Bcol5 '他端' 'Ma_measure_tip_value_again' 5 1

END_DEFINE



測定・要素端位置
  1999.04.14}

DEFINE Ma_measure_tip
  LOCAL Point_temp
  LOCAL Point01
  LOCAL Point02
  LOCAL Data01
  LOCAL Data02


  LOOP
    READ PNT '** 線、円、円弧、フィレット又はBスプライン線を指示して下さい。 **' Point_temp
    INQ_ELEM Point_temp                           {要素情報の取得}
  EXIT_IF (((INQ 403) = LINE) OR ((INQ 403) = CIRCLE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET) OR ((INQ 403) = BSPLINE))
  END_LOOP


  Ma_screen_erase_data                            {前データの消去}

  LET Gl_measure_pos 0
  IF (((INQ 403) = LINE) OR ((INQ 403) = BSPLINE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET))

    IF (((INQ 403) = LINE) OR ((INQ 403) = BSPLINE))
      LET Point01 (INQ 101)                       {始点の取得}
      LET Point02 (INQ 102)                       {終点の取得}
    ELSE_IF (((INQ 403) = ARC) OR ((INQ 403) = FILLET))
      LET Point01 (INQ 102)                       {始点の取得}
      LET Point02 (INQ 103)                       {終点の取得}
    END_IF

    LET GL_measure_tip01 Point01
    LET GL_measure_tip02 Point02

    Ma_measure_tip_value

  ELSE_IF ((INQ 403) = CIRCLE)
    LET Point01 (INQ 102)                        {円周上の点の取得}
    LET Data01 (X_OF Point01)
    LET Data02 (Y_OF Point01)

    MENU Colo1 Bcol3 ' X' '' 3 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
    MENU Colo1 Bcol3 ' Y' '' 4 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2
  END_IF

END_DEFINE



測定・位置
  1999.04.14}

DEFINE Ma_measure_point
  LOCAL Point01
  LOCAL Data01
  LOCAL Data02


  READ PNT '** 位置を指示して下さい。 **' Point01

  Ma_screen_erase_data                            {前データの消去}

  LET Data01 (X_OF Point01)
  LET Data02 (Y_OF Point01)

  MENU Colo1 Bcol3 ' X' '' 3 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
  MENU Colo1 Bcol3 ' Y' '' 4 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2

END_DEFINE



{測定・要素長累計
 2000.01.01
}
DEFINE Ma_measure_distance_element_total
  LOCAL Point_temp
  LOCAL Point01
  LOCAL Point02
  LOCAL Point03
  LOCAL Radius
  LOCAL Angle01
  LOCAL Angle02
  LOCAL Data00
  LOCAL Data01

  LET Data00 0                                    {データの初期化}
  LOOP
    LOOP
      READ PNT '** 累計を行う、線、円、円弧又はフィレットを指示して下さい。 終了は[ESC]キーを入力 **' Point_temp
      INQ_ELEM Point_temp                         {要素情報の取得}
    EXIT_IF (((INQ 403) = LINE) OR ((INQ 403) = CIRCLE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET))
    END_LOOP


    Ma_screen_erase_data                          {前データの消去}

    IF ((INQ 403) = LINE)
      LET Point01 (INQ 101)                       {始点の取得}
      LET Point02 (INQ 102)                       {終点の取得}
      LET Data01 (ABS (Point02 - Point01))        {長さ}

      MENU Colo1 Bcol3 '線長' '' 3 1
      MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2

    ELSE_IF (((INQ 403) = ARC) OR ((INQ 403) = FILLET))
      LET Radius (INQ 3)                          {半径}
      LET Angle01 (INQ 4)                         {始点角度}
      LET Angle02 (INQ 5)                         {終点角度}
      LET Point02 (INQ 102)                       {始点の取得}
      LET Point03 (INQ 103)                       {終点の取得}
      INQ_ENV 6
      LET Data01 ((Angle02 - Angle01) * (INQ 3) * Radius)
      LET Data02 (ABS (Point03 - Point02))        {長さ}

      MENU Colo1 Bcol3 '弧長' '' 3 1
      MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2

    ELSE_IF ((INQ 403) = CIRCLE)
      LET Radius (INQ 3)                          {半径}
      LET Data01 (PI * Radius * 2)

      MENU Colo1 Bcol3 '周長' '' 3 1
      MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
    END_IF


    LET Data00 (Data00 + Data01)
    MENU Colo1 Bcol3 '累計' '' 4 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data00 '' 4 2

  END_LOOP


END_DEFINE



測定・要素長
  1999.04.14}

DEFINE Ma_measure_distance_element
  LOCAL Point_temp
  LOCAL Point01
  LOCAL Point02
  LOCAL Point03
  LOCAL Radius
  LOCAL Angle01
  LOCAL Angle02
  LOCAL Data01
  LOCAL Data02


  LOOP
    READ PNT '** 線、円、円弧又はフィレットを指示して下さい。 **' Point_temp
    INQ_ELEM Point_temp                           {要素情報の取得}
  EXIT_IF (((INQ 403) = LINE) OR ((INQ 403) = CIRCLE) OR ((INQ 403) = ARC) OR ((INQ 403) = FILLET))
  END_LOOP


  Ma_screen_erase_data                            {前データの消去}

  IF ((INQ 403) = LINE)
    LET Point01 (INQ 101)                         {始点の取得}
    LET Point02 (INQ 102)                         {終点の取得}
    LET Data01 (ABS (Point02 - Point01))          {長さ}

    MENU Colo1 Bcol3 '線長' '' 3 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2

  ELSE_IF (((INQ 403) = ARC) OR ((INQ 403) = FILLET))
    LET Radius (INQ 3)                            {半径}
    LET Angle01 (INQ 4)                           {始点角度}
    LET Angle02 (INQ 5)                           {終点角度}
    LET Point02 (INQ 102)                         {始点の取得}
    LET Point03 (INQ 103)                         {終点の取得}
    INQ_ENV 6
    LET Data01 ((Angle02 - Angle01) * (INQ 3) * Radius)
    LET Data02 (ABS (Point03 - Point02))          {長さ}

    MENU Colo1 Bcol3 '弧長' '' 3 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
    MENU Colo1 Bcol3 '弦長' '' 4 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2

  ELSE_IF ((INQ 403) = CIRCLE)
    LET Radius (INQ 3)                            {半径}
    LET Data01 (PI * Radius * 2)

    MENU Colo1 Bcol3 '周長' '' 3 1
    MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
  END_IF

END_DEFINE



{測定・距離
  1999.04.11}

DEFINE Ma_measure_distance
  LOCAL Point01
  LOCAL Point02
  LOCAL Data01
  LOCAL Data02
  LOCAL Data03


  Ma_screen_erase_data                            {前データの消去}

  READ PNT '** 始点を指定してください。 **' Point01
  READ PNT '** 終点を指定してください。 **' RUBBER_LINE Point01 Point02

  LET Data01 (ABS (Point02 - Point01))            {長さ}
  LET Data02 (ABS (X_OF (Point02 - Point01)))
  LET Data03 (ABS (Y_OF (Point02 - Point01)))

  MENU Colo1 Bcol3 '距離' '' 3 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data01 '' 3 2
  MENU Colo1 Bcol3 '水平' '' 4 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data02 '' 4 2
  MENU Colo1 Bcol3 '鉛直' '' 5 1
  MENU Colo1 Bcol4 Ma_slotdata_distance Data03 '' 5 2

END_DEFINE



気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表