17.6.1 获取文档的总尺寸
要知道一个特定的文档占用多少页,需要知道草图有多大,因此我们希望使用矩形来包围文档中的所有内容。通过在文档类CSketcherDoc中添加函数GetDocExtent(),可以很容易做到这一点。在CSketcherDoc的public接口中添加下列声明:
- CRect GetDocExtent() const; // Get the bounding rectangle for the whole document
这个函数的实现也没有问题。它的实现代码是:
- // Get the rectangle enclosing the entire document
- CRect CSketcherDoc::GetDocExtent()const
- {
- if(m_Sketch.empty()) // Check for empty sketch
- return CRect(0,0,1,1);
- CRect docExtent(m_Sketch.front()->GetEnclosingRect()); // Initial doc extent
- for(auto& pElement : m_Sketch)
- docExtent.UnionRect(docExtent, pElement->GetEnclosingRect());
- docExtent.NormalizeRect();
- return docExtent;
- }
可以在SketcherDoc.cpp文件中添加这个函数定义。
如果草图为空,就返回一个非常小的CRect对象。文档范围的最初尺寸是封闭列表中第一个元素的矩形。接着,此过程循环访问文档中的每个元素,获取每个元素的边界矩形,并将它与docExtent合并。CRect类的成员UnionRect()包含两个作为参数传递的矩形,它将计算最小的矩形,然后把这个值放在调用该函数的CRect对象中。因此,DocExtent的大小将不断增加,直到把所有元素都包含在内部。