本文整理汇总了C++中AbstractNode::x方法的典型用法代码示例。如果您正苦于以下问题:C++ AbstractNode::x方法的具体用法?C++ AbstractNode::x怎么用?C++ AbstractNode::x使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AbstractNode
的用法示例。
在下文中一共展示了AbstractNode::x方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: newProcessRegion
void BalanceGraph::newProcessRegion(Region *region, Graph &graph)
{
// if we do not need to move the region
if(region->getDforce() == 0) {
return;
}
double minMovement = region->getDforce();
if(minMovement < 0) {
minMovement = (-1)*minMovement;
}
for(Segment* s : region->segments) {
for(AbstractNode* node : s->nodes) {
int layer = node->getLayer();
int positionInLayer = node->getPositionInLayer();
// attempting to move to the left
if(region->getDforce() < 0) {
// If we are the leftmost node
if(positionInLayer == 0) {
continue;
}
AbstractNode* leftNode = graph.getLayers().at(layer).at(positionInLayer-1);
// if leftNode is in the same region
if(nodeToSegment.value(leftNode)->region == s->region) {
continue;
}
double availableMovement = node->x() - (leftNode->x() + leftNode->boundingRect().width() + 10);
if(availableMovement < minMovement) {
minMovement = availableMovement;
}
}
// Attempting to move to the right
if(region->getDforce() > 0) {
// if we are the rightmost in layer
if(positionInLayer == graph.getLayers().at(layer).size()-1) {
continue;
}
AbstractNode* rightNode = graph.getLayers().at(layer).at(positionInLayer+1);
// if rightNode is in the same region
if(nodeToSegment.value(rightNode)->region == s->region) {
continue;
}
double availableMovement = rightNode->x() - (node->x() + node->boundingRect().width() + 10);
if(availableMovement < minMovement) {
minMovement = availableMovement;
}
}
}
} // Calculate the maximal movement
// move the whole region
for(Segment* s : region->segments) {
for(AbstractNode* n : s->nodes) {
// movement to the left
if(region->getDforce() < 0) {
n->moveBy(-minMovement,0);
} else {
n->moveBy(minMovement,0);
}
}
}
}
示例2: newSweep
void BalanceGraph::newSweep(Graph &graph, BalanceGraph::direction direction)
{
if(direction == DOWN) {
calculateDownForces();
} else {
calculateUpForces();
}
// Generate trivial regions
QList<Region*> regions;
for(Segment* segment : segments) {
Region* region = new Region();
segment->region = region;
region->minTopologicNumber = segment->topologicNumber;
region->segments.append(segment);
regions.append(region);
}
// Combine regions
bool regionsChanged = true;
while(regionsChanged) {
regionsChanged = false;
// Combine
for(Segment* segment : segments) {
for(AbstractNode* left : segment->nodes) {
int layer = left->getLayer();
int positionOfLeft = left->getPositionInLayer();
// if we are last in the layer
if(positionOfLeft == graph.getLayers().at(layer).size()-1) {
continue;
}
AbstractNode* right = graph.getLayers().at(layer).at(positionOfLeft+1);
Region* leftRegion = nodeToSegment.value(left)->region;
Region* rightRegion = nodeToSegment.value(right)->region;
// if we are the same region just continue
if(leftRegion == rightRegion) {
continue;
}
// we are touching another node
if(right->x() <= (left->x() + 10 + left->boundingRect().width())) {
// if we are about to walk into each other
if(leftRegion->getDforce() >= rightRegion->getDforce()) {
regionsChanged = true;
for(Segment* s : rightRegion->segments) {
leftRegion->segments.append(s);
s->region = leftRegion;
leftRegion->minTopologicNumber = std::min(leftRegion->minTopologicNumber,s->topologicNumber);
}
delete rightRegion;
regions.removeAll(rightRegion);
}
}
}
} // Combining regions
} // While regions not changed
/*
for(Region* r : regions) {
qDebug() << "Region:";
for(Segment* s : r->segments) {
qDebug() << s->nodes.first()->getName();
}
}
*/
// Order by minTopologicalNumber
std::sort(regions.begin(),regions.end(),[](const Region* const r1, const Region* const r2){return r1->minTopologicNumber < r2->minTopologicNumber;});
// Process each region
for(Region* r : regions) {
newProcessRegion(r,graph);
}
// Done. Delete regions
for(Region* r : regions) {
delete r;
}
}