Newsgroup: it.comp.macintosh
Titolo: FileMaker, come si fanno i plug-in??

Dovrei mettere una formula piuttosto complessa su FileMaker (iterativa),
e il suo linguaggio non mi basta.
Come si fa a fare un plug-in che mi permetta di aggiungere mie formule a
quelle di sistema? (ci sono plug-ins che lo fanno, per questo lo
chiedo).
Alberto

 cerchero' un'altra donna dentro ai sogni di Tarzan...

 Perche' non usi AppleScript?
Perchč AppleScript č LEEEEENTO (e la formula complicata)... pero' potrei
applescriptare un foglio elettronico, pensandoci...
Una soluzione piů pulita... no?
Alberto

Perchè AppleScript è LEEEEENTO (e la formula complicata)...
No... AppleScript usato dentro FMP viaggia come una mina, se si tratta
solo di fare calcoli. La lentezza subentra quando si cominciano a
scambiare eventi carichi di dati tra le diverse applicazioni, ma non
e' il tuo caso.


 e' il tuo caso.
See... e come ce la ficco dentro FileMaker, con comandi AppleScript sta
cosa?... (notare il "While (ext And i < 100)" che significa che deve
fare 100 volte quel ciclo...)
A dir la verità di applescript ci capisco poco...
Alberto
Function PMV(M, W, Icl, Ta, Tr, Var, Pa)
    Dim Eps, Mw, fcl, Fcic
    Dim P1, P2, P3, P4, Tra, Taa, Tcla, Xn, Xf
    Dim Hcf, Hcn, Hc, Tcl, PPD, pm1, pm2, pm3, pm4
    Dim i As Long
    Dim ext As Boolean
 
    Eps = 0.000015
    Mw = M - W
    If Icl < 0.078 Then
         fcl = 1 + 1.29 * Icl
    Else
        fcl = 1.05 + 0.645 * Icl
    End If
    Fcic = fcl * Icl
    P2 = Fcic * 3.96
    P3 = Fcic * 100
    Tra = Tr + 273
    Taa = Ta + 273
    P1 = Fcic * Taa
    P4 = 308.7 - 0.028 * Mw + P2 * (Tra / 100) ^ 4
    Tcla = Taa + (35.5 - Ta) / (3.5 * (6.45 * Icl + 0.1))
    Xn = Tcla / 100
    Xf = Xn
    Hcf = 12.1 * Sqr(Var)
 
    '---------------  CALCOLO DI Tcl ----------------
    i = 0
    ext = True
    While (ext And i < 100)
        i = i + 1
        Xf = (Xf + Xn) / 2
        Hcn = 2.38 * Abs(100 * Xf - Taa) ^ 0.25
        If Hcf > Hcn Then Hc = Hcf Else Hc = Hcn
        Xn = (P4 + P1 * Hc - P2 * Xf ^ 4) / (100 + P3 * Hc)
        If Abs(Xn - Xf) <= Eps Then ext = False
    Wend
    Tcl = 100 * Xn - 273
 
    '---------------  CALCOLO Del PMV ----------------
    pm1 = 3.96 * fcl * (Xn ^ 4 - (Tra / 100) ^ 4)
    pm2 = fcl * Hc * (Tcl - Ta)
    pm3 = 0.303 * Exp(-0.036 * M) + 0.028
    pm4 = 0
    If Mw > 58.15 Then pm4 = 0.42 * (Mw - 58.15)
    PMV = pm3 * (Mw - 3.05 * 0.001 * (5733 - 6.99 * Mw - Pa) - pm4 - 1.7
* 0.00001 * M * (5867 - Pa) - 0.0014 * M * (34 - Ta) - pm1 - pm2)
    If PMV > 3 Then
        PMV = 3
    ElseIf PMV < -3 Then
        PMV = -3
    End If
End Function

    Mw = M - W
M e W da dove vengono?
Suppongo che siano due campi, "M" e "W", e vado avanti con questa
ipotesi per le altre variabili non diversamente valorizzate.
<CODE>
set Eps to 0.000015
set Mw to (cellvalue of cell "M" - cellvalue of cell "W")
set Icl to cellvalue of cell "Icl"
if Icl < 0.078 then
  set fcl to 1 + 1.29 * Icl
else
  set fcl to 1.05 + 0.645 * Icl
end if
set Fcic to fcl * Icl
set P2 to Fcic * 3.96
set P3 to Fcic * 100
set Tra to Tr + 273
set Taa to Ta + 273
set P1 to Fcic * Taa
set P4 to 308.7 - 0.028 * Mw + P2 ¬
   *(Tra/ 100)*(Tra/ 100)*(Tra/ 100)*(Tra/ 100)
set Tcla to Taa + (35.5 - Ta) / (3.5 * (6.45 * Icl + 0.1))
set Xn to Tcla / 100
set Xf to Xn
set Hcf to 12.1 * Sqr(Var)
(* Qui ho dubbi:  ^^^^^^^^
   da dove viene Var? Inoltre credo,
   ma non ne sono certo, che per la radice
   quadrata tu necessiti di una OSAX *)
---------------  CALCOLO DI Tcl ----------------
set i to 0
set ext to true
repeat while ext and (i < 100)
  set i to i + 1
  set Xf to (Xf + Xn) / 2
  set Hcn to 2.38 * Abs(100 * Xf - Taa) ^ 0.25 -- OSAX x math
  if Hcf > Hcn then -- oppure "if Hcf is greater than Hcn then" :o)
    set Hc to Hcf
  else
    set Hc to Hcn
  end if
  set Xn to (P4 + P1 * Hc - P2 * Xf^ 4)/(100 + P3 * Hc) -- math
  set ext to (Abs(Xn - Xf) > Eps)
end repeat
set Tcl to 100 * Xn - 273
---------------  CALCOLO Del PMV ----------------
set pm1 to 3.96 * fcl * (Xn ^ 4 - (Tra / 100) ^ 4) -- math
set pm2 to fcl * Hc * (Tcl - Ta)
set pm3 to 0.303 * Exp(-0.036 * M) + 0.028 -- math
set pm4 to 0
if Mw > 58.15 then set pm4 to 0.42 * (Mw - 58.15)
set PMV to pm3 *(Mw -3.05*0.001*(5733 -6.99 *Mw- Pa) ¬
  -pm4 -1.7 * 0.00001 * M * (5867 - Pa) - 0.0014 * M * ¬
  (34 - Ta) - pm1 - pm2)
if PMV > 3 then
  set PMV to 3
else if PMV < -3 then
  set PMV to -3
end if
</CODE>
Mi preoccupano solo l'elevamento a potenza e l'esponenziale, che credo
richiedano una OSAX per calcoli matematici.
AppleScript in se', una volta compilato, fila come una scheggia.


...
Grazie sei stato gentilissimo, hai pure convertito la funzione!
(non sai quante conversioni ha avuto questa funzione: l'originale era in
fortran, poi l'ho portata su Hypercard, poi su Claris Resolve poi su
Excel, ora Applescript....:)
Le variabili che non vedi da dove vengono, vengono passate alla
funzione. Si puo' fare in Applescript? (cavoli spero di si', e' una cosa
basilare per un linguaggio...)
Poi ci provo.
Bye, Alberto 

basilare per un linguaggio...)
certo che si, ma trattandosi di una routine interna a FMP (e non di
una funzione) mi sembra piu' logico che prenda i valori in campi (ev.
globali) e che imposti i risultati in altri campi (ev. sempre
globali): in questo modo potresti poi gestirti i risultati con uno
script di FMP.
