EVA archimedische Spirale

{######################################################################}
{###                                                                ###}
{### Datei eva_spirale_kbs_2.mac                                    ###}
{###                                                                ###}
{### erstellt archimedische Spirale                                 ###}
{###                                                                ###}
{### OHNE VERWENDUNG TEMPORÄRER DATEIEN : NEIN                      ###}
{###                                                                ###}
{### Erstelldatum:     01.02.2014                                   ###}
{### Vorlage war eine nicht mehr zu ermittelnde Quelle              ###}
{### (c) 2012-2014 by E.V.A. Robert Hoffmann                        ###}
{### http://www.me10-makros.de                                      ###}
{### info@me10-makros.de                                            ###}
{###                                                                ###}
{### Änderungsdatum:                                                ###}
{### Art der Änderung:                                              ###}
{###                                                                ###}
{### Änderungsdatum:                                                ###}
{### Art der Änderung:                                              ###}
{###                                                                ###}
{### Zeit:                                                          ###}
{###                                                                ###}
{### Erforderliche Makros:                                          ###}
{###                                                                ###}
{###                                                                ###}
{### NUTZUNGSBEDINGUNGEN                                            ###}
{###                                                                ###}
{### ALLE OBIGEN KOMMENTARE UND COPYRIGHT-VERMERKE                  ###}
{### SIND UNVERÄNDERT ZU LASSEN                                     ###}
{### ÄNDERUNGEN AM QUELLTEXT SIND ALS SOLCHE ZU KENNZEICHNEN        ###}
{### UND SOLLTEN ZUR PRÜFUNG AN info@me10-makros.de GESENDET WERDEN ###}
{###                                                                ###}
{######################################################################}

{########## Globale Variable ##########}

LET eva_temp_dir  'c:\temp\'
LET eva_dateiname 'spirale.out'

LET eva_spirale_durchmesser      0
LET eva_spirale_laenge           0
LET eva_spirale_rohrdurchmesser  0
LET eva_spirale_anfangswinkel    0
LET eva_spirale_endwinkel        0
LET eva_spirale_zahl             0
LET eva_spirale_segment_bogen    0
LET eva_spirale_abstand          0
LET eva_spirale_abstand_temp     0
LET eva_spirale_windungen_temp   0
LET eva_spirale_phi1_temp        0
LET eva_spirale_phi2_temp        0
LET eva_spirale_durchmesser_temp 0
LET eva_spirale_laenge_temp      0

{########## ENDE Globale Variable ##########}

define eva_spirale_sichtbar
  color white
  linetype solid
end_define

define eva_spirale_mittel
  color yellow
  linetype dot_center
end_define

define eva_spirale_round
  parameter x
  parameter n
  (int((x*10**n)+0.5)/(10**n))
end_define

define eva_spirale_format
  parameter x
  parameter m
  parameter n
  local sl
  local pp
  local an
  local vn
  local wert
  let wert (eva_spirale_round x n)
  let eva_spirale_zahl (str wert)
  let sl (len eva_spirale_zahl)
  let pp (pos eva_spirale_zahl '.' )
  let an ''
  if (pp=0)
    if (n>0)
      let an ('.'+(rpt '0' n))
    end_if
  else_if (sl-pp<=n)
    let an (rpt '0' (abs(sl-pp-n)))
  end_if
  let eva_spirale_zahl (eva_spirale_zahl+an)
  let sl (len eva_spirale_zahl)
  let vn ''
  if (m-sl>0)
    let vn ( rpt ' ' (m-sl) )
  end_if
  let eva_spirale_zahl (vn+eva_spirale_zahl)
end_define

define eva_spirale_spirale_l
  parameter phi
  parameter a
  let phi ( phi * pi / 180 )
  let eva_spirale_segment_bogen
   ( a / 2 * ( phi * sqrt ( 1+ phi*phi ) + ln ( phi + sqrt ( 1+ phi * phi ) ) ) )
end_define

define eva_spirale_spirale_len
  local sb
  eva_spirale_spirale_l eva_spirale_phi1_temp eva_spirale_abstand
  let sb eva_spirale_segment_bogen
  eva_spirale_spirale_l eva_spirale_phi2_temp eva_spirale_abstand
  let eva_spirale_laenge_temp ( eva_spirale_segment_bogen - sb )
end_define

define eva_spirale_spline
  parameter dphi
  parameter s
  parameter sp_p
  local phi
  local phi1
  local phi2
  local er
  local a
  local r
  local p2
  let a eva_spirale_abstand
  let phi1 eva_spirale_phi1_temp
  let phi2 eva_spirale_phi2_temp
  let phi phi1
  let r ( a * phi * pi/180 )
  let er (  pnt_xy ( cos phi ) ( sin phi ) )
  let p2 ( sp_p + ( r + s ) * er )
  spline p2
  loop
    let phi ( phi + dphi )
    let r ( a * phi * pi/180 )
    let er (  pnt_xy ( cos phi ) ( sin phi ) )
    let p2 ( sp_p + ( r + s ) * er )
    p2
    exit_if ( phi > phi2 )
  end_loop
  end
  end
end_define

define eva_spirale_rechne
  parameter a    { ##  Abstand ## }
  parameter phi1 { ##  Anzahl Drehungen ## }
  parameter phi2 { ##  Anzahl Drehungen ## }
  let eva_spirale_abstand  ( a )
  let eva_spirale_phi1_temp ( phi1 )
  let eva_spirale_phi2_temp ( phi2 )
  let eva_spirale_abstand_temp ( a * 2 * pi )
  let eva_spirale_windungen_temp ( int ( (phi2 - phi1) / 360 ) + int (phi1/360) + 1.75 )
  let eva_spirale_durchmesser_temp  ( eva_spirale_abstand_temp * eva_spirale_windungen_temp * 2 )
end_define


define eva_spirale_rechne1
  parameter phi1
  parameter phi2
  parameter l
  local d_abstand
  display (' Gerechnete Abstand war '+ str eva_spirale_abstand_temp )
  loop
    read number 'Geben sie gewρnschten Abstand ein  Ende <0>' d_abstand
    exit_if ( d_abstand = 0 )
    let d_abstand ( d_abstand / pi / 2 )
    eva_spirale_rechne 1 phi1 phi2
    eva_spirale_rechne (d_abstand) phi1 phi2
    eva_spirale_spirale_len
    if ( eva_spirale_laenge_temp < l )
      eva_spirale_rechne_loop1 phi1 phi2 l d_abstand
    else
      eva_spirale_rechne_loop2 phi1 phi2 l d_abstand
    end_if
  end_loop
end_define

define eva_spirale_rechne_loop1
  parameter phi1
  parameter phi2
  parameter l
  parameter d_abstand
  LOCAL w1
  LOCAL w2
  LOCAL w3
  LOCAL w4
  loop
    eva_spirale_rechne 1 phi1 phi2
    eva_spirale_rechne (d_abstand ) phi1 phi2
    eva_spirale_spirale_len
    eva_spirale_format eva_spirale_abstand_temp 10 0
    let w1 eva_spirale_zahl
    eva_spirale_format eva_spirale_windungen_temp 10 2
    let w2 eva_spirale_zahl
    eva_spirale_format eva_spirale_durchmesser_temp 10 2
    let w3 eva_spirale_zahl
    eva_spirale_format eva_spirale_laenge_temp 10 0
    let w4 eva_spirale_zahl
    write_file  1  (w1 + '|' + w2 + '|' + w3 + '|' + w4 +'|' )
    exit_if ( eva_spirale_laenge_temp > l )
    let phi2 ( phi2 + 360 )
  end_loop
end_define


define eva_spirale_rechne_loop2
  parameter phi1
  parameter phi2
  parameter l
  parameter d_abstand
  LOCAL w1
  LOCAL w2
  LOCAL w3
  LOCAL w4
  loop
    eva_spirale_rechne 1 phi1 phi2
    eva_spirale_rechne (d_abstand ) phi1 phi2
    eva_spirale_spirale_len
    eva_spirale_format eva_spirale_abstand_temp 10 0
    let w1 eva_spirale_zahl
    eva_spirale_format eva_spirale_windungen_temp 10 2
    let w2 eva_spirale_zahl
    eva_spirale_format eva_spirale_durchmesser_temp 10 2
    let w3 eva_spirale_zahl
    eva_spirale_format eva_spirale_laenge_temp 10 0
    let w4 eva_spirale_zahl
    write_file  1  (w1 + '|' + w2 + '|' + w3 + '|' + w4 +'|' )
    exit_if ( eva_spirale_laenge_temp < l )
    let phi2 ( phi2 - 360 )
  end_loop
end_define

define eva_spirale_zeichne
  parameter dphi
  parameter p
  init_part 'SPIRALE'
    eva_spirale_mittel
    eva_spirale_spline dphi 0 p
    init_subpart 'Spiralenwand'
      eva_spirale_sichtbar
      eva_spirale_spline dphi (eva_spirale_rohrdurchmesser/2) p
    end_part
    init_subpart 'Spiralenwand'
      eva_spirale_sichtbar
      eva_spirale_spline dphi (-(eva_spirale_rohrdurchmesser/2)) p
    end_part
  end_part
end_define

define eva_spirale_spirale
  parameter d
  parameter l
  parameter s
  parameter phi1
  parameter phi2
  LOCAL w1
  LOCAL w2
  LOCAL w3
  LOCAL w4
  open_outfile 1 del_old (eva_temp_dir+eva_dateiname)
  write_file   1  '--------------------------------------------'
  write_file   1  'Berechnung archimedische Spirale mit ME10 '
  write_file   1  '--------------------------------------------'
  write_file   1 ('Geg: Durchmesser     d  : ' + str d )
  write_file   1 ('     Laenge          l  : ' + str l )
  write_file   1 ('     Rohrdurchmesser s  : ' + str s )
  write_file   1 ('     Anfangswinkel  phi1: ' + str phi1 )
  write_file   1 ('     Endwinkel      phi2: ' + str phi2 )
  write_file   1  '----------+----------+----------+----------+'
  write_file   1  'Abstand    Windungen  Durchmesser   Laenge  '
  write_file   1  '----------+----------+----------+----------+'
  loop
    eva_spirale_rechne 1 phi1 phi2
    eva_spirale_rechne (d/eva_spirale_durchmesser_temp) phi1 phi2
    eva_spirale_spirale_len
    eva_spirale_format eva_spirale_abstand_temp 10 0
    let w1 eva_spirale_zahl
    eva_spirale_format eva_spirale_windungen_temp 10 2
    let w2 eva_spirale_zahl
    eva_spirale_format eva_spirale_durchmesser_temp 10 2
    let w3 eva_spirale_zahl
    eva_spirale_format eva_spirale_laenge_temp 10 0
    let w4 eva_spirale_zahl
    write_file  1  (w1 + '|' + w2 + '|' + w3 + '|' + w4 +'|' )
    exit_if ( eva_spirale_laenge_temp <= l )
    let phi2 ( phi2 - 360 )
    exit_if ( phi2 < 0 )
  end_loop
  write_file   1  '----------+----------+----------+----------+'
  write_file   1 ('     Endwinkel      phi2: ' + str phi2 )
  write_file   1  '--------------------------------------------'
  write_file   1  ''
  write_file   1  'Variation des Abstandes                     '
  write_file   1  '--------------------------------------------'
  eva_spirale_rechne1 phi1 phi2 l
  write_file   1  '--------------------------------------------'
  close_file 1
end_define

DEFINE eva_spirale_menu_body
  Headline_height    ' | |               | '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Text_slot_height   '             |       '
  Bottom_slot_height '             |       '
END_DEFINE


DEFINE eva_spirale_menu
  LET Lastmen 'eva_spirale_menu'
  IF (I_port)
    Check_i_port
  END_IF
  IF (NOT I_port)
    MENU_BUFFER ON
    CURRENT_MENU 'eva_spirale_menu'
    CURRENT_SCREEN 1
    MENU_LAYOUT
      Menu_position RIGHT
      eva_spirale_menu_body
      Menu_home_point_top
    END
    MENU_STATUS ENABLE_INQ
    T_clear_menu
    Menu_control_icons
    MENU BLACK YELLOW CENTER 'Spirale'  ''                                         1 3
    MENU  ''  ''                                                                   2 1
    MENU  ' ' ''                                                                   2 2
    MENU  'Durchmesser  '  ''                                                      3 1
    MENU BLACK YELLOW
     (' '+STR (eva_spirale_durchmesser))  'eva_spirale_eingabe_durchmesser'        3 2
    MENU  'Gesamtlaenge '  ''                                                      4 1
    MENU BLACK YELLOW
     (' '+STR (eva_spirale_laenge))   'eva_spirale_eingabe_laenge'                 4 2
    MENU  'Durchm. Rohr '  ''                                                      5 1
    MENU BLACK YELLOW
     (' '+STR (eva_spirale_rohrdurchmesser)) 'eva_spirale_eingabe_rohrdurchmesser' 5 2
    MENU  'Anfangswinkel'  ''                                                      6 1
    MENU BLACK YELLOW
     (' '+STR (eva_spirale_anfangswinkel)) 'eva_spirale_eingabe_anfangswinkel'     6 2
    MENU  'Endwinkel    '  ''                                                      7 1
    MENU BLACK YELLOW
     (' '+STR (eva_spirale_endwinkel)) 'eva_spirale_eingabe_endwinkel'             7 2
    MENU  ''  ''                                                                   8 1
    MENU  ''  ''                                                                   8 2
    MENU BLACK RED 'Zeichnen'
    'eva_spirale_main eva_spirale_durchmesser eva_spirale_laenge eva_spirale_rohrdurchmesser
     eva_spirale_anfangswinkel eva_spirale_endwinkel 15' 9 1
  END_IF
END_DEFINE


DEFINE eva_spirale_eingabe_durchmesser
  REPEAT
    READ NUMBER 'Aussendurchmesser eingeben' eva_spirale_durchmesser
  UNTIL (eva_spirale_durchmesser >= (3*eva_spirale_rohrdurchmesser))
  eva_spirale_menu
END_DEFINE


DEFINE eva_spirale_eingabe_laenge
  REPEAT
    READ NUMBER 'Gesamtlaenge L der Rohrspirale eingeben' eva_spirale_laenge
  UNTIL (eva_spirale_laenge > (3*eva_spirale_rohrdurchmesser*pi))
  eva_spirale_menu
END_DEFINE


DEFINE eva_spirale_eingabe_rohrdurchmesser
  REPEAT
    READ NUMBER 'Rohrdurchmesser eingeben >=1 ' eva_spirale_rohrdurchmesser
  UNTIL (eva_spirale_rohrdurchmesser >= 1)
  eva_spirale_menu
END_DEFINE


DEFINE eva_spirale_eingabe_anfangswinkel
  REPEAT
    READ NUMBER 'Anfangswinkel eingeben >= 360 ' eva_spirale_anfangswinkel
  UNTIL (eva_spirale_anfangswinkel >= 360)
  eva_spirale_menu
END_DEFINE


DEFINE eva_spirale_eingabe_endwinkel
  REPEAT
    READ NUMBER 'Endwinkel eingeben' eva_spirale_endwinkel
  UNTIL (eva_spirale_endwinkel >= (eva_spirale_anfangswinkel+90))
  eva_spirale_menu
END_DEFINE

DEFINE eva_spirale_main
  PARAMETER W1
  PARAMETER W2
  PARAMETER W3
  PARAMETER W4
  PARAMETER W5
  PARAMETER W6
  LOCAL W9
  READ PNT 'Einfuegepunkt antippen' W9
  eva_spirale_spirale W1 W2 W3 W4 W5
  eva_spirale_zeichne W6 W9
END_DEFINE

eva_spirale_menu
Source downloaden
Wenn die Makros nützlich sind, ist eine Spende natürlich gern gesehen :-)
Werbe-Links