Creating Sheets and Views in a CATDrawing Document-如何构建 CATDrawing 文档

摘要

本文论述CAADrwStructure用例,该用例阐述了如何在工程图文档中创建图纸与交互视图。
  • 通过本用例您将掌握的内容
  • CAADrwStructure 用例
    • CAADrwStructure 实现功能
    • CAADrwStructure 启动方法
    • CAADrwStructure 代码位置
  • 分步实现
  • 小结
  • 参考文献

通过本用例您将学到

在本用例中,您将学习如何处理工程图文档的结构,从而能够创建图纸与交互视图。

CAADrwStructure 用例

CAADrwStructure 是 CAADraftingInterfaces.edu 框架的一个用例,用于演示 DraftingInterfaces 框架的各项功能。
CAADrwStructure 实现了什么功能
图 1:该用例所创建的文档

图片

 

这张图片展示了由该用例程序创建的一份 CATDrawing 工程图文档。程序首先创建一个基础工程图结构,包含一张工程图、一张图纸和两个视图(这些视图未在图中显示)。随后创建第二张图纸,并为其添加一个附加视图。
说明:
每张图纸始终包含:
  • 主视图:用于存放直接在图纸中创建的各类元素
  • 背景视图:专门用于绘制图框和标题栏

这两种视图均由图纸工厂自动创建,属于图纸的固有组成部分,因此无法删除,且未在图中显示。

如何运行 CAADrwStructure

要运行 CAADrwStructure,需先搭建编译环境,然后编译 CAADrwStructure 及其依赖项,配置运行环境,最后执行该用例 [1]。
启动该用例时,需将用于保存所创建文档的文件完整路径作为参数传入。
Windows 系统  e:> CAADrwStructure DrawingTest.CATDrawing
UNIX 系统  $ CAADrwStructure /u/users/DrawingTest.CATDrawing

CAADrwStructure 代码位置

CAADrwStructure 用例由单个源文件 CAADrwStructure.cpp 构成,该文件位于 CAADraftingInterfaces.edu 框架下的 CAADrwStructure.m 模块中:
Windows 系统  InstallRootDirectory\CAADraftingInterfaces.edu\CAADrwStructure.m\
Unix 系统  InstallRootDirectory/CAADraftingInterfaces.edu/CAADrwStructure.m/
其中 InstallRootDirectory 为 CAA 光盘的安装目录。

分步实现

CAADrwStructure 包含五个步骤:
  1. 创建并初始化文档
  2. 访问文档中的工程图特征与工程图容器
  3. 在工程图文档中创建标准
  4. 为工程图文档中的当前图纸附加图纸格式
  5. 创建附加图纸并将其添加至工程图特征
  6. 创建视图并将其添加至刚创建的图纸中
  7. 在该视图中创建几何元素
  8. 保存文档并退出

创建并初始化文档

int main(int    iArgc,   // 参数个数 (1)
         char** iArgv)   // 新建 *.CATDrawing 文档的路径
{
  // 校验参数
  if(2 != iArgc) return 1;
  const char *fileName = iArgv[1];

  // 创建工程图文档
  // =========================

  // 创建会话
  CATSession *pSampleSession = NULL;
  HRESULT hr = ::Create_Session("SampleSession",pSampleSession);
  if (FAILED(hr)) return 1;

  CATDocument* pDoc = NULL;
  hr = CATDocumentServices::New("CATDrawing", pDoc);
  if (FAILED(hr)) return 2;
...

本部分展示了创建 CATIA 文档的标准流程。

访问文档中的工程图特征与工程图容器

 

...

// 获取工程图特征
CATIDftDrawing *piDftDrawing = NULL;
CATIDftDocumentServices *piDftDocServices = NULL;
CATIContainer_var spDrwCont;

if (SUCCEEDED(pDoc->QueryInterface(IID_CATIDftDocumentServices, (void **)&piDftDocServices)))
{
  if (SUCCEEDED(piDftDocServices->GetDrawing(IID_CATIDftDrawing, (void **)&piDftDrawing)))
  {
    if (piDftDrawing)
    {
      // 获取工程图容器
      CATISpecObject *piSpecObj=NULL;
      if (SUCCEEDED(piDftDrawing->QueryInterface(IID_CATISpecObject,(void **)&piSpecObj)))
      {
        spDrwCont = piSpecObj->GetFeatContainer();
        piSpecObj->Release();
        piSpecObj=NULL;
      }
    }
  }
  piDftDocServices->Release();
  piDftDocServices=NULL;
}
...

工程图文档的根特征是 Drawing(工程图对象),该特征实现了 CATIDrawing 接口。我们可以通过由文档实现的 CATIDftDocumentServices 接口获取指向 CATIDrawing 的指针。GetDrawing 方法的第一个参数即为你希望在工程图对象上获取的目标接口标识。

在工程图文档中创建绘图标准

...
// 从工程图容器获取标准管理器
CATIDftStandardManager *piStdmgr = NULL;

if (SUCCEEDED(spDrwCont->QueryInterface(IID_CATIDftStandardManager,(void**)&piStdmgr)))
{
  // 在允许使用的标准列表中查找一种标准
  //(即 resources/standard/drafting 目录下的所有 XML 文件列表)
  CATIStringList *piListstd = NULL;
  if ( SUCCEEDED(piStdmgr->GetAvailableStandards(&piListstd)) && piListstd )
  {
    unsigned int nbrstd = 0;
    piListstd->Count(&nbrstd);
    for (unsigned int indice = 0; indice < nbrstd; indice ++)
    {
      wchar_t *wstd = NULL;
      if ( SUCCEEDED ( piListstd->Item ( indice, &wstd ) ) && wstd )
      {
        const CATUnicodeString ANSI_UncS = "ANSI";
        CATUnicodeString stdname;
        stdname.BuildFromWChar(wstd);
        if ( stdname == ANSI_UncS )
        {
          // 在文档中导入 ANSI 标准
          piStdmgr->ImportStandard (wstd);
          break;
        }
        delete[] wstd; wstd = NULL;
      }
    }
    piListstd->Release(); piListstd=NULL;
  }
  piStdmgr->Release (); piStdmgr=NULL;
}
...

CATIDftStandardManager 接口由工程图应用程序的应用容器实现。

GetAvailableStandards 方法用于返回可用标准列表。

ImportStandard 方法用于将指定标准应用到工程图文档。

创建附加图纸并将其添加到工程图特征中

...
CATIDftSheet *piDftNewSheet = NULL;
wchar_t *pSheetName= L"MyNewSheet";
if (SUCCEEDED(piDftDrawing->AddSheet(&piDftNewSheet,pSheetName)))
...

CATIDftDrawing 接口下的 AddSheet 方法用于创建图纸,并将其添加至工程图根节点。若在交互模式下调用该方法,图纸标签页将同步更新。

创建视图并将其添加到刚创建的图纸中

...
// 工程图工厂由工程图容器实现
CATIDrwFactory_var spDrwFact = spDrwCont;

// 创建带外观(MakeUp)的视图
CATIDftViewMakeUp *piNewViewMU = NULL;
if (NULL_var != spDrwFact && SUCCEEDED(spDrwFact -> CreateViewWithMakeUp(IID_CATIDftViewMakeUp, (void **)&piNewViewMU)))
{
  if (piNewViewMU)
  {
    // 从外观对象中获取视图
    CATIView *piNewView = NULL; 
    if (SUCCEEDED(piNewViewMU->GetView(&piNewView)))
    {
      if (piNewView)
      {
        // 必须为视图指定类型:交互视图使用主视图(FrontView)
        piNewView->SetViewType(FrontView);
        piNewViewMU->SetAxisData(100.0,50.0);

        // 最后将视图添加到图纸中
        if (piDftNewSheet) piDftNewSheet->AddView(piNewViewMU);
...
CATIDrwFactory 由工程图容器实现。一个外观(MakeUp)对象会与视图相关联,因此我们通过 CreateViewWithMakeUp 方法同时创建这两个对象。必须为视图设置类型,并将其添加到图纸中。

在该视图中创建几何元素

...
// 在新图纸中激活这个新建视图
CATIDftView *piDftNewView=NULL;
if (SUCCEEDED(piNewView->QueryInterface(IID_CATIDftView,(void **)&piDftNewView)))
{
  piDftNewSheet->SetDefaultActiveView(piDftNewView);
  piDftNewView->Release();
  piDftNewView=NULL;
}

// 获取线框工厂以创建几何元素
CATI2DWFFactory_var spGeomFactory(piNewView);

// 创建一个圆:
double center[2];
center[0]=50.0;
center[1]=60.0;
double radius = 50.0;
CATISpecObject_var spCercle;
if (NULL_var != spGeomFactory) 
{
  spCercle = spGeomFactory->CreateCircle(center,radius);
...
若要在视图中创建几何元素,必须先将该视图设为当前活动视图。线框工厂可从当前活动视图中获取。

保存文档并退出

...
  // 保存结果
  hr = CATDocumentServices::SaveAs(*pDoc, (char *)fileName);
  if (FAILED(hr)) return 6;

  // 结束会话并释放文档
  CATDocumentServices::Remove (*pDoc);
  ::Delete_Session("SampleSession");

  return 0;
}
这部分展示了保存新建的 CATIA 文档的标准流程。

小结

本用例展示了在 CATDrawing 工程图文档中创建图纸与视图时所用到的对象和接口。图纸通过 CATIDftDrawing 接口中定义的 AddSheet 方法创建,因此在交互环境下图纸标签页会相应更新。视图特征则通过由工程图容器实现的 CATIDrwFactory 接口中定义的 CreateViewWithMakeUp 方法创建。
posted @ 2026-04-07 10:01  Breadss  阅读(4)  评论(0)    收藏  举报