17.6.1 获取文档的总尺寸

2013-10-07 16:12:49 · 作者: · 浏览: 66

17.6.1  获取文档的总尺寸

要知道一个特定的文档占用多少页,需要知道草图有多大,因此我们希望使用矩形来包围文档中的所有内容。通过在文档类CSketcherDoc中添加函数GetDocExtent(),可以很容易做到这一点。在CSketcherDoc的public接口中添加下列声明:

  1. CRect GetDocExtent() const;     // Get the bounding rectangle for the whole document 

这个函数的实现也没有问题。它的实现代码是:
 

  1. // Get the rectangle enclosing the entire document  
  2. CRect CSketcherDoc::GetDocExtent()const  
  3. {  
  4. if(m_Sketch.empty())                                                                                                                            // Check for empty sketch  
  5. return CRect(0,0,1,1);  
  6. CRect docExtent(m_Sketch.front()->GetEnclosingRect());  // Initial doc extent  
  7. for(auto& pElement : m_Sketch)  
  8. docExtent.UnionRect(docExtent, pElement->GetEnclosingRect());  
  9. docExtent.NormalizeRect();  
  10. return docExtent;  
  11. }  

可以在SketcherDoc.cpp文件中添加这个函数定义。

如果草图为空,就返回一个非常小的CRect对象。文档范围的最初尺寸是封闭列表中第一个元素的矩形。接着,此过程循环访问文档中的每个元素,获取每个元素的边界矩形,并将它与docExtent合并。CRect类的成员UnionRect()包含两个作为参数传递的矩形,它将计算最小的矩形,然后把这个值放在调用该函数的CRect对象中。因此,DocExtent的大小将不断增加,直到把所有元素都包含在内部。