diff options
author | joye <joye> | 2014-05-12 17:33:44 (GMT) |
---|---|---|
committer | joye <joye> | 2014-05-12 17:33:44 (GMT) |
commit | 1721696040be998f3b2d05af9a00ef9c4b385c56 (patch) | |
tree | d9185d972e2249546e1d5c875c2b7ffdea916864 | |
parent | 16c8493afa265cb31361bbe55649b08b849cb784 (diff) | |
download | blt-1721696040be998f3b2d05af9a00ef9c4b385c56.zip blt-1721696040be998f3b2d05af9a00ef9c4b385c56.tar.gz blt-1721696040be998f3b2d05af9a00ef9c4b385c56.tar.bz2 |
*** empty log message ***
-rw-r--r-- | src/bltGrElemBar.C | 23 | ||||
-rw-r--r-- | src/bltGraphBar.C | 78 |
2 files changed, 55 insertions, 46 deletions
diff --git a/src/bltGrElemBar.C b/src/bltGrElemBar.C index 66ee436..7c86a54 100644 --- a/src/bltGrElemBar.C +++ b/src/bltGrElemBar.C @@ -274,7 +274,7 @@ void BarElement::map() int count = 0; int ii; - XRectangle *rp; + XRectangle* rp; for (rp=bars, ii=0; ii<nPoints; ii++) { // Two opposite corners of the rectangle in graph coordinates Point2d c1, c2; @@ -299,16 +299,15 @@ void BarElement::map() key.value =float(x[ii]); key.xAxis =ops->xAxis; key.yAxis =NULL; - Tcl_HashEntry *hPtr = - Tcl_FindHashEntry(&barGraphPtr_->setTable_, (char *)&key); + Tcl_HashEntry *hPtr = Tcl_FindHashEntry(&barGraphPtr_->setTable_, &key); if (hPtr) { cerr << " found " << ii << endl; Tcl_HashTable *tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hPtr); const char *name = (ops->groupName) ? ops->groupName:ops->yAxis->name_; - hPtr = Tcl_FindHashEntry(tablePtr, name); - if (hPtr) { - BarGroup* groupPtr = (BarGroup*)Tcl_GetHashValue(hPtr); + Tcl_HashEntry* hPtr2 = Tcl_FindHashEntry(tablePtr, name); + if (hPtr2) { + BarGroup* groupPtr = (BarGroup*)Tcl_GetHashValue(hPtr2); double slice = barWidth / (double)barGraphPtr_->maxBarSetSize_; double offset = (slice * groupPtr->index); if (barGraphPtr_->maxBarSetSize_ > 1) { @@ -614,11 +613,11 @@ void BarElement::closest() double minDist = searchPtr->dist; int imin = 0; - int i; - XRectangle *bp; - for (bp = bars_, i = 0; i < nBars_; i++, bp++) { + int ii; + XRectangle* bp; + for (bp=bars_, ii=0; ii<nBars_; ii++, bp++) { if (PointInRectangle(bp, searchPtr->x, searchPtr->y)) { - imin = barToData_[i]; + imin = barToData_[ii]; minDist = 0.0; break; } @@ -634,7 +633,7 @@ void BarElement::closest() outline[3].y = outline[2].y = bottom; Point2d *pp, *pend; - for (pp = outline, pend = outline + 4; pp < pend; pp++) { + for (pp=outline, pend=outline+4; pp<pend; pp++) { Point2d t = Blt_GetProjection(searchPtr->x, searchPtr->y, pp, pp + 1); if (t.x > right) t.x = right; @@ -649,7 +648,7 @@ void BarElement::closest() double dist = hypot((t.x - searchPtr->x), (t.y - searchPtr->y)); if (dist < minDist) { minDist = dist; - imin = barToData_[i]; + imin = barToData_[ii]; } } } diff --git a/src/bltGraphBar.C b/src/bltGraphBar.C index 30f8e0a..bb7a2f9 100644 --- a/src/bltGraphBar.C +++ b/src/bltGraphBar.C @@ -211,7 +211,12 @@ BarGraph::BarGraph(ClientData clientData, Tcl_Interp* interp, barGroups_ =NULL; nBarGroups_ =0; maxBarSetSize_ =0; - Tcl_InitHashTable(&setTable_, (sizeof(float)+2*sizeof(Axis*)) / sizeof(int)); + int ss = (sizeof(float)+2*sizeof(Axis*))/sizeof(int); + cerr << sizeof(BarSetKey) << '/' << sizeof(int) << '=' + << sizeof(BarSetKey)/sizeof(int) << '#' + << (sizeof(float)+2*sizeof(Axis*)) << '/' << sizeof(int) << '=' + << ss << endl; + Tcl_InitHashTable(&setTable_, ss); ops->bottomMargin.site = MARGIN_BOTTOM; ops->leftMargin.site = MARGIN_LEFT; @@ -358,9 +363,10 @@ void BarGraph::initBarSets() // of the frequency of each x-coordinate and how many abscissas have // duplicate mappings. Tcl_HashTable setTable; - cerr << (sizeof(float)+2*sizeof(Axis*)) << '#' << sizeof(BarSetKey) << " " << sizeof(int) << '=' << (sizeof(float)+2*sizeof(Axis*)) / sizeof(int) << endl; - Tcl_InitHashTable(&setTable, (sizeof(float)+2*sizeof(Axis*)) / sizeof(int)); + int ss = (sizeof(float)+2*sizeof(Axis*))/sizeof(int); + Tcl_InitHashTable(&setTable, ss); int nSegs =0; + for (Blt_ChainLink link = Blt_Chain_FirstLink(elements_.displayList); link; link = Blt_Chain_NextLink(link)) { BarElement* bePtr = (BarElement*)Blt_Chain_GetValue(link); @@ -377,62 +383,64 @@ void BarGraph::initBarSets() key.value =*x; key.xAxis =ops->xAxis; key.yAxis =NULL; + int isNew; - Tcl_HashEntry* hPtr = - Tcl_CreateHashEntry(&setTable, (char*)&key, &isNew); - + + Tcl_HashEntry* hhPtr =Tcl_CreateHashEntry(&setTable, &key, &isNew); Tcl_HashTable* tablePtr; if (isNew) { tablePtr = (Tcl_HashTable*)malloc(sizeof(Tcl_HashTable)); Tcl_InitHashTable(tablePtr, TCL_STRING_KEYS); - Tcl_SetHashValue(hPtr, tablePtr); + Tcl_SetHashValue(hhPtr, tablePtr); } else - tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hPtr); - - const char* name = - (ops->groupName) ? ops->groupName : ops->yAxis->name_; - hPtr = Tcl_CreateHashEntry(tablePtr, name, &isNew); - size_t count; - if (isNew) - count = 1; - else { - count = (size_t)Tcl_GetHashValue(hPtr); + tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hhPtr); + + const char* name = (ops->groupName) ? + ops->groupName : ops->yAxis->name_; + Tcl_HashEntry* hhPtr2 = Tcl_CreateHashEntry(tablePtr, name, &isNew); + size_t count =1; + if (!isNew) { + count = (size_t)Tcl_GetHashValue(hhPtr2); count++; } - Tcl_SetHashValue(hPtr, (ClientData)count); + Tcl_SetHashValue(hhPtr2, count); } } } - if (setTable.numEntries == 0) - return; + // no bar elements to be displayed + if (setTable.numEntries == 0) + return; int sum =0; int max =0; Tcl_HashSearch iter; - for (Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(&setTable, &iter); hPtr; - hPtr = Tcl_NextHashEntry(&iter)) { - BarSetKey* keyPtr = (BarSetKey*)Tcl_GetHashKey(&setTable, hPtr); + for (Tcl_HashEntry *hhPtr = Tcl_FirstHashEntry(&setTable, &iter); hhPtr; + hhPtr = Tcl_NextHashEntry(&iter)) { + BarSetKey* keyPtr = (BarSetKey*)Tcl_GetHashKey(&setTable, hhPtr); + Tcl_HashTable* tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hhPtr); + int isNew; - Tcl_HashEntry* hPtr2 = - Tcl_CreateHashEntry(&setTable_, (char*)keyPtr, &isNew); - Tcl_HashTable* tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hPtr); - Tcl_SetHashValue(hPtr2, tablePtr); + Tcl_HashEntry* hPtr = Tcl_CreateHashEntry(&setTable_, keyPtr, &isNew); + Tcl_SetHashValue(hPtr, tablePtr); + if (max < tablePtr->numEntries) max = tablePtr->numEntries; // # of stacks in group sum += tablePtr->numEntries; } Tcl_DeleteHashTable(&setTable); + if (sum > 0) { barGroups_ = new BarGroup[sum]; BarGroup* groupPtr = barGroups_; Tcl_HashSearch iter; - for (Tcl_HashEntry *hPtr = Tcl_FirstHashEntry(&setTable_, &iter); + for (Tcl_HashEntry* hPtr = Tcl_FirstHashEntry(&setTable_, &iter); hPtr; hPtr = Tcl_NextHashEntry(&iter)) { - Tcl_HashTable *tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hPtr); - BarSetKey* keyPtr = (BarSetKey*)Tcl_GetHashKey(&setTable, hPtr); + BarSetKey* keyPtr = (BarSetKey*)Tcl_GetHashKey(&setTable_, hPtr); + Tcl_HashTable* tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hPtr); + size_t xcount = 0; Tcl_HashSearch iter2; for (Tcl_HashEntry *hPtr2 = Tcl_FirstHashEntry(tablePtr, &iter2); @@ -441,8 +449,9 @@ void BarGraph::initBarSets() groupPtr->nSegments = count; groupPtr->xAxis = keyPtr->xAxis; groupPtr->yAxis = keyPtr->yAxis; - Tcl_SetHashValue(hPtr2, groupPtr); groupPtr->index = xcount++; + Tcl_SetHashValue(hPtr2, groupPtr); + groupPtr++; } } @@ -463,15 +472,16 @@ void BarGraph::destroyBarSets() nBarGroups_ = 0; Tcl_HashSearch iter; - for (Tcl_HashEntry* hPtr = Tcl_FirstHashEntry(&setTable_, &iter); - hPtr; hPtr = Tcl_NextHashEntry(&iter)) { + for (Tcl_HashEntry* hPtr=Tcl_FirstHashEntry(&setTable_, &iter); hPtr; + hPtr=Tcl_NextHashEntry(&iter)) { Tcl_HashTable* tablePtr = (Tcl_HashTable*)Tcl_GetHashValue(hPtr); Tcl_DeleteHashTable(tablePtr); free(tablePtr); } Tcl_DeleteHashTable(&setTable_); - Tcl_InitHashTable(&setTable_, (sizeof(float)+2*sizeof(Axis*)) / sizeof(int)); + int ss = (sizeof(float)+2*sizeof(Axis*))/sizeof(int); + Tcl_InitHashTable(&setTable_, ss); } void BarGraph::resetBarSets() |