Require bind.tcl
Require Class/basicRuledSurface

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

  Var rule-v {frame 1}
  Method <Vector> {param script args} {
    global errorCode errorInfo
    if [set code [catch [list _bind(Rest) {} {{frame ""} {absolute ""}} \
        $args [Self method <Vector>]] err]] \
	{return -code $code -errorcode $errorCode -errorinfo $errorInfo $err}
    if {[llength $param] != 1} \
      {Error "Vector must be a function of one variable"}
    set [var sf-uv] $param
    set [var rule-v] $script
    if {$absolute != ""} {set [var frame] 0} else {set [var frame] 1}
  }
  ClassVar {Vector-template {{t} {1 0 0}}}

  ClassVar {script-templates {Domain Vector}}

  Method ScriptBegin {} {
    Vars domain frame rule-v sf-uv
    Parent ScriptBegin
    set domain [Parent get domain]
    set frame [Parent get frame]
    set sf-uv [Parent get sf-uv]
    set rule-v {0 0 0}
  }
  Method ScriptEnd {} {
    Vars uv sf-uv
    Parent ScriptEnd
    if {${sf-uv} == "t"} {set uv "s t"} else {set uv [list "t" ${sf-uv}]}
  }
}

RuledSurface Register
