' '---------------------------- '--- Creation information --- '---------------------------- ' 'Name: balmod.ave 'Version: 1.0 'Date: 01/11/97 'Author: Ferdi Hellweger ' Center for Research in Water Resources ' The University of Texas at Austin ' ferdi@crwr.utexas.edu ' '--------------------------- '--- Purpose/Description --- '--------------------------- ' 'This program is a utility for modifying feature attributes. ' '--------------------------------------------- '--- Check if units configuration happened --- '--------------------------------------------- ' if (not _configu) then configure = msgbox.yesno("Units are not configured. Configure it now?","BALANCE",true) if (configure) then av.run("balconu", nil) else exit end end ' '---------------- '--- Get view --- '---------------- ' theview = av.getactivedoc ' '------------------ '--- Get themes --- '------------------ ' theactivethemes = theview.getactivethemes if (theactivethemes.count = 0) then msgbox.error("No active themes found", "BALANCE") exit end if (theactivethemes.count > 0) then lfound = false pfound = false for each activetheme in theactivethemes theftab = activetheme.getftab theshapef = theftab.findfield("shape") theshape = theftab.returnvalue(theshapef,0) if (theshape.getclass.getclassname = "polyline") then theltheme = activetheme lfound = true end if (theshape.getclass.getclassname = "polygon") then theptheme = activetheme pfound = true end end end if ((not lfound) and (not pfound)) then system.beep exit end ' '--------------------- '--- Set up themes --- '--------------------- ' 'line theme ' if (lfound) then ' lftab = theltheme.getftab if (lftab = nil) then msgbox.error("Can't open line theme","BALANCE") exit end ' lshapef = lftab.findfield("shape") if (lshapef = nil) then msgbox.error("Can't find 'shape' field in line theme","BALANCE") exit end ' lpf = lftab.findfield("lpoly#") if (lpf = nil) then lpf = lftab.findfield("lpoly_") end if (lpf = nil) then msgbox.error("Can't find 'lpoly#' field in line theme","BALANCE") exit end ' rpf = lftab.findfield("rpoly#") if (rpf = nil) then rpf = lftab.findfield("rpoly_") end if (rpf = nil) then msgbox.error("Can't find 'rpoly#' field in line theme","BALANCE") exit end ' qf = lftab.findfield("q") if (qf = nil) then addfield = msgbox.yesno("Can't find 'q' field in line theme. Add it?","BALANCE", true) if (addfield) then lftab.seteditable(true) qf = field.make("q", #FIELD_DECIMAL, 16, 4) lftab.addfields({qf}) lftab.seteditable(false) else exit end end ' epf = lftab.findfield("ep") if (epf = nil) then addfield = msgbox.yesno("Can't find 'ep' field in line theme. Add it?","BALANCE", true) if (addfield) then lftab.seteditable(true) epf = field.make("ep", #FIELD_DECIMAL, 16, 4) lftab.addfields({epf}) lftab.seteditable(false) else exit end end ' sbf = lftab.findfield("sb") if (sbf = nil) then addfield = msgbox.yesno("Can't find 'sb' field in line theme. Add it?","BALANCE", true) if (addfield) then lftab.seteditable(true) sbf = field.make("sb", #FIELD_DECIMAL, 16, 4) lftab.addfields({sbf}) lftab.seteditable(false) else exit end end ' end ' 'polygon theme ' if (pfound) then ' pftab = theptheme.getftab if (pftab = nil) then msgbox.error("Can't open polygon theme","BALANCE") exit end ' sof = pftab.findfield("so") if (sof = nil) then addfield = msgbox.yesno("Can't find 'so' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) sof = field.make("so", #FIELD_DECIMAL, 16, 4) pftab.addfields({sof}) pftab.seteditable(false) else exit end end ' wnpf = pftab.findfield("wnp") if (wnpf = nil) then addfield = msgbox.yesno("Can't find 'wnp' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) wnpf = field.make("wnp", #FIELD_DECIMAL, 16, 4) pftab.addfields({wnpf}) pftab.seteditable(false) else exit end end ' watf = pftab.findfield("wat") if (watf = nil) then addfield = msgbox.yesno("Can't find 'wat' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) watf = field.make("wat", #FIELD_DECIMAL, 16, 4) pftab.addfields({watf}) pftab.seteditable(false) else exit end end ' wotf = pftab.findfield("wot") if (wotf = nil) then addfield = msgbox.yesno("Can't find 'wot' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) wotf = field.make("wot", #FIELD_DECIMAL, 16, 4) pftab.addfields({wotf}) pftab.seteditable(false) else exit end end ' wsef = pftab.findfield("wse") if (wsef = nil) then addfield = msgbox.yesno("Can't find 'wse' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) wsef = field.make("wse", #FIELD_DECIMAL, 16, 4) pftab.addfields({wsef}) pftab.seteditable(false) else exit end end ' kf = pftab.findfield("k") if (kf = nil) then addfield = msgbox.yesno("Can't find 'k' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) kf = field.make("k", #FIELD_DECIMAL, 16, 4) pftab.addfields({kf}) pftab.seteditable(false) else exit end end ' vf = pftab.findfield("v") if (vf = nil) then addfield = msgbox.yesno("Can't find 'v' field in polygon theme. Add it?","BALANCE", true) if (addfield) then pftab.seteditable(true) vf = field.make("v", #FIELD_DECIMAL, 16, 4) pftab.addfields({vf}) pftab.seteditable(false) else exit end end ' end ' '----------------------------- '--- get point from cursor --- '----------------------------- ' thepoint = theview.getdisplay.returnuserpoint ' '------------ '--- Line --- '------------ ' if (lfound) then ' '--- find line --- ' lrecs = theltheme.findbypoint(thepoint) ' '--- check that a line was found --- ' if ( lrecs.count = 0 ) then system.beep exit end ' '--- get line record --- ' lrec = lrecs.get(0) ' '--- get line attributes --- ' lp = lftab.returnvalue(lpf, lrec) rp = lftab.returnvalue(rpf, lrec) ' q = lftab.returnvalue(qf, lrec) ep = lftab.returnvalue(epf, lrec) sb = lftab.returnvalue(sbf, lrec) ' '--- plot positive direction arrow --- ' 'get graphics ' vgraphics = theview.getgraphics ' 'get display extent ' len = (theview.getdisplay.returnextent.getwidth)/80 ' 'set scale factor ' ps = theview.getdisplay.returnextent.getwidth / 10 ' 'plot vector ' lshape = lftab.returnvalue(lshapef, lrec) pointlist = lshape.asmultipoint.aslist fulllength = 0 i = 1 while (i < pointlist.count) fx = pointlist.get(i - 1).getx fy = pointlist.get(i - 1).gety tx = pointlist.get(i).getx ty = pointlist.get(i).gety length = (((fx - tx)^2) + ((fy - ty)^2)^0.5) fulllength = fulllength + length i = i + 1 end partlength = 0 i = 1 found = false while (i < pointlist.count) fx = pointlist.get(i - 1).getx fy = pointlist.get(i - 1).gety tx = pointlist.get(i).getx ty = pointlist.get(i).gety length = (((fx - tx)^2) + ((fy - ty)^2)^0.5) partlength = partlength + length if ((partlength >= (fulllength * 0.5)) and (not found)) then fraction = ((fulllength * 0.5) - partlength + length) / length av.run("balar",{fx,fy,tx,ty,length,fraction,len,1,ps,vgraphics, color.getblack}) found = true end i = i + 1 end ' '--- get new line attributes from user --- ' labels = list.make labels = labels.add("Flow, q (+ = see black arrow) " + _qlab) labels = labels.add("Bulk Dispersion Coefficient, ep " + _eplab) if ((lp = 1) or (rp = 1)) then labels = labels.add("Boundary Concentration, b " + _slab) end ' defaults = list.make defaults = defaults.add(q.asstring) defaults = defaults.add(ep.asstring) if ((lp = 1) or (rp = 1)) then defaults = defaults.add(sb.asstring) end ' inputs = msgbox.multiinput("Enter line attributes:", "BALANCE", labels, defaults) if (inputs.count = 0) then vgraphics.removegraphic(vgraphics.get(vgraphics.count - 1)) exit end ' q = inputs.get(0).asnumber ep = inputs.get(1).asnumber if ((lp = 1) or (rp = 1)) then sb = inputs.get(2).asnumber end ' '--- assign new line attributes ' lftab.seteditable(true) ' lftab.setvalue(qf, lrec, q) lftab.setvalue(epf, lrec, ep) if ((lp = 1) or (rp = 1)) then lftab.setvalue(sbf, lrec, sb) end ' lftab.seteditable(false) ' '--- Clear arrow --- ' vgraphics.removegraphic(vgraphics.get(vgraphics.count - 1)) ' exit end ' '--------------- '--- Polygon --- '--------------- ' if (pfound and not lfound) then ' if (theptheme.isactive) then ' '--- find polygon --- ' precs = theptheme.findbypoint(thepoint) ' '--- check that a polygon was found --- ' if ( precs.count = 0 ) then system.beep exit end ' '--- get polygon record --- ' prec = precs.get(0) ' '--- get polygon attributes --- ' v = pftab.returnvalue(vf, prec) k = pftab.returnvalue(kf, prec) wnp = pftab.returnvalue(wnpf, prec) wat = pftab.returnvalue(watf, prec) wse = pftab.returnvalue(wsef, prec) wot = pftab.returnvalue(wotf, prec) so = pftab.returnvalue(sof, prec) ' '--- get new line attributes from user --- ' labels = list.make labels = labels.add("Volume, v " + _vlab) labels = labels.add("Decay Rate, k " + _klab) labels = labels.add("Nonpoint Runoff Load, wnp " + _wlab) labels = labels.add("Atmospheric Load, wat" + _wlab) labels = labels.add("Sediment Load, wse " + _wlab) labels = labels.add("Other Load, wot " + _wlab) labels = labels.add("Initial Concentration, so " + _slab) ' defaults = list.make defaults = defaults.add(v.asstring) defaults = defaults.add(k.asstring) defaults = defaults.add(wnp.asstring) defaults = defaults.add(wat.asstring) defaults = defaults.add(wse.asstring) defaults = defaults.add(wot.asstring) defaults = defaults.add(so.asstring) ' inputs = msgbox.multiinput("Enter polygon attributes:", "BALANCE", labels, defaults) if (inputs.count = 0) then exit end ' v = inputs.get(0).asnumber k = inputs.get(1).asnumber wnp = inputs.get(2).asnumber wat = inputs.get(3).asnumber wse = inputs.get(4).asnumber wot = inputs.get(5).asnumber so = inputs.get(6).asnumber ' '--- assign new polygon attributes --- ' pftab.seteditable(true) ' pftab.setvalue(vf, prec, v) pftab.setvalue(kf, prec, k) pftab.setvalue(wnpf, prec, wnp) pftab.setvalue(watf, prec, wat) pftab.setvalue(wsef, prec, wse) pftab.setvalue(wotf, prec, wot) pftab.setvalue(sof, prec, so) ' pftab.seteditable(false) ' end ' end ' '----------- '--- End --- '----------- '