Require Class/basicSurface

basicSurface Subclass Surface {
  Var "domain {[basicSurface get domain]}"
  Method <Domain> {domain} {set [var domain] $domain}
  ClassVar "Domain-template {{[basicSurface get domain]}}"

  Var f-u f-v "uv {[basicSurface get uv]}"
  Method <Function> {uv f {fv {}}} {
    if {[llength $uv] != 2} {Error "Function must be of two variables"}
    set [var uv]  $uv
    set [var f-u] $f
    set [var f-v] $fv
  }

  ClassVar "Function-template {{u v} {\n  let (x,y,z) = (u, v, u v)\n}}"

  ClassVar {script-templates {Domain Function}}

  Method ScriptBegin {} {
    Vars domain uv f-u f-v
    Parent ScriptBegin
    set domain [Parent get domain]
    set uv [Parent get uv]
    set f-u {}
    set f-v {}
  }
}

Surface Register
