Require bind.tcl
Require Class/basicSurfaceFromSurface

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

  Var "uv {[basicSurfaceFromSurface get uv]}" sf-u sf-v
  Var "frame [basicSurfaceFromSurface get frame]"
  Method <Function> {uv script args} {
    global errorCode errorInfo
    if [set code [catch [list _bind(Rest) {{vscript {}}} \
        {{frame ""} {absolute ""}} $args [Self method <Function>]] err]] \
	{return -code $code -errorcode $errorCode -errorinfo $errorInfo $err}
    if {[llength $uv] != 2} {Error "Function must be of two variables"}
    set [var uv] $uv
    set [var sf-u] $script
    set [var sf-v] $vscript
    if {$frame != ""} {set [var frame] 1} else {set [var frame] 0}
  }
  ClassVar "Function-template {{u v} {\n  let (x,y,z) = (1,0,0)\n} -frame}"

  ClassVar {script-templates {Domain Function}}

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

SurfaceFromSurface Register
