ArchiRADAR Forum
ArchiRADAR Forum => GDL => Topic aperto da: qoki55 - 23 Ottobre 2011, 12:04
-
Ciao,
Ho fatto una modificazione dell´oggetto "drainage line 10.gsm" di Olivier Dentan per farlo sembrare come un tubo 2D.
Volevo attribuire gli hotspot editabili ai testi che mostrano l´elevazione del tubo ai due lati. Per questo ho letto il manuale
GDL del Zio, e dopo ci sono riuscito IN PARTE (il testo al inizio del tubo si sposta libaramente, quelo alla fine pero solamente
sul ase "y" - verticalmente su e giu!; mentre il cursore invece in tutte le direzioni). :frusty: Non ne esco fuori.
Qualcuno mi sa dare una mano per favore?
Ho usato AC14.
-
Il problema è che usi una variabile (xx_rt) il cui valore viene ridefinito nello Script Master, quindi anche se con il mouse gli si da un valore diverso, lo Script Master lo ricalcola subito dopo e gli assegna nuovamente il valore che aveva prima.
io l'ho risolto così (anche se il codice non è dei migliori):
!________________________Show Right Side Text (Viinska kota konca)-----Problem: MOVES ONLY IN "Y" DIRECTION!!!
DEFINE STYLE "lev_right_txt" fontType, lev_tx_ht, right_ap, 0
STYLE "lev_right_txt"
uid = uid+1 : HOTSPOT2 xx_rt, y_rt, uid, x_rt, 1+128 ! base x
uid = uid+1 : HOTSPOT2 x_rt+xx_rt, y_rt, uid, x_rt, 2 ! move x
uid = uid+1 : HOTSPOT2 x_rt+xx_rt-1, y_rt, uid, x_rt, 3 ! ref x
uid = uid+1 : HOTSPOT2 x_rt+xx_rt, 0, uid, y_rt, 1+128 ! base y
uid = uid+1 : HOTSPOT2 x_rt+xx_rt, y_rt, uid, y_rt, 2 ! move y
uid = uid+1 : HOTSPOT2 x_rt+xx_rt, -1, uid, y_rt, 3 ! ref y
ADD2 (x_rt+xx_rt), y_rt
TEXT2 0, 0, lev_right ! ----right level text
DEL 1
-
C'era un'altra cosa che non funzionava a dovere, la freccia era sempre senza retino. Inoltre era spostata un po' a destra rispetto al centro del tubo.
300: !!!===== Arrow - Slope direction points 7-14 ========
!!POLY2 n, frame_fill, x1, y1, ... xn, yn
!!An open or closed polygon with n nodes. Restriction of parameters: n >= 2
!!frame_fill = j1 + 2*j2 + 4*j3.....where j1, j2, j3 can be 0 or 1.
!!j1 (1): contour only
!!j2 (2): fill only
!!j3 (4): close an open polygon
!!poly2_b 5, 2, s, fill_pen_arrow,back_pen_arrow,
IF lev_right>lev_left THEN mi=1 ELSE mi=-1
x[7] = xx + (COS(ang) * diameter*1.25 - diameter/4)*mi !!point 7
y[7] = yy + (SIN(ang) * diameter*1.25) + diameter/4
x[8] = x[7] - (SIN(ang) * diameter/10)*mi !!point 8
y[8] = y[7] + (COS(ang) * diameter/10)
x[9] = x[8] + (COS(ang) * diameter/2)*mi !!point 9
y[9] = y[8] + (SIN(ang) * diameter/2)
x[10] = x[9] - (SIN(ang) * diameter/10)*mi !!point 10
y[10] = y[9] + (COS(ang) * diameter/10)
x[11] = x[7] + (COS(ang) * diameter)*mi !!point 11
y[11] = y[7] + (SIN(ang) * diameter)
x[14] = x[7] + (SIN(ang) * diameter/10) *mi !!point 14
y[14] = y[7] - (COS(ang) * diameter/10)
x[13] = x[14] + (COS(ang) * diameter/2) *mi !!point 13
y[13] = y[14] + (SIN(ang) * diameter/2)
x[12] = x[13] + (SIN(ang) * diameter/10)*mi !!point 12
y[12] = y[13] - (COS(ang) * diameter/10)
ADD2 (-diameter*1.5)*mi,0
pen robPen
line_type robLine
line2 x[7], y[7], x[8], y[8]
line2 x[8], y[8], x[9], y[9]
line2 x[9], y[9], x[10], y[10]
line2 x[10], y[10], x[11], y[11]
line2 x[7], y[7], x[14], y[14]
line2 x[14], y[14], x[13], y[13]
line2 x[13], y[13], x[12], y[12]
line2 x[12], y[12], x[11], y[11]
FILL fill_type
POLY2_B 9, 2, fill_pen_arrow, back_pen_arrow,
x[7], y[7], 0,
x[8], y[8], 0,
x[9], y[9], 0,
x[10], y[10], 0,
x[11], y[11], 0,
x[12], y[12], 0,
x[13], y[13], 0,
x[14], y[14], 0,
x[7], y[7], -1
DEL 1
return
ho aggiunto anche un comando per invertire la freccia, se il livello di destra è più alto di quello a sinistra.
-
Zio,
Ti ringrazio per il tuo aiuto. Ho modificato il codice e adesso tutti i testi si muovono liberamente.
La freccia pero ha anchora dei problemi:
1. se la quota della fine e maggiore di quella iniziale la freccia ruota, pero si sposta sul´asse fuori dal tubo
2. se sposto il nodo finale del tubo (stretch + rotate), la freccia cambia sua posizione e´ la rotazione (vedi il video "Tube 2D_Freccia ruotata_VIDEO_xvid")
3. se la quota della fine ha il prefisso "+" e quella iniziale "-" la freccia non ruota
-
Il testo gel codice per la freccia:
300: !!!===== Arrow - Slope direction points 7-14 ========
IF right_lev > left_lev THEN mi= -1 ELSE mi= 1
x[7] = xx * mi !!point 7
y[7] = yy
x[8] = x[7] - (SIN(ang) * fiCevi/6) *mi !!point 8
y[8] = y[7] + (COS(ang) * fiCevi/6)
x[9] = x[8] + (COS(ang) * fiCevi/2) *mi !!point 9
y[9] = y[8] + (SIN(ang) * fiCevi/2)
x[10] = x[9] - (SIN(ang) * fiCevi/4) *mi !!point 10
y[10] = y[9] + (COS(ang) * fiCevi/4)
x[11] = x[7] + (COS(ang) * fiCevi) *mi !!point 11
y[11] = y[7] + (SIN(ang) * fiCevi)
x[14] = x[7] + (SIN(ang) * fiCevi/6) *mi !!point 14
y[14] = y[7] - (COS(ang) * fiCevi/6)
x[13] = x[14] + (COS(ang) * fiCevi/2) *mi !!point 13
y[13] = y[14] + (SIN(ang) * fiCevi/2)
x[12] = x[13] + (SIN(ang) * fiCevi/4) *mi !!point 12
y[12] = y[13] - (COS(ang) * fiCevi/4)
!! ADD2 xx * mi, 0
PEN robPen
line_type robLine
LINE2 x[7], y[7], x[8], y[8]
LINE2 x[8], y[8], x[9], y[9]
LINE2 x[9], y[9], x[10], y[10]
LINE2 x[10], y[10], x[11], y[11]
LINE2 x[7], y[7], x[14], y[14]
LINE2 x[14], y[14], x[13], y[13]
LINE2 x[13], y[13], x[12], y[12]
LINE2 x[12], y[12], x[11], y[11]
!! ---------Fill for the Arrow---------------
FILL fill_type
POLY2_B 9, 2, fill_pen_arrow, back_pen_arrow,
x[7], y[7], 0,
x[8], y[8], 0,
x[9], y[9], 0,
x[10], y[10], 0,
x[11], y[11], 0,
x[12], y[12], 0,
x[13], y[13], 0,
x[14], y[14], 0,
x[7], y[7], -1
RETURN
E il video:
-
Nella mia copia dell'oggetto non riscontro tutte le anomalie che mi segnali. Forse avevo modificato qualcosa in più...
In ogni caso è difficile mettere le mani nel codice scritto da un altro e modificato da un altro ancora. Ognuno ha le proprie procedure, e a me il metodo utilizzato sembra in molti casi inutilmente complicato (perché usare una serie di funzioni trigonometriche per trovare le coordinate di tutti i punti che interessano, quando è possibile ruotare il sistema di riferimento in modo che l'asse X corrisponda sempre con la direzione del tubo?). Mi è sembrato più semplice e veloce creare un oggetto nuovo.
Il campo "larghezza" dell'oggetto determina il diametro del tubo (ovvero la distanza tra le linee).
Modificando il campo "Lunghezza" si modificano le coordinate dell'estremo mobile dell'oggetto, mantenedo la stessa direzione che aveva in precedenza.
Il valore di quota (o profondità) può essere omesso per uno o entrambi gli estremi.
Modificando i valori di quota o la lunghezza, viene ricalcolata la pendenza.
Modificando il parametro della pendenza, viene aggiornata la quota del secondo estremo (il punto di arrivo del tubo).
I testi vengono capovolti se l'inclinazione è superiore a 90°e inferiore a 270° (non tiene in considerazione la rotazione dell'oggetto, ma solo le coordinate locali del secondo estremo rispetto al primo).
Un'opzione aggiunge due hotspot mobili agli estremi della linea inferiore, per permettere la giunzione fra più tubi con angolazione differente.
Dovrebbe funzionare anche l'inversione della freccia, se la quota del secondo estremo è superiore a quella del primo.
Non ho voluto aggiungere troppe opzioni (stili di testo, tipi e colori dei retini, ecc.) per mantenere l'oggetto più semplice e pratico da usare.
-
Zio,
ti ringrazio per il tuo aiuto e l´oggetto. Il mio lo faro senza la possibilita di ruotare la freccia.
Ciao.