vertex

TCL/TK UseCase2



Abstract : Contains all procedure for creating and maintaining a vertex object. Comments : Due to time limitation the Tcl group wanted to get as much of the code working, tested, and debugged. The only way this was going to happen was to have the Tcl code keep a structure of the objects so that the unwritten C++ code wasn't needed to make the GUI work. The procedure in this file for getting and setting can easily be converted to call propagation patterns...but time won't allow us to complete this task.
### # Where is everything? ### set bmp_Constr "constr.xbm" set bmp_Alter "alter.xbm" set BITMAP_PATH "bitmaps" ### # Set up the vertex/node "data structure." ### proc newVertex { name type {lbl ""} {lblOff { 0 -20 }} {coords { 0 0}} } { global Vertex bmp_Constr bmp_Alter iGraph inform changes set Vertex($name,Label) $lbl set Vertex($name,LabelOff) $lblOff set Vertex($name,Coords) $coords set Vertex($name,EdgeOut) {} set Vertex($name,EdgeIn) {} set Vertex($name,Type) $type eval set Vertex($name,Bitmap) \$bmp_$type # initialize the item IDs set Vertex($name,BmpID) -1 set Vertex($name,LabelID) -1 set formatted "{$coords}" set formatted2 "{$lblOff}" # here call cppAddNewVertex to put vertex in Demeter's hierarchy set changes yes if {$inform == 1} { if {$type == "Constr"} { puts "Sending: $lbl $formatted $formatted2" $iGraph cppCreCVertex: $lbl $formatted $formatted2 } else { puts "Sending: $lbl $formatted $formatted2" $iGraph cppCreAVertex: $lbl $formatted $formatted2 } } } ### # The following functions are used to set and obtain data # relating to vertex objects. If the need be, these functions # could be used to call propogation patterns that would # set or return the item requested. ### proc setVertexLabel { name label } { global Vertex set Vertex($name,Label) $label } proc getVertexLabel { name } { global Vertex return $Vertex($name,Label) } proc setVertexLabelOff { name offset } { global Vertex iGraph set Vertex($name,LabelOff) $offset set formatted "{$offset}" puts "Sending: $name $formatted" $iGraph cppUpdVLabel: $name $formatted } proc getVertexLabelOff { name } { global Vertex return $Vertex($name,LabelOff) } proc setVertexCoords { name coords } { global Vertex iGraph set Vertex($name,Coords) $coords set formatted "{$coords}" puts "Sending: $name $formatted" $iGraph cppUpdVertex: $name $formatted } proc getVertexCoords { name } { global Vertex return $Vertex($name,Coords) } proc appendVertexEdgeOut { name edgeName } { global Vertex lappend Vertex($name,EdgeOut) $edgeName } proc getVertexEdgeOut { name } { global Vertex return $Vertex($name,EdgeOut) } proc appendVertexEdgeIn { name edgeName } { global Vertex lappend Vertex($name,EdgeIn) $edgeName } proc getVertexEdgeIn { name } { global Vertex return $Vertex($name,EdgeIn) } proc getVertexType { name } { global Vertex return $Vertex($name,Type) } proc getVertexBitmap { name } { global Vertex return $Vertex($name,Bitmap) } proc setVertexBmpID { name id } { global Vertex set Vertex($name,BmpID) $id } proc getVertexBmpID { name } { global Vertex return $Vertex($name,BmpID) } proc setVertexLabelID { name id } { global Vertex set Vertex($name,LabelID) $id } proc getVertexLabelID { name } { global Vertex return $Vertex($name,LabelID) } proc createVertex { name } { global BITMAP_PATH global can set shapeX [getXCoord [getVertexCoords $name]] set shapeY [getYCoord [getVertexCoords $name]] set bmpName [getVertexBitmap $name] set labelName [getVertexLabel $name] set labelX [expr $shapeX + [getXCoord [getVertexLabelOff $name]]] set labelY [expr $shapeY + [getYCoord [getVertexLabelOff $name]]] set node [$can create bitmap $shapeX $shapeY \ -bitmap "@$BITMAP_PATH/$bmpName" -tags "$name _vertex_"] set nodelabel [$can create text $labelX $labelY \ -text $labelName -tags "$name _label_ _vertex_"] $can lower $node $can bind $node " onVertDown $name %x %y " $can bind $node " onVertMove $name %x %y " $can bind $node " onVertUp $name %x %y " $can bind $nodelabel " onVertLblMove $name %x %y " $can bind $name "onVertEnter $name %x %y" $can bind $name "onVertLeave $name %x %y" setVertexBmpID $name $node setVertexLabelID $name $nodelabel } proc moveVertexLabel { name {coords {0 -20}} } { global can setVertexLabelOff $name $coords set bmpX [getXCoord [getVertexCoords $name]] set bmpY [getYCoord [getVertexCoords $name]] set newX [expr $bmpX + [getXCoord $coords]] set newY [expr $bmpY + [getYCoord $coords]] set id [getVertexLabelID $name] $can coords $id $newX $newY } proc moveVertex { name coords } { global can setVertexCoords $name $coords set id [getVertexBmpID $name] $can coords $id [getXCoord $coords] [getYCoord $coords] moveVertexLabel $name [getVertexLabelOff $name] } proc vertRedrawEdges { name } { foreach i [getVertexEdgeIn $name] { createEdge $i } foreach i [getVertexEdgeOut $name] { createEdge $i } } ### # Cool Hiliting stuff... ### proc vertHilite { name color } { global can lastHilited $can itemconfigure [getVertexLabelID $name] -fill $color $can itemconfigure [getVertexBmpID $name] -background $color set lastHilited $name } proc vertUnhilite { name } { global can $can itemconfigure [getVertexLabelID $name] -fill black $can itemconfigure [getVertexBmpID $name] -background {} }