Posted to tcl by ahype18 at Thu Jan 08 22:08:32 GMT 2015view pretty

# Routine that extracts a VOI based on the sections and integrates a volume based on
# a the extracted volume, a cutoff and the elevations planes
#
set showvol 1
set savestrgrd 0
toplevel .contour
frame .contour.buttons -borderwidth 3 -relief ridge
pack .contour.buttons -side top -padx 8 -pady 5 -ipadx 3 -ipady 1

frame .contour.buttons.f1
label .contour.buttons.l1 -text "Thresh Upper:" -width $lwidth -anchor w
entry .contour.buttons.r1 -textvariable volcontvalU -width $rwidth
pack .contour.buttons.f1
pack .contour.buttons.l1 .contour.buttons.r1 -in .contour.buttons.f1 -side left -padx $xpad -pady $ypad

frame .contour.buttons.f1a
label .contour.buttons.l1a -text "Thresh Lower:" -width $lwidth -anchor w
entry .contour.buttons.r1a -textvariable volcontvalL -width $rwidth
pack .contour.buttons.f1a
pack .contour.buttons.l1a .contour.buttons.r1a -in .contour.buttons.f1a -side left -padx $xpad -pady $ypad

frame .contour.buttons.f1b
label .contour.buttons.l1b -text "BVWirr:" -width $lwidth -anchor w
entry .contour.buttons.r1b -textvariable bvwirr -width $rwidth
pack .contour.buttons.f1b
pack .contour.buttons.l1b .contour.buttons.r1b -in .contour.buttons.f1b -side left -padx $xpad -pady $ypad

frame .contour.buttons.f1c
label .contour.buttons.l1c -text "Bo:" -width $lwidth -anchor w
entry .contour.buttons.r1c -textvariable shrinkage -width $rwidth
pack .contour.buttons.f1c
pack .contour.buttons.l1c .contour.buttons.r1c -in .contour.buttons.f1c -side left -padx $xpad -pady $ypad

frame .contour.buttons.f2
button .contour.buttons.f2.b1 -text "Contour" -width 10 -command contour
pack .contour.buttons.f2
pack .contour.buttons.f2.b1 -side left -padx 4 -pady 4

frame .contour.save -borderwidth 3 -relief ridge
pack .contour.save -side top -padx 8 -pady 5 -ipadx 3 -ipady 1

frame .contour.save.f1
label .contour.save.l1 -text "Save Poly:" -width $lwidth -anchor w
entry .contour.save.r1 -textvariable volfile -width $rwidth
pack .contour.save.f1
pack .contour.save.l1 .contour.save.r1 -in .contour.save.f1 -side left -padx $xpad -pady $ypad

frame .contour.save.f2
button .contour.save.f2.b1 -text "Save" -width 10 -command volsave
pack .contour.save.f2
pack .contour.save.f2.b1 -side left -padx 4 -pady 4

frame .contour.save.f1b
label .contour.save.l1b -text "Save Map:" -width $lwidth -anchor w
entry .contour.save.r1b -textvariable mapfile -width $rwidth
pack .contour.save.f1b
pack .contour.save.l1b .contour.save.r1b -in .contour.save.f1b -side left -padx $xpad -pady $ypad

frame .contour.save.f2b
button .contour.save.f2b.b1 -text "Save" -width 10 -command mapsave
pack .contour.save.f2b
pack .contour.save.f2b.b1 -side left -padx 4 -pady 4

frame .contour.save.f1c
label .contour.save.l1c -text "Save StrGrd:" -width $lwidth -anchor w
entry .contour.save.r1c -textvariable strgrdfile -width $rwidth
pack .contour.save.f1c
pack .contour.save.l1c .contour.save.r1c -in .contour.save.f1c -side left -padx $xpad -pady $ypad

frame .contour.save.f2c
button .contour.save.f2c.b1 -text "Save" -width 10 -command strgrdsave
pack .contour.save.f2c
pack .contour.save.f2c.b1 -side left -padx 4 -pady 4

radiobutton .contour.buttons.rb1 -variable threshtype -text "Higher" -value "1"
pack .contour.buttons.rb1 -side left
radiobutton .contour.buttons.rb2 -variable threshtype -text "Between" -value "0"
pack .contour.buttons.rb2 -side left
radiobutton .contour.buttons.rb3 -variable threshtype -text "Lower" -value "-1"
pack .contour.buttons.rb3 -side left

checkbutton .contour.buttons.cb1 -variable showvol -text "Show Vol" -command showvol
pack .contour.buttons.cb1 -side top -anchor w

text .contour.t -height 20 -width 60 -background white
pack .contour.t

set volcontvalU 0.0
set volcontvalL 0.0
set bvwirr 0.06
set shrinkage 1.1
set volrunflg 0
set volfile "VolPoly.vtk"
set mapfile "Map.dat"
set strgrdfile "StrGrd-Extract.vtk"

proc contour {} {
  global volcontvalU volcontvalL status dx dy gx1 gx2 gy1 gy2 z1 z2 elev1 elev2 volrunflg bvwirr shrinkage sumvol cellvol
  global grdindex sumnetthick grdsize volxdim volxmin volymin threshtype passcut sumpor ptscal sw sumhc zgriddim sumthick
  set status "Contouring" ; update
  .contour.t delete 1.0 end
  if {$volrunflg>0} {
    contGeom Delete
    p2c Delete
    thresh Delete
    connect Delete
    transConn Delete
    lut2 Delete
    geomFilt Delete
    connTriang Delete
    connSmooth Delete
    connNormals Delete
    moldMapper Delete
    ren1 RemoveActor moldActor
    moldActor Delete
  }  
  vtkExtractGrid contGeom
    contGeom SetInput [reader GetOutput]
    contGeom SetVOI $gx1 $gx2 $gy1 $gy2 $z1 $z2
    contGeom Update
  set voldim [[contGeom GetOutput] GetDimensions]
  set volxdim [lindex $voldim 0]
  set volydim [lindex $voldim 1]
  set volzdim [lindex $voldim 2]
  .contour.t insert end "GX1= $gx1\n"
  .contour.t insert end "GX2= $gx2\n"
  .contour.t insert end "GY1= $gy1\n"
  .contour.t insert end "GY2= $gy2\n"
  .contour.t insert end "Zmin= $z1\n"
  .contour.t insert end "Zmax= $z2\n"
  .contour.t insert end "Elev1= $elev1\n"
  .contour.t insert end "Elev2= $elev2\n"
  .contour.t insert end "Xdim= $volxdim\n"
  .contour.t insert end "Ydim= $volydim\n"
  .contour.t insert end "Zdim= $volzdim\n"
  set ncells [expr $volxdim*$volydim*$volzdim]
  .contour.t insert end "nCells= $ncells\n"
  set passcut 0
  set sumpor 0.0
  set sumhc 0.0
  set avgpor 0.0
  set sumthick 0.0
  set sumvol 0.0
  set grdsize [expr $volxdim*$volydim]
  set repor 0.0
  for {set i4 0} {$i4 < $grdsize} {incr i4} {
    set sumnetthick($i4) 0.0
  }
  set volpt0 [[contGeom GetOutput] GetPoint 0]
  set volxmin [lindex $volpt0 0]
  set volymin [lindex $volpt0 1]
  for {set i5 0} {$i5 < $ncells} {incr i5} {
    set calck [expr $i5/$grdsize]
    set grdindex [expr $i5-$calck*$grdsize]
    set volpt [[contGeom GetOutput] GetPoint $i5]
    set volz [lindex $volpt 2]
    if {$calck < [expr $volzdim-1]} {
      set i5b [expr $i5 + $grdsize]
    } else {
      set i5b [expr $i5 - $grdsize]
    }
    set volptb [[contGeom GetOutput] GetPoint $i5b]
    set volzb [lindex $volptb 2]
    set zgriddim [expr abs($volz - $volzb)]
    set cellvol [expr $dx*$dy*$zgriddim]      
    set ptscal [[[[contGeom GetOutput] GetPointData] GetScalars] GetValue $i5]
    
if {$volz>=$elev1 && $volz<=$elev2} {
  if {$threshtype==1 && $ptscal>= $volcontvalU} {
    sumcells
  } elseif {$threshtype==0 && $ptscal>=$volcontvalL && $ptscal<=$volcontvalU} {
    sumcells
  } elseif {$threshtype==-1 && $ptscal<=$volcontvalL} {
    sumcells
  }
} else {

  eval [[[[contGeom GetOutput] GetPointData] GetScalars] SetValue $i5 $repor]
}
  }
  
  #set avgpor [expr $sumpor/$sumvol]
  #set porevolbbls [expr $sumpor*0.178108]
  #set hcvolbbls [expr $sumhc*0.178108]
  #.contour.t insert end "PassCont= $passcut\n"
  #.contour.t insert end "AvgPor= $avgpor\n"
  #.contour.t insert end "PoreVol= $sumpor\n"
  #.contour.t insert end "PoreVol(bbl)= $porevolbbls\n"
  #.contour.t insert end "HCVol= $sumhc\n"
  #.contour.t insert end "HCVol(bbl)= $hcvolbbls\n"
  update    
  
  vtkPointDataToCellData p2c
    p2c SetInput [contGeom GetOutput]
  vtkThreshold thresh
    thresh SetInput [contGeom GetOutput]
    if {$threshtype==1} {thresh ThresholdByUpper $volcontvalU}
    if {$threshtype==0} {thresh ThresholdBetween $volcontvalL $volcontvalU}
    if {$threshtype==-1} {thresh ThresholdByLower $volcontvalL}
  vtkConnectivityFilter connect
    connect SetInput [thresh GetOutput]
    connect SetExtractionModeToAllRegions
    connect ColorRegionsOn
    connect Update
  set scalrange2 [[connect GetOutput] GetScalarRange]
  set scalmin2 [lindex $scalrange2 0]
  set scalmax2 [lindex $scalrange2 1]
  .debug.t insert end "Scalmin2= $scalmin2\n"
  .debug.t insert end "Scalmax2= $scalmax2\n" ; update    
  vtkLookupTable lut2
    lut2 SetHueRange 0.667 0.0
    lut2 SetTableRange $scalmin2 $scalmax2
    lut2 Build

  vtkGeometryFilter geomFilt
    geomFilt SetInput [connect GetOutput]
  vtkTriangleFilter connTriang
    connTriang SetInput [geomFilt GetOutput]
  vtkSmoothPolyDataFilter connSmooth
    connSmooth SetInput [connTriang GetOutput]
    connSmooth BoundarySmoothingOn

  vtkTransformFilter transConn
    transConn SetInput [connSmooth GetOutput]
    transConn SetTransform trans1
    transConn Update  
  vtkPolyDataNormals connNormals
    connNormals SetInput [transConn GetOutput]  
  vtkPolyDataMapper moldMapper
    moldMapper SetInput [connNormals GetOutput]
    moldMapper ScalarVisibilityOn
    moldMapper SetLookupTable lut2
    moldMapper SetScalarRange $scalmin2 $scalmax2
  vtkActor moldActor
    moldActor SetMapper moldMapper
  set volrunflg 1
  showvol 
  set status "Ready" ; update
}

proc sumcells {} {
  global passcut sumpor ptscal sw bvwirr sumhc shrinkage sumnetthick grdindex zgriddim sumthick sumvol cellvol
  incr passcut
  set sumthick [expr $sumthick+$zgriddim]
  set sumvol [expr $sumvol+$cellvol]
  set sumpor [expr $sumpor+$ptscal*$cellvol]
  if {$ptscal <= 0.0} {
    set sw 1.0
  } else {
    set sw [expr $bvwirr/$ptscal]
  }
  set sumhc [expr $sumhc+$cellvol*$ptscal*(1-$sw)/$shrinkage]
  set sumnetthick($grdindex) [expr $sumnetthick($grdindex)+$zgriddim] ; # feet meeting cutoff
#  set sumnetthick($grdindex) [expr $sumnetthick($grdindex)+$zgriddim*(1.0-$ptscal)] ; # net sand thIckness
#  set sumnetthick($grdindex) [expr $sumnetthick($grdindex)+$zgriddim*$ptscal] ; # porosity thickness
  
}

proc showvol {} {
  global showvol
  set status "Displaying Volume" ; update
    set existsVol [[ren1 GetActors] IsItemPresent moldActor]
    if {$showvol==0 && $existsVol>0} {ren1 RemoveActor moldActor}
    if {$showvol==1 && $existsVol<=0} {ren1 AddActor moldActor}
    renWin Render
    
  if {$showvol==0 && $existsVol>0} {
    ren1 RemoveActor moldActor
  } elseif {$showvol==1 && $existsVol<=0} {
    ren1 AddActor moldActor
  }
}

set volsaveflg 0
proc volsave {} {
  global status volsaveflg volfile
  set status "Saving Vol Poly" ; update
  if {$volsaveflg>0} {writeVolPoly Delete}
  vtkPolyDataWriter writeVolPoly
    writeVolPoly SetInput [connSmooth GetOutput]
    writeVolPoly SetFileName data/$volfile
    writeVolPoly SetFileTypeToBinary
    writeVolPoly Update
  set volsaveflg 1    
  set status "Ready" ; update
}

proc mapsave {} {
  global status sumnetthick mapfile grdsize volxdim dx dy volxmin volymin
  set status "Saving Map Grid" ; update
  set mapFileId [open $mapfile w]
  for {set i 0} {$i < $grdsize} {incr i} {
#    set calcgrdj [expr double($i/$volxdim)]
#    set grdj [expr double(int($calcgrdj)*$dy)+$volymin]
#    set calcgrdi [expr $calcgrdj*double($volxdim)]
#    set grdi [expr double(($i-$calcgrdi)*$dx)+$volxmin]    
    set grdpt [[contGeom GetOutput] GetPoint $i]
    set grdx [lindex $grdpt 0]    
    set grdy [lindex $grdpt 1]
    puts $mapFileId "$grdx  $grdy  $sumnetthick($i)"
  }
  close $mapFileId    
  set status "Ready" ; update
}

set savestrgrdflg 0
proc strgrdsave {} {
  global status strgrdfile savestrgrdflg gx1 gx2 gy1 gy2 z1 z2 
  set status "Saving Structured Grid" ; update
  if {$savestrgrdflg==1} {
    writeStrgrd Delete
  }
  vtkExtractGrid contGeom
    contGeom SetInput [reader GetOutput]
    contGeom SetVOI $gx1 $gx2 $gy1 $gy2 $z1 $z2
    contGeom Update  
  vtkStructuredGridWriter writeStrgrd
   writeStrgrd SetInput [contGeom GetOutput]
   writeStrgrd SetFileName $strgrdfile
#   writeStrgrd SetFileTypeToBinary
   writeStrgrd Update
  set savestrgrdflg 1
  contGeom Delete
  set status "Ready" ; update
}