{*****************************************************************************} {************** Datei Anfang ***********************************************} {*****************************************************************************} {*** Fuer Ausdruck: &r &n &d &u Seite &s **} {*** Fuer Ausdruck: &r Seite &s **} {*** Fuer Ausdruck: Fixsys 5Pt **} {Datei: :/hc_me10/hc_schnittpunkt_setzen.txt} {12:44 20.12.2012} define hc_schnittpunkt_setzen local p1 {Punkt1 } local w1 {Winkel1 } local p2 {Punkt2 } local w2 {Winkel2 } local Z0 {Zaehler0} local Z1 {Zaehler1} local Z2 {Zaehler2} local Z3 {Zaehler3} { local datei } {tmp_datei} LOCAL I LOCAL B LOCAL loc_string LOCAL Num_of_lines LOCAL param_name_ltab { let datei 'c_line_liste_1.txt' } inq_selected_elem c_lines all let z0 (inq 14) {Anzahl Elemente} let z1 0 let z2 0 if (z0 > 1) {Berechnung nur sinnvoll, wenn min. 2 Elemente} { open_outfile 1 del_old datei let z3 0 loop Elemente in Liste schreiben exit_if ((inq 14) = 0) let z3 (z3 + 1) Zaehler let P1 (inq 101) Mittelpunkt der Linie let W1 (inq 3) Winkel zur X-Achse der Linie write_file 1 (str z3 + ' ' + str P1 + ' ' + str W1) inq_next_elem end_loop close_file 1 } LET param_name_ltab 'cat_werte_liste_ltab' LET Num_of_lines z0 CREATE_LTAB { Create logical table} num_of_lines { n rows } 2 { 2 columns} param_name_ltab { Name der logical table} LET I 1 LET B 1 loop { Elemente in Tabelle schreiben} exit_if ((inq 14) = 0) { let z3 (z3 + 1) } { Zaehler} let P1 (inq 101) { Mittelpunkt der Linie}write_ltab param_name_ltab I B (STR P1) let W1 (inq 3) { Winkel zur X-Achse der Linie} LET B (B+1) write_ltab param_name_ltab I B (STR W1) inq_next_elem LET I (I+1) LET B 1 end_loop loop {Werte auslesen und Punkte berechnen} { hc_lese_daten datei z1 } let z1 (z1 + 1) LET B 1 LET p1 (VAL (READ_LTAB param_name_ltab z1 B)) LET B (B+1) let w1 (VAL (READ_LTAB param_name_ltab z1 B)) { let p1 hc_schnittpunkt let w1 hc_schnittwinkel } loop let z2 (z2 + 1) LET B 1 { hc_lese_daten datei z2 } LET p2 (VAL (READ_LTAB param_name_ltab z2 B)) LET B (B+1) let w2 (VAL (READ_LTAB param_name_ltab z2 B)) { let p2 hc_schnittpunkt let w2 hc_schnittwinkel } if (w1 <> w2) {parallele Linien ausschließen} hc_schnittpunkt_ber p1 w1 p2 w2 end_if exit_if (z2 >= z0) end_loop let z2 z1 exit_if (z1 = z0) end_loop { purge_file datei confirm } else display ('Nur ' + str z0 + ' Linie(n) gefunden. Programm Ende.') end_if window_fit end_define define hc_schnittpunkt_ber {Schnittpunktberechnungen} parameter p1 parameter w1 parameter p2 parameter w2 local x1 local y1 local x2 local y2 local s1 local s2 local a1 local a2 local xs local ys local pntxy if (((w1 <> 90) or (w1 <> 270)) and ((w2 <> 90) or (w2 <> 270))) let S1 (tan W1) let S2 (tan W2) let X1 (X_OF P1) let Y1 (Y_OF P1) let X2 (X_OF P2) let Y2 (Y_OF P2) let A1 (Y1 - (S1*X1)) let A2 (Y2 - (S2*X2)) let Xs ((A2 - A1)/(S1 - S2)) let Ys (((S1*A2) - (S2*A1))/(S1 - S2)) else_if (((w1 = 90) or (w1 = 270)) and ((w2 <> 90) or (w2 <> 270))) let S2 (tan W2) let xs x1 let ys (y2 + (s2 * (x1 - x2)) else_if (((w1 <> 90) or (w1 <> 270)) and ((w2 = 90) or (w2 = 270))) let S1 (tan W1) let xs x2 let ys (y1 + (s1 * (x2 - x1)) end_if let Pntxy (pnt_xy Xs Ys) inq_elem Pntxy if (inq 403 <> point) point Pntxy end_if end end_define { Datenausleseroutine define hc_lese_daten parameter datei parameter zeile local p local w local t_zeile1 local t_zeile2 local t_zeile_len local z open_infile 1 datei let z 0 repeat let z (z + 1) read_file 1 t_zeile1 until (z = zeile) let t_zeile_len (len t_zeile1) let t_zeile2 (substr t_zeile1 ((pos t_zeile1 ' ')+1) t_zeile_len) let p (val (substr t_zeile2 1 (POS t_zeile2 ' '))) let w (val (substr t_zeile2 (POS t_zeile2 ' ') (len t_zeile2))) let hc_schnittpunkt p let hc_schnittwinkel w close_file 1 end_define } { Globale Variable define hc_schnittpunkt 0,0 end_define } { Globale Variable define hc_schnittwinkel 0 end_define }