{*****************************************************************************} {************** 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} let datei 'c_line_liste_1.txt' inq_selected_elem c_lines all let z0 (inq 14) {Anzahl Elemente} let z1 1 let z2 1 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 loop {Werte auslesen und Punkte berechnen} hc_lese_daten datei z1 let z1 (z1 + 1) let p1 hc_schnittpunkt let w1 hc_schnittwinkel loop let z2 (z2 + 1) hc_lese_daten datei z2 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 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 window_fit end_if end end_define define hc_lese_daten {Datenausleseroutine} 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 define hc_schnittpunkt {Globale Variable} 0,0 end_define define hc_schnittwinkel {Globale Variable} 0 end_define