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
Wenn die Makros nützlich sind, ist eine Spende natürlich gern gesehen :-)